Merge branch 'main' of https://g.wace.me/chpark/wace_plm
This commit is contained in:
@@ -4992,8 +4992,16 @@ ORDER BY V.PATH2
|
||||
<if test="VENDOR_OBJID != null and VENDOR_OBJID != ''">
|
||||
AND QRM.VENDOR_OBJID::VARCHAR = #{VENDOR_OBJID}
|
||||
</if>
|
||||
<if test="STATUS != null and STATUS != ''">
|
||||
AND QRM.STATUS = #{STATUS}
|
||||
<!-- 메일발송 여부 검색 (날짜 유무 기준) -->
|
||||
<if test="MAIL_SEND_YN != null and MAIL_SEND_YN != ''">
|
||||
<choose>
|
||||
<when test="MAIL_SEND_YN == 'Y'.toString()">
|
||||
AND QRM.MAIL_SEND_DATE IS NOT NULL
|
||||
</when>
|
||||
<otherwise>
|
||||
AND QRM.MAIL_SEND_DATE IS NULL
|
||||
</otherwise>
|
||||
</choose>
|
||||
</if>
|
||||
<!-- 작성자 검색 -->
|
||||
<if test="writer != null and writer != ''">
|
||||
@@ -5068,6 +5076,7 @@ ORDER BY V.PATH2
|
||||
QRD.UNIT_PRICE,
|
||||
QRD.REMARK,
|
||||
QRD.REG_DATE,
|
||||
QRD.DELIVERY_REQUEST_DATE,
|
||||
-- 마스터 정보
|
||||
QRM.VENDOR_TYPE,
|
||||
QRM.VENDOR_OBJID,
|
||||
@@ -5078,6 +5087,14 @@ ORDER BY V.PATH2
|
||||
ORDER BY QRD.OBJID
|
||||
</select>
|
||||
|
||||
<!-- 견적요청서 번호 셀렉트 목록 -->
|
||||
<select id="getQuotationRequestNoList" parameterType="map" resultType="map">
|
||||
SELECT DISTINCT QUOTATION_REQUEST_NO AS "CODE", QUOTATION_REQUEST_NO AS "NAME"
|
||||
FROM QUOTATION_REQUEST_MASTER
|
||||
WHERE QUOTATION_REQUEST_NO IS NOT NULL AND QUOTATION_REQUEST_NO != ''
|
||||
ORDER BY QUOTATION_REQUEST_NO DESC
|
||||
</select>
|
||||
|
||||
<!-- 견적요청서 번호 생성 -->
|
||||
<select id="getNextQuotationRequestNo" parameterType="map" resultType="string">
|
||||
SELECT 'Q' || TO_CHAR(NOW(), 'YYYYMMDD') || '-' || LPAD(NEXTVAL('SEQ_QUOTATION_REQUEST_NO')::VARCHAR, 3, '0')
|
||||
@@ -5144,11 +5161,12 @@ ORDER BY V.PATH2
|
||||
)
|
||||
</insert>
|
||||
|
||||
<!-- 견적요청서 상세 단가 업데이트 -->
|
||||
<!-- 견적요청서 상세 단가/입고요청일 업데이트 -->
|
||||
<update id="updateQuotationRequestDetailPrice" parameterType="map">
|
||||
UPDATE QUOTATION_REQUEST_DETAIL SET
|
||||
UNIT_PRICE = #{UNIT_PRICE}::NUMERIC,
|
||||
TOTAL_PRICE = #{QTY}::NUMERIC * #{UNIT_PRICE}::NUMERIC,
|
||||
DELIVERY_REQUEST_DATE = CASE WHEN #{DELIVERY_REQUEST_DATE} IS NOT NULL AND #{DELIVERY_REQUEST_DATE} != '' THEN #{DELIVERY_REQUEST_DATE} ELSE NULL END,
|
||||
EDIT_DATE = NOW()
|
||||
WHERE OBJID = #{OBJID}::NUMERIC
|
||||
</update>
|
||||
@@ -5175,6 +5193,9 @@ ORDER BY V.PATH2
|
||||
<if test="VENDOR_TYPE == 'PROCESSING'">
|
||||
PROCESSING_UNIT_PRICE = #{UNIT_PRICE}::NUMERIC
|
||||
</if>
|
||||
<if test="DELIVERY_REQUEST_DATE != null and DELIVERY_REQUEST_DATE != ''">
|
||||
, DELIVERY_REQUEST_DATE = #{DELIVERY_REQUEST_DATE}
|
||||
</if>
|
||||
, EDIT_DATE = NOW()
|
||||
WHERE OBJID IN (
|
||||
SELECT MD2.OBJID
|
||||
|
||||
@@ -1648,16 +1648,16 @@ public class SalesMngController {
|
||||
try {
|
||||
// 프로젝트번호
|
||||
code_map.put("project_no", commonService.bizMakeOptionList("", (String)paramMap.get("project_no"), "common.getProjectNameList"));
|
||||
// 견적요청서 번호 목록
|
||||
code_map.put("quotation_request_no", commonService.bizMakeOptionList("", (String)paramMap.get("QUOTATION_REQUEST_NO"), "salesMng.getQuotationRequestNoList"));
|
||||
// 업체 목록
|
||||
code_map.put("vendor_objid", commonService.bizMakeOptionList("", (String)paramMap.get("vendor_objid"), "common.getClientMngSupplySelect"));
|
||||
// 상태
|
||||
// 메일발송 상태 (미발송/발송)
|
||||
String statusOptions = "";
|
||||
statusOptions += "<option value=''>전체</option>";
|
||||
statusOptions += "<option value='create'" + ("create".equals(paramMap.get("status")) ? " selected" : "") + ">작성중</option>";
|
||||
statusOptions += "<option value='sent'" + ("sent".equals(paramMap.get("status")) ? " selected" : "") + ">발송완료</option>";
|
||||
statusOptions += "<option value='received'" + ("received".equals(paramMap.get("status")) ? " selected" : "") + ">견적수신</option>";
|
||||
statusOptions += "<option value='completed'" + ("completed".equals(paramMap.get("status")) ? " selected" : "") + ">완료</option>";
|
||||
code_map.put("status", statusOptions);
|
||||
statusOptions += "<option value='N'" + ("N".equals(paramMap.get("MAIL_SEND_YN")) ? " selected" : "") + ">미발송</option>";
|
||||
statusOptions += "<option value='Y'" + ("Y".equals(paramMap.get("MAIL_SEND_YN")) ? " selected" : "") + ">발송</option>";
|
||||
code_map.put("mail_send_yn", statusOptions);
|
||||
// 작성자
|
||||
code_map.put("writer", commonService.bizMakeOptionList("", (String)paramMap.get("writer"), "common.getUserselect"));
|
||||
//제품구분
|
||||
|
||||
@@ -2090,7 +2090,10 @@ ORDER BY T.REGDATE DESC, T.PROJECT_NO DESC
|
||||
COALESCE(CM.PO_NO, '') AS PO_NO,
|
||||
COALESCE(CM.ORDER_DATE, '') AS ORDER_DATE,
|
||||
COALESCE((SELECT SUM(SR.SALES_QUANTITY) FROM SALES_REGISTRATION SR WHERE SR.PROJECT_NO = T.PROJECT_NO), 0) AS SALES_QUANTITY,
|
||||
COALESCE(T.QUANTITY::NUMERIC, 0) - COALESCE((SELECT SUM(SR.SALES_QUANTITY) FROM SALES_REGISTRATION SR WHERE SR.PROJECT_NO = T.PROJECT_NO), 0) AS REMAINING_QUANTITY
|
||||
COALESCE(T.QUANTITY::NUMERIC, 0) - COALESCE((SELECT SUM(SR.SALES_QUANTITY) FROM SALES_REGISTRATION SR WHERE SR.PROJECT_NO = T.PROJECT_NO), 0) AS REMAINING_QUANTITY,
|
||||
COALESCE(NULLIF(CM.ORDER_UNIT_PRICE, '')::NUMERIC, 0) AS ORDER_UNIT_PRICE,
|
||||
COALESCE(NULLIF(CM.EXCHANGE_RATE, '')::NUMERIC, 1) AS EXCHANGE_RATE,
|
||||
COALESCE(CM.CONTRACT_CURRENCY, '') AS CONTRACT_CURRENCY
|
||||
FROM PROJECT_MGMT T
|
||||
LEFT JOIN CONTRACT_MGMT CM ON CM.OBJID = T.CONTRACT_OBJID
|
||||
LEFT JOIN SUPPLY_MNG SM ON SM.OBJID = CASE WHEN T.CUSTOMER_OBJID ~ '^[0-9]+$' THEN T.CUSTOMER_OBJID::NUMERIC ELSE NULL END
|
||||
|
||||
@@ -2458,19 +2458,22 @@ public class SalesMngService {
|
||||
String salesRequestPartObjid = CommonUtils.checkNull(detail.get("SALES_REQUEST_PART_OBJID"));
|
||||
String unitPrice = CommonUtils.checkNull(detail.get("UNIT_PRICE"));
|
||||
String qty = CommonUtils.checkNull(detail.get("QTY"));
|
||||
String deliveryRequestDate = CommonUtils.checkNull(detail.get("DELIVERY_REQUEST_DATE"));
|
||||
|
||||
// 1. 견적요청서 상세 단가 업데이트
|
||||
// 1. 견적요청서 상세 단가/입고요청일 업데이트
|
||||
Map updateParam = new HashMap();
|
||||
updateParam.put("OBJID", detailObjid);
|
||||
updateParam.put("UNIT_PRICE", unitPrice);
|
||||
updateParam.put("QTY", qty);
|
||||
updateParam.put("DELIVERY_REQUEST_DATE", deliveryRequestDate);
|
||||
sqlSession.update("salesMng.updateQuotationRequestDetailPrice", updateParam);
|
||||
|
||||
// 2. 구매리스트 단가 업데이트
|
||||
// 2. 구매리스트 단가/입고요청일 업데이트
|
||||
Map purchaseUpdateParam = new HashMap();
|
||||
purchaseUpdateParam.put("SALES_REQUEST_PART_OBJID", salesRequestPartObjid);
|
||||
purchaseUpdateParam.put("UNIT_PRICE", unitPrice);
|
||||
purchaseUpdateParam.put("VENDOR_TYPE", vendorType);
|
||||
purchaseUpdateParam.put("DELIVERY_REQUEST_DATE", deliveryRequestDate);
|
||||
sqlSession.update("salesMng.updatePurchaseListPriceFromQuotation", purchaseUpdateParam);
|
||||
}
|
||||
|
||||
|
||||
@@ -360,6 +360,14 @@ public Map<String, Object> saveSaleRegistration(HttpServletRequest request, Map<
|
||||
System.out.println("saleNo (파라미터): " + saleNo);
|
||||
System.out.println("salesQuantity: " + paramMap.get("salesQuantity"));
|
||||
|
||||
// 폼 필드명(manager) → SQL 파라미터명(managerUserId) 매핑
|
||||
if(paramMap.get("manager") != null && !"".equals(paramMap.get("manager"))) {
|
||||
paramMap.put("managerUserId", paramMap.get("manager"));
|
||||
}
|
||||
|
||||
System.out.println("serialNo: " + paramMap.get("serialNo"));
|
||||
System.out.println("manager → managerUserId: " + paramMap.get("managerUserId"));
|
||||
|
||||
// 모든 판매를 shipment_log에 기록 (분할 출하 방식 통일)
|
||||
// 1. 해당 프로젝트의 sales_registration 레코드 확인
|
||||
Map<String, Object> checkParam = new HashMap<String, Object>();
|
||||
@@ -391,9 +399,10 @@ public Map<String, Object> saveSaleRegistration(HttpServletRequest request, Map<
|
||||
baseRecord.put("salesExchangeRate", paramMap.get("salesExchangeRate"));
|
||||
baseRecord.put("shippingDate", paramMap.get("shippingDate"));
|
||||
baseRecord.put("shippingMethod", paramMap.get("shippingMethod"));
|
||||
baseRecord.put("managerUserId", paramMap.get("managerUserId"));
|
||||
baseRecord.put("managerUserId", paramMap.get("managerUserId")); // 위에서 manager → managerUserId 매핑됨
|
||||
baseRecord.put("incoterms", paramMap.get("incoterms"));
|
||||
baseRecord.put("serialNo", paramMap.get("serialNo"));
|
||||
System.out.println("insertSaleRegistration - serialNo: " + paramMap.get("serialNo"));
|
||||
baseRecord.put("shippingOrderStatus", "출하지시"); // 자동으로 출하지시 상태 설정
|
||||
baseRecord.put("cretEmpNo", paramMap.get("cretEmpNo"));
|
||||
|
||||
@@ -495,22 +504,21 @@ public Map<String, Object> saveSaleRegistration(HttpServletRequest request, Map<
|
||||
PersonBean person = (PersonBean) request.getSession().getAttribute(Constants.PERSON_BEAN);
|
||||
String userId = person.getUserId();
|
||||
|
||||
// 원본 데이터 조회
|
||||
Map<String, Object> originalData = sqlSession.selectOne("salesNcollectMgmt.getContractByObjid", paramMap);
|
||||
|
||||
if(originalData == null) {
|
||||
resultMap.put("result", false);
|
||||
resultMap.put("msg", "원본 데이터를 찾을 수 없습니다.");
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
// 분할 수량
|
||||
int splitQuantity = Integer.parseInt(paramMap.get("splitQuantity").toString());
|
||||
int originalQuantity = Integer.parseInt(paramMap.get("originalQuantity").toString());
|
||||
|
||||
// 원본 데이터의 단가 정보 가져오기
|
||||
BigDecimal unitPrice = new BigDecimal(originalData.get("order_unit_price").toString());
|
||||
BigDecimal exchangeRate = new BigDecimal(originalData.get("exchange_rate").toString());
|
||||
// 단가/환율은 폼 hidden 필드에서 직접 가져옴 (프로젝트 기반, contract_mgmt 직접 조회 불필요)
|
||||
String unitPriceStr = CommonUtils.checkNull(paramMap.get("orderUnitPrice"));
|
||||
String exchangeRateStr = CommonUtils.checkNull(paramMap.get("exchangeRate"));
|
||||
String contractCurrency = CommonUtils.checkNull(paramMap.get("contractCurrency"));
|
||||
|
||||
BigDecimal unitPrice = StringUtils.isNotBlank(unitPriceStr) ? new BigDecimal(unitPriceStr) : BigDecimal.ZERO;
|
||||
BigDecimal exchangeRate = StringUtils.isNotBlank(exchangeRateStr) ? new BigDecimal(exchangeRateStr) : BigDecimal.ONE;
|
||||
|
||||
System.out.println("=== splitShipment 디버그 ===");
|
||||
System.out.println("projectNo: " + paramMap.get("projectNo"));
|
||||
System.out.println("unitPrice: " + unitPrice + ", exchangeRate: " + exchangeRate + ", currency: " + contractCurrency);
|
||||
|
||||
// 분할 금액 계산
|
||||
BigDecimal splitSupplyPrice = unitPrice.multiply(new BigDecimal(splitQuantity));
|
||||
@@ -527,19 +535,13 @@ public Map<String, Object> saveSaleRegistration(HttpServletRequest request, Map<
|
||||
paramMap.put("salesSupplyPrice", splitSupplyPrice);
|
||||
paramMap.put("salesVat", splitVat);
|
||||
paramMap.put("salesTotalAmount", splitTotalAmount);
|
||||
paramMap.put("salesCurrency", originalData.get("contract_currency"));
|
||||
paramMap.put("salesCurrency", contractCurrency);
|
||||
paramMap.put("salesExchangeRate", exchangeRate);
|
||||
|
||||
// 팝업에서 입력한 데이터 우선, 없으면 원본 데이터 사용
|
||||
paramMap.put("shippingMethod",
|
||||
StringUtils.isNotBlank((String)paramMap.get("shippingMethod")) ?
|
||||
paramMap.get("shippingMethod") : originalData.get("shipping_method"));
|
||||
paramMap.put("incoterms",
|
||||
StringUtils.isNotBlank((String)paramMap.get("incoterms")) ?
|
||||
paramMap.get("incoterms") : originalData.get("incoterms"));
|
||||
paramMap.put("managerUserId",
|
||||
StringUtils.isNotBlank((String)paramMap.get("manager")) ?
|
||||
paramMap.get("manager") : originalData.get("pm_user_id"));
|
||||
// 담당자 매핑 (폼 필드명 manager → SQL 파라미터명 managerUserId)
|
||||
if(StringUtils.isNotBlank((String)paramMap.get("manager"))) {
|
||||
paramMap.put("managerUserId", paramMap.get("manager"));
|
||||
}
|
||||
|
||||
// 팝업에서 입력한 추가 정보
|
||||
// serialNo, shippingDate, remark는 팝업에서만 입력 가능
|
||||
|
||||
@@ -1728,7 +1728,15 @@ public class QualityService extends BaseService{
|
||||
}
|
||||
|
||||
// ECR_NO 생성 (ECR-YYYYMM-순번) 예) ECR-202512-01
|
||||
String yyyymm = new java.text.SimpleDateFormat("yyyyMM").format(new java.util.Date());
|
||||
// 요청일 기준으로 YYYYMM 추출 (REQUEST_DATE 형식: yyyy-MM-dd)
|
||||
String requestDate = CommonUtils.checkNull(paramMap.get("REQUEST_DATE"));
|
||||
String yyyymm;
|
||||
if(!requestDate.isEmpty() && requestDate.length() >= 7){
|
||||
yyyymm = requestDate.substring(0, 4) + requestDate.substring(5, 7);
|
||||
} else {
|
||||
// 요청일이 없는 경우 현재 날짜로 대체
|
||||
yyyymm = new java.text.SimpleDateFormat("yyyyMM").format(new java.util.Date());
|
||||
}
|
||||
paramMap.put("YYYYMM", yyyymm);
|
||||
Integer seq = sqlSession.selectOne("quality.getEcrSeq", paramMap);
|
||||
if(seq == null) seq = 1;
|
||||
|
||||
Reference in New Issue
Block a user