diff --git a/WebContent/WEB-INF/classes/com/pms/mapper/admin.xml b/WebContent/WEB-INF/classes/com/pms/mapper/admin.xml index 7d2c81a..c31397c 100644 --- a/WebContent/WEB-INF/classes/com/pms/mapper/admin.xml +++ b/WebContent/WEB-INF/classes/com/pms/mapper/admin.xml @@ -9434,4 +9434,97 @@ SELECT ORDER BY SCM.REGDATE DESC + + + + + + + + + + + INSERT INTO MATERIAL_MNG ( + OBJID, + MATERIAL_CODE, + MATERIAL_NAME, + MATERIAL_PART_NO, + SIZE_SPEC, + REMARK, + STATUS, + WRITER, + REGDATE + ) VALUES ( + #{objid}, + #{material_code}, + #{material_name}, + #{material_part_no}, + #{size_spec}, + #{remark}, + COALESCE(#{status}, 'ACTIVE'), + #{userId}, + NOW() + ) + + + + + UPDATE MATERIAL_MNG SET + MATERIAL_CODE = #{material_code}, + MATERIAL_NAME = #{material_name}, + MATERIAL_PART_NO = #{material_part_no}, + SIZE_SPEC = #{size_spec}, + REMARK = #{remark}, + STATUS = #{status}, + EDITER = #{userId}, + EDIT_DATE = NOW() + WHERE OBJID = #{objid} + + + + + DELETE FROM MATERIAL_MNG + WHERE OBJID = #{objid} + + \ No newline at end of file diff --git a/WebContent/WEB-INF/classes/com/pms/mapper/common.xml b/WebContent/WEB-INF/classes/com/pms/mapper/common.xml index b732382..7a001af 100644 --- a/WebContent/WEB-INF/classes/com/pms/mapper/common.xml +++ b/WebContent/WEB-INF/classes/com/pms/mapper/common.xml @@ -2529,7 +2529,6 @@ SELECT option_objid::VARCHAR AS CODE - - + + + + + + + + + + + \ No newline at end of file diff --git a/WebContent/WEB-INF/classes/com/pms/mapper/inventoryMng.xml b/WebContent/WEB-INF/classes/com/pms/mapper/inventoryMng.xml index 30d6859..fdb4381 100644 --- a/WebContent/WEB-INF/classes/com/pms/mapper/inventoryMng.xml +++ b/WebContent/WEB-INF/classes/com/pms/mapper/inventoryMng.xml @@ -1387,6 +1387,7 @@ INSERT INTO INVENTORY_MGMT_HISTORY , CONTRACT_MGMT_OBJID , PURCHASE_ORDER_MASTER_OBJID , PURCHASE_ORDER_SUB_OBJID + , RECEIPT_DATE ) VALUES ( @@ -1400,6 +1401,7 @@ INSERT INTO INVENTORY_MGMT_HISTORY , #{CONTRACT_MGMT_OBJID} , #{PURCHASE_ORDER_MASTER_OBJID} , #{PURCHASE_ORDER_SUB_OBJID} + , #{RECEIPT_DATE} ) diff --git a/WebContent/WEB-INF/classes/com/pms/mapper/productionplanning.xml b/WebContent/WEB-INF/classes/com/pms/mapper/productionplanning.xml index 4b0f593..f962473 100644 --- a/WebContent/WEB-INF/classes/com/pms/mapper/productionplanning.xml +++ b/WebContent/WEB-INF/classes/com/pms/mapper/productionplanning.xml @@ -2925,7 +2925,7 @@ -- 수량: PROJECT_MGMT 우선 COALESCE(PM.QUANTITY::numeric, CI.ORDER_QUANTITY::numeric, 0) AS QUANTITY, -- 요청납기: CONTRACT_ITEM 우선 - COALESCE(CI.DUE_DATE, PM.DUE_DATE, CM.req_del_date) AS REQ_DEL_DATE, + COALESCE(CI.DUE_DATE, PM.DUE_DATE, CM.REQ_DEL_DATE) AS REQ_DEL_DATE, -- 고객요청사항: CONTRACT_ITEM에서 가져옴 COALESCE(CI.CUSTOMER_REQUEST, '') AS CUSTOMER_REQUEST, -- E-BOM 정보: CI.PART_OBJID가 E-BOM OBJID를 가리킴 @@ -3960,48 +3960,50 @@ @@ -4187,7 +4189,7 @@ V.STOCK_QTY, V.SHORTAGE_QTY, V.VENDOR, - (SELECT SUPPLY_NAME FROM ADMIN_SUPPLY_MNG WHERE OBJID::VARCHAR = V.VENDOR) AS VENDOR_NAME, + (SELECT CLIENT_NM FROM CLIENT_MNG WHERE OBJID::VARCHAR = V.VENDOR) AS VENDOR_NAME, V.UNIT_PRICE, V.TOTAL_PRICE, V.CURRENCY, @@ -4402,4 +4404,239 @@ AND STATUS = 'Y' + + + + + + + + + + + + INSERT INTO PRODUCTION_PLAN ( + OBJID, + PROJECT_OBJID, + PRODUCT_CODE, + CATEGORY_CODE, + PRODUCTION_TYPE, + CUSTOMER_OBJID, + REQ_DEL_DATE, + PART_NO, + PART_NAME, + SERIAL_NO, + ORDER_QTY, + EXTRA_PROD_QTY, + TOTAL_PROD_QTY, + CUSTOMER_REQUEST, + STATUS, + REGDATE, + WRITER + ) VALUES ( + #{OBJID}, + #{PROJECT_NO}, + #{PRODUCT_CODE}, + #{CATEGORY_CODE}, + #{PRODUCTION_TYPE}, + #{CUSTOMER_OBJID}, + #{REQ_DEL_DATE}, + #{PART_NO}, + #{PART_NAME}, + #{SERIAL_NO}, + #{ORDER_QTY}, + #{EXTRA_PROD_QTY}, + #{TOTAL_PROD_QTY}, + #{CUSTOMER_REQUEST}, + 'active', + NOW(), + #{userId} + ) + + + + + UPDATE PRODUCTION_PLAN SET + PROJECT_OBJID = #{PROJECT_NO}, + PRODUCT_CODE = #{PRODUCT_CODE}, + CATEGORY_CODE = #{CATEGORY_CODE}, + PRODUCTION_TYPE = #{PRODUCTION_TYPE}, + CUSTOMER_OBJID = #{CUSTOMER_OBJID}, + REQ_DEL_DATE = #{REQ_DEL_DATE}, + PART_NO = #{PART_NO}, + PART_NAME = #{PART_NAME}, + SERIAL_NO = #{SERIAL_NO}, + ORDER_QTY = #{ORDER_QTY}, + EXTRA_PROD_QTY = #{EXTRA_PROD_QTY}, + TOTAL_PROD_QTY = #{TOTAL_PROD_QTY}, + CUSTOMER_REQUEST = #{CUSTOMER_REQUEST}, + MODDATE = NOW(), + MODIFIER = #{userId} + WHERE OBJID = #{OBJID} + + diff --git a/WebContent/WEB-INF/classes/com/pms/mapper/purchaseOrder.xml b/WebContent/WEB-INF/classes/com/pms/mapper/purchaseOrder.xml index e4fbb29..b0b40d3 100644 --- a/WebContent/WEB-INF/classes/com/pms/mapper/purchaseOrder.xml +++ b/WebContent/WEB-INF/classes/com/pms/mapper/purchaseOrder.xml @@ -1115,6 +1115,14 @@ WHERE OBJID = (SELECT PURCHASE_ORDER_MASTER_OBJID FROM PURCHASE_ORDER_PART POP WHERE OBJID = #{PURCHASE_ORDER_PART_OBJID }) --> + + + + UPDATE PURCHASE_ORDER_MASTER + SET PURCHASE_CLOSE_DATE = TO_CHAR(NOW(), 'YYYY-MM-DD') + WHERE OBJID = #{OBJID} + + UPDATE PURCHASE_ORDER_MASTER SET TOTAL_PRICE_TXT_ALL = NUM_TO_KOR((T.REAL_SUPPLY_PRICE_VAT)::varchar,'일금 ',' 원정 (₩ ') || TRIM(TO_CHAR((T.REAL_SUPPLY_PRICE_VAT), '999,999,999,999')) ||')' @@ -4273,6 +4281,7 @@ SELECT POM.OBJID ,POM.TOTAL_PRICE ,POM.DISCOUNT_PRICE ,POM.TOTAL_SUPPLY_UNIT_PRICE + ,POM.TOTAL_SUPPLY_PRICE ,POM.NEGO_RATE ,POM.MULTI_MASTER_YN ,POM.MULTI_YN @@ -4282,6 +4291,7 @@ SELECT POM.OBJID ,S1.CUR_DELIVERY_DATE ,S1.TOTAL_DELIVERY_QTY + ,S1.TOTAL_DELIVERY_PRICE ,((SELECT SUM(ORDER_QTY::NUMERIC) FROM PURCHASE_ORDER_PART AS O WHERE POM.OBJID::VARCHAR = O.PURCHASE_ORDER_MASTER_OBJID) - (S1.TOTAL_DELIVERY_QTY )) AS NON_DELIVERY_QTY @@ -4299,6 +4309,7 @@ SELECT POM.OBJID ,(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = POM.ORDER_TYPE_CD) AS ORDER_TYPE_CD_NAME ,(SELECT user_name(RECEIVER_ID) FROM ARRIVAL_PLAN AP WHERE AP.parent_objid = POM.OBJID ORDER BY AP.RECEIPT_DATE desc LIMIT 1) AS CUR_RECEIVER_NAME ,(SELECT COUNT(1) FROM ATTACH_FILE_INFO AF WHERE AF.TARGET_OBJID = POM.OBJID AND AF.DOC_TYPE = 'INSPECTION_FILE' AND UPPER(AF.STATUS) = 'ACTIVE') AS INSPECTION_FILE_CNT + ,POM.PURCHASE_CLOSE_DATE FROM PURCHASE_ORDER_MASTER AS POM + + UPDATE PMS_QUALITY_SEMI_PRODUCT_INSPECTION + SET IS_LOCKED = 'N' + WHERE OBJID = #{OBJID} + + DELETE FROM PMS_QUALITY_SEMI_PRODUCT_INSPECTION diff --git a/WebContent/WEB-INF/classes/com/pms/mapper/salesMng.xml b/WebContent/WEB-INF/classes/com/pms/mapper/salesMng.xml index 9279699..3cb547d 100644 --- a/WebContent/WEB-INF/classes/com/pms/mapper/salesMng.xml +++ b/WebContent/WEB-INF/classes/com/pms/mapper/salesMng.xml @@ -3378,7 +3378,6 @@ ORDER BY V.PATH2 VENDOR = #{VENDOR_PM}, UNIT_PRICE = COALESCE(NULLIF(TRIM(#{UNIT_PRICE}::TEXT), '')::NUMERIC, 0), TOTAL_PRICE = COALESCE(NULLIF(TRIM(#{TOTAL_PRICE}::TEXT), '')::NUMERIC, 0), - PROPOSAL_DATE = COALESCE(PROPOSAL_DATE, NOW()), -- 저장 시 품의서작성일 자동 설정 (기존 값 없으면 오늘 날짜) EDITER = #{EDITER}, EDIT_DATE = NOW() WHERE OBJID::VARCHAR = #{OBJID} @@ -3393,7 +3392,6 @@ ORDER BY V.PATH2 VENDOR_PM = #{VENDOR_PM}, UNIT_PRICE = COALESCE(NULLIF(TRIM(#{UNIT_PRICE}::TEXT), '')::NUMERIC, 0), TOTAL_PRICE = COALESCE(NULLIF(TRIM(#{TOTAL_PRICE}::TEXT), '')::NUMERIC, 0), - PROPOSAL_DATE = COALESCE(PROPOSAL_DATE, NOW()), -- 저장 시 품의서작성일 자동 설정 (기존 값 없으면 오늘 날짜) WRITER = #{EDITER} WHERE OBJID::VARCHAR = #{OBJID} @@ -3420,12 +3418,12 @@ ORDER BY V.PATH2 WHERE DOC_TYPE = 'PURCHASE_REQUEST' OR DOC_TYPE IS NULL - + @@ -3832,7 +3830,7 @@ ORDER BY V.PATH2 ) A ON SRM.OBJID::VARCHAR = A.TARGET_OBJID::VARCHAR WHERE 1=1 AND SRM.STATUS IN ('create', 'approvalRequest', 'approvalComplete', 'reject') - -- AND SRM.DOC_TYPE = 'PROPOSAL' -- DOC_TYPE 컬럼 없음, 주석처리 + AND SRM.DOC_TYPE = 'PROPOSAL' AND SRM.REQUEST_MNG_NO LIKE '%${SEARCH_PROPOSAL_NO}%' @@ -3970,7 +3968,7 @@ ORDER BY V.PATH2 SRP.UNIT_PRICE, SRP.TOTAL_PRICE, SRP.VENDOR_PM, - (SELECT SUPPLY_NAME FROM ADMIN_SUPPLY_MNG WHERE OBJID::VARCHAR = SRP.VENDOR_PM) AS VENDOR_NAME, + (SELECT CLIENT_NM FROM CLIENT_MNG WHERE OBJID::VARCHAR = SRP.VENDOR_PM) AS VENDOR_NAME, SRP.REMARK, SRP.DELIVERY_REQUEST_DATE, SRP.DELIVERY_REQUEST_DATE AS DELIVERY_REQUEST_DATE_TITLE diff --git a/WebContent/WEB-INF/classes/com/pms/salesmgmt/mapper/salesNcollectMgmt.xml b/WebContent/WEB-INF/classes/com/pms/salesmgmt/mapper/salesNcollectMgmt.xml index ff960d6..7f12047 100644 --- a/WebContent/WEB-INF/classes/com/pms/salesmgmt/mapper/salesNcollectMgmt.xml +++ b/WebContent/WEB-INF/classes/com/pms/salesmgmt/mapper/salesNcollectMgmt.xml @@ -982,50 +982,29 @@ ) ) - - - AND EXISTS ( - SELECT 1 FROM CONTRACT_ITEM CI - WHERE CI.CONTRACT_OBJID = T.CONTRACT_OBJID - AND CI.STATUS = 'ACTIVE' - AND CI.PART_OBJID = #{search_partObjId} - ) - - - AND EXISTS ( - SELECT 1 FROM CONTRACT_ITEM CI - LEFT JOIN PART_MNG PM ON CI.PART_OBJID = PM.OBJID - WHERE CI.CONTRACT_OBJID = T.CONTRACT_OBJID - AND CI.STATUS = 'ACTIVE' - AND ( - - COALESCE(PM.PART_NO, CI.PART_NO) LIKE '%' || #{search_partNo} || '%' - - - OR - - - COALESCE(PM.PART_NAME, CI.PART_NAME) LIKE '%' || #{search_partName} || '%' - - ) - ) - - - + + AND ( - EXISTS ( - SELECT 1 FROM CONTRACT_ITEM CI - JOIN CONTRACT_ITEM_SERIAL CIS ON CI.OBJID = CIS.ITEM_OBJID - WHERE CI.CONTRACT_OBJID = T.CONTRACT_OBJID - AND CI.STATUS = 'ACTIVE' - AND UPPER(CIS.SERIAL_NO) LIKE UPPER(CONCAT('%', #{serialNo}, '%')) - AND UPPER(CIS.STATUS) = 'ACTIVE' - ) - OR EXISTS ( - SELECT 1 FROM shipment_log SL - WHERE SL.target_objid = T.PROJECT_NO - AND UPPER(SL.serial_no) LIKE UPPER(CONCAT('%', #{serialNo}, '%')) - ) + + T.PART_NO = #{search_partNo} + + + OR + + + T.PART_NAME = #{search_partName} + + ) + + + AND EXISTS ( + SELECT 1 FROM CONTRACT_ITEM CI + JOIN CONTRACT_ITEM_SERIAL CIS ON CI.OBJID = CIS.ITEM_OBJID + WHERE CI.CONTRACT_OBJID = T.CONTRACT_OBJID + AND CI.PART_OBJID = T.PART_OBJID + AND CI.STATUS = 'ACTIVE' + AND UPPER(CIS.SERIAL_NO) LIKE UPPER(CONCAT('%', #{serialNo}, '%')) + AND UPPER(CIS.STATUS) = 'ACTIVE' ) @@ -1062,28 +1041,13 @@ AND SR.project_no IS NOT NULL AND SR.shipping_order_status = #{shippingStatus} - - AND ( - (SR.shipping_date IS NOT NULL AND TO_DATE(TO_CHAR(SR.shipping_date, 'YYYY-MM-DD'), 'YYYY-MM-DD') =]]> TO_DATE(#{shippingDateFrom}, 'YYYY-MM-DD')) - OR EXISTS ( - SELECT 1 FROM shipment_log SL - WHERE SL.target_objid = T.PROJECT_NO - AND SL.shipping_date IS NOT NULL - AND TO_DATE(TO_CHAR(SL.shipping_date, 'YYYY-MM-DD'), 'YYYY-MM-DD') =]]> TO_DATE(#{shippingDateFrom}, 'YYYY-MM-DD') - ) - ) + AND SR.shipping_date IS NOT NULL + AND TO_DATE(TO_CHAR(SR.shipping_date, 'YYYY-MM-DD'), 'YYYY-MM-DD') =]]> TO_DATE(#{shippingDateFrom}, 'YYYY-MM-DD') - AND ( - (SR.shipping_date IS NOT NULL AND TO_DATE(TO_CHAR(SR.shipping_date, 'YYYY-MM-DD'), 'YYYY-MM-DD') TO_DATE(#{shippingDateTo}, 'YYYY-MM-DD')) - OR EXISTS ( - SELECT 1 FROM shipment_log SL - WHERE SL.target_objid = T.PROJECT_NO - AND SL.shipping_date IS NOT NULL - AND TO_DATE(TO_CHAR(SL.shipping_date, 'YYYY-MM-DD'), 'YYYY-MM-DD') TO_DATE(#{shippingDateTo}, 'YYYY-MM-DD') - ) - ) + AND SR.shipping_date IS NOT NULL + AND TO_DATE(TO_CHAR(SR.shipping_date, 'YYYY-MM-DD'), 'YYYY-MM-DD') TO_DATE(#{shippingDateTo}, 'YYYY-MM-DD') AND SR.project_no IS NOT NULL @@ -1175,50 +1139,29 @@ ORDER BY T.REGDATE DESC, T.PROJECT_NO DESC ) ) - - - AND EXISTS ( - SELECT 1 FROM CONTRACT_ITEM CI - WHERE CI.CONTRACT_OBJID = T.CONTRACT_OBJID - AND CI.STATUS = 'ACTIVE' - AND CI.PART_OBJID = #{search_partObjId} - ) - - - AND EXISTS ( - SELECT 1 FROM CONTRACT_ITEM CI - LEFT JOIN PART_MNG PM ON CI.PART_OBJID = PM.OBJID - WHERE CI.CONTRACT_OBJID = T.CONTRACT_OBJID - AND CI.STATUS = 'ACTIVE' - AND ( - - COALESCE(PM.PART_NO, CI.PART_NO) LIKE '%' || #{search_partNo} || '%' - - - OR - - - COALESCE(PM.PART_NAME, CI.PART_NAME) LIKE '%' || #{search_partName} || '%' - - ) - ) - - - + + AND ( - EXISTS ( - SELECT 1 FROM CONTRACT_ITEM CI - JOIN CONTRACT_ITEM_SERIAL CIS ON CI.OBJID = CIS.ITEM_OBJID - WHERE CI.CONTRACT_OBJID = T.CONTRACT_OBJID - AND CI.STATUS = 'ACTIVE' - AND UPPER(CIS.SERIAL_NO) LIKE UPPER(CONCAT('%', #{serialNo}, '%')) - AND UPPER(CIS.STATUS) = 'ACTIVE' - ) - OR EXISTS ( - SELECT 1 FROM shipment_log SL - WHERE SL.target_objid = T.PROJECT_NO - AND UPPER(SL.serial_no) LIKE UPPER(CONCAT('%', #{serialNo}, '%')) - ) + + T.PART_NO = #{search_partNo} + + + OR + + + T.PART_NAME = #{search_partName} + + ) + + + AND EXISTS ( + SELECT 1 FROM CONTRACT_ITEM CI + JOIN CONTRACT_ITEM_SERIAL CIS ON CI.OBJID = CIS.ITEM_OBJID + WHERE CI.CONTRACT_OBJID = T.CONTRACT_OBJID + AND CI.PART_OBJID = T.PART_OBJID + AND CI.STATUS = 'ACTIVE' + AND UPPER(CIS.SERIAL_NO) LIKE UPPER(CONCAT('%', #{serialNo}, '%')) + AND UPPER(CIS.STATUS) = 'ACTIVE' ) @@ -1258,37 +1201,20 @@ ORDER BY T.REGDATE DESC, T.PROJECT_NO DESC AND SR.shipping_order_status = #{shippingStatus} ) - - AND ( - EXISTS ( - SELECT 1 FROM sales_registration SR - WHERE T.PROJECT_NO = SR.project_no - AND SR.shipping_date IS NOT NULL - AND TO_DATE(TO_CHAR(SR.shipping_date, 'YYYY-MM-DD'), 'YYYY-MM-DD') =]]> TO_DATE(#{shippingDateFrom}, 'YYYY-MM-DD') - ) - OR EXISTS ( - SELECT 1 FROM shipment_log SL - WHERE SL.target_objid = T.PROJECT_NO - AND SL.shipping_date IS NOT NULL - AND TO_DATE(TO_CHAR(SL.shipping_date, 'YYYY-MM-DD'), 'YYYY-MM-DD') =]]> TO_DATE(#{shippingDateFrom}, 'YYYY-MM-DD') - ) + AND EXISTS ( + SELECT 1 FROM sales_registration SR + WHERE T.PROJECT_NO = SR.project_no + AND SR.shipping_date IS NOT NULL + AND TO_DATE(TO_CHAR(SR.shipping_date, 'YYYY-MM-DD'), 'YYYY-MM-DD') =]]> TO_DATE(#{shippingDateFrom}, 'YYYY-MM-DD') ) - AND ( - EXISTS ( - SELECT 1 FROM sales_registration SR - WHERE T.PROJECT_NO = SR.project_no - AND SR.shipping_date IS NOT NULL - AND TO_DATE(TO_CHAR(SR.shipping_date, 'YYYY-MM-DD'), 'YYYY-MM-DD') TO_DATE(#{shippingDateTo}, 'YYYY-MM-DD') - ) - OR EXISTS ( - SELECT 1 FROM shipment_log SL - WHERE SL.target_objid = T.PROJECT_NO - AND SL.shipping_date IS NOT NULL - AND TO_DATE(TO_CHAR(SL.shipping_date, 'YYYY-MM-DD'), 'YYYY-MM-DD') TO_DATE(#{shippingDateTo}, 'YYYY-MM-DD') - ) + AND EXISTS ( + SELECT 1 FROM sales_registration SR + WHERE T.PROJECT_NO = SR.project_no + AND SR.shipping_date IS NOT NULL + AND TO_DATE(TO_CHAR(SR.shipping_date, 'YYYY-MM-DD'), 'YYYY-MM-DD') TO_DATE(#{shippingDateTo}, 'YYYY-MM-DD') ) @@ -1370,50 +1296,19 @@ ORDER BY T.REGDATE DESC, T.PROJECT_NO DESC AND T.CUSTOMER_OBJID = #{customer_objid} - - AND ( - (SR.serial_no LIKE '%' || #{serialNo} || '%') - OR EXISTS ( - SELECT 1 FROM CONTRACT_ITEM CI - JOIN CONTRACT_ITEM_SERIAL CIS ON CI.OBJID = CIS.ITEM_OBJID - WHERE CI.CONTRACT_OBJID = T.CONTRACT_OBJID - AND CI.STATUS = 'ACTIVE' - AND UPPER(CIS.SERIAL_NO) LIKE UPPER('%' || #{serialNo} || '%') - AND UPPER(CIS.STATUS) = 'ACTIVE' - ) - OR EXISTS ( - SELECT 1 FROM shipment_log SL - WHERE SL.target_objid = T.PROJECT_NO - AND UPPER(SL.serial_no) LIKE UPPER('%' || #{serialNo} || '%') - ) - ) + AND SR.serial_no LIKE '%' || #{serialNo} || '%' AND EXISTS (SELECT 1 FROM CONTRACT_MGMT CM WHERE CM.OBJID = T.CONTRACT_OBJID AND CM.PO_NO LIKE '%' || #{poNo} || '%') - - AND ( - (SR.shipping_date IS NOT NULL AND TO_DATE(TO_CHAR(SR.shipping_date, 'YYYY-MM-DD'), 'YYYY-MM-DD') =]]> TO_DATE(#{shippingDateFrom}, 'YYYY-MM-DD')) - OR EXISTS ( - SELECT 1 FROM shipment_log SL - WHERE SL.target_objid = T.PROJECT_NO - AND SL.shipping_date IS NOT NULL - AND TO_DATE(TO_CHAR(SL.shipping_date, 'YYYY-MM-DD'), 'YYYY-MM-DD') =]]> TO_DATE(#{shippingDateFrom}, 'YYYY-MM-DD') - ) - ) + AND SR.shipping_date IS NOT NULL + AND TO_DATE(TO_CHAR(SR.shipping_date, 'YYYY-MM-DD'), 'YYYY-MM-DD') =]]> TO_DATE(#{shippingDateFrom}, 'YYYY-MM-DD') - AND ( - (SR.shipping_date IS NOT NULL AND TO_DATE(TO_CHAR(SR.shipping_date, 'YYYY-MM-DD'), 'YYYY-MM-DD') TO_DATE(#{shippingDateTo}, 'YYYY-MM-DD')) - OR EXISTS ( - SELECT 1 FROM shipment_log SL - WHERE SL.target_objid = T.PROJECT_NO - AND SL.shipping_date IS NOT NULL - AND TO_DATE(TO_CHAR(SL.shipping_date, 'YYYY-MM-DD'), 'YYYY-MM-DD') TO_DATE(#{shippingDateTo}, 'YYYY-MM-DD') - ) - ) + AND SR.shipping_date IS NOT NULL + AND TO_DATE(TO_CHAR(SR.shipping_date, 'YYYY-MM-DD'), 'YYYY-MM-DD') TO_DATE(#{shippingDateTo}, 'YYYY-MM-DD') AND SR.shipping_method = #{shippingMethod} diff --git a/WebContent/WEB-INF/view/quality/semiProductInspectionFormPopUp.jsp b/WebContent/WEB-INF/view/quality/semiProductInspectionFormPopUp.jsp index e85da48..8d371ef 100644 --- a/WebContent/WEB-INF/view/quality/semiProductInspectionFormPopUp.jsp +++ b/WebContent/WEB-INF/view/quality/semiProductInspectionFormPopUp.jsp @@ -158,6 +158,20 @@ String loginUserId = CommonUtils.checkNull(person.getUserId()); background: #2b6cb0; } + .btn_edit { + padding: 6px 20px; + background: #e67e22; + color: white; + border: none; + border-radius: 3px; + cursor: pointer; + font-size: 12px; + } + + .btn_edit:hover { + background: #d35400; + } + .btn_close { padding: 6px 20px; background: #718096; @@ -232,7 +246,8 @@ String loginUserId = CommonUtils.checkNull(person.getUserId());
- + +
@@ -247,7 +262,9 @@ String loginUserId = CommonUtils.checkNull(person.getUserId());
+
@@ -314,8 +331,9 @@ $(document).ready(function(){ // 버튼 이벤트 $("#btnSave").click(fn_save); // 하단 저장: 전체 DB 저장 - $("#btnSaveLeft").click(fn_saveSelectedLeft); // 좌측 저장: UI 잠금만 (DB 저장 X) - $("#btnSaveRight").click(fn_saveSelectedRight); // 우측 저장: UI 잠금만 (DB 저장 X) + $("#btnSaveLeft").click(fn_saveSelectedLeft); // 좌측 행저장: 락 처리 + $("#btnEditLeft").click(fn_editSelectedLeft); // 좌측 행수정: 락 해제 + // $("#btnSaveRight").click(fn_saveSelectedRight); // 우측 저장: 주석처리 $("#btnClose").click(function(){ window.close(); }); $("#btnAddLeft").click(fn_addLeftRow); $("#btnDelLeft").click(fn_delLeftRow); @@ -478,9 +496,13 @@ function fn_initLeftGrid(){ selectable: 1, // 단일 선택 // 저장된 행 시각적 표시 rowFormatter: function(row){ - if(row.getData().IS_SAVED){ + var data = row.getData(); + if(data.IS_SAVED || data.IS_LOCKED === 'Y'){ row.getElement().style.backgroundColor = "#e8f5e9"; // 연한 초록색 row.getElement().style.color = "#555"; + } else { + row.getElement().style.backgroundColor = ""; // 원래 색상 + row.getElement().style.color = ""; } } }); @@ -594,9 +616,13 @@ function fn_initRightGrid(){ selectable: true, // 저장된 행 시각적 표시 rowFormatter: function(row){ - if(row.getData().IS_SAVED){ + var data = row.getData(); + if(data.IS_SAVED || data.IS_LOCKED === 'Y'){ row.getElement().style.backgroundColor = "#e8f5e9"; // 연한 초록색 row.getElement().style.color = "#555"; + } else { + row.getElement().style.backgroundColor = ""; // 원래 색상 + row.getElement().style.color = ""; } } }); @@ -998,6 +1024,68 @@ function fn_loadData(objid, inspectionGroupId){ }); } +// ===================================================== +// 좌측 행수정: 락이 걸린 행을 수정 가능하도록 해제 +// ===================================================== +function fn_editSelectedLeft(){ + console.log("===== fn_editSelectedLeft 호출됨 ====="); + + if(!selectedLeftRowId){ + Swal.fire({ icon: 'warning', title: '알림', text: '수정할 양품 정보를 선택해주세요.' }); + return; + } + + var selectedRow = leftGrid.getSelectedRows()[0]; + if(!selectedRow){ + Swal.fire({ icon: 'warning', title: '알림', text: '수정할 양품 정보를 선택해주세요.' }); + return; + } + + var rowData = selectedRow.getData(); + + // 락이 걸려있지 않으면 이미 수정 가능 상태 + if(rowData.IS_LOCKED !== 'Y' && !rowData.IS_SAVED){ + Swal.fire({ icon: 'info', title: '알림', text: '이미 수정 가능한 상태입니다.' }); + return; + } + + Swal.fire({ + icon: 'question', + title: '행수정', + text: '선택한 행의 잠금을 해제하고 수정 가능하게 하시겠습니까?', + showCancelButton: true, + confirmButtonText: '확인', + cancelButtonText: '취소' + }).then((result) => { + if(result.isConfirmed){ + var objId = rowData.OBJID; + + // DB에 잠금 해제 요청 + $.ajax({ + url: "/quality/unlockSemiProductInspection.do", + type: "POST", + data: { objIds: JSON.stringify([objId]) }, + dataType: "json", + success: function(result){ + if(result.result){ + // UI에서 잠금 해제 + selectedRow.update({ IS_SAVED: false, IS_LOCKED: 'N' }); + // 행 스타일 원래대로 (초록색 -> 기본색) + selectedRow.getElement().style.backgroundColor = ""; + selectedRow.getElement().style.color = ""; + Swal.fire({ icon: 'success', title: '완료', text: '잠금이 해제되어 수정 가능합니다.' }); + } else { + Swal.fire({ icon: 'error', title: '오류', text: result.msg || '잠금 해제에 실패했습니다.' }); + } + }, + error: function(xhr, status, error){ + Swal.fire({ icon: 'error', title: '오류', text: '잠금 해제 중 오류가 발생했습니다.' }); + } + }); + } + }); +} + // ===================================================== // 좌측 행 저장+잠금: 선택된 양품 행을 DB에 저장하고 수정 불가로 변경 // ===================================================== diff --git a/src/com/pms/controller/QualityController.java b/src/com/pms/controller/QualityController.java index 820a172..aa2e6b2 100644 --- a/src/com/pms/controller/QualityController.java +++ b/src/com/pms/controller/QualityController.java @@ -696,6 +696,15 @@ public class QualityController { return service.lockSemiProductInspection(paramMap); } + /** + * 반제품검사 잠금 해제 + */ + @ResponseBody + @RequestMapping("/quality/unlockSemiProductInspection.do") + public Map unlockSemiProductInspection(HttpServletRequest request, @RequestParam Map paramMap){ + return service.unlockSemiProductInspection(paramMap); + } + /** * 반제품검사 엑셀 다운로드 (JSP 방식) */ diff --git a/src/com/pms/mapper/quality.xml b/src/com/pms/mapper/quality.xml index 62f9569..a448a55 100644 --- a/src/com/pms/mapper/quality.xml +++ b/src/com/pms/mapper/quality.xml @@ -1802,6 +1802,13 @@ WHERE OBJID = #{OBJID} + + + UPDATE PMS_QUALITY_SEMI_PRODUCT_INSPECTION + SET IS_LOCKED = 'N' + WHERE OBJID = #{OBJID} + + DELETE FROM PMS_QUALITY_SEMI_PRODUCT_INSPECTION diff --git a/src/com/pms/service/QualityService.java b/src/com/pms/service/QualityService.java index 6bd95bc..e600ebd 100644 --- a/src/com/pms/service/QualityService.java +++ b/src/com/pms/service/QualityService.java @@ -1086,6 +1086,46 @@ public class QualityService extends BaseService{ return resultMap; } + /** + * 반제품검사 행 잠금 해제 (IS_LOCKED = 'N') + */ + public Map unlockSemiProductInspection(Map paramMap){ + Map resultMap = new HashMap(); + SqlSession sqlSession = null; + try{ + sqlSession = SqlMapConfig.getInstance().getSqlSession(false); + + String objIdsJson = CommonUtils.checkNull(paramMap.get("objIds")); + + if(!objIdsJson.equals("") && !objIdsJson.equals("[]")){ + org.json.simple.parser.JSONParser parser = new org.json.simple.parser.JSONParser(); + org.json.simple.JSONArray objIdArr = (org.json.simple.JSONArray) parser.parse(objIdsJson); + + for(int i = 0; i < objIdArr.size(); i++){ + String objId = CommonUtils.checkNull(objIdArr.get(i)); + if(!objId.equals("")){ + Map unlockParam = new HashMap(); + unlockParam.put("OBJID", objId); + sqlSession.update("quality.unlockSemiProductInspection", unlockParam); + } + } + } + + sqlSession.commit(); + resultMap.put("result", true); + resultMap.put("msg", "잠금 해제되었습니다."); + + }catch(Exception e){ + resultMap.put("result", false); + resultMap.put("msg", "잠금 해제에 실패했습니다."); + if(sqlSession != null) sqlSession.rollback(); + e.printStackTrace(); + }finally{ + if(sqlSession != null) sqlSession.close(); + } + return resultMap; + } + /** * 반제품검사 삭제 (OBJID 목록으로 삭제) */