diff --git a/WebContent/WEB-INF/classes/com/pms/mapper/purchaseOrder.xml b/WebContent/WEB-INF/classes/com/pms/mapper/purchaseOrder.xml index 4c1738c..76674cd 100644 --- a/WebContent/WEB-INF/classes/com/pms/mapper/purchaseOrder.xml +++ b/WebContent/WEB-INF/classes/com/pms/mapper/purchaseOrder.xml @@ -1168,6 +1168,21 @@ WHERE OBJID = #{OBJID} + + + /* purchaseOrder.saveArrivalPlanDeadlineInfo - 입고건별 마감정보 저장 */ + UPDATE arrival_plan SET + tax_type = #{taxType} + , tax_invoice_date = #{taxInvoiceDate} + , export_decl_no = #{exportDeclNo} + , loading_date = #{loadingDate} + , foreign_type = #{foreignType} + , duty = CAST(#{duty} AS NUMERIC) + , exchange_rate = CAST(#{exchangeRate} AS NUMERIC) + , import_vat = CAST(#{importVat} AS NUMERIC) + 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')) ||')' @@ -6608,6 +6623,16 @@ FROM( ,AP.PURCHASE_CLOSE_DATE + + ,COALESCE(AP.tax_type, '') AS TAX_TYPE + ,COALESCE(AP.tax_invoice_date, '') AS TAX_INVOICE_DATE + ,COALESCE(AP.export_decl_no, '') AS EXPORT_DECL_NO + ,COALESCE(AP.loading_date, '') AS LOADING_DATE + ,COALESCE(AP.foreign_type, '') AS FOREIGN_TYPE + ,COALESCE(AP.duty, 0) AS DUTY + ,COALESCE(AP.exchange_rate, 0) AS EXCHANGE_RATE + ,COALESCE(AP.import_vat, 0) AS IMPORT_VAT + FROM ARRIVAL_PLAN AP INNER JOIN PURCHASE_ORDER_MASTER POM ON POM.OBJID = AP.PARENT_OBJID INNER JOIN PURCHASE_ORDER_PART POP ON POP.PURCHASE_ORDER_MASTER_OBJID = POM.OBJID::VARCHAR diff --git a/WebContent/WEB-INF/view/purchaseOrder/purchaseCloseList.jsp b/WebContent/WEB-INF/view/purchaseOrder/purchaseCloseList.jsp index 5f03c2a..9225a37 100644 --- a/WebContent/WEB-INF/view/purchaseOrder/purchaseCloseList.jsp +++ b/WebContent/WEB-INF/view/purchaseOrder/purchaseCloseList.jsp @@ -69,6 +69,187 @@ $(document).ready(function(){ $("#project_no").change(function(){ fn_UnitCodeList(this.value, "unit_code", ""); }); + + + // 마감정보입력 버튼 + $("#btnDeadlineInfo").click(function(){ + var targetObj = _tabulGrid.getSelectedData(); + + if(0 == targetObj.length){ + Swal.fire("선택된 내용이 없습니다."); + return false; + } + + // 선택된 OBJID 목록 + var objIdList = []; + for(var i = 0; i < targetObj.length; i++){ + objIdList.push(fnc_checkNull(targetObj[i].ARRIVAL_PLAN_OBJID)); + } + + // 단건 선택 시 기존 마감정보 불러오기 + var loadExisting = (targetObj.length === 1); + + function openDeadlineInfoPopup(existingInfo) { + var taxType = (existingInfo && existingInfo.TAX_TYPE) ? existingInfo.TAX_TYPE : ''; + var taxInvoiceDate = (existingInfo && existingInfo.TAX_INVOICE_DATE) ? existingInfo.TAX_INVOICE_DATE : ''; + var exportDeclNo = (existingInfo && existingInfo.EXPORT_DECL_NO) ? existingInfo.EXPORT_DECL_NO : ''; + var loadingDate = (existingInfo && existingInfo.LOADING_DATE) ? existingInfo.LOADING_DATE : ''; + var foreignType = (existingInfo && existingInfo.FOREIGN_TYPE) ? existingInfo.FOREIGN_TYPE : ''; + var duty = (existingInfo && existingInfo.DUTY) ? existingInfo.DUTY : ''; + var importVat = (existingInfo && existingInfo.IMPORT_VAT) ? existingInfo.IMPORT_VAT : ''; + var exchangeRate = (existingInfo && existingInfo.EXCHANGE_RATE) ? existingInfo.EXCHANGE_RATE : ''; + + // hidden select에서 과세구분 옵션 HTML 가져오기 + var taxTypeOptionsHtml = $('#hiddenTaxTypeList').html(); + + // hidden select에서 국내/해외 옵션 HTML 가져오기 + var foreignTypeOptionsHtml = $('#hiddenForeignTypeList').html(); + + Swal.fire({ + title: '마감정보입력', + width: '600px', + html: + '
' + + '' + + '' + + ' ' + + ' ' + + '' + + '' + + ' ' + + ' ' + + '' + + + '' + + ' ' + + ' ' + + '' + + '' + + ' ' + + ' ' + + '' + + '' + + ' ' + + ' ' + + '' + + '' + + ' ' + + ' ' + + '' + + '' + + ' ' + + ' ' + + '' + + '' + + ' ' + + ' ' + + '' + + '
국내/해외' + + ' ' + + '
환율
과세구분' + + ' ' + + '
세금계산서발행일
수출신고필증신고번호
선적일자
관세
수입부가세
' + + '
선택된 ' + 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); + if(foreignType) $('#swal_foreignType').val(foreignType); + if(duty) $('#swal_duty').val(duty); + if(importVat) $('#swal_importVat').val(importVat); + if(exchangeRate) $('#swal_exchangeRate').val(exchangeRate); + }, + preConfirm: function() { + return { + taxType: $('#swal_taxType').val(), + taxInvoiceDate: $('#swal_taxInvoiceDate').val(), + exportDeclNo: $('#swal_exportDeclNo').val(), + loadingDate: $('#swal_loadingDate').val(), + foreignType: $('#swal_foreignType').val(), + duty: $('#swal_duty').val(), + importVat: $('#swal_importVat').val(), + exchangeRate: $('#swal_exchangeRate').val() + }; + } + }).then(function(result) { + if (result.isConfirmed) { + var formData = result.value; + + $.ajax({ + url: "/purchaseOrder/saveArrivalPlanDeadlineInfo.do", + type: "POST", + data: { + "objIdList": objIdList.join(','), + "taxType": formData.taxType, + "taxInvoiceDate": formData.taxInvoiceDate, + "exportDeclNo": formData.exportDeclNo, + "loadingDate": formData.loadingDate, + "foreignType": formData.foreignType, + "duty": formData.duty, + "importVat": formData.importVat, + "exchangeRate": formData.exchangeRate + }, + 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), + FOREIGN_TYPE: fnc_checkNull(row.FOREIGN_TYPE), + DUTY: fnc_checkNull(row.DUTY), + EXCHANGE_RATE: fnc_checkNull(row.EXCHANGE_RATE), + IMPORT_VAT: fnc_checkNull(row.IMPORT_VAT) + }); + } else { + openDeadlineInfoPopup(null); + } + }); fn_search(); }); @@ -279,7 +460,17 @@ function fn_purchaseClose(){
- + +
@@ -288,6 +479,7 @@ function fn_purchaseClose(){
+
diff --git a/dev_git_only.sh b/dev_git_only.sh index 3fbee94..6d6cd20 100755 --- a/dev_git_only.sh +++ b/dev_git_only.sh @@ -53,7 +53,7 @@ echo "DEBUG: Effective classpath for javac: $EFFECTIVE_CLASSPATH" # src 폴더 내의 모든 .java 파일 컴파일 echo "Compiling Java files for development..." -find src -name "*.java" -print0 | xargs -0 javac -encoding UTF-8 -source 1.8 -target 1.8 -d WebContent/WEB-INF/classes -cp "$EFFECTIVE_CLASSPATH" +find src -name "*.java" -print0 | xargs -0 javac -encoding UTF-8 -source 1.7 -target 1.7 -d WebContent/WEB-INF/classes -cp "$EFFECTIVE_CLASSPATH" if [ $? -ne 0 ]; then echo "Java compilation failed. Exiting script." exit 1 diff --git a/src/com/pms/controller/PurchaseOrderController.java b/src/com/pms/controller/PurchaseOrderController.java index 06bc842..89e3715 100644 --- a/src/com/pms/controller/PurchaseOrderController.java +++ b/src/com/pms/controller/PurchaseOrderController.java @@ -1633,6 +1633,16 @@ public class PurchaseOrderController { return paramMap; } + /** + * 입고건별 마감정보 저장 + */ + @ResponseBody + @RequestMapping("/purchaseOrder/saveArrivalPlanDeadlineInfo.do") + public Map saveArrivalPlanDeadlineInfo(HttpSession session, HttpServletRequest request, @RequestParam Map paramMap) { + return purchaseOrderService.saveArrivalPlanDeadlineInfo(request, paramMap); + } + + /** * 매입마감 관리 화면 (입고일별 입고관리) */ diff --git a/src/com/pms/mapper/purchaseOrder.xml b/src/com/pms/mapper/purchaseOrder.xml index 4c1738c..76674cd 100644 --- a/src/com/pms/mapper/purchaseOrder.xml +++ b/src/com/pms/mapper/purchaseOrder.xml @@ -1168,6 +1168,21 @@ WHERE OBJID = #{OBJID} + + + /* purchaseOrder.saveArrivalPlanDeadlineInfo - 입고건별 마감정보 저장 */ + UPDATE arrival_plan SET + tax_type = #{taxType} + , tax_invoice_date = #{taxInvoiceDate} + , export_decl_no = #{exportDeclNo} + , loading_date = #{loadingDate} + , foreign_type = #{foreignType} + , duty = CAST(#{duty} AS NUMERIC) + , exchange_rate = CAST(#{exchangeRate} AS NUMERIC) + , import_vat = CAST(#{importVat} AS NUMERIC) + 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')) ||')' @@ -6608,6 +6623,16 @@ FROM( ,AP.PURCHASE_CLOSE_DATE + + ,COALESCE(AP.tax_type, '') AS TAX_TYPE + ,COALESCE(AP.tax_invoice_date, '') AS TAX_INVOICE_DATE + ,COALESCE(AP.export_decl_no, '') AS EXPORT_DECL_NO + ,COALESCE(AP.loading_date, '') AS LOADING_DATE + ,COALESCE(AP.foreign_type, '') AS FOREIGN_TYPE + ,COALESCE(AP.duty, 0) AS DUTY + ,COALESCE(AP.exchange_rate, 0) AS EXCHANGE_RATE + ,COALESCE(AP.import_vat, 0) AS IMPORT_VAT + FROM ARRIVAL_PLAN AP INNER JOIN PURCHASE_ORDER_MASTER POM ON POM.OBJID = AP.PARENT_OBJID INNER JOIN PURCHASE_ORDER_PART POP ON POP.PURCHASE_ORDER_MASTER_OBJID = POM.OBJID::VARCHAR diff --git a/src/com/pms/service/PurchaseOrderService.java b/src/com/pms/service/PurchaseOrderService.java index 394db2e..78bcc69 100644 --- a/src/com/pms/service/PurchaseOrderService.java +++ b/src/com/pms/service/PurchaseOrderService.java @@ -3443,4 +3443,62 @@ public class PurchaseOrderService { return resultMap; } + + /** + * 입고건별 마감정보 저장 + * @param request + * @param paramMap - objIdList, taxType, taxInvoiceDate, exportDeclNo, loadingDate, foreignType, duty, exchangeRate, importVat + * @return 처리 결과 + */ + public Map saveArrivalPlanDeadlineInfo(HttpServletRequest request, Map paramMap) { + Map resultMap = new HashMap(); + SqlSession sqlSession = null; + 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")); + String foreignType = CommonUtils.checkNull(paramMap.get("foreignType")); + String duty = CommonUtils.checkNull(paramMap.get("duty")); + String exchangeRate = CommonUtils.checkNull(paramMap.get("exchangeRate")); + String importVat = CommonUtils.checkNull(paramMap.get("importVat")); + + if (objIdListStr == null || objIdListStr.isEmpty()) { + resultMap.put("result", false); + resultMap.put("msg", "선택된 항목이 없습니다."); + return resultMap; + } + + String[] targetObjIdList = objIdListStr.split(","); + sqlSession = SqlMapConfig.getInstance().getSqlSession(false); + + for (int i = 0; i < targetObjIdList.length; i++) { + HashMap sqlParamMap = new HashMap(); + sqlParamMap.put("OBJID", CommonUtils.checkNull(targetObjIdList[i]).trim()); + sqlParamMap.put("taxType", taxType); + sqlParamMap.put("taxInvoiceDate", taxInvoiceDate); + sqlParamMap.put("exportDeclNo", exportDeclNo); + sqlParamMap.put("loadingDate", loadingDate); + sqlParamMap.put("foreignType", foreignType); + sqlParamMap.put("duty", duty); + sqlParamMap.put("exchangeRate", exchangeRate); + sqlParamMap.put("importVat", importVat); + + sqlSession.update("purchaseOrder.saveArrivalPlanDeadlineInfo", sqlParamMap); + } + sqlSession.commit(); + resultMap.put("result", true); + resultMap.put("msg", targetObjIdList.length + "건의 마감정보가 저장되었습니다."); + } 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; + } + }