From 4030755447f04434f6ceb289d5b5999eef6b6690 Mon Sep 17 00:00:00 2001 From: hjjeong Date: Fri, 13 Feb 2026 12:33:16 +0900 Subject: [PATCH 1/3] =?UTF-8?q?=EC=86=8C=EC=9E=AC=EA=B4=80=EB=A6=AC=20?= =?UTF-8?q?=ED=85=8C=EC=9D=B4=EB=B8=94=20=EB=B3=80=EA=B2=BD=20(MATERIAL=5F?= =?UTF-8?q?MNG=20->=20PART=5FMNG)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/pms/mapper/admin.xml | 47 +++++++++++++++++++++++++++++++++--- 1 file changed, 44 insertions(+), 3 deletions(-) diff --git a/src/com/pms/mapper/admin.xml b/src/com/pms/mapper/admin.xml index b72f70f..577c635 100644 --- a/src/com/pms/mapper/admin.xml +++ b/src/com/pms/mapper/admin.xml @@ -9383,7 +9383,7 @@ SELECT - SELECT OBJID, MATERIAL_CODE, @@ -9394,8 +9394,21 @@ SELECT ORDER BY MATERIAL_CODE + + - SELECT OBJID, MATERIAL_CODE, @@ -9407,8 +9420,21 @@ SELECT ORDER BY SIZE_SPEC + + - SELECT OBJID, MATERIAL_CODE, @@ -9422,6 +9448,21 @@ SELECT LIMIT 1 + + ' + + taxTypeOptionsHtml + + ' ' + + ' ' + + '' + + '' + + ' 세금계산서발행일' + + ' ' + + '' + + '' + + ' 수출신고필증신고번호' + + ' ' + + '' + + '' + + ' 선적일자' + + ' ' + + '' + + '' + + '
선택된 ' + targetObj.length + '건의 데이터에 마감정보를 입력합니다.
' + + '', + showCancelButton: true, + confirmButtonColor: '#2196F3', + cancelButtonColor: '#666', + confirmButtonText: '저장', + cancelButtonText: '닫기', + onOpen: function() { + // 날짜 필드 datepicker 초기화 + $('#swal_taxInvoiceDate').datepicker({ + dateFormat: 'yy-mm-dd', + changeMonth: true, + changeYear: true + }); + $('#swal_loadingDate').datepicker({ + dateFormat: 'yy-mm-dd', + changeMonth: true, + changeYear: true + }); + // 기존 데이터 세팅 + if(taxType) $('#swal_taxType').val(taxType); + if(taxInvoiceDate) $('#swal_taxInvoiceDate').val(taxInvoiceDate); + if(exportDeclNo) $('#swal_exportDeclNo').val(exportDeclNo); + if(loadingDate) $('#swal_loadingDate').val(loadingDate); + }, + preConfirm: function() { + return { + taxType: $('#swal_taxType').val(), + taxInvoiceDate: $('#swal_taxInvoiceDate').val(), + exportDeclNo: $('#swal_exportDeclNo').val(), + loadingDate: $('#swal_loadingDate').val() + }; + } + }).then(function(result) { + if (result.isConfirmed) { + var formData = result.value; + + $.ajax({ + url: "/revenueMgmt/saveDeadlineInfo.do", + type: "POST", + data: { + "objIdList": objIdList.join(','), + "taxType": formData.taxType, + "taxInvoiceDate": formData.taxInvoiceDate, + "exportDeclNo": formData.exportDeclNo, + "loadingDate": formData.loadingDate + }, + dataType: "json", + success: function(data){ + Swal.fire({ + title: data.msg || '처리되었습니다.', + icon: data.result ? 'success' : 'error' + }).then(function() { + if(data.result) fn_search(); + }); + }, + error: function(jqxhr, status, error){ + Swal.fire({ + title: '마감정보 저장 중 오류가 발생했습니다.', + text: error || jqxhr.statusText || '서버 오류', + icon: 'error' + }); + } + }); + } + }); + } + + // 단건 선택 시 그리드 데이터에서 기존 마감정보 가져오기 + if(loadExisting) { + var row = targetObj[0]; + openDeadlineInfoPopup({ + TAX_TYPE: fnc_checkNull(row.TAX_TYPE), + TAX_INVOICE_DATE: fnc_checkNull(row.TAX_INVOICE_DATE), + EXPORT_DECL_NO: fnc_checkNull(row.EXPORT_DECL_NO), + LOADING_DATE: fnc_checkNull(row.LOADING_DATE) + }); + } else { + openDeadlineInfoPopup(null); + } + }); + $("#btnDeadline").click(function(){ var targetObj = _tabulGrid.getSelectedData(); @@ -295,6 +431,14 @@ var columns = [ {headerHozAlign : 'center', hozAlign : 'left', width : '100', title : 'S/N', field : 'SERIAL_NO'}, // 20. 품번 {headerHozAlign : 'center', hozAlign : 'left', width : '100', title : '품번', field : 'PRODUCT_NO'}, + // 21. 과세구분 + {headerHozAlign : 'center', hozAlign : 'center', width : '80', title : '과세구분', field : 'TAX_TYPE_NAME'}, + // 22. 세금계산서발행일 + {headerHozAlign : 'center', hozAlign : 'center', width : '110', title : '세금계산서발행일', field : 'TAX_INVOICE_DATE'}, + // 23. 수출신고필증신고번호 + {headerHozAlign : 'center', hozAlign : 'left', width : '140', title : '수출신고필증신고번호', field : 'EXPORT_DECL_NO'}, + // 24. 선적일자 + {headerHozAlign : 'center', hozAlign : 'center', width : '90', title : '선적일자', field : 'LOADING_DATE'}, /* 주석처리된 컬럼 - 필요시 활성화 */ /* @@ -467,6 +611,11 @@ function fn_FileRegist(objId, docType, docTypeName){
+ +
@@ -476,6 +625,7 @@ function fn_FileRegist(objId, docType, docTypeName){
+
diff --git a/src/com/pms/salesmgmt/controller/SalesNcollectMgmtController.java b/src/com/pms/salesmgmt/controller/SalesNcollectMgmtController.java index 70c7fb7..6b4a3dc 100644 --- a/src/com/pms/salesmgmt/controller/SalesNcollectMgmtController.java +++ b/src/com/pms/salesmgmt/controller/SalesNcollectMgmtController.java @@ -145,6 +145,9 @@ public class SalesNcollectMgmtController { codeMap.put("incotermsList", salesMgmtCommonService.bizMakeOptionList("IT", "", "salesMgmtCommon.getCodeList")); */ + + // 과세구분 + codeMap.put("taxTypeList", commonService.bizMakeOptionList("0900215", "", "common.getCodeselect")); request.setAttribute("codeMap", codeMap); } catch (Exception e) { @@ -1046,6 +1049,24 @@ public class SalesNcollectMgmtController { return resultMap; } + /** + * 마감정보 조회 + */ + @ResponseBody + @RequestMapping(value = "/revenueMgmt/getDeadlineInfo.do", method = RequestMethod.POST) + public Map getDeadlineInfo(HttpServletRequest request, @RequestParam Map paramMap) { + return salesNcollectMgmtService.getDeadlineInfo(paramMap); + } + + /** + * 마감정보 저장 + */ + @ResponseBody + @RequestMapping(value = "/revenueMgmt/saveDeadlineInfo.do", method = RequestMethod.POST) + public Map saveDeadlineInfo(HttpServletRequest request, @RequestParam Map paramMap) { + return salesNcollectMgmtService.saveDeadlineInfo(request, paramMap); + } + @RequestMapping(value = "/salesMgmt/getSavedTransactionStatement.do", method = RequestMethod.POST) @ResponseBody public Map getSavedTransactionStatement(HttpServletRequest request, @RequestParam Map paramMap) { diff --git a/src/com/pms/salesmgmt/mapper/salesNcollectMgmt.xml b/src/com/pms/salesmgmt/mapper/salesNcollectMgmt.xml index 3ca0119..b789c37 100644 --- a/src/com/pms/salesmgmt/mapper/salesNcollectMgmt.xml +++ b/src/com/pms/salesmgmt/mapper/salesNcollectMgmt.xml @@ -820,6 +820,11 @@ T.PROJECT_NO, T.CONTRACT_OBJID, T.SALES_DEADLINE_DATE, + COALESCE(T.TAX_TYPE, '') AS TAX_TYPE, + COALESCE(CODE_NAME(T.TAX_TYPE), '') AS TAX_TYPE_NAME, + COALESCE(T.TAX_INVOICE_DATE, '') AS TAX_INVOICE_DATE, + COALESCE(T.EXPORT_DECL_NO, '') AS EXPORT_DECL_NO, + COALESCE(T.LOADING_DATE, '') AS LOADING_DATE, CODE_NAME(T.CATEGORY_CD) AS ORDER_TYPE, CODE_NAME(T.PRODUCT) AS PRODUCT_TYPE, CODE_NAME(T.AREA_CD) AS NATION, @@ -2099,6 +2104,44 @@ ORDER BY T.REGDATE DESC, T.PROJECT_NO DESC LEFT JOIN SUPPLY_MNG SM ON SM.OBJID = CASE WHEN T.CUSTOMER_OBJID ~ '^[0-9]+$' THEN T.CUSTOMER_OBJID::NUMERIC ELSE NULL END WHERE T.PROJECT_NO = #{projectNo} + + + + + + + /* salesNcollectMgmt.saveDeadlineInfo - 마감정보 저장 */ + UPDATE PROJECT_MGMT + SET + TAX_TYPE = #{taxType}, + TAX_INVOICE_DATE = #{taxInvoiceDate}, + EXPORT_DECL_NO = #{exportDeclNo}, + LOADING_DATE = #{loadingDate} + WHERE OBJID::VARCHAR = #{OBJID} + diff --git a/src/com/pms/salesmgmt/service/SalesNcollectMgmtService.java b/src/com/pms/salesmgmt/service/SalesNcollectMgmtService.java index a3fb2d7..895f547 100644 --- a/src/com/pms/salesmgmt/service/SalesNcollectMgmtService.java +++ b/src/com/pms/salesmgmt/service/SalesNcollectMgmtService.java @@ -1456,4 +1456,76 @@ public Map saveSaleRegistration(HttpServletRequest request, Map< return result; } + + /** + * 마감정보 조회 + * @param paramMap - OBJID + * @return 마감정보 Map (TAX_TYPE, TAX_INVOICE_DATE, EXPORT_DECL_NO, LOADING_DATE) + */ + public Map getDeadlineInfo(Map paramMap) { + Map resultMap = new HashMap(); + SqlSession sqlSession = null; + try { + sqlSession = SqlMapConfig.getInstance().getSqlSession(); + Map info = sqlSession.selectOne("salesNcollectMgmt.getDeadlineInfo", paramMap); + resultMap.put("result", true); + resultMap.put("info", info); + } catch (Exception e) { + resultMap.put("result", false); + resultMap.put("msg", "마감정보 조회 중 오류가 발생했습니다."); + e.printStackTrace(); + } finally { + if (sqlSession != null) sqlSession.close(); + } + return resultMap; + } + + /** + * 마감정보 저장 (선택된 항목들에 일괄 적용) + * @param request + * @param paramMap - objIdList, taxType, taxInvoiceDate, exportDeclNo, loadingDate + * @return 처리 결과 + */ + public Map saveDeadlineInfo(HttpServletRequest request, Map paramMap) { + Map resultMap = new HashMap(); + SqlSession sqlSession = SqlMapConfig.getInstance().getSqlSession(false); + try { + String objIdListStr = CommonUtils.checkNull(paramMap.get("objIdList")); + String taxType = CommonUtils.checkNull(paramMap.get("taxType")); + String taxInvoiceDate = CommonUtils.checkNull(paramMap.get("taxInvoiceDate")); + String exportDeclNo = CommonUtils.checkNull(paramMap.get("exportDeclNo")); + String loadingDate = CommonUtils.checkNull(paramMap.get("loadingDate")); + + if (objIdListStr == null || objIdListStr.isEmpty()) { + resultMap.put("result", false); + resultMap.put("msg", "선택된 항목이 없습니다."); + return resultMap; + } + + String[] targetObjIdList = objIdListStr.split(","); + sqlSession = SqlMapConfig.getInstance().getSqlSession(); + + for (int i = 0; i < targetObjIdList.length; i++) { + HashMap sqlParamMap = new HashMap(); + sqlParamMap.put("OBJID", CommonUtils.checkNull(targetObjIdList[i])); + sqlParamMap.put("taxType", taxType); + sqlParamMap.put("taxInvoiceDate", taxInvoiceDate); + sqlParamMap.put("exportDeclNo", exportDeclNo); + sqlParamMap.put("loadingDate", loadingDate); + + sqlSession.update("salesNcollectMgmt.saveDeadlineInfo", sqlParamMap); + } + sqlSession.commit(); + resultMap.put("result", true); + resultMap.put("msg", targetObjIdList.length + "건의 마감정보가 저장되었습니다."); + } catch (Exception e) { + resultMap.put("result", false); + resultMap.put("msg", "마감정보 저장 중 오류가 발생했습니다."); + sqlSession.rollback(); + e.printStackTrace(); + } finally { + sqlSession.close(); + } + return resultMap; + } } -- 2.49.1 From 01415109e63eb974c0bf2fbee5cf7920ea410e59 Mon Sep 17 00:00:00 2001 From: hjjeong Date: Fri, 13 Feb 2026 14:16:20 +0900 Subject: [PATCH 3/3] =?UTF-8?q?=EA=B2=AC=EC=A0=81=EC=9A=94=EC=B2=AD?= =?UTF-8?q?=EC=84=9C=20=EB=A9=94=EC=9D=BC=20=EB=B3=B8=EB=AC=B8=20=EB=82=B4?= =?UTF-8?q?=EC=9A=A9=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- WebContent/WEB-INF/view/salesMng/quotationRequestMailPopup.jsp | 1 + 1 file changed, 1 insertion(+) diff --git a/WebContent/WEB-INF/view/salesMng/quotationRequestMailPopup.jsp b/WebContent/WEB-INF/view/salesMng/quotationRequestMailPopup.jsp index 5311ad8..0f954a2 100644 --- a/WebContent/WEB-INF/view/salesMng/quotationRequestMailPopup.jsp +++ b/WebContent/WEB-INF/view/salesMng/quotationRequestMailPopup.jsp @@ -273,6 +273,7 @@ function fn_generateMailTemplate(){ var template = "안녕하세요.\n\n"; template += vendorName + " 귀하\n\n"; template += "아래와 같이 견적을 요청드립니다.\n\n"; + template += "각 품목별 납품가능일 표기 부탁드립니다.\n\n"; template += "견적요청번호: " + quotationNo + "\n"; if(projectNo !== ""){ template += "프로젝트번호: " + projectNo + "\n"; -- 2.49.1