diff --git a/WebContent/WEB-INF/view/contractMgmt/estimateList_new.jsp b/WebContent/WEB-INF/view/contractMgmt/estimateList_new.jsp
index 1dba40b..ef1a202 100644
--- a/WebContent/WEB-INF/view/contractMgmt/estimateList_new.jsp
+++ b/WebContent/WEB-INF/view/contractMgmt/estimateList_new.jsp
@@ -394,9 +394,8 @@ var columns = [
else if(currencyName.includes('유로') || currencyName === 'EUR') currencySymbol = '€';
else if(currencyName.includes('엔') || currencyName === 'JPY') currencySymbol = '¥';
else if(currencyName.includes('위안') || currencyName === 'CNY') currencySymbol = '¥';
- // 통화 기호 제거 후 콤마 추가
- var numericValue = String(value).replace(/[^0-9.]/g, '');
- return currencySymbol + addComma(numericValue);
+ var numericValue = String(value).replace(/[^0-9.\-]/g, '');
+ return currencySymbol + Number(numericValue).toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
}
},
// 10. 원화환산공급가액
@@ -404,9 +403,8 @@ var columns = [
formatter: function(cell, formatterParams, onRendered){
var value = fnc_checkNull(cell.getValue());
if(value === '' || value === '0') return '';
- // 통화 기호 제거 후 콤마 추가
- var numericValue = String(value).replace(/[^0-9.]/g, '');
- return '₩' + addComma(numericValue);
+ var numericValue = String(value).replace(/[^0-9.\-]/g, '');
+ return '₩' + Number(numericValue).toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
}
},
// 11. 견적현황
diff --git a/WebContent/WEB-INF/view/purchaseOrder/deliveryMngAcceptancePartList.jsp b/WebContent/WEB-INF/view/purchaseOrder/deliveryMngAcceptancePartList.jsp
index 3542401..1234f82 100644
--- a/WebContent/WEB-INF/view/purchaseOrder/deliveryMngAcceptancePartList.jsp
+++ b/WebContent/WEB-INF/view/purchaseOrder/deliveryMngAcceptancePartList.jsp
@@ -50,6 +50,29 @@ $(document).ready(function(){
// 품번/품명 Select2 AJAX 초기화
initPartSelect2Ajax("#SEARCH_PART_NO", "#SEARCH_PART_NAME", "#SEARCH_PART_OBJID");
+ // 부품품번 Select2 AJAX 초기화 (단독)
+ $("#SEARCH_COMPONENT_PART_NO").select2({
+ placeholder: "부품품번 검색...",
+ allowClear: true,
+ width: '100%',
+ minimumInputLength: 1,
+ language: { inputTooShort: function(){ return "1글자 이상 입력하세요"; }, searching: function(){ return "검색 중..."; }, noResults: function(){ return "검색 결과가 없습니다"; } },
+ ajax: {
+ url: '/contractMgmt/searchPartList.do',
+ dataType: 'json', type: 'POST',
+ contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
+ delay: 250,
+ data: function(params){ return { searchTerm: params.term, searchType: 'partNo' }; },
+ processResults: function(data){
+ return { results: $.map(data, function(item){
+ var partNo = item.PART_NO || item.part_no || '';
+ return { id: partNo, text: partNo };
+ })};
+ },
+ cache: true
+ }
+ });
+
$("input").keyup(function(e){
if(e.keyCode == 13){
$("#page").val("1");
@@ -407,6 +430,14 @@ function fn_purchaseClose(){
+
- |
-
+ |
+
|
-
-
+ |
+
diff --git a/WebContent/WEB-INF/view/purchaseOrder/purchaseOrderFormPopup_outsourcing.jsp b/WebContent/WEB-INF/view/purchaseOrder/purchaseOrderFormPopup_outsourcing.jsp
index 1b5e71d..4caf998 100644
--- a/WebContent/WEB-INF/view/purchaseOrder/purchaseOrderFormPopup_outsourcing.jsp
+++ b/WebContent/WEB-INF/view/purchaseOrder/purchaseOrderFormPopup_outsourcing.jsp
@@ -222,15 +222,25 @@ $(document).ready(function(){
,dataEvents: [{type:"change", fn:function(e){ gridFn.calcRowAll(e); }}]
}
}
- ,{name:"UNIT" , width:40, align:"center", sortable:false, editable:<%= isModify %>
+ ,{name:"UNIT" , width:50, align:"center", sortable:false, editable:<%= isModify %>
,edittype:"select", formatter:"select"
,editoptions:{ value: unit_cd }
}
,{name:"PARTNER_PRICE" , width:80, align:"right", sortable:false, editable:<%= isModify %>
,formatter:"number", formatoptions:{thousandsSeparator:",", decimalPlaces:2}
,editoptions:{
- dataInit: function(e){ e.style.textAlign = "right"; }
- ,dataEvents: [{type:"change", fn:function(e){ gridFn.calcRowAll(e); }}]
+ dataInit: function(e){
+ e.style.textAlign = "right";
+ var val = parseFloat($(e).val().replace(/,/g, ''));
+ if(!isNaN(val)) $(e).val(numberWithCommasDecimal(val));
+ }
+ ,dataEvents: [
+ {type:"change", fn:function(e){ gridFn.calcRowAll(e); }}
+ ,{type:"blur", fn:function(e){
+ var val = parseFloat($(e.target).val().replace(/,/g, ''));
+ if(!isNaN(val)) $(e.target).val(numberWithCommasDecimal(val));
+ }}
+ ]
}
}
,{name:"SUPPLY_UNIT_PRICE" , width:90, align:"right", sortable:false, editable:false
@@ -258,7 +268,7 @@ $(document).ready(function(){
// 행번호 자동 부여
var ids = $(this).jqGrid('getDataIDs');
for(var i = 0; i < ids.length; i++){
- $(this).jqGrid('setCell', ids[i], 'ROW_NUM', i+2); // 2부터 시작 (PDF 양식 참고)
+ $(this).jqGrid('setCell', ids[i], 'ROW_NUM', i+1);
}
setTimeout(function(){ gridFn.calcAllRows(); }, 100);
@@ -268,6 +278,12 @@ $(document).ready(function(){
gridFn.opennEdit();
gridFn.calcAllRows();
+ // 창 크기 변경 시 그리드 리사이즈
+ $(window).on('resize', function(){
+ var newWidth = $("#grid1").closest(".ui-jqgrid").parent().width();
+ $("#grid1").jqGrid('setGridWidth', newWidth, true);
+ });
+
<% if(isModify){ %>
// 수정 가능 상태
$("#PARTNER_OBJID").prop("disabled","");
@@ -316,7 +332,7 @@ function fn_addRow(rowData){
var newId = grid.getGridParam("reccount")+1;
var addData = {
"PART_OBJID" : rowData.map.PART_OBJID
- ,"ROW_NUM" : newId + 1
+ ,"ROW_NUM" : newId
,"PURCHASE_ORDER_NO" : "${info.PURCHASE_ORDER_NO}"
,"PARTNER_NAME" : $("#PARTNER_OBJID option:selected").text()
,"PRODUCT_NAME" : rowData.map.PART_NAME + " / " + rowData.map.SPEC
@@ -393,7 +409,7 @@ var gridFn = {
// 행번호 재정렬
var ids = grid.jqGrid('getDataIDs');
for(var i = 0; i < ids.length; i++){
- grid.jqGrid('setCell', ids[i], 'ROW_NUM', i+2);
+ grid.jqGrid('setCell', ids[i], 'ROW_NUM', i+1);
}
gridFn.footerSummary();
}
@@ -445,7 +461,7 @@ var gridFn = {
}
});
- $("#TOTAL_SUPPLY_PRICE").val(numberWithCommas(totalSupplyPrice));
+ $("#TOTAL_SUPPLY_PRICE").val(numberWithCommasDecimal(totalSupplyPrice));
$("#TOTAL_AMOUNT_DISPLAY").text(numberWithCommasDecimal(totalSupplyPrice) + " 원");
}
}
diff --git a/src/com/pms/controller/PurchaseOrderController.java b/src/com/pms/controller/PurchaseOrderController.java
index 4a164e7..b8c2f6e 100644
--- a/src/com/pms/controller/PurchaseOrderController.java
+++ b/src/com/pms/controller/PurchaseOrderController.java
@@ -1354,7 +1354,7 @@ public class PurchaseOrderController {
}
/**
- * 매입마감 처리
+ * 매입마감 처리 (발주서 단위)
* PURCHASE_ORDER_MASTER의 PURCHASE_CLOSE_DATE를 현재일자로 업데이트
*/
@ResponseBody
@@ -1363,6 +1363,17 @@ public class PurchaseOrderController {
String objIds = (String) paramMap.get("objIds");
return purchaseOrderService.updatePurchaseCloseDate(objIds);
}
+
+ /**
+ * 매입마감 처리 (입고건 단위)
+ * ARRIVAL_PLAN의 PURCHASE_CLOSE_DATE를 현재일자로 업데이트
+ */
+ @ResponseBody
+ @RequestMapping("/purchaseOrder/purchaseCloseByArrival.do")
+ public Map purchaseCloseByArrival(HttpSession session, HttpServletRequest request, @RequestParam Map paramMap){
+ String objIds = (String) paramMap.get("objIds");
+ return purchaseOrderService.updateArrivalPlanCloseDate(objIds);
+ }
/**
* 품목별 입고 관리 화면
@@ -1410,7 +1421,37 @@ public class PurchaseOrderController {
commonService.selectListPagingNew("purchaseOrder.deliveryMngPartList", request, paramMap);
return paramMap;
}
-
+
+ /**
+ * 매입마감 관리 화면 (입고일별 입고관리)
+ */
+ @RequestMapping("/purchaseOrder/purchaseCloseList.do")
+ public String purchaseCloseList(HttpServletRequest request, @RequestParam Map paramMap){
+ Map code_map = new HashMap();
+
+ try{
+ code_map.put("customer_cd", commonService.bizMakeOptionList("", (String)paramMap.get("customer_cd"), "common.getsupplyselect"));
+ code_map.put("project_no", commonService.bizMakeOptionList("", (String)paramMap.get("project_no"), "common.getProjectNameList"));
+ code_map.put("partner_objid", commonService.bizMakeOptionList("", (String)paramMap.get("partner_objid"), "common.getAllSupplySelect"));
+ code_map.put("sales_mng_user_id", commonService.bizMakeOptionList("", (String)paramMap.get("sales_mng_user_id"), "common.getUserselect"));
+ }catch(Exception e){
+ e.printStackTrace();
+ }
+
+ request.setAttribute("code_map", code_map);
+ return "/purchaseOrder/purchaseCloseList";
+ }
+
+ /**
+ * 매입마감 관리 그리드 조회 (입고일별 입고관리)
+ */
+ @ResponseBody
+ @RequestMapping("/purchaseOrder/purchaseCloseGridList.do")
+ public Map purchaseCloseGridList(HttpSession session, HttpServletRequest request, @RequestParam Map paramMap){
+ commonService.selectListPagingNew("purchaseOrder.purchaseCloseList", request, paramMap);
+ return paramMap;
+ }
+
/**
* 입고 관리
*/
diff --git a/src/com/pms/mapper/partMng.xml b/src/com/pms/mapper/partMng.xml
index 3bf462b..c389df4 100644
--- a/src/com/pms/mapper/partMng.xml
+++ b/src/com/pms/mapper/partMng.xml
@@ -8368,46 +8368,54 @@ SELECT PM.OBJID
\ No newline at end of file
diff --git a/src/com/pms/mapper/purchaseOrder.xml b/src/com/pms/mapper/purchaseOrder.xml
index 5e0d43b..6abceba 100644
--- a/src/com/pms/mapper/purchaseOrder.xml
+++ b/src/com/pms/mapper/purchaseOrder.xml
@@ -887,7 +887,7 @@
PM.PART_NO,
PM.PART_NAME,
PM.SPEC,
- COALESCE(NULLIF(SRP.UNIT, ''), PM.UNIT) AS UNIT,
+ COALESCE(NULLIF(SRP.UNIT, ''), PM.UNIT_DC) AS UNIT,
PM.MAKER,
(SELECT PJ.PART_NAME FROM PROJECT_MGMT PJ WHERE PJ.OBJID::VARCHAR = SRM.PROJECT_NO) AS PROJECT_PRODUCT_NAME,
CASE WHEN COALESCE(SRP.MATERIAL_YN, 'N') = 'Y' AND SRM.MBOM_HEADER_OBJID IS NOT NULL THEN
@@ -1142,12 +1142,19 @@
-->
-
+
UPDATE PURCHASE_ORDER_MASTER
SET PURCHASE_CLOSE_DATE = TO_CHAR(NOW(), 'YYYY-MM-DD')
WHERE OBJID = #{OBJID}
+
+
+
+ UPDATE ARRIVAL_PLAN
+ SET PURCHASE_CLOSE_DATE = TO_CHAR(NOW(), 'YYYY-MM-DD')
+ WHERE OBJID = #{OBJID}
+
UPDATE PURCHASE_ORDER_MASTER SET
@@ -6404,7 +6411,227 @@ FROM(
AND TRIM(UPPER(POP.SPEC)) LIKE '%'||TRIM(UPPER(#{SEARCH_PART_SPEC}))||'%'
+
+ AND TRIM(UPPER(
+ COALESCE(
+ (SELECT
+ CASE WHEN COALESCE(SRP3.MATERIAL_YN, 'N') = 'Y' AND SRM3.MBOM_HEADER_OBJID IS NOT NULL THEN
+ (SELECT MIN(PM3.PART_NO) FROM MBOM_DETAIL MD3
+ JOIN PART_MNG PM3 ON MD3.PART_OBJID::VARCHAR = PM3.OBJID::VARCHAR
+ WHERE MD3.RAW_MATERIAL_PART_NO = POP.PART_NO
+ AND MD3.MBOM_HEADER_OBJID::VARCHAR = SRM3.MBOM_HEADER_OBJID::VARCHAR)
+ ELSE POP.PART_NO
+ END
+ FROM SALES_REQUEST_PART SRP3
+ JOIN SALES_REQUEST_MASTER SRM3 ON SRP3.SALES_REQUEST_MASTER_OBJID = SRM3.OBJID
+ WHERE SRM3.OBJID::VARCHAR = POM.SALES_REQUEST_OBJID
+ AND SRP3.PART_OBJID = POP.PART_OBJID
+ LIMIT 1
+ ),
+ POP.PART_NO
+ )
+ )) LIKE '%'||TRIM(UPPER(#{SEARCH_COMPONENT_PART_NO}))||'%'
+
ORDER BY POM.REGDATE DESC, POP.OBJID
-
+
+
+
+
\ No newline at end of file
diff --git a/src/com/pms/mapper/salesMng.xml b/src/com/pms/mapper/salesMng.xml
index 78605ab..df61bee 100644
--- a/src/com/pms/mapper/salesMng.xml
+++ b/src/com/pms/mapper/salesMng.xml
@@ -5007,10 +5007,10 @@ ORDER BY V.PATH2
PM.PART_NAME,
PM.SPEC,
PM.MATERIAL,
- COALESCE(NULLIF(SRP.UNIT, ''), PM.UNIT) AS UNIT,
+ COALESCE(NULLIF(SRP.UNIT, ''), PM.UNIT_DC) AS UNIT,
COALESCE(
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = NULLIF(SRP.UNIT, '')),
- (SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = PM.UNIT)
+ (SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = PM.UNIT_DC)
) AS UNIT_TITLE,
SRP.QTY,
COALESCE(SRP.UNIT_PRICE, 0) AS UNIT_PRICE,
diff --git a/src/com/pms/salesmgmt/mapper/contractMgmt.xml b/src/com/pms/salesmgmt/mapper/contractMgmt.xml
index 00538c3..ced9410 100644
--- a/src/com/pms/salesmgmt/mapper/contractMgmt.xml
+++ b/src/com/pms/salesmgmt/mapper/contractMgmt.xml
@@ -578,7 +578,14 @@
,(SELECT objid FROM ESTIMATE_TEMPLATE WHERE CONTRACT_OBJID = T.OBJID order by regdate desc limit 1) AS EST_OBJID
-- 최근 차수 견적서 합계 정보
,(SELECT TOTAL_AMOUNT FROM ESTIMATE_TEMPLATE WHERE CONTRACT_OBJID = T.OBJID ORDER BY REGDATE DESC LIMIT 1) AS EST_TOTAL_AMOUNT
- ,(SELECT TOTAL_AMOUNT_KRW FROM ESTIMATE_TEMPLATE WHERE CONTRACT_OBJID = T.OBJID ORDER BY REGDATE DESC LIMIT 1) AS EST_TOTAL_AMOUNT_KRW
+ ,CASE
+ WHEN T.EXCHANGE_RATE IS NOT NULL AND T.EXCHANGE_RATE != '' AND CAST(T.EXCHANGE_RATE AS NUMERIC) != 0
+ THEN ROUND(
+ CAST(COALESCE((SELECT TOTAL_AMOUNT FROM ESTIMATE_TEMPLATE WHERE CONTRACT_OBJID = T.OBJID ORDER BY REGDATE DESC LIMIT 1), '0') AS NUMERIC)
+ * CAST(T.EXCHANGE_RATE AS NUMERIC), 2
+ )
+ ELSE CAST(COALESCE((SELECT TOTAL_AMOUNT_KRW FROM ESTIMATE_TEMPLATE WHERE CONTRACT_OBJID = T.OBJID ORDER BY REGDATE DESC LIMIT 1), '0') AS NUMERIC)
+ END AS EST_TOTAL_AMOUNT_KRW
-- 견적수량 (ESTIMATE_TEMPLATE_ITEM의 수량 합계)
,(SELECT COALESCE(SUM(CAST(QUANTITY AS NUMERIC)), 0) FROM ESTIMATE_TEMPLATE_ITEM WHERE TEMPLATE_OBJID = (SELECT objid FROM ESTIMATE_TEMPLATE WHERE CONTRACT_OBJID = T.OBJID ORDER BY REGDATE DESC LIMIT 1)) AS ESTIMATE_QUANTITY
-- 수주 합계 정보 (CONTRACT_MGMT 테이블에 저장된 값 사용)
diff --git a/src/com/pms/service/BatchService.java b/src/com/pms/service/BatchService.java
index 8c49553..778f20a 100644
--- a/src/com/pms/service/BatchService.java
+++ b/src/com/pms/service/BatchService.java
@@ -1508,9 +1508,9 @@ public class BatchService extends BaseService {
// 회사코드 고정값
String coCd = "1000";
- // DB에서 가져온 ERP 연동 필드
- String unitDc = CommonUtils.checkNull(part.get("unit_dc"));
- String unitmangDc = CommonUtils.checkNull(part.get("unitmang_dc"));
+ // DB에서 가져온 ERP 연동 필드 (code_name으로 변환된 값 사용)
+ String unitDc = CommonUtils.checkNull(part.get("unit_dc_nm"));
+ String unitmangDc = CommonUtils.checkNull(part.get("unitmang_dc_nm"));
String unitchngNbStr = CommonUtils.checkNull(part.get("unitchng_nb"));
int unitchngNb = 0;
try {
@@ -1540,7 +1540,7 @@ public class BatchService extends BaseService {
}
// ERP로 전송
- String response = partErpClient.sendPartToErp(baseUrl, coCd, itemCd, itemNm,itemDc,
+ String response = partErpClient.sendPartToErp(baseUrl, coCd, itemCd, itemNm, itemDc,
acctFg, odrFg, unitDc, unitmangDc, unitchngNb, lotFg, qcFg, reqFg, setitemFg, useYn);
// 응답 확인
@@ -1616,9 +1616,9 @@ public class BatchService extends BaseService {
// 회사코드 고정값
String coCd = "1000";
- // DB에서 가져온 ERP 연동 필드
- String unitDc = CommonUtils.checkNull(part.get("unit_dc"));
- String unitmangDc = CommonUtils.checkNull(part.get("unitmang_dc"));
+ // DB에서 가져온 ERP 연동 필드 (code_name으로 변환된 값 사용)
+ String unitDc = CommonUtils.checkNull(part.get("unit_dc_nm"));
+ String unitmangDc = CommonUtils.checkNull(part.get("unitmang_dc_nm"));
String unitchngNbStr = CommonUtils.checkNull(part.get("unitchng_nb"));
int unitchngNb = 0;
try {
@@ -1804,31 +1804,54 @@ public class BatchService extends BaseService {
return result;
}
- // DB에서 가져온 값
+ // DB에서 가져온 값
String itemCd = CommonUtils.checkNull(part.get("part_no"));
String itemNm = CommonUtils.checkNull(part.get("part_name"));
String acctFg = CommonUtils.checkNull(part.get("acctfg"));
String odrFg = CommonUtils.checkNull(part.get("odrfg"));
String itemDc = CommonUtils.checkNull(part.get("spec"));
-
- // 하드코딩 고정값
- String coCd = "1000"; // 회사코드
- String unitDc = "1"; // 단위
- String unitmangDc = "1"; // 단위관리
- int unitchngNb = 1; // 단위변환
- String lotFg = "0"; // LOT구분
- String qcFg = "0"; // 검사구분
- String reqFg = "0"; // 청구구분
- String setitemFg = "0"; // 세트품목구분
- String useYn = "1"; // 사용여부
-
+
+ String coCd = "1000";
+ // DB에서 가져온 ERP 연동 필드 (code_name으로 변환된 값 사용)
+ String unitDc = CommonUtils.checkNull(part.get("unit_dc_nm"));
+ String unitmangDc = CommonUtils.checkNull(part.get("unitmang_dc_nm"));
+ String unitchngNbStr = CommonUtils.checkNull(part.get("unitchng_nb"));
+ int unitchngNb = 0;
+ try {
+ if (!unitchngNbStr.isEmpty()) {
+ unitchngNb = (int) Double.parseDouble(unitchngNbStr);
+ }
+ } catch (Exception e) {
+ // 변환 실패 시 0 유지
+ }
+ String lotFg = CommonUtils.checkNull(part.get("lot_fg"));
+ String qcFg = CommonUtils.checkNull(part.get("qc_fg"));
+ String reqFg = CommonUtils.checkNull(part.get("req_fg"));
+ String setitemFg = CommonUtils.checkNull(part.get("setitem_fg"));
+ String useYn = CommonUtils.checkNull(part.get("use_yn"));
+
// 필수값 체크
if (itemCd.isEmpty() || itemNm.isEmpty()) {
result.put("success", false);
result.put("message", "품번 또는 품명이 없습니다.");
return result;
}
-
+ if (acctFg.isEmpty() || odrFg.isEmpty()) {
+ result.put("success", false);
+ result.put("message", "계정구분 또는 조달구분이 없습니다.");
+ return result;
+ }
+ if (unitDc.isEmpty() || unitmangDc.isEmpty() || unitchngNb == 0) {
+ result.put("success", false);
+ result.put("message", "재고단위, 관리단위, 환산수량이 없습니다.");
+ return result;
+ }
+ if (lotFg.isEmpty() || qcFg.isEmpty() || reqFg.isEmpty() || setitemFg.isEmpty() || useYn.isEmpty()) {
+ result.put("success", false);
+ result.put("message", "LOT구분, 검사여부, 의뢰여부, SET품여부, 사용여부가 없습니다.");
+ return result;
+ }
+
// ERP로 수정 전송
PartErpUpdateApiClient updateClient = new PartErpUpdateApiClient();
String response = updateClient.updatePartToErp(baseUrl, coCd, itemCd, itemNm, itemDc,
@@ -1887,16 +1910,7 @@ public class BatchService extends BaseService {
int failCount = 0;
StringBuilder errorMessages = new StringBuilder();
- // 하드코딩 고정값
- String coCd = "1000";
- String unitDc = "1";
- String unitmangDc = "1";
- int unitchngNb = 1;
- String lotFg = "0";
- String qcFg = "0";
- String reqFg = "0";
- String setitemFg = "0";
- String useYn = "1";
+ String coCd = "1000";
PartErpUpdateApiClient updateClient = new PartErpUpdateApiClient();
@@ -1910,6 +1924,23 @@ public class BatchService extends BaseService {
String acctFg = CommonUtils.checkNull(part.get("acctfg"));
String odrFg = CommonUtils.checkNull(part.get("odrfg"));
String itemDc = CommonUtils.checkNull(part.get("spec"));
+ // DB에서 가져온 ERP 연동 필드 (code_name으로 변환된 값 사용)
+ String unitDc = CommonUtils.checkNull(part.get("unit_dc_nm"));
+ String unitmangDc = CommonUtils.checkNull(part.get("unitmang_dc_nm"));
+ String unitchngNbStr = CommonUtils.checkNull(part.get("unitchng_nb"));
+ int unitchngNb = 0;
+ try {
+ if (!unitchngNbStr.isEmpty()) {
+ unitchngNb = (int) Double.parseDouble(unitchngNbStr);
+ }
+ } catch (Exception ex) {
+ // 변환 실패 시 0 유지
+ }
+ String lotFg = CommonUtils.checkNull(part.get("lot_fg"));
+ String qcFg = CommonUtils.checkNull(part.get("qc_fg"));
+ String reqFg = CommonUtils.checkNull(part.get("req_fg"));
+ String setitemFg = CommonUtils.checkNull(part.get("setitem_fg"));
+ String useYn = CommonUtils.checkNull(part.get("use_yn"));
// 100건마다 진행 상황 출력
if ((i + 1) % 100 == 0) {
@@ -1917,14 +1948,16 @@ public class BatchService extends BaseService {
}
// 필수값 체크
- if (itemCd.isEmpty() || itemNm.isEmpty()) {
+ if (itemCd.isEmpty() || itemNm.isEmpty() || acctFg.isEmpty() || odrFg.isEmpty() ||
+ unitDc.isEmpty() || unitmangDc.isEmpty() || unitchngNb == 0 ||
+ lotFg.isEmpty() || qcFg.isEmpty() || reqFg.isEmpty() || setitemFg.isEmpty() || useYn.isEmpty()) {
failCount++;
if (failCount <= 5) {
- errorMessages.append(itemCd).append(": 품번 또는 품명이 없습니다.\n");
+ errorMessages.append(itemCd).append(": 필수값이 없습니다.\n");
}
continue;
}
-
+
// ERP로 수정 전송
String response = updateClient.updatePartToErp(baseUrl, coCd, itemCd, itemNm, itemDc,
acctFg, odrFg, unitDc, unitmangDc, unitchngNb, lotFg, qcFg, reqFg, setitemFg, useYn);
diff --git a/src/com/pms/service/PurchaseOrderService.java b/src/com/pms/service/PurchaseOrderService.java
index 5b1d6be..c676741 100644
--- a/src/com/pms/service/PurchaseOrderService.java
+++ b/src/com/pms/service/PurchaseOrderService.java
@@ -3276,6 +3276,36 @@ public class PurchaseOrderService {
return resultMap;
}
+ /**
+ * 매입마감 처리 (입고건 단위)
+ * ARRIVAL_PLAN의 PURCHASE_CLOSE_DATE를 현재일자로 업데이트
+ */
+ public Map updateArrivalPlanCloseDate(String objIds) {
+ Map resultMap = new HashMap();
+ SqlSession sqlSession = SqlMapConfig.getInstance().getSqlSession(false);
+
+ try {
+ if(objIds != null && !objIds.isEmpty()) {
+ String[] objIdArr = objIds.split(",");
+ for(String objId : objIdArr) {
+ Map updateParam = new HashMap();
+ updateParam.put("OBJID", objId.trim());
+ sqlSession.update("purchaseOrder.updateArrivalPlanCloseDate", updateParam);
+ }
+ }
+ sqlSession.commit();
+ resultMap.put("result", "SUCCESS");
+ } catch(Exception e) {
+ sqlSession.rollback();
+ e.printStackTrace();
+ resultMap.put("result", "FAIL");
+ resultMap.put("message", e.getMessage());
+ } finally {
+ sqlSession.close();
+ }
+ return resultMap;
+ }
+
/**
* 발주 취소 전 입고 여부 확인
* @param request
|