거래명세서 수정
This commit is contained in:
@@ -1892,5 +1892,19 @@ ORDER BY T.REGDATE DESC, T.PROJECT_NO DESC
|
||||
AND IssueDt = #{issueDt}
|
||||
</select>
|
||||
|
||||
<select id="getAllSerialNumbers" parameterType="map" resultType="string">
|
||||
/* salesNcollectMgmt.getAllSerialNumbers - 프로젝트의 모든 S/N 조회 */
|
||||
SELECT CIS.SERIAL_NO
|
||||
FROM PROJECT_MGMT PM
|
||||
JOIN CONTRACT_ITEM CI ON CI.CONTRACT_OBJID = PM.CONTRACT_OBJID
|
||||
AND CI.PART_OBJID = PM.PART_OBJID
|
||||
AND CI.STATUS = 'ACTIVE'
|
||||
JOIN CONTRACT_ITEM_SERIAL CIS ON CI.OBJID = CIS.ITEM_OBJID
|
||||
AND UPPER(CIS.STATUS) = 'ACTIVE'
|
||||
WHERE PM.PROJECT_NO = #{projectNo}
|
||||
AND CIS.SERIAL_NO IS NOT NULL
|
||||
ORDER BY CIS.SERIAL_NO
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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<String, Object> getAllSerialNumbers(HttpServletRequest request, @RequestParam Map<String, Object> paramMap) {
|
||||
Map<String, Object> resultMap = new HashMap<String, Object>();
|
||||
|
||||
try {
|
||||
List<String> 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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1892,5 +1892,19 @@ ORDER BY T.REGDATE DESC, T.PROJECT_NO DESC
|
||||
AND IssueDt = #{issueDt}
|
||||
</select>
|
||||
|
||||
<select id="getAllSerialNumbers" parameterType="map" resultType="string">
|
||||
/* salesNcollectMgmt.getAllSerialNumbers - 프로젝트의 모든 S/N 조회 */
|
||||
SELECT CIS.SERIAL_NO
|
||||
FROM PROJECT_MGMT PM
|
||||
JOIN CONTRACT_ITEM CI ON CI.CONTRACT_OBJID = PM.CONTRACT_OBJID
|
||||
AND CI.PART_OBJID = PM.PART_OBJID
|
||||
AND CI.STATUS = 'ACTIVE'
|
||||
JOIN CONTRACT_ITEM_SERIAL CIS ON CI.OBJID = CIS.ITEM_OBJID
|
||||
AND UPPER(CIS.STATUS) = 'ACTIVE'
|
||||
WHERE PM.PROJECT_NO = #{projectNo}
|
||||
AND CIS.SERIAL_NO IS NOT NULL
|
||||
ORDER BY CIS.SERIAL_NO
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
|
||||
|
||||
@@ -1390,4 +1390,22 @@ public Map<String, Object> saveSaleRegistration(HttpServletRequest request, Map<
|
||||
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
public List<String> getAllSerialNumbers(Map<String, Object> paramMap) {
|
||||
SqlSession sqlSession = null;
|
||||
List<String> result = new ArrayList<String>();
|
||||
|
||||
try {
|
||||
sqlSession = SqlMapConfig.getInstance().getSqlSession();
|
||||
result = sqlSession.selectList("salesNcollectMgmt.getAllSerialNumbers", paramMap);
|
||||
} catch(Exception e) {
|
||||
e.printStackTrace();
|
||||
} finally {
|
||||
if(sqlSession != null) {
|
||||
sqlSession.close();
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user