From f2627d96837c1458ee6f5dfeb28670f1119f1946 Mon Sep 17 00:00:00 2001 From: leeheejin Date: Thu, 13 Nov 2025 17:52:46 +0900 Subject: [PATCH] =?UTF-8?q?=EA=B1=B0=EB=9E=98=EB=AA=85=EC=84=B8=EC=84=9C?= =?UTF-8?q?=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salesmgmt/mapper/salesNcollectMgmt.xml | 14 ++ .../salesMgmt/transactionStatementForm.jsp | 127 +++++++++++++----- .../SalesNcollectMgmtController.java | 18 +++ .../salesmgmt/mapper/salesNcollectMgmt.xml | 14 ++ .../service/SalesNcollectMgmtService.java | 18 +++ 5 files changed, 158 insertions(+), 33 deletions(-) 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 bc6d81b..6341c84 100644 --- a/WebContent/WEB-INF/classes/com/pms/salesmgmt/mapper/salesNcollectMgmt.xml +++ b/WebContent/WEB-INF/classes/com/pms/salesmgmt/mapper/salesNcollectMgmt.xml @@ -1892,5 +1892,19 @@ ORDER BY T.REGDATE DESC, T.PROJECT_NO DESC AND IssueDt = #{issueDt} + + diff --git a/WebContent/WEB-INF/view/salesmgmt/salesMgmt/transactionStatementForm.jsp b/WebContent/WEB-INF/view/salesmgmt/salesMgmt/transactionStatementForm.jsp index 6861f78..8ef768d 100644 --- a/WebContent/WEB-INF/view/salesmgmt/salesMgmt/transactionStatementForm.jsp +++ b/WebContent/WEB-INF/view/salesmgmt/salesMgmt/transactionStatementForm.jsp @@ -436,44 +436,99 @@ function fn_loadData() { var gridData = JSON.parse(gridDataJson); console.log("그리드 데이터:", gridData); - // 그리드 데이터를 거래명세서 형식으로 변환 - var firstItem = gridData[0]; - var statementData = { - success: true, - customerName: firstItem.CUSTOMER, - supplierName: "㈜알피에스", - supplierRegNo: "314-81-75146", - supplierAddress: "대전광역시 유성구 국제과학10로 8", - supplierBusiness: "제조", - supplierType: "금속절삭가공기계의", - supplierContact: "TEL:042-602-3300/FAX:042-672", - note: "아래와 같이 공급합니다.", - items: [] - }; - - // 각 그리드 행을 품목으로 변환 - for(var i = 0; i < gridData.length; i++) { - var row = gridData[i]; - statementData.items.push({ - productName: row.PRODUCT_NAME, - spec: row.PRODUCT_NO, - quantity: row.SALES_QUANTITY || 0, - unitPrice: row.SALES_UNIT_PRICE || 0, - supplyPrice: row.SALES_SUPPLY_PRICE || 0, - vat: row.SALES_VAT || 0 - }); - } - - console.log("=== 변환된 거래명세서 데이터 ==="); - console.log(statementData); - - // 데이터 채우기 - fn_fillData(statementData); + // S/N 정보 수집 (비고에 표시) - 비동기 처리 + fn_collectSerialNumbers(gridData, function(serialNumbers) { + // 그리드 데이터를 거래명세서 형식으로 변환 + var firstItem = gridData[0]; + + var statementData = { + success: true, + customerName: firstItem.CUSTOMER, + supplierName: "㈜알피에스", + supplierRegNo: "314-81-75146", + supplierAddress: "대전광역시 유성구 국제과학10로 8", + supplierBusiness: "제조", + supplierType: "금속절삭가공기계의", + supplierContact: "TEL:042-602-3300/FAX:042-672", + note: "아래와 같이 공급합니다.", + serialNote: serialNumbers.join("\n"), // S/N 정보 + items: [] + }; + + // 각 그리드 행을 품목으로 변환 + for(var i = 0; i < gridData.length; i++) { + var row = gridData[i]; + statementData.items.push({ + productName: row.PRODUCT_NAME, + spec: row.PRODUCT_NO, + quantity: row.SALES_QUANTITY || 0, + unitPrice: row.SALES_UNIT_PRICE || 0, + supplyPrice: row.SALES_SUPPLY_PRICE || 0, + vat: row.SALES_VAT || 0 + }); + } + + console.log("=== 변환된 거래명세서 데이터 ==="); + console.log(statementData); + + // 데이터 채우기 + fn_fillData(statementData); + }); // localStorage 정리 localStorage.removeItem('transactionStatementData'); } +// S/N 정보 수집 함수 (비동기) +function fn_collectSerialNumbers(gridData, callback) { + var serialNumbers = []; + var pendingRequests = 0; + var completed = false; + + for(var i = 0; i < gridData.length; i++) { + var row = gridData[i]; + if(row.SERIAL_NO && row.SERIAL_NO.trim() !== '') { + var serialNo = row.SERIAL_NO.trim(); + + // "외 N건" 형식인 경우 서버에서 모든 S/N 조회 + if(serialNo.includes('외') && serialNo.includes('건')) { + pendingRequests++; + + $.ajax({ + url: '/salesMgmt/getAllSerialNumbers.do', + type: 'POST', + data: { projectNo: row.PROJECT_NO }, + async: false, // 동기 처리로 변경 + success: function(response) { + if(response.success && response.serialNumbers && response.serialNumbers.length > 0) { + // 모든 S/N을 쉼표로 구분하여 한 줄로 표시 + var snText = "Spindle S/N: " + response.serialNumbers.join(", "); + serialNumbers.push(snText); + } + }, + error: function() { + console.error("S/N 조회 실패"); + }, + complete: function() { + pendingRequests--; + } + }); + } else { + // 단일 S/N 또는 쉼표로 구분된 여러 S/N + if(serialNo.includes(',')) { + // 쉼표로 구분된 경우 한 줄로 표시 + serialNumbers.push("Spindle S/N: " + serialNo); + } else { + serialNumbers.push("Spindle S/N: " + serialNo); + } + } + } + } + + // 모든 요청 완료 후 콜백 실행 + callback(serialNumbers); +} + function fn_fillData(data) { console.log("=== fn_fillData 호출 ==="); console.log("customerName:", data.customerName); @@ -572,6 +627,12 @@ function fn_fillData(data) { $("#totalText").text(total.toString()); $("#totalNum").text(fn_num(total)); + // 비고에 S/N 정보 표시 + if(data.serialNote && data.serialNote.trim() !== '') { + $("#noteContent").text(data.serialNote); + console.log("비고에 S/N 표시:", data.serialNote); + } + // contenteditable 셀 변경 시 합계 자동 업데이트 fn_attachCellListeners(); } diff --git a/src/com/pms/salesmgmt/controller/SalesNcollectMgmtController.java b/src/com/pms/salesmgmt/controller/SalesNcollectMgmtController.java index 50da0fb..229cf97 100644 --- a/src/com/pms/salesmgmt/controller/SalesNcollectMgmtController.java +++ b/src/com/pms/salesmgmt/controller/SalesNcollectMgmtController.java @@ -971,4 +971,22 @@ public class SalesNcollectMgmtController { Map resultMap = salesNcollectMgmtService.salesDeadlineConfirm(request, paramMap); return resultMap; } + + @RequestMapping(value = "/salesMgmt/getAllSerialNumbers.do", method = RequestMethod.POST) + @ResponseBody + public Map getAllSerialNumbers(HttpServletRequest request, @RequestParam Map paramMap) { + Map resultMap = new HashMap(); + + try { + List serialNumbers = salesNcollectMgmtService.getAllSerialNumbers(paramMap); + resultMap.put("success", true); + resultMap.put("serialNumbers", serialNumbers); + } catch(Exception e) { + e.printStackTrace(); + resultMap.put("success", false); + resultMap.put("message", e.getMessage()); + } + + return resultMap; + } } diff --git a/src/com/pms/salesmgmt/mapper/salesNcollectMgmt.xml b/src/com/pms/salesmgmt/mapper/salesNcollectMgmt.xml index bc6d81b..6341c84 100644 --- a/src/com/pms/salesmgmt/mapper/salesNcollectMgmt.xml +++ b/src/com/pms/salesmgmt/mapper/salesNcollectMgmt.xml @@ -1892,5 +1892,19 @@ ORDER BY T.REGDATE DESC, T.PROJECT_NO DESC AND IssueDt = #{issueDt} + + diff --git a/src/com/pms/salesmgmt/service/SalesNcollectMgmtService.java b/src/com/pms/salesmgmt/service/SalesNcollectMgmtService.java index fb063d7..aebaf7b 100644 --- a/src/com/pms/salesmgmt/service/SalesNcollectMgmtService.java +++ b/src/com/pms/salesmgmt/service/SalesNcollectMgmtService.java @@ -1390,4 +1390,22 @@ public Map saveSaleRegistration(HttpServletRequest request, Map< return resultMap; } + + public List getAllSerialNumbers(Map paramMap) { + SqlSession sqlSession = null; + List result = new ArrayList(); + + try { + sqlSession = SqlMapConfig.getInstance().getSqlSession(); + result = sqlSession.selectList("salesNcollectMgmt.getAllSerialNumbers", paramMap); + } catch(Exception e) { + e.printStackTrace(); + } finally { + if(sqlSession != null) { + sqlSession.close(); + } + } + + return result; + } } -- 2.49.1