diff --git a/WebContent/WEB-INF/view/contractMgmt/orderMgmtList.jsp b/WebContent/WEB-INF/view/contractMgmt/orderMgmtList.jsp
index 81c819d..d0c7249 100644
--- a/WebContent/WEB-INF/view/contractMgmt/orderMgmtList.jsp
+++ b/WebContent/WEB-INF/view/contractMgmt/orderMgmtList.jsp
@@ -24,12 +24,6 @@ $(document).ready(function(){
//날짜
_fnc_datepick();
- // 그리드 높이 동적 계산 (Total 합계 영역 + 여유 공간 80px)
- fnc_calculateContentHeight("gridDiv", 80);
- $(window).resize(function() {
- fnc_calculateContentHeight("gridDiv", 80);
- });
-
$('.select2').select2();
// 품번/품명 Select2 AJAX 초기화 (common.js의 새 함수 사용)
@@ -242,8 +236,15 @@ function fn_search(){
_tabulGrid.off("renderComplete");
_tabulGrid.on("renderComplete", function(){
fn_calculateTotalFromGrid();
+ // 그리드 렌더링 완료 후 높이 계산
+ fnc_calculateContentHeight("gridDiv", 20);
});
}
+
+ // 윈도우 리사이즈 이벤트 (한 번만 등록)
+ $(window).off("resize.gridHeight").on("resize.gridHeight", function() {
+ fnc_calculateContentHeight("gridDiv", 20);
+ });
}
// 그리드에 표시된 데이터의 원화총액 합계 계산
diff --git a/WebContent/WEB-INF/view/contractMgmt/orderRegistFormPopup.jsp b/WebContent/WEB-INF/view/contractMgmt/orderRegistFormPopup.jsp
index 759b97d..ab33f75 100644
--- a/WebContent/WEB-INF/view/contractMgmt/orderRegistFormPopup.jsp
+++ b/WebContent/WEB-INF/view/contractMgmt/orderRegistFormPopup.jsp
@@ -219,8 +219,13 @@
html += '
';
html += '
';
html += '
';
- // ORDER_QUANTITY가 없으면 QUANTITY 사용 (견적서에서 가져온 값)
- html += '
';
+ // Machine이고 프로젝트가 있으면 수량 수정 불가
+ var isQuantityReadonly = ("${isMachine}" === "Y" && "${hasProject}" === "Y");
+ if(isQuantityReadonly) {
+ html += '
';
+ } else {
+ html += '
';
+ }
// ORDER_UNIT_PRICE 수정 가능
html += '
';
// ORDER_SUPPLY_PRICE 자동 계산
diff --git a/WebContent/WEB-INF/view/project/projectMgmtWbsList3.jsp b/WebContent/WEB-INF/view/project/projectMgmtWbsList3.jsp
index 0737718..d4fba67 100644
--- a/WebContent/WEB-INF/view/project/projectMgmtWbsList3.jsp
+++ b/WebContent/WEB-INF/view/project/projectMgmtWbsList3.jsp
@@ -122,6 +122,14 @@ var columns = [
]
},
+ {
+ title:'장비', headerHozAlign:'center',
+ columns:[
+ {headerHozAlign : 'center', hozAlign : 'center', width : '90', title : '조립', field : 'ASSEMBLY', sorter:"string"},
+ {headerHozAlign : 'center', hozAlign : 'center', width : '90', title : '검증', field : 'VERIFICATION', sorter:"string"}
+ ]
+ },
+
{
title:'출하', headerHozAlign:'center',
columns:[
diff --git a/src/com/pms/mapper/partMng.xml b/src/com/pms/mapper/partMng.xml
index ef4ce06..348ce6e 100644
--- a/src/com/pms/mapper/partMng.xml
+++ b/src/com/pms/mapper/partMng.xml
@@ -5990,6 +5990,7 @@ SELECT T1.LEV, T1.BOM_REPORT_OBJID, T1.ROOT_PART_NO, T1.PATH, T1.LEAF, T2.*
LEFT JOIN PART_BOM_REPORT PBR ON BPQ.BOM_REPORT_OBJID = PBR.OBJID
WHERE COALESCE(BPQ.PARENT_OBJID, '') = ''
AND COALESCE(BPQ.STATUS, '') NOT IN ('deleting', 'deleted')
+ AND PBR.STATUS = 'Y'
AND PBR.CUSTOMER_OBJID = #{customer_cd}
@@ -6113,6 +6114,7 @@ SELECT T1.LEV, T1.BOM_REPORT_OBJID, T1.ROOT_PART_NO, T1.PATH, T1.LEAF, T2.*
LEFT JOIN PART_MNG PM ON BT.LAST_PART_OBJID = PM.OBJID
LEFT JOIN PART_BOM_REPORT PBR ON BT.BOM_REPORT_OBJID = PBR.OBJID
WHERE (PM.OBJID IS NULL OR PM.STATUS IN ('create', 'release'))
+ AND PBR.STATUS = 'Y'
AND EXISTS (
@@ -6401,9 +6403,11 @@ SELECT T1.LEV, T1.BOM_REPORT_OBJID, T1.ROOT_PART_NO, T1.PATH, T1.LEAF, T2.*
ARRAY[BPQ.PART_NO::TEXT] AS PATH
FROM BOM_PART_QTY BPQ
INNER JOIN PART_MNG PM ON COALESCE(BPQ.LAST_PART_OBJID, BPQ.PART_NO) = PM.OBJID
+ INNER JOIN PART_BOM_REPORT PBR ON BPQ.BOM_REPORT_OBJID = PBR.OBJID
WHERE 1=1
AND COALESCE(BPQ.STATUS, '') NOT IN ('deleting', 'deleted')
AND PM.STATUS IN ('create', 'release')
+ AND PBR.STATUS = 'Y'
AND UPPER(PM.PART_NO) LIKE UPPER('%${search_partNo}%')
@@ -6447,14 +6451,9 @@ SELECT T1.LEV, T1.BOM_REPORT_OBJID, T1.ROOT_PART_NO, T1.PATH, T1.LEAF, T2.*
BT.ITEM_QTY,
BT.QTY AS P_QTY,
BT.SEQ,
- -- LEAF 계산 (역전개: 하위 항목이 있는지 체크 - 정전개와 동일)
- (
- SELECT CASE WHEN COUNT(*) > 0 THEN 0 ELSE 1 END
- FROM BOM_PART_QTY BPQ2
- WHERE BPQ2.PARENT_OBJID = BT.CHILD_OBJID
- AND BPQ2.BOM_REPORT_OBJID = BT.BOM_REPORT_OBJID
- AND COALESCE(BPQ2.STATUS, '') NOT IN ('deleting', 'deleted')
- ) AS LEAF,
+ -- LEAF 계산 (역전개: 검색 시작점만 LEAF = 1, 나머지는 0)
+ -- 검색 시작점은 LEV = 1 (역순 표시하면 MAX_LEVEL)
+ CASE WHEN BT.LEV = 1 THEN 1 ELSE 0 END AS LEAF,
-- PART 정보
PM.OBJID AS PART_OBJID,
PM.PART_NO,
@@ -6494,6 +6493,7 @@ SELECT T1.LEV, T1.BOM_REPORT_OBJID, T1.ROOT_PART_NO, T1.PATH, T1.LEAF, T2.*
LEFT JOIN PART_BOM_REPORT PBR ON BT.BOM_REPORT_OBJID = PBR.OBJID
WHERE 1=1
AND (PM.OBJID IS NULL OR PM.STATUS IN ('create', 'release'))
+ AND PBR.STATUS = 'Y'
ORDER BY
PBR.REGDATE DESC,
diff --git a/src/com/pms/mapper/project.xml b/src/com/pms/mapper/project.xml
index 78f3f2f..5e3d0a9 100644
--- a/src/com/pms/mapper/project.xml
+++ b/src/com/pms/mapper/project.xml
@@ -7464,39 +7464,57 @@ SELECT
,(
- SELECT
- -- 주문유형 코드 (CATEGORY_CD를 영문 약어로 매핑)
- CASE CODE_NAME(CATEGORY_CD)
- WHEN '오버홀' THEN 'O'
- WHEN '개조' THEN 'M'
- WHEN '개발' THEN 'D'
- WHEN '견적' THEN 'Q'
- WHEN '수리' THEN 'R'
- WHEN '판매' THEN 'S'
- ELSE 'T'
- END || '-' ||
- -- 제품구분 코드 (PRODUCT의 CODE_NAME에서 슬래시 제거)
- REPLACE(CODE_NAME(PRODUCT), '/', '') || '-' ||
+ SELECT
+ -- 주문유형 코드 (CATEGORY_CD를 영문 약어로 매핑)
+ CASE CODE_NAME(CATEGORY_CD)
+ WHEN '오버홀' THEN 'O'
+ WHEN '개조' THEN 'M'
+ WHEN '개발' THEN 'D'
+ WHEN '견적' THEN 'Q'
+ WHEN '수리' THEN 'R'
+ WHEN '판매' THEN 'S'
+ ELSE 'T'
+ END || '-' ||
+ -- 제품구분 코드 (PRODUCT를 약어로 매핑)
+ CASE CODE_NAME(PRODUCT)
+ WHEN 'Machine' THEN 'MC'
+ WHEN 'A/S' THEN 'AS'
+ WHEN 'D/S' THEN 'DS'
+ WHEN 'B/S' THEN 'BS'
+ WHEN 'C/T' THEN 'CT'
+ WHEN 'A/C' THEN 'AC'
+ WHEN 'W/M' THEN 'WM'
+ ELSE REPLACE(CODE_NAME(PRODUCT), '/', '')
+ END || '-' ||
-- 날짜 (YYMMDD)
TO_CHAR(CURRENT_DATE, 'YYMMDD') || '-' ||
-- 순번 (001, 002, ...)
LPAD(
COALESCE(
(
- SELECT MAX(SUBSTRING(PROJECT_NO FROM '\d{3}$')::INTEGER) + 1
- FROM PROJECT_MGMT
- WHERE PROJECT_NO LIKE
- CASE CODE_NAME(CATEGORY_CD)
- WHEN '오버홀' THEN 'O'
- WHEN '개조' THEN 'M'
- WHEN '개발' THEN 'D'
- WHEN '견적' THEN 'Q'
- WHEN '수리' THEN 'R'
- WHEN '판매' THEN 'S'
- ELSE 'T'
- END || '-' ||
- REPLACE(CODE_NAME(PRODUCT), '/', '') || '-' ||
- TO_CHAR(CURRENT_DATE, 'YYMMDD') || '-%'
+ SELECT MAX(SUBSTRING(PROJECT_NO FROM '\d{3}$')::INTEGER) + 1
+ FROM PROJECT_MGMT
+ WHERE PROJECT_NO LIKE
+ CASE CODE_NAME(CATEGORY_CD)
+ WHEN '오버홀' THEN 'O'
+ WHEN '개조' THEN 'M'
+ WHEN '개발' THEN 'D'
+ WHEN '견적' THEN 'Q'
+ WHEN '수리' THEN 'R'
+ WHEN '판매' THEN 'S'
+ ELSE 'T'
+ END || '-' ||
+ CASE CODE_NAME(PRODUCT)
+ WHEN 'Machine' THEN 'MC'
+ WHEN 'A/S' THEN 'AS'
+ WHEN 'D/S' THEN 'DS'
+ WHEN 'B/S' THEN 'BS'
+ WHEN 'C/T' THEN 'CT'
+ WHEN 'A/C' THEN 'AC'
+ WHEN 'W/M' THEN 'WM'
+ ELSE REPLACE(CODE_NAME(PRODUCT), '/', '')
+ END || '-' ||
+ TO_CHAR(CURRENT_DATE, 'YYMMDD') || '-%'
),
1
)::TEXT,
@@ -7530,14 +7548,14 @@ SELECT
,EST_USER_ID
,EST_COMP_DATE
,EST_RESULT_CD
- ,AREA_CD
- ,MECHANICAL_TYPE
- ,#{overhaul_order}
- ,#{is_temp}
- ,#{part_objid}
- ,#{part_no}
- ,#{part_name}
- ,#{quantity}
+ ,AREA_CD
+ ,MECHANICAL_TYPE
+ ,#{overhaul_order}
+ ,#{is_temp}
+ ,#{part_objid}
+ ,#{part_no}
+ ,#{part_name}
+ ,#{quantity}
FROM CONTRACT_MGMT
WHERE OBJID=#{objId}
)
diff --git a/src/com/pms/salesmgmt/controller/ContractMgmtController.java b/src/com/pms/salesmgmt/controller/ContractMgmtController.java
index 3cd50b7..c6c2a5c 100644
--- a/src/com/pms/salesmgmt/controller/ContractMgmtController.java
+++ b/src/com/pms/salesmgmt/controller/ContractMgmtController.java
@@ -2481,6 +2481,12 @@ public class ContractMgmtController {
String apprStatus = CommonUtils.nullToEmpty((String)info.get("APPR_STATUS"));
boolean useEstimateTemplate = "결재완료".equals(apprStatus);
+ // Machine 여부 및 프로젝트 존재 여부 확인
+ String productCd = CommonUtils.nullToEmpty((String)info.get("PRODUCT"));
+ boolean isMachine = "0000928".equals(productCd);
+ Map projectInfo = contractMgmtService.checkProjectExists(paramMap);
+ boolean hasProject = (projectInfo != null);
+
request.setAttribute("code_map", code_map);
request.setAttribute("info", info);
request.setAttribute("contractInfo", contractInfo);
@@ -2488,6 +2494,8 @@ public class ContractMgmtController {
request.setAttribute("objId", objId);
request.setAttribute("actionType", actionType);
request.setAttribute("useEstimateTemplate", useEstimateTemplate ? "Y" : "N");
+ request.setAttribute("isMachine", isMachine ? "Y" : "N");
+ request.setAttribute("hasProject", hasProject ? "Y" : "N");
} catch(Exception e) {
e.printStackTrace();
diff --git a/src/com/pms/salesmgmt/mapper/contractMgmt.xml b/src/com/pms/salesmgmt/mapper/contractMgmt.xml
index b453411..f3b8400 100644
--- a/src/com/pms/salesmgmt/mapper/contractMgmt.xml
+++ b/src/com/pms/salesmgmt/mapper/contractMgmt.xml
@@ -535,7 +535,7 @@
-- 수주수량 (CONTRACT_MGMT의 QUANTITY 또는 CONTRACT_ITEM 합계)
,COALESCE(
NULLIF(T.QUANTITY, '')::NUMERIC,
- (SELECT COALESCE(SUM(CAST(QUANTITY AS NUMERIC)), 0) FROM CONTRACT_ITEM WHERE CONTRACT_OBJID = T.OBJID AND STATUS = 'ACTIVE')
+ (SELECT COALESCE(SUM(CAST(ORDER_QUANTITY AS NUMERIC)), 0) FROM CONTRACT_ITEM WHERE CONTRACT_OBJID = T.OBJID AND STATUS = 'ACTIVE')
) AS ORDER_QUANTITY
,CASE
WHEN T.ORDER_TOTAL_AMOUNT IS NOT NULL AND T.ORDER_TOTAL_AMOUNT != ''
@@ -4758,6 +4758,16 @@ WHERE
WHERE OBJID = #{objId}
+
+
+