diff --git a/WebContent/WEB-INF/classes/com/pms/mapper/admin.xml b/WebContent/WEB-INF/classes/com/pms/mapper/admin.xml
index c31397c..1bf6bd3 100644
--- a/WebContent/WEB-INF/classes/com/pms/mapper/admin.xml
+++ b/WebContent/WEB-INF/classes/com/pms/mapper/admin.xml
@@ -2689,7 +2689,7 @@ INSERT INTO OEM_MNG
VALUES
(
#{objid}::numeric,
- LPAD(nextval('seq_comm_code')::varchar,7,'0'),
+ LPAD((COALESCE((SELECT MAX(CODE_ID::numeric) FROM COMM_CODE WHERE CODE_ID ~ '^[0-9]+$'), 0) + 1)::varchar, 7, '0'),
#{parentCodeId},
#{codeName},
#{id},
diff --git a/WebContent/WEB-INF/classes/com/pms/mapper/part.xml b/WebContent/WEB-INF/classes/com/pms/mapper/part.xml
index 2799c9c..e6bdfea 100644
--- a/WebContent/WEB-INF/classes/com/pms/mapper/part.xml
+++ b/WebContent/WEB-INF/classes/com/pms/mapper/part.xml
@@ -3394,6 +3394,4 @@ ORDER BY PATH,
AND PART_NO = #{OBJID}
) T
-
-
\ No newline at end of file
diff --git a/WebContent/WEB-INF/classes/com/pms/mapper/salesMng.xml b/WebContent/WEB-INF/classes/com/pms/mapper/salesMng.xml
index 3009f6a..3061ba6 100644
--- a/WebContent/WEB-INF/classes/com/pms/mapper/salesMng.xml
+++ b/WebContent/WEB-INF/classes/com/pms/mapper/salesMng.xml
@@ -613,7 +613,7 @@
VALUES
(
#{SALES_REQUEST_MASTER_OBJID },
- (SELECT 'R'||TO_CHAR(NOW(),'YYYYMMDD')||'-'||LPAD((COALESCE(MAX(SUBSTR(REQUEST_MNG_NO,11,13)),'0')::INTEGER+1)::TEXT,3,'0') FROM SALES_REQUEST_MASTER WHERE DOC_TYPE = 'PURCHASE_REQUEST' OR DOC_TYPE IS NULL),
+ (SELECT 'R'||TO_CHAR(NOW(),'YYYYMMDD')||'-'||LPAD((COALESCE(MAX(SUBSTR(REQUEST_MNG_NO,11,13)),'0')::INTEGER+1)::TEXT,3,'0') FROM SALES_REQUEST_MASTER WHERE DOC_TYPE IN ('PURCHASE_REQUEST', 'PURCHASE_REG') OR DOC_TYPE IS NULL),
#{REQUEST_CD },
#{PROJECT_NO },
#{RELEASE },
@@ -633,7 +633,7 @@ VALUES
#{AREA_CD },
#{CUSTOMER_OBJID },
#{PAID_TYPE },
- 'PURCHASE_REQUEST'
+ COALESCE(NULLIF(#{DOC_TYPE}, ''), 'PURCHASE_REQUEST')
) ON CONFLICT (OBJID) DO
UPDATE
SET
@@ -721,7 +721,8 @@ VALUES
COALESCE(NULLIF(SRM.AREA_CD, ''), SM.AREA_CD) AS AREA_CD, -- 국내/해외
COALESCE(NULLIF(SRM.CUSTOMER_OBJID, ''), SM.OBJID::VARCHAR) AS CUSTOMER_OBJID, -- 고객사
COALESCE(NULLIF(SRM.PAID_TYPE, ''), CM.PAID_TYPE) AS PAID_TYPE, -- 유/무상
- CM.CATEGORY_CD AS CATEGORY_CD -- 제품유형 코드 ID (드롭다운 선택용)
+ CM.CATEGORY_CD AS CATEGORY_CD, -- 제품유형 코드 ID (드롭다운 선택용)
+ SRM.DOC_TYPE -- 문서유형 (PURCHASE_REQUEST, PURCHASE_REG, PROPOSAL 등)
-- 품번/품명: 첫 번째 품목 + 외 N건 형태
- )
- VALUES
+ )
+ VALUES
(
#{SALES_REQUEST_PART_OBJID },
#{SALES_BOM_QTY_OBJID },
@@ -788,8 +789,8 @@ VALUES
#{STATUS}
) ON CONFLICT (OBJID) DO
- UPDATE
- SET
+ UPDATE
+ SET
SALES_BOM_QTY_OBJID = #{SALES_BOM_QTY_OBJID },
PART_OBJID = #{PART_OBJID },
SALES_REQUEST_MASTER_OBJID = #{SALES_REQUEST_MASTER_OBJID},
@@ -989,11 +990,24 @@ VALUES
-- 문서유형 (PURCHASE_REQUEST: 구매요청서, PROPOSAL: 품의서)
SRM.DOC_TYPE,
- -- 구매요청서 작성 여부 (SALES_REQUEST_PART에 DOC_TYPE이 PURCHASE_REQUEST인 데이터가 있으면 'Y')
- (SELECT CASE WHEN COUNT(*) > 0 THEN 'Y' ELSE 'N' END
- FROM SALES_REQUEST_PART
- WHERE SALES_REQUEST_MASTER_OBJID = SRM.OBJID
- AND (DOC_TYPE = 'PURCHASE_REQUEST' OR DOC_TYPE IS NULL)) AS HAS_PURCHASE_REQUEST,
+ -- 구매요청서 작성 여부
+ -- M-BOM 기반이면 MBOM_HEADER_OBJID가 있으므로 'Y'
+ -- 수동 작성이면 SALES_REQUEST_PART에 데이터가 있으면 'Y'
+ CASE
+ WHEN SRM.MBOM_HEADER_OBJID IS NOT NULL AND SRM.MBOM_HEADER_OBJID::VARCHAR != '' THEN 'Y'
+ WHEN (SELECT COUNT(*) FROM SALES_REQUEST_PART WHERE SALES_REQUEST_MASTER_OBJID = SRM.OBJID AND (DOC_TYPE = 'PURCHASE_REQUEST' OR DOC_TYPE IS NULL)) > 0 THEN 'Y'
+ ELSE 'N'
+ END AS HAS_PURCHASE_REQUEST,
+
+ -- 견적요청서 존재 여부 (QUOTATION_REQUEST_MASTER에 데이터가 있으면 'Y')
+ COALESCE((SELECT CASE WHEN COUNT(*) > 0 THEN 'Y' ELSE 'N' END
+ FROM QUOTATION_REQUEST_MASTER
+ WHERE SALES_REQUEST_MASTER_OBJID::VARCHAR = SRM.OBJID::VARCHAR), 'N') AS HAS_QUOTATION_REQUEST,
+
+ -- 견적요청서 개수
+ COALESCE((SELECT COUNT(*)
+ FROM QUOTATION_REQUEST_MASTER
+ WHERE SALES_REQUEST_MASTER_OBJID::VARCHAR = SRM.OBJID::VARCHAR), 0) AS QUOTATION_REQUEST_COUNT,
-- M-BOM 관련 컬럼
SRM.MBOM_HEADER_OBJID,
@@ -1117,6 +1131,15 @@ VALUES
(SELECT O.UNIT_NO || '-' || O.TASK_NAME FROM PMS_WBS_TASK AS O WHERE O.OBJID = SRM.UNIT_NAME) AS UNIT_CODE_NAME,
SRM.STATUS,
CASE
+ -- PURCHASE_REG(구매요청서작성) 페이지용 상태
+ WHEN SRM.DOC_TYPE = 'PURCHASE_REG' THEN
+ CASE
+ -- 품의서 생성 여부 확인 (PROPOSAL 타입의 SALES_REQUEST_MASTER가 연결되어 있는지)
+ WHEN EXISTS (SELECT 1 FROM SALES_REQUEST_MASTER P WHERE P.DOC_TYPE = 'PROPOSAL' AND P.PROJECT_NO = SRM.OBJID::VARCHAR) THEN '품의서생성'
+ WHEN SRM.STATUS = 'confirmed' THEN '확정'
+ ELSE '작성중'
+ END
+ -- 기존 PURCHASE_REQUEST용 상태
WHEN ((SELECT COUNT(1) FROM PURCHASE_ORDER_MASTER AS O WHERE O.SALES_REQUEST_OBJID IN (SRM.OBJID)) >= (SELECT COUNT(1) FROM SALES_REQUEST_PART AS SRP WHERE srp.SALES_REQUEST_master_OBJID = SRM.OBJID )) and ((SELECT COUNT(1) FROM PURCHASE_ORDER_MASTER AS O WHERE O.SALES_REQUEST_OBJID IN (SRM.OBJID)) > 0) THEN '발주완료'
WHEN ((SELECT COUNT(1) FROM PURCHASE_ORDER_MASTER AS O WHERE O.SALES_REQUEST_OBJID IN (SRM.OBJID)) < (SELECT COUNT(1) FROM SALES_REQUEST_PART AS SRP WHERE srp.SALES_REQUEST_master_OBJID = SRM.OBJID )) and ((SELECT COUNT(1) FROM PURCHASE_ORDER_MASTER AS O WHERE O.SALES_REQUEST_OBJID IN (SRM.OBJID)) > 0) THEN '발주부분완료'
WHEN SRM.STATUS = 'create' THEN '등록'
@@ -1125,7 +1148,7 @@ VALUES
WHEN SRM.STATUS = 'approvalRequest' THEN '결재중'
WHEN SRM.STATUS = 'approvalComplete' THEN '결재완료'
WHEN SRM.STATUS = 'reject' THEN '반려'
-
+ WHEN SRM.STATUS = 'confirmed' THEN '확정'
ELSE ''
END STATUS_TITLE,
SRM.RECEIPT_USER_ID,
@@ -1224,7 +1247,15 @@ VALUES
AND SRP.SUB_RNUM = 1 -->
WHERE 1=1
-- 구매요청서만 조회 (품의서 제외)
- AND (SRM.DOC_TYPE = 'PURCHASE_REQUEST' OR SRM.DOC_TYPE IS NULL)
+ -- DOC_TYPE_FILTER가 있으면 해당 값으로 필터링, 없으면 기존 조건 적용
+
+
+ AND SRM.DOC_TYPE = #{DOC_TYPE_FILTER}
+
+
+ AND (SRM.DOC_TYPE = 'PURCHASE_REQUEST' OR SRM.DOC_TYPE IS NULL)
+
+
AND TO_CHAR(REGDATE,'YYYY') = #{Year}
@@ -1308,6 +1339,59 @@ VALUES
AND SRM.REGDATE::DATE #{regdate_end}::DATE
+
+
+ AND (
+ -- 프로젝트에서 고객사 조회
+ SRM.PROJECT_NO IN (
+ SELECT PM.OBJID::VARCHAR
+ FROM PROJECT_MGMT PM
+ LEFT JOIN CONTRACT_MGMT CM ON CM.OBJID = PM.CONTRACT_OBJID
+ WHERE CM.CUSTOMER_OBJID::VARCHAR = #{customer_cd}
+ )
+ -- 직접 저장된 고객사
+ OR SRM.CUSTOMER_OBJID = #{customer_cd}
+ )
+
+
+
+
+ AND (SRM.REQUEST_USER_ID = #{request_user} OR SRM.WRITER = #{request_user})
+
+
+
+
+ AND (
+ -- 프로젝트에서 제품구분 조회
+ SRM.PROJECT_NO IN (
+ SELECT PM.OBJID::VARCHAR
+ FROM PROJECT_MGMT PM
+ LEFT JOIN CONTRACT_MGMT CM ON CM.OBJID = PM.CONTRACT_OBJID
+ WHERE CM.PRODUCT = #{part_type}
+ )
+ -- 직접 저장된 제품구분
+ OR SRM.PRODUCT_NAME = #{part_type}
+ )
+
+
+
+
+ AND SRM.PROJECT_NO = #{project_no}
+
+
+
+
+ AND SRM.PURCHASE_TYPE IN
+
+ #{item}
+
+
+
+
+
+ AND (SRM.REQUEST_USER_ID = #{writer} OR SRM.WRITER = #{writer})
+
+
ORDER BY SRM.REGDATE desc
@@ -1403,24 +1487,24 @@ VALUES