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;
+ }
}