V2025112501 #78
@@ -663,6 +663,20 @@ VALUES
|
||||
SRM.PROJECT_NO,
|
||||
PM.PROJECT_NO AS PROJECT_NUMBER,
|
||||
PM.PROJECT_NAME,
|
||||
COALESCE(
|
||||
PM.OBJID,
|
||||
(SELECT OBJID FROM PROJECT_MGMT WHERE PROJECT_NO = SRM.PROJECT_NO LIMIT 1)
|
||||
) AS PROJECT_MGMT_OBJID,
|
||||
-- M-BOM 조회용: MBOM_HEADER에서 직접 OBJID 가져오기
|
||||
(SELECT MH.OBJID FROM MBOM_HEADER MH
|
||||
WHERE MH.PROJECT_OBJID = COALESCE(PM.OBJID, (SELECT OBJID FROM PROJECT_MGMT WHERE PROJECT_NO = SRM.PROJECT_NO LIMIT 1))
|
||||
AND MH.STATUS = 'Y'
|
||||
ORDER BY MH.REGDATE DESC LIMIT 1
|
||||
) AS MBOM_HEADER_OBJID,
|
||||
COALESCE(
|
||||
PM.BOM_REPORT_OBJID,
|
||||
(SELECT BOM_REPORT_OBJID FROM PROJECT_MGMT WHERE PROJECT_NO = SRM.PROJECT_NO LIMIT 1)
|
||||
) AS BOM_REPORT_OBJID,
|
||||
PM.SETUP,
|
||||
SM.SUPPLY_NAME AS CUSTOMER_NAME,
|
||||
SM.OBJID::VARCHAR AS CUSTOMER_OBJID, -- 고객사 OBJID (드롭다운 선택용)
|
||||
@@ -705,7 +719,7 @@ VALUES
|
||||
|
||||
FROM
|
||||
SALES_REQUEST_MASTER SRM
|
||||
LEFT JOIN PROJECT_MGMT PM ON SRM.PROJECT_NO = PM.OBJID::VARCHAR
|
||||
LEFT JOIN PROJECT_MGMT PM ON (SRM.PROJECT_NO = PM.OBJID::VARCHAR OR SRM.PROJECT_NO = PM.PROJECT_NO)
|
||||
LEFT JOIN CONTRACT_MGMT CM ON PM.CONTRACT_OBJID = CM.OBJID::VARCHAR
|
||||
LEFT JOIN SUPPLY_MNG SM ON CM.CUSTOMER_OBJID::VARCHAR = SM.OBJID::VARCHAR
|
||||
LEFT JOIN PURCHASE_ORDER_MASTER POM ON SRM.OBJID = POM.SALES_REQUEST_OBJID
|
||||
@@ -1242,31 +1256,51 @@ VALUES
|
||||
AND PM.OBJID = #{PROJECT_NO}
|
||||
</select>
|
||||
|
||||
<!-- 전체 품목 조회 (M-BOM이 없을 때 사용) -->
|
||||
<select id="getAllPartMngList" parameterType="map" resultType="map">
|
||||
SELECT
|
||||
PM.OBJID,
|
||||
PM.PART_NO,
|
||||
PM.PART_NAME,
|
||||
PM.SPEC,
|
||||
PM.MAKER,
|
||||
PM.MATERIAL,
|
||||
PM.UNIT,
|
||||
(SELECT CODE_NAME FROM COMM_CODE WHERE CODE_ID = PM.UNIT) AS UNIT_TITLE
|
||||
FROM PART_MNG PM
|
||||
WHERE 1=1
|
||||
AND PM.IS_LAST = '1'
|
||||
ORDER BY PM.PART_NO
|
||||
LIMIT 500
|
||||
</select>
|
||||
|
||||
<select id="SalesBomPartListByProjectUnit" parameterType="map" resultType="map">
|
||||
<!-- M-BOM 데이터 조회: PROJECT_MGMT.BOM_REPORT_OBJID -> BOM_PART_QTY -> PART_MNG -->
|
||||
<!-- M-BOM 데이터 조회: getMbomList와 동일한 조인 방식 사용 (BPQ.PART_NO = PM.PART_NO) -->
|
||||
SELECT
|
||||
BPQ.BOM_REPORT_OBJID
|
||||
,BPQ.PART_NO AS PART_OBJID
|
||||
,PM.PART_NAME
|
||||
,PM.PART_NO
|
||||
,PM.SPEC
|
||||
,PM.MAKER
|
||||
,PM.REMARK
|
||||
,PM.UNIT
|
||||
,COALESCE(PM.PART_NO, BPQ.PART_NO, '') AS PART_NO
|
||||
,COALESCE(PM.PART_NAME, '') AS PART_NAME
|
||||
,COALESCE(PM.PART_NAME, '') AS PART_FULL_NAME
|
||||
,COALESCE(PM.SPEC, '') AS SPEC
|
||||
,BPQ.QTY AS ORDER_QTY
|
||||
,COALESCE(PM.MAKER, '') AS MAKER
|
||||
,'' AS REMARK
|
||||
,'' AS UNIT
|
||||
,NULL AS SUPPLY_OBJID
|
||||
,NULL AS WRITER
|
||||
FROM
|
||||
PROJECT_MGMT AS PJT
|
||||
INNER JOIN BOM_PART_QTY AS BPQ
|
||||
ON PJT.BOM_REPORT_OBJID = BPQ.BOM_REPORT_OBJID::VARCHAR
|
||||
LEFT JOIN PART_MNG AS PM
|
||||
ON COALESCE(NULLIF(BPQ.LAST_PART_OBJID, ''), BPQ.PART_NO) = PM.OBJID::VARCHAR
|
||||
INNER JOIN BOM_PART_QTY AS BPQ
|
||||
ON PJT.BOM_REPORT_OBJID::VARCHAR = BPQ.BOM_REPORT_OBJID::VARCHAR
|
||||
LEFT JOIN PART_MGMT AS PM
|
||||
ON BPQ.PART_NO = PM.PART_NO
|
||||
WHERE 1=1
|
||||
AND PJT.OBJID = #{PROJECT_OBJID}
|
||||
AND PJT.OBJID::VARCHAR = #{PROJECT_OBJID}
|
||||
AND COALESCE(BPQ.STATUS, '') NOT IN ('deleting', 'deleted')
|
||||
AND PJT.BOM_REPORT_OBJID IS NOT NULL
|
||||
AND PJT.BOM_REPORT_OBJID != ''
|
||||
ORDER BY BPQ.SEQ, PM.PART_NO
|
||||
ORDER BY BPQ.SEQ
|
||||
</select>
|
||||
|
||||
<update id="mergeReceiptSalesRequestInfo" parameterType="map">
|
||||
@@ -2775,18 +2809,19 @@ UPDATE SET
|
||||
</update>
|
||||
|
||||
<!-- 구매리스트 관련 쿼리 -->
|
||||
<!-- M-BOM에서 가져온 PART_OBJID는 BPQ.PART_NO 값이므로 PART_MGMT.PART_NO와 조인 -->
|
||||
<select id="getSalesRequestPartList" parameterType="string" resultType="map">
|
||||
SELECT
|
||||
SRP.OBJID,
|
||||
SRP.PART_OBJID,
|
||||
PM.PART_NO,
|
||||
PM.PART_NAME,
|
||||
COALESCE(PM.PART_NO, '') AS PART_NO,
|
||||
COALESCE(PM.PART_NAME, '') AS PART_NAME,
|
||||
SRP.QTY,
|
||||
SRP.PARTNER_OBJID,
|
||||
SRP.PARTNER_PRICE
|
||||
FROM
|
||||
SALES_REQUEST_PART SRP
|
||||
LEFT JOIN PART_MNG PM ON SRP.PART_OBJID = PM.OBJID::VARCHAR
|
||||
LEFT JOIN PART_MGMT PM ON SRP.PART_OBJID = PM.PART_NO
|
||||
WHERE
|
||||
SRP.SALES_REQUEST_MASTER_OBJID = #{SALES_REQUEST_MASTER_OBJID}
|
||||
ORDER BY SRP.REGDATE
|
||||
@@ -2895,5 +2930,347 @@ UPDATE SET
|
||||
UNIT_PRICE = #{UNIT_PRICE},
|
||||
TOTAL_PRICE = #{TOTAL_PRICE}
|
||||
</update>
|
||||
|
||||
<!-- 구매리스트 상세 조회 (기존 저장된 데이터) -->
|
||||
<select id="getPurchaseListDetail" parameterType="map" resultType="com.pms.common.UpperKeyMap">
|
||||
<!-- SALES_REQUEST_PART에서 저장된 데이터 조회, PART_MNG에서 품목정보 가져옴 -->
|
||||
SELECT
|
||||
SRP.OBJID,
|
||||
SRP.SALES_REQUEST_MASTER_OBJID,
|
||||
SRP.PART_OBJID,
|
||||
COALESCE(PM.PART_NO, '') AS PART_NO,
|
||||
COALESCE(PM.PART_NAME, '') AS PART_NAME,
|
||||
SRP.QTY,
|
||||
0 AS ITEM_QTY,
|
||||
-- 파일 개수
|
||||
(SELECT COUNT(1) FROM ATTACH_FILE_INFO F WHERE PM.OBJID = F.TARGET_OBJID AND F.STATUS = 'Active' AND F.DOC_TYPE IN ('3D_CAD')) AS CU01_CNT,
|
||||
(SELECT COUNT(1) FROM ATTACH_FILE_INFO F WHERE PM.OBJID = F.TARGET_OBJID AND F.STATUS = 'Active' AND F.DOC_TYPE IN ('2D_DRAWING_CAD')) AS CU02_CNT,
|
||||
(SELECT COUNT(1) FROM ATTACH_FILE_INFO F WHERE PM.OBJID = F.TARGET_OBJID AND F.STATUS = 'Active' AND F.DOC_TYPE IN ('2D_PDF_CAD')) AS CU03_CNT,
|
||||
COALESCE(PM.MATERIAL, '') AS MATERIAL,
|
||||
COALESCE(PM.HEAT_TREATMENT_HARDNESS, '') AS HEAT_TREATMENT_HARDNESS,
|
||||
COALESCE(PM.HEAT_TREATMENT_METHOD, '') AS HEAT_TREATMENT_METHOD,
|
||||
COALESCE(PM.SURFACE_TREATMENT, '') AS SURFACE_TREATMENT,
|
||||
COALESCE(PM.MAKER, '') AS VENDOR,
|
||||
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = PM.PART_TYPE) AS PART_TYPE_TITLE,
|
||||
'' AS SUPPLY_TYPE,
|
||||
'' AS RAW_MATERIAL,
|
||||
'' AS SIZE,
|
||||
'' AS RAW_MATERIAL_NO,
|
||||
0 AS REQUIRED_QTY,
|
||||
0 AS ORDER_QTY,
|
||||
0 AS ITEM_QTY2,
|
||||
0 AS PRODUCTION_QTY,
|
||||
'' AS PROCESSING_VENDOR,
|
||||
NULL AS PROCESSING_DEADLINE,
|
||||
NULL AS GRINDING_DEADLINE,
|
||||
-- 구매 관련 컬럼 (SALES_REQUEST_PART에서 조회)
|
||||
COALESCE(SRP.USE_YN, 'Y') AS USE_YN,
|
||||
COALESCE(SRP.NET_QTY, 0) AS NET_QTY,
|
||||
COALESCE(SRP.PO_QTY, 0) AS PO_QTY,
|
||||
COALESCE(SRP.VENDOR_PM, SRP.PARTNER_OBJID) AS VENDOR_PM,
|
||||
COALESCE(SRP.UNIT_PRICE, NULLIF(SRP.PARTNER_PRICE, '')::numeric, 0) AS UNIT_PRICE,
|
||||
COALESCE(SRP.TOTAL_PRICE, 0) AS TOTAL_PRICE,
|
||||
SRP.PROPOSAL_DATE,
|
||||
'SRP' AS DATA_SOURCE -- 데이터 소스 구분용
|
||||
FROM
|
||||
SALES_REQUEST_PART SRP
|
||||
LEFT JOIN PART_MNG PM ON SRP.PART_OBJID::VARCHAR = PM.OBJID::VARCHAR
|
||||
WHERE
|
||||
SRP.SALES_REQUEST_MASTER_OBJID = #{SALES_REQUEST_MASTER_OBJID}
|
||||
ORDER BY
|
||||
SRP.REGDATE
|
||||
</select>
|
||||
|
||||
<!-- M-BOM에서 구매리스트 데이터 가져오기 (STATUS 조건 없음, LEFT JOIN으로 모든 데이터 조회) -->
|
||||
<select id="getMBomForPurchaseList" parameterType="map" resultType="com.pms.common.UpperKeyMap">
|
||||
WITH RECURSIVE VIEW_BOM(
|
||||
MBOM_HEADER_OBJID,
|
||||
OBJID,
|
||||
PARENT_OBJID,
|
||||
CHILD_OBJID,
|
||||
PART_OBJID,
|
||||
PART_NO,
|
||||
PART_NAME,
|
||||
QTY,
|
||||
ITEM_QTY,
|
||||
QTY_TEMP,
|
||||
REGDATE,
|
||||
SEQ,
|
||||
STATUS,
|
||||
LEV,
|
||||
PATH,
|
||||
PATH2,
|
||||
CYCLE,
|
||||
UNIT,
|
||||
SUPPLY_TYPE,
|
||||
MAKE_OR_BUY,
|
||||
RAW_MATERIAL_PART_NO,
|
||||
RAW_MATERIAL_SPEC,
|
||||
RAW_MATERIAL,
|
||||
RAW_MATERIAL_SIZE,
|
||||
PROCESSING_VENDOR,
|
||||
PROCESSING_DEADLINE,
|
||||
GRINDING_DEADLINE,
|
||||
REQUIRED_QTY,
|
||||
ORDER_QTY,
|
||||
PRODUCTION_QTY,
|
||||
STOCK_QTY,
|
||||
SHORTAGE_QTY,
|
||||
VENDOR,
|
||||
UNIT_PRICE,
|
||||
TOTAL_PRICE,
|
||||
CURRENCY,
|
||||
LEAD_TIME,
|
||||
MIN_ORDER_QTY,
|
||||
WRITER,
|
||||
EDITER,
|
||||
EDIT_DATE,
|
||||
REMARK,
|
||||
USE_YN,
|
||||
NET_QTY,
|
||||
PO_QTY,
|
||||
PROPOSAL_DATE
|
||||
) AS (
|
||||
SELECT
|
||||
A.MBOM_HEADER_OBJID,
|
||||
A.OBJID,
|
||||
A.PARENT_OBJID,
|
||||
A.CHILD_OBJID,
|
||||
A.PART_OBJID,
|
||||
A.PART_NO,
|
||||
A.PART_NAME,
|
||||
A.QTY,
|
||||
A.QTY,
|
||||
A.QTY,
|
||||
A.REGDATE,
|
||||
A.SEQ,
|
||||
A.STATUS,
|
||||
1,
|
||||
ARRAY [A.CHILD_OBJID::TEXT],
|
||||
ARRAY [A.SEQ::TEXT],
|
||||
FALSE,
|
||||
A.UNIT,
|
||||
A.SUPPLY_TYPE,
|
||||
A.MAKE_OR_BUY,
|
||||
A.RAW_MATERIAL_PART_NO,
|
||||
A.RAW_MATERIAL_SPEC,
|
||||
A.RAW_MATERIAL,
|
||||
A.RAW_MATERIAL_SIZE,
|
||||
A.PROCESSING_VENDOR,
|
||||
A.PROCESSING_DEADLINE,
|
||||
A.GRINDING_DEADLINE,
|
||||
A.REQUIRED_QTY,
|
||||
A.ORDER_QTY,
|
||||
A.PRODUCTION_QTY,
|
||||
A.STOCK_QTY,
|
||||
A.SHORTAGE_QTY,
|
||||
A.VENDOR,
|
||||
A.UNIT_PRICE,
|
||||
A.TOTAL_PRICE,
|
||||
A.CURRENCY,
|
||||
A.LEAD_TIME,
|
||||
A.MIN_ORDER_QTY,
|
||||
A.WRITER,
|
||||
A.EDITER,
|
||||
A.EDIT_DATE,
|
||||
A.REMARK,
|
||||
COALESCE(A.USE_YN, 'Y'),
|
||||
COALESCE(A.NET_QTY, 0),
|
||||
COALESCE(A.PO_QTY, 0),
|
||||
A.PROPOSAL_DATE
|
||||
FROM
|
||||
MBOM_DETAIL A
|
||||
INNER JOIN MBOM_HEADER MH ON MH.OBJID = A.MBOM_HEADER_OBJID
|
||||
WHERE 1=1
|
||||
AND (A.PARENT_OBJID IS NULL OR A.PARENT_OBJID = '')
|
||||
AND (
|
||||
MH.PROJECT_OBJID::VARCHAR = #{PROJECT_MGMT_OBJID}
|
||||
OR MH.OBJID::VARCHAR = #{PROJECT_MGMT_OBJID}
|
||||
)
|
||||
<!-- STATUS 조건 제거하여 모든 데이터 조회 -->
|
||||
|
||||
UNION ALL
|
||||
|
||||
SELECT
|
||||
B.MBOM_HEADER_OBJID,
|
||||
B.OBJID,
|
||||
B.PARENT_OBJID,
|
||||
B.CHILD_OBJID,
|
||||
B.PART_OBJID,
|
||||
B.PART_NO,
|
||||
B.PART_NAME,
|
||||
B.QTY,
|
||||
B.QTY,
|
||||
B.QTY,
|
||||
B.REGDATE,
|
||||
B.SEQ,
|
||||
B.STATUS,
|
||||
LEV + 1,
|
||||
PATH||B.CHILD_OBJID::TEXT,
|
||||
PATH2||B.SEQ::TEXT,
|
||||
B.PARENT_OBJID = ANY(PATH),
|
||||
B.UNIT,
|
||||
B.SUPPLY_TYPE,
|
||||
B.MAKE_OR_BUY,
|
||||
B.RAW_MATERIAL_PART_NO,
|
||||
B.RAW_MATERIAL_SPEC,
|
||||
B.RAW_MATERIAL,
|
||||
B.RAW_MATERIAL_SIZE,
|
||||
B.PROCESSING_VENDOR,
|
||||
B.PROCESSING_DEADLINE,
|
||||
B.GRINDING_DEADLINE,
|
||||
B.REQUIRED_QTY,
|
||||
B.ORDER_QTY,
|
||||
B.PRODUCTION_QTY,
|
||||
B.STOCK_QTY,
|
||||
B.SHORTAGE_QTY,
|
||||
B.VENDOR,
|
||||
B.UNIT_PRICE,
|
||||
B.TOTAL_PRICE,
|
||||
B.CURRENCY,
|
||||
B.LEAD_TIME,
|
||||
B.MIN_ORDER_QTY,
|
||||
B.WRITER,
|
||||
B.EDITER,
|
||||
B.EDIT_DATE,
|
||||
B.REMARK,
|
||||
COALESCE(B.USE_YN, 'Y'),
|
||||
COALESCE(B.NET_QTY, 0),
|
||||
COALESCE(B.PO_QTY, 0),
|
||||
B.PROPOSAL_DATE
|
||||
FROM
|
||||
MBOM_DETAIL B
|
||||
JOIN
|
||||
VIEW_BOM
|
||||
ON B.PARENT_OBJID = VIEW_BOM.CHILD_OBJID
|
||||
AND VIEW_BOM.MBOM_HEADER_OBJID = B.MBOM_HEADER_OBJID
|
||||
<!-- STATUS 조건 제거하여 모든 데이터 조회 -->
|
||||
)
|
||||
SELECT
|
||||
V.MBOM_HEADER_OBJID AS BOM_REPORT_OBJID,
|
||||
V.OBJID,
|
||||
V.PARENT_OBJID,
|
||||
V.CHILD_OBJID,
|
||||
V.PART_OBJID,
|
||||
V.PART_OBJID AS LAST_PART_OBJID,
|
||||
V.PART_OBJID AS BOM_LAST_PART_OBJID,
|
||||
V.PART_NO,
|
||||
V.PART_NAME,
|
||||
V.QTY,
|
||||
V.ITEM_QTY,
|
||||
V.QTY_TEMP,
|
||||
V.LEV AS LEVEL,
|
||||
(SELECT COUNT(*) FROM MBOM_DETAIL WHERE PARENT_OBJID = V.CHILD_OBJID) AS SUB_PART_CNT,
|
||||
V.SEQ,
|
||||
V.STATUS,
|
||||
-- M-BOM 전용 필드
|
||||
V.UNIT,
|
||||
V.SUPPLY_TYPE,
|
||||
V.MAKE_OR_BUY,
|
||||
V.RAW_MATERIAL_PART_NO AS RAW_MATERIAL_NO,
|
||||
V.RAW_MATERIAL_SPEC,
|
||||
V.RAW_MATERIAL,
|
||||
V.RAW_MATERIAL_SIZE AS SIZE,
|
||||
V.PROCESSING_VENDOR,
|
||||
V.PROCESSING_DEADLINE,
|
||||
V.GRINDING_DEADLINE,
|
||||
V.REQUIRED_QTY,
|
||||
V.ORDER_QTY,
|
||||
V.PRODUCTION_QTY,
|
||||
V.STOCK_QTY,
|
||||
V.SHORTAGE_QTY,
|
||||
V.VENDOR AS VENDOR_PM,
|
||||
V.UNIT_PRICE,
|
||||
V.TOTAL_PRICE,
|
||||
V.CURRENCY,
|
||||
V.LEAD_TIME,
|
||||
V.MIN_ORDER_QTY,
|
||||
V.WRITER,
|
||||
TO_CHAR(V.REGDATE, 'YYYY-MM-DD HH24:MI:SS') AS REGDATE,
|
||||
V.EDITER,
|
||||
CASE WHEN V.EDIT_DATE IS NOT NULL THEN TO_CHAR(V.EDIT_DATE, 'YYYY-MM-DD HH24:MI:SS') ELSE NULL END AS EDIT_DATE,
|
||||
V.REMARK,
|
||||
-- E-BOM 호환 필드
|
||||
NULL AS PARENT_PART_NO,
|
||||
NULL AS CONTRACT_OBJID,
|
||||
CASE WHEN V.LEV = 1 THEN V.OBJID ELSE NULL END AS ROOT_OBJID,
|
||||
CASE WHEN V.LEV = 1 THEN V.OBJID ELSE NULL END AS SUB_ROOT_OBJID,
|
||||
1 AS LEAF,
|
||||
-- PART_MNG 테이블에서 추가 정보 (LEFT JOIN으로 PART_MNG에 없는 품번도 표시)
|
||||
P.SPEC,
|
||||
COALESCE(P.MATERIAL, V.RAW_MATERIAL) AS MATERIAL,
|
||||
P.WEIGHT,
|
||||
P.PART_TYPE,
|
||||
P.REVISION,
|
||||
COALESCE(P.MAKER, V.VENDOR) AS VENDOR,
|
||||
P.THICKNESS,
|
||||
P.WIDTH,
|
||||
P.HEIGHT,
|
||||
P.OUT_DIAMETER,
|
||||
P.IN_DIAMETER,
|
||||
P.LENGTH,
|
||||
P.SOURCING_CODE,
|
||||
COALESCE(P.HEAT_TREATMENT_HARDNESS, '') AS HEAT_TREATMENT_HARDNESS,
|
||||
COALESCE(P.HEAT_TREATMENT_METHOD, '') AS HEAT_TREATMENT_METHOD,
|
||||
COALESCE(P.SURFACE_TREATMENT, '') AS SURFACE_TREATMENT,
|
||||
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = P.UNIT) AS UNIT_TITLE,
|
||||
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = P.PART_TYPE) AS PART_TYPE_TITLE,
|
||||
(SELECT COUNT(1) FROM ATTACH_FILE_INFO F WHERE P.OBJID = F.TARGET_OBJID AND F.STATUS = 'Active' AND F.DOC_TYPE IN ('3D_CAD')) AS CU01_CNT,
|
||||
(SELECT COUNT(1) FROM ATTACH_FILE_INFO F WHERE P.OBJID = F.TARGET_OBJID AND F.STATUS = 'Active' AND F.DOC_TYPE IN ('2D_DRAWING_CAD')) AS CU02_CNT,
|
||||
(SELECT COUNT(1) FROM ATTACH_FILE_INFO F WHERE P.OBJID = F.TARGET_OBJID AND F.STATUS = 'Active' AND F.DOC_TYPE IN ('2D_PDF_CAD')) AS CU03_CNT,
|
||||
V.LEV,
|
||||
-- 구매 컬럼들 (VIEW_BOM에서 가져온 MBOM_DETAIL 값)
|
||||
V.USE_YN,
|
||||
V.NET_QTY,
|
||||
V.PO_QTY,
|
||||
V.PROPOSAL_DATE,
|
||||
'MBOM' AS DATA_SOURCE -- 데이터 소스 구분용
|
||||
FROM VIEW_BOM V
|
||||
LEFT JOIN PART_MNG P ON P.OBJID::VARCHAR = V.PART_OBJID::VARCHAR
|
||||
WHERE 1=1
|
||||
ORDER BY V.PATH2
|
||||
</select>
|
||||
|
||||
<!-- PROJECT_OBJID로 MBOM_HEADER 조회 (PROJECT_MGMT.SOURCE_MBOM_OBJID 우선 사용) -->
|
||||
<select id="getMbomHeaderByProjectId" parameterType="map" resultType="map">
|
||||
SELECT
|
||||
COALESCE(PM.SOURCE_MBOM_OBJID::VARCHAR, MH.OBJID::VARCHAR) AS OBJID,
|
||||
PM.OBJID AS PROJECT_OBJID,
|
||||
PM.PROJECT_NO
|
||||
FROM PROJECT_MGMT PM
|
||||
LEFT JOIN MBOM_HEADER MH ON MH.PROJECT_OBJID = PM.OBJID
|
||||
WHERE PM.OBJID::VARCHAR = #{projectObjId}
|
||||
ORDER BY MH.REGDATE DESC
|
||||
LIMIT 1
|
||||
</select>
|
||||
|
||||
<!-- 구매리스트 저장 - MBOM_DETAIL 업데이트 -->
|
||||
<update id="updateMbomDetailForPurchase" parameterType="map">
|
||||
UPDATE MBOM_DETAIL SET
|
||||
USE_YN = #{USE_YN},
|
||||
NET_QTY = COALESCE(NULLIF(TRIM(#{NET_QTY}::TEXT), '')::NUMERIC, 0),
|
||||
PO_QTY = COALESCE(NULLIF(TRIM(#{PO_QTY}::TEXT), '')::NUMERIC, 0),
|
||||
VENDOR = #{VENDOR_PM},
|
||||
UNIT_PRICE = COALESCE(NULLIF(TRIM(#{UNIT_PRICE}::TEXT), '')::NUMERIC, 0),
|
||||
TOTAL_PRICE = COALESCE(NULLIF(TRIM(#{TOTAL_PRICE}::TEXT), '')::NUMERIC, 0),
|
||||
PROPOSAL_DATE = CASE WHEN NULLIF(TRIM(#{PROPOSAL_DATE}::TEXT), '') IS NOT NULL THEN #{PROPOSAL_DATE}::DATE ELSE NULL END,
|
||||
EDITER = #{EDITER},
|
||||
EDIT_DATE = NOW()
|
||||
WHERE OBJID::VARCHAR = #{OBJID}
|
||||
</update>
|
||||
|
||||
<!-- 구매리스트 저장 - SALES_REQUEST_PART 업데이트 -->
|
||||
<update id="updateSalesRequestPartForPurchase" parameterType="map">
|
||||
UPDATE SALES_REQUEST_PART SET
|
||||
USE_YN = #{USE_YN},
|
||||
NET_QTY = COALESCE(NULLIF(TRIM(#{NET_QTY}::TEXT), '')::NUMERIC, 0),
|
||||
PO_QTY = COALESCE(NULLIF(TRIM(#{PO_QTY}::TEXT), '')::NUMERIC, 0),
|
||||
VENDOR_PM = #{VENDOR_PM},
|
||||
UNIT_PRICE = COALESCE(NULLIF(TRIM(#{UNIT_PRICE}::TEXT), '')::NUMERIC, 0),
|
||||
TOTAL_PRICE = COALESCE(NULLIF(TRIM(#{TOTAL_PRICE}::TEXT), '')::NUMERIC, 0),
|
||||
PROPOSAL_DATE = CASE WHEN NULLIF(TRIM(#{PROPOSAL_DATE}::TEXT), '') IS NOT NULL THEN #{PROPOSAL_DATE}::DATE ELSE NULL END,
|
||||
WRITER = #{EDITER}
|
||||
WHERE OBJID::VARCHAR = #{OBJID}
|
||||
</update>
|
||||
|
||||
</mapper>
|
||||
@@ -152,14 +152,14 @@ $(document).ready(function(){
|
||||
,{name:"CLIENT_TYPE",index:"CLIENT_TYPE", width: 100, align:"center", hidden: false, sortable:false, editable:true
|
||||
,edittype:"select"
|
||||
,formatter:"select"
|
||||
,editoptions:{
|
||||
,editoptions:{
|
||||
value: client_type
|
||||
,dataInit : function(e){
|
||||
e.style.width = "92%";
|
||||
e.style.fontSize = 13;
|
||||
}
|
||||
}
|
||||
}
|
||||
,dataInit : function(e){
|
||||
e.style.width = "92%";
|
||||
e.style.fontSize = 13;
|
||||
}
|
||||
}
|
||||
}
|
||||
,{name:"BUS_REG_NO",index:"BUS_REG_NO", width: 150, align:"center", hidden: false, sortable:false, editable:true
|
||||
,editoptions:{dataInit : function(e){e.style.fontSize = 13;}}
|
||||
}
|
||||
@@ -513,23 +513,23 @@ function fn_count(){
|
||||
var clientCd = gridData[i].CLIENT_CD;
|
||||
if(clientCd && clientCd.trim() !== ""){
|
||||
// AJAX로 중복 체크
|
||||
$.ajax({
|
||||
$.ajax({
|
||||
url:"/admin/checkDuplicateClientMngList.do",
|
||||
type:"POST",
|
||||
type:"POST",
|
||||
data:{"CLIENT_CD": clientCd},
|
||||
dataType:"json",
|
||||
async: false,
|
||||
success:function(data){
|
||||
dataType:"json",
|
||||
async: false,
|
||||
success:function(data){
|
||||
if(data.result == "true"){
|
||||
dupCnt++; // 중복
|
||||
} else {
|
||||
nowCnt++; // 신규
|
||||
}
|
||||
},
|
||||
error: function(jqxhr, status, error){
|
||||
},
|
||||
error: function(jqxhr, status, error){
|
||||
nowCnt++; // 에러 시 신규로 간주
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@ function saveClient(){
|
||||
alert(result.MESSAGE || result.message);
|
||||
if(result.RESULTFLAG == "true" || result.resultFlag == "true"){
|
||||
if(opener && opener.fn_search){
|
||||
opener.fn_search();
|
||||
opener.fn_search();
|
||||
}
|
||||
self.close();
|
||||
}
|
||||
|
||||
@@ -21,20 +21,20 @@ function saveWarehouse(){
|
||||
form.modify_dt.value = convertToDBFormat(modifyDt);
|
||||
}
|
||||
|
||||
$.ajax({
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: "/admin/saveWarehouseListInfo.do",
|
||||
data: $(form).serialize(),
|
||||
dataType: "json",
|
||||
success: function(result){
|
||||
success: function(result){
|
||||
alert(result.message);
|
||||
if(result.resultFlag == "true"){
|
||||
opener.fn_search();
|
||||
self.close();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function convertToDBFormat(dateStr) {
|
||||
@@ -70,10 +70,10 @@ function convertToDBFormat(dateStr) {
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<section id="commonSection" class="admin_option_min">
|
||||
<div class="admin_title">
|
||||
<section id="commonSection" class="admin_option_min">
|
||||
<div class="admin_title">
|
||||
<h2>창고 등록/수정</h2>
|
||||
</div>
|
||||
</div>
|
||||
<div id="businessPopupFormWrap">
|
||||
<form name="warehouseForm" id="warehouseForm">
|
||||
<input type="hidden" name="objid" value="${info.OBJID}">
|
||||
@@ -87,94 +87,94 @@ function convertToDBFormat(dateStr) {
|
||||
<tr>
|
||||
<td class="input_title"><label for=""></label>위치명<label></td>
|
||||
<td><input type="text" name="location_name" value="${info.LOCATION_NAME}" required></td>
|
||||
</tr>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="input_title"><label for=""></label>위치설명<label></td>
|
||||
<td><input type="text" name="location_description" value="${info.LOCATION_DESCRIPTION}"></td>
|
||||
</tr>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="input_title"><label for=""></label>가출고코드<label></td>
|
||||
<td><input type="text" name="out_code" value="${info.OUT_CODE}"></td>
|
||||
</tr>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="input_title"><label for=""></label>가출고거래처명<label></td>
|
||||
<td><input type="text" name="out_co_name" value="${info.OUT_CO_NAME}"></td>
|
||||
</tr>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="input_title"><label for=""></label>적합여부<label></td>
|
||||
<td>
|
||||
<td>
|
||||
<select name="fit_status">
|
||||
<option value="">선택</option>
|
||||
<option value="">선택</option>
|
||||
<option value="Y" ${info.FIT_STATUS eq 'Y' ? 'selected' : ''}>적합</option>
|
||||
<option value="N" ${info.FIT_STATUS eq 'N' ? 'selected' : ''}>부적합</option>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="input_title"><label for=""></label>가용재고여부<label></td>
|
||||
<td>
|
||||
<td>
|
||||
<select name="available_status">
|
||||
<option value="">선택</option>
|
||||
<option value="">선택</option>
|
||||
<option value="Y" ${info.AVAILABLE_STATUS eq 'Y' ? 'selected' : ''}>여</option>
|
||||
<option value="N" ${info.AVAILABLE_STATUS eq 'N' ? 'selected' : ''}>부</option>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="input_title"><label for=""></label>사용여부<label></td>
|
||||
<td>
|
||||
<select name="use_status">
|
||||
<option value="Y" ${empty info.USE_STATUS or info.USE_STATUS eq 'Y' ? 'selected' : ''}>사용</option>
|
||||
<option value="N" ${info.USE_STATUS eq 'N' ? 'selected' : ''}>미사용</option>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="input_title"><label for=""></label>BASELOC_CD<label></td>
|
||||
<td><input type="text" name="base_loc_cd" value="${info.BASE_LOC_CD}"></td>
|
||||
</tr>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="input_title"><label for=""></label>CO_CD<label></td>
|
||||
<td><input type="text" name="co_cd" value="${info.CO_CD}"></td>
|
||||
</tr>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="input_title"><label for=""></label>LOC_NMK<label></td>
|
||||
<td><input type="text" name="loc_nmk" value="${info.LOC_NMK}"></td>
|
||||
</tr>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="input_title"><label for=""></label>INSERT_ID<label></td>
|
||||
<td><input type="text" name="insert_id" value="${info.INSERT_ID}"></td>
|
||||
</tr>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="input_title"><label for=""></label>INSERT_IP<label></td>
|
||||
<td><input type="text" name="insert_ip" value="${info.INSERT_IP}"></td>
|
||||
</tr>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="input_title"><label for=""></label>INSERT_DT<label></td>
|
||||
<td><input type="text" name="insert_dt" value="${info.INSERT_DT}" placeholder="YYYY-MM-DD HH:MM:SS"></td>
|
||||
</tr>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="input_title"><label for=""></label>MODIFY_ID<label></td>
|
||||
<td><input type="text" name="modify_id" value="${info.MODIFY_ID}"></td>
|
||||
</tr>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="input_title"><label for=""></label>MODIFY_IP<label></td>
|
||||
<td><input type="text" name="modify_ip" value="${info.MODIFY_IP}"></td>
|
||||
</tr>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="input_title"><label for=""></label>MODIFY_DT<label></td>
|
||||
<td><input type="text" name="modify_dt" value="${info.MODIFY_DT}" placeholder="YYYY-MM-DD HH:MM:SS"></td>
|
||||
</tr>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="input_title"><label for=""></label>ATTR_NMK<label></td>
|
||||
<td><input type="text" name="attr_nmk" value="${info.ATTR_NMK}"></td>
|
||||
</tr>
|
||||
</table>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
</div>
|
||||
<div id="adminPopupBtnWrap">
|
||||
</div>
|
||||
<div id="adminPopupBtnWrap">
|
||||
<button type="button" class="btns" onclick="saveWarehouse()">저장</button>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
</section>
|
||||
</body>
|
||||
</html>
|
||||
File diff suppressed because it is too large
Load Diff
@@ -178,6 +178,8 @@ $("#REQUEST_CD,#PROJECT_NO,#CUSTOMER_NAME,#PRODUCT_NAME,#MECHANICAL_TYPE,#PROJEC
|
||||
}
|
||||
}
|
||||
|
||||
// ★★★ M-BOM 품목 자동 로드 ★★★
|
||||
fn_loadMbomParts($(this).val());
|
||||
}
|
||||
});
|
||||
|
||||
@@ -296,14 +298,35 @@ function fn_getSalesRequestTargetPartList(masterObjId,bomObjId){
|
||||
});
|
||||
$("#partListArea").append(appendText);
|
||||
|
||||
// 프로젝트번호가 설정되어 있는지 확인하고, 없으면 품번 드롭다운을 채울 수 없음
|
||||
var projectNo = $("#PROJECT_NO").val();
|
||||
if(!projectNo || projectNo == "") {
|
||||
console.warn("프로젝트번호가 선택되지 않아 품번 목록을 불러올 수 없습니다.");
|
||||
}
|
||||
|
||||
$.each(resultData, function(i){
|
||||
var rowObjId = fnc_checkNull(resultData[i].OBJID);
|
||||
var PART_OBJID = fnc_checkNull(resultData[i].PART_OBJID);
|
||||
var PART_NO = fnc_checkNull(resultData[i].PART_NO);
|
||||
var PART_NAME = fnc_checkNull(resultData[i].PART_NAME);
|
||||
|
||||
// 공급업체 제거로 주석처리
|
||||
// var PARTNER_OBJID = fnc_checkNull(resultData[i].PARTNER_OBJID);
|
||||
// fnc_getAdminSupCdListAppend("", "PARTNER_OBJID_"+rowObjId, PARTNER_OBJID);
|
||||
// $("#PARTNER_OBJID_"+rowObjId).val(PARTNER_OBJID);
|
||||
|
||||
fn_addBomPart("PART_OBJID_"+rowObjId, PART_OBJID, "PART_NAME_"+rowObjId,"");
|
||||
|
||||
// M-BOM에 없는 품번이면 수동으로 추가
|
||||
if(PART_OBJID != "" && PART_NO != "") {
|
||||
var selectBox = $("#PART_OBJID_"+rowObjId);
|
||||
// 이미 옵션이 있는지 확인
|
||||
if(selectBox.find("option[value='"+PART_OBJID+"']").length == 0) {
|
||||
selectBox.append("<option value='"+PART_OBJID+"'>"+PART_NO+"</option>");
|
||||
}
|
||||
selectBox.val(PART_OBJID);
|
||||
$("#PART_NAME_"+rowObjId).val(PART_NAME);
|
||||
}
|
||||
});
|
||||
$(".select2").select2();
|
||||
},
|
||||
@@ -469,44 +492,122 @@ function fn_Supply_save(){
|
||||
}
|
||||
}
|
||||
|
||||
// ★★★ 프로젝트 선택 시 M-BOM 품목 자동 로드 ★★★
|
||||
function fn_loadMbomParts(projectObjId){
|
||||
if(fnc_checkNull(projectObjId) == "") return;
|
||||
|
||||
console.log("M-BOM 품목 로드 시작, PROJECT_OBJID:", projectObjId);
|
||||
|
||||
// M-BOM 품목 조회
|
||||
var paramData = {"sqlId":"salesMng.SalesBomPartListByProjectUnit", "PROJECT_OBJID":projectObjId};
|
||||
var resultList = fnc_getJsonAllDataListBySqlId(paramData);
|
||||
|
||||
console.log("M-BOM 품목 조회 결과:", resultList);
|
||||
|
||||
if(resultList && resultList.length > 0){
|
||||
// 기존 품목 초기화
|
||||
$("#partListArea").empty();
|
||||
|
||||
// M-BOM 품목을 행으로 추가
|
||||
$.each(resultList, function(i, item){
|
||||
var rowObjId = fnc_createObjId();
|
||||
var PART_OBJID = fnc_checkNull(item.PART_OBJID);
|
||||
var PART_NO = fnc_checkNull(item.PART_NO);
|
||||
var PART_NAME = fnc_checkNull(item.PART_FULL_NAME) || fnc_checkNull(item.PART_NAME);
|
||||
var QTY = fnc_checkNull(item.ORDER_QTY) || 1;
|
||||
|
||||
var appendText = "";
|
||||
appendText += "<tr class='dataTr' id='"+rowObjId+"'>";
|
||||
appendText += " <input type='hidden' name='OBJID' value='"+rowObjId+"' class='TARGET_OBJID'>";
|
||||
appendText += " <td class='align_c'>";
|
||||
appendText += " <input type='checkbox' name='chkOBJID"+rowObjId+"' value='"+rowObjId+"' class='chkBox'>";
|
||||
appendText += " </td>";
|
||||
appendText += " <td class='align_l'>";
|
||||
appendText += " <select name='PART_OBJID_"+rowObjId+"' id='PART_OBJID_"+rowObjId+"' reqTitle='품번' type='select' class='select2' style='width: 100%;'>";
|
||||
appendText += " <option value='"+PART_OBJID+"'>"+PART_NO+"</option>";
|
||||
appendText += " </select>";
|
||||
appendText += " </td>";
|
||||
appendText += " <td class='align_l'>";
|
||||
appendText += " <input type='text' name='PART_NAME_"+rowObjId+"' id='PART_NAME_"+rowObjId+"' value='"+PART_NAME+"' readonly style='width: 100%;'>";
|
||||
appendText += " </td>";
|
||||
appendText += " <td class='align_c'>";
|
||||
appendText += " <input type='number' name='QTY_"+rowObjId+"' value='"+QTY+"' reqTitle='수량' required style='text-align: center;'>";
|
||||
appendText += " </td>";
|
||||
appendText += "</tr>";
|
||||
|
||||
$("#partListArea").append(appendText);
|
||||
|
||||
// 품번 드롭다운에 M-BOM 전체 품목 옵션 추가
|
||||
fn_addBomPart("PART_OBJID_"+rowObjId, PART_OBJID, "PART_NAME_"+rowObjId, "");
|
||||
});
|
||||
|
||||
$(".select2").select2();
|
||||
console.log("M-BOM 품목 " + resultList.length + "건 로드 완료");
|
||||
} else {
|
||||
console.log("M-BOM 품목이 없습니다.");
|
||||
}
|
||||
}
|
||||
|
||||
//계약제품, 업체명으로 BOM에 등록된 부품정보를 자동 추가
|
||||
function fn_addBomPart(selectboxId,selectedVal,sql_id,sql_supply){
|
||||
$("#BOM_REPORT_OBJID").val("");
|
||||
|
||||
//var type = $("#TYPE").val(); //발주부품
|
||||
var project_objid = $("#PROJECT_NO").val(); //프로젝트명
|
||||
var unit_code = $("#UNIT_NAME").val(); //유닛명
|
||||
//var partner_objid = $("#PARTNER_OBJID").val(); //공급업체
|
||||
|
||||
//console.log('type:'+type + ' contract_mgmt_objid:'+contract_mgmt_objid + ' unit_code:'+unit_code + ' partner_objid:'+partner_objid);
|
||||
$("#"+selectboxId).empty();
|
||||
$("#"+selectboxId).append("<option value=''>선택</option>");
|
||||
|
||||
//프로젝트번호만 있으면 품번 조회 가능 (유닛명은 선택사항)
|
||||
var resultList = [];
|
||||
|
||||
// 1. 프로젝트가 선택되어 있으면 M-BOM 품목 먼저 조회
|
||||
if(fnc_checkNull(project_objid)!=""){
|
||||
$("#"+selectboxId).empty();
|
||||
$("#"+selectboxId).append("<option value=''>선택</option>");
|
||||
//구매BOM 조회해서 부품정보를 가져온다
|
||||
var paramData = {"sqlId":"salesMng.SalesBomPartListByProjectUnit", "PROJECT_OBJID":project_objid};
|
||||
// 유닛명이 있으면 추가
|
||||
if(fnc_checkNull(unit_code)!=""){
|
||||
paramData.UNIT_CODE = unit_code;
|
||||
}
|
||||
var resultList = fnc_getJsonAllDataListBySqlId(paramData);
|
||||
resultList = fnc_getJsonAllDataListBySqlId(paramData);
|
||||
console.log("M-BOM 품목 조회 결과:", resultList.length, "건");
|
||||
}
|
||||
|
||||
// 2. M-BOM 품목이 없으면 전체 PART_MNG에서 조회
|
||||
if(resultList.length == 0){
|
||||
console.log("M-BOM 품목이 없어 전체 품목에서 조회합니다.");
|
||||
var allPartData = {"sqlId":"salesMng.getAllPartMngList"};
|
||||
resultList = fnc_getJsonAllDataListBySqlId(allPartData);
|
||||
console.log("전체 품목 조회 결과:", resultList.length, "건");
|
||||
|
||||
// 전체 품목 조회 결과 처리
|
||||
if(0 < resultList.length){
|
||||
for (var i = 0; i < resultList.length; i++) {
|
||||
var commonCodeId = resultList[i].PART_OBJID;
|
||||
var commonCodeId = resultList[i].OBJID;
|
||||
var commonCodeName = resultList[i].PART_NO;
|
||||
var partName = resultList[i].PART_NAME;
|
||||
var supplyObjid = resultList[i].SUPPLY_OBJID;
|
||||
$("#"+selectboxId).append("<option value='"+commonCodeId+"' data-part_name='"+partName+"' data-supplyObjid='"+supplyObjid+"'>"+commonCodeName+"</option>");
|
||||
$("#"+selectboxId).append("<option value='"+commonCodeId+"' data-part_name='"+partName+"'>"+commonCodeName+"</option>");
|
||||
}
|
||||
$("#"+selectboxId).val(selectedVal);
|
||||
$("#"+selectboxId).change(function(){
|
||||
$("#"+sql_id).val($(this).find("option:selected").attr("data-part_name"));
|
||||
$("#"+sql_supply).val($(this).find("option:selected").attr("data-supplyObjid"));
|
||||
});
|
||||
}
|
||||
} else {
|
||||
// M-BOM 품목 처리
|
||||
for (var i = 0; i < resultList.length; i++) {
|
||||
var commonCodeId = resultList[i].PART_OBJID;
|
||||
var commonCodeName = resultList[i].PART_NO;
|
||||
var partName = resultList[i].PART_NAME || resultList[i].PART_FULL_NAME;
|
||||
var supplyObjid = resultList[i].SUPPLY_OBJID;
|
||||
$("#"+selectboxId).append("<option value='"+commonCodeId+"' data-part_name='"+partName+"' data-supplyObjid='"+supplyObjid+"'>"+commonCodeName+"</option>");
|
||||
}
|
||||
}
|
||||
|
||||
// 선택값 설정 및 change 이벤트 바인딩
|
||||
if(fnc_checkNull(selectedVal) != ""){
|
||||
$("#"+selectboxId).val(selectedVal);
|
||||
}
|
||||
$("#"+selectboxId).off("change").on("change", function(){
|
||||
$("#"+sql_id).val($(this).find("option:selected").attr("data-part_name"));
|
||||
if(sql_supply){
|
||||
$("#"+sql_supply).val($(this).find("option:selected").attr("data-supplyObjid"));
|
||||
}
|
||||
});
|
||||
|
||||
$("#"+selectboxId).trigger("change");
|
||||
}
|
||||
|
||||
|
||||
@@ -100,7 +100,7 @@ $(document).ready(function(){
|
||||
|
||||
//구매요청서 작성
|
||||
$("#btnOrderReg").click(function(){
|
||||
fn_openSalesRequestPopUp("");
|
||||
fn_openSalesRequestFormPopUp("");
|
||||
});
|
||||
|
||||
//품의서 생성 (TODO: 품의서 생성 기능 구현 필요 - 기존 발주서 작성 기능과 다름)
|
||||
@@ -221,16 +221,16 @@ var columns = [
|
||||
,{headerHozAlign : 'center', hozAlign : 'center', title : "유/무상", field :"PAID_TYPE_NAME" , widthGrow:0.9 }
|
||||
,{headerHozAlign : 'center', hozAlign : 'left', title : "품번", field :"PART_NO" , widthGrow:1.4}
|
||||
,{headerHozAlign : 'center', hozAlign : 'left' , title : "품명", field :"PART_NAME" , widthGrow:1.8 }
|
||||
,{headerHozAlign : 'center', hozAlign : 'center', title : "구매요청서", field :"REQUEST_MNG_NO" , widthGrow:1.1,
|
||||
formatter: function(cell, formatterParams, onRendered){
|
||||
var objid = fnc_checkNull(cell.getData().OBJID);
|
||||
var iconClass = (objid != '' && objid != null) ? 'file_icon' : 'file_empty_icon';
|
||||
return '<a href="#" class="File ' + iconClass + '" style="width:20px; height:20px; display:inline-block;"></a>';
|
||||
},
|
||||
cellClick : function(e, cell) {
|
||||
fn_openSalesRequestPopUp(cell.getData().OBJID);
|
||||
,{headerHozAlign : 'center', hozAlign : 'center', title : "구매요청서", field :"REQUEST_MNG_NO" , widthGrow:1.1,
|
||||
formatter: function(cell, formatterParams, onRendered){
|
||||
var objid = fnc_checkNull(cell.getData().OBJID);
|
||||
var iconClass = (objid != '' && objid != null) ? 'file_icon' : 'file_empty_icon';
|
||||
return '<a href="#" class="File ' + iconClass + '" style="width:20px; height:20px; display:inline-block;"></a>';
|
||||
},
|
||||
cellClick : function(e, cell) {
|
||||
fn_openSalesRequestFormPopUp(cell.getData().OBJID);
|
||||
}
|
||||
}
|
||||
}
|
||||
,{headerHozAlign : 'center', hozAlign : 'center', title : "요청인", field :"REQUEST_USER_NAME" , widthGrow:1.1 }
|
||||
,{headerHozAlign : 'center', hozAlign : 'center', title : "입고요청일", field :"DELIVERY_REQUEST_DATE" , widthGrow:1.1 }
|
||||
,{headerHozAlign : 'center', hozAlign : 'center', title : "작성일", field :"REGDATE_TITLE" , widthGrow:1.1 }
|
||||
@@ -281,17 +281,16 @@ function fn_salesRequestTargetBOMListPopUp(){
|
||||
window.open(url,"salesRequestTargetBOMListPopUp","width=1300,height=550");
|
||||
}
|
||||
|
||||
//구매의뢰 요청 팝업
|
||||
//구매의뢰 요청 팝업 (요청번호 클릭 시 - 구매리스트 화면)
|
||||
function fn_openSalesRequestPopUp(objId){
|
||||
var url = "";
|
||||
|
||||
if("" == objId){
|
||||
url = "/salesMng/salesRequestFormPopUp.do?SALES_REQUEST_MASTER_OBJID="+objId;
|
||||
}else{
|
||||
//url = "/salesMng/salesRequestDetailPopUp.do?SALES_REQUEST_MASTER_OBJID="+objId;
|
||||
url = "/salesMng/salesRequestFormPopUp.do?SALES_REQUEST_MASTER_OBJID="+objId;
|
||||
}
|
||||
window.open(url,"salesRequestPopUp","width=1100,height=630");
|
||||
var url = "/salesMng/purchaseListFormPopUp.do?SALES_REQUEST_MASTER_OBJID="+objId;
|
||||
window.open(url,"purchaseListPopUp","width=1400,height=800,scrollbars=yes,resizable=yes");
|
||||
}
|
||||
|
||||
//구매요청서 작성 팝업 (구매요청서 파일 아이콘 클릭 시)
|
||||
function fn_openSalesRequestFormPopUp(objId){
|
||||
var url = "/salesMng/salesRequestFormPopUp.do?SALES_REQUEST_MASTER_OBJID="+objId;
|
||||
window.open(url,"salesRequestFormPopUp","width=1100,height=630");
|
||||
}
|
||||
|
||||
function fn_releaseSalesRequest(){
|
||||
|
||||
17
database/add_minimal_purchase_columns.sql
Normal file
17
database/add_minimal_purchase_columns.sql
Normal file
@@ -0,0 +1,17 @@
|
||||
-- SALES_REQUEST_PART 테이블에 구매리스트 필수 컬럼만 추가
|
||||
-- 기존: OBJID, PART_OBJID, SALES_REQUEST_MASTER_OBJID, QTY, PARTNER_OBJID, PARTNER_PRICE, WRITER, REGDATE 등
|
||||
|
||||
ALTER TABLE SALES_REQUEST_PART
|
||||
ADD COLUMN IF NOT EXISTS PART_NO VARCHAR(100), -- 품번 (직접 입력용)
|
||||
ADD COLUMN IF NOT EXISTS PART_NAME VARCHAR(200), -- 품명 (직접 입력용)
|
||||
ADD COLUMN IF NOT EXISTS UNIT_PRICE VARCHAR(50), -- 단가
|
||||
ADD COLUMN IF NOT EXISTS TOTAL_PRICE VARCHAR(50), -- 총단가
|
||||
ADD COLUMN IF NOT EXISTS PROPOSAL_DATE DATE; -- 품의서작성일
|
||||
|
||||
-- 컬럼 설명
|
||||
COMMENT ON COLUMN SALES_REQUEST_PART.PART_NO IS '품번';
|
||||
COMMENT ON COLUMN SALES_REQUEST_PART.PART_NAME IS '품명';
|
||||
COMMENT ON COLUMN SALES_REQUEST_PART.UNIT_PRICE IS '단가';
|
||||
COMMENT ON COLUMN SALES_REQUEST_PART.TOTAL_PRICE IS '총단가';
|
||||
COMMENT ON COLUMN SALES_REQUEST_PART.PROPOSAL_DATE IS '품의서작성일';
|
||||
|
||||
39
db/add_sales_request_part_purchase_columns.sql
Normal file
39
db/add_sales_request_part_purchase_columns.sql
Normal file
@@ -0,0 +1,39 @@
|
||||
-- SALES_REQUEST_PART 테이블에 구매관리 관련 컬럼 추가
|
||||
-- 실행 전 백업 권장
|
||||
|
||||
-- 사용여부
|
||||
ALTER TABLE SALES_REQUEST_PART ADD COLUMN IF NOT EXISTS USE_YN VARCHAR(1) DEFAULT 'Y';
|
||||
COMMENT ON COLUMN SALES_REQUEST_PART.USE_YN IS '사용여부 (Y/N)';
|
||||
|
||||
-- 정미수량
|
||||
ALTER TABLE SALES_REQUEST_PART ADD COLUMN IF NOT EXISTS NET_QTY NUMERIC DEFAULT 0;
|
||||
COMMENT ON COLUMN SALES_REQUEST_PART.NET_QTY IS '정미수량';
|
||||
|
||||
-- 발주수량
|
||||
ALTER TABLE SALES_REQUEST_PART ADD COLUMN IF NOT EXISTS PO_QTY NUMERIC DEFAULT 0;
|
||||
COMMENT ON COLUMN SALES_REQUEST_PART.PO_QTY IS '발주수량';
|
||||
|
||||
-- 공급업체2 (기준정보에서 선택)
|
||||
ALTER TABLE SALES_REQUEST_PART ADD COLUMN IF NOT EXISTS VENDOR_PM VARCHAR(255);
|
||||
COMMENT ON COLUMN SALES_REQUEST_PART.VENDOR_PM IS '공급업체2 (기준정보_협력업체관리)';
|
||||
|
||||
-- 단가
|
||||
ALTER TABLE SALES_REQUEST_PART ADD COLUMN IF NOT EXISTS UNIT_PRICE NUMERIC DEFAULT 0;
|
||||
COMMENT ON COLUMN SALES_REQUEST_PART.UNIT_PRICE IS '단가';
|
||||
|
||||
-- 총단가
|
||||
ALTER TABLE SALES_REQUEST_PART ADD COLUMN IF NOT EXISTS TOTAL_PRICE NUMERIC DEFAULT 0;
|
||||
COMMENT ON COLUMN SALES_REQUEST_PART.TOTAL_PRICE IS '총단가 (발주수량 * 단가)';
|
||||
|
||||
-- 품의서작성일
|
||||
ALTER TABLE SALES_REQUEST_PART ADD COLUMN IF NOT EXISTS PROPOSAL_DATE DATE;
|
||||
COMMENT ON COLUMN SALES_REQUEST_PART.PROPOSAL_DATE IS '품의서작성일';
|
||||
|
||||
-- 수정자
|
||||
ALTER TABLE SALES_REQUEST_PART ADD COLUMN IF NOT EXISTS EDITER VARCHAR(50);
|
||||
COMMENT ON COLUMN SALES_REQUEST_PART.EDITER IS '수정자';
|
||||
|
||||
-- 수정일
|
||||
ALTER TABLE SALES_REQUEST_PART ADD COLUMN IF NOT EXISTS EDIT_DATE TIMESTAMP;
|
||||
COMMENT ON COLUMN SALES_REQUEST_PART.EDIT_DATE IS '수정일';
|
||||
|
||||
@@ -663,6 +663,20 @@ VALUES
|
||||
SRM.PROJECT_NO,
|
||||
PM.PROJECT_NO AS PROJECT_NUMBER,
|
||||
PM.PROJECT_NAME,
|
||||
COALESCE(
|
||||
PM.OBJID,
|
||||
(SELECT OBJID FROM PROJECT_MGMT WHERE PROJECT_NO = SRM.PROJECT_NO LIMIT 1)
|
||||
) AS PROJECT_MGMT_OBJID,
|
||||
-- M-BOM 조회용: MBOM_HEADER에서 직접 OBJID 가져오기
|
||||
(SELECT MH.OBJID FROM MBOM_HEADER MH
|
||||
WHERE MH.PROJECT_OBJID = COALESCE(PM.OBJID, (SELECT OBJID FROM PROJECT_MGMT WHERE PROJECT_NO = SRM.PROJECT_NO LIMIT 1))
|
||||
AND MH.STATUS = 'Y'
|
||||
ORDER BY MH.REGDATE DESC LIMIT 1
|
||||
) AS MBOM_HEADER_OBJID,
|
||||
COALESCE(
|
||||
PM.BOM_REPORT_OBJID,
|
||||
(SELECT BOM_REPORT_OBJID FROM PROJECT_MGMT WHERE PROJECT_NO = SRM.PROJECT_NO LIMIT 1)
|
||||
) AS BOM_REPORT_OBJID,
|
||||
PM.SETUP,
|
||||
SM.SUPPLY_NAME AS CUSTOMER_NAME,
|
||||
SM.OBJID::VARCHAR AS CUSTOMER_OBJID, -- 고객사 OBJID (드롭다운 선택용)
|
||||
@@ -705,7 +719,7 @@ VALUES
|
||||
|
||||
FROM
|
||||
SALES_REQUEST_MASTER SRM
|
||||
LEFT JOIN PROJECT_MGMT PM ON SRM.PROJECT_NO = PM.OBJID::VARCHAR
|
||||
LEFT JOIN PROJECT_MGMT PM ON (SRM.PROJECT_NO = PM.OBJID::VARCHAR OR SRM.PROJECT_NO = PM.PROJECT_NO)
|
||||
LEFT JOIN CONTRACT_MGMT CM ON PM.CONTRACT_OBJID = CM.OBJID::VARCHAR
|
||||
LEFT JOIN SUPPLY_MNG SM ON CM.CUSTOMER_OBJID::VARCHAR = SM.OBJID::VARCHAR
|
||||
LEFT JOIN PURCHASE_ORDER_MASTER POM ON SRM.OBJID = POM.SALES_REQUEST_OBJID
|
||||
@@ -1242,31 +1256,51 @@ VALUES
|
||||
AND PM.OBJID = #{PROJECT_NO}
|
||||
</select>
|
||||
|
||||
<!-- 전체 품목 조회 (M-BOM이 없을 때 사용) -->
|
||||
<select id="getAllPartMngList" parameterType="map" resultType="map">
|
||||
SELECT
|
||||
PM.OBJID,
|
||||
PM.PART_NO,
|
||||
PM.PART_NAME,
|
||||
PM.SPEC,
|
||||
PM.MAKER,
|
||||
PM.MATERIAL,
|
||||
PM.UNIT,
|
||||
(SELECT CODE_NAME FROM COMM_CODE WHERE CODE_ID = PM.UNIT) AS UNIT_TITLE
|
||||
FROM PART_MNG PM
|
||||
WHERE 1=1
|
||||
AND PM.IS_LAST = '1'
|
||||
ORDER BY PM.PART_NO
|
||||
LIMIT 500
|
||||
</select>
|
||||
|
||||
<select id="SalesBomPartListByProjectUnit" parameterType="map" resultType="map">
|
||||
<!-- M-BOM 데이터 조회: PROJECT_MGMT.BOM_REPORT_OBJID -> BOM_PART_QTY -> PART_MNG -->
|
||||
<!-- M-BOM 데이터 조회: getMbomList와 동일한 조인 방식 사용 (BPQ.PART_NO = PM.PART_NO) -->
|
||||
SELECT
|
||||
BPQ.BOM_REPORT_OBJID
|
||||
,BPQ.PART_NO AS PART_OBJID
|
||||
,PM.PART_NAME
|
||||
,PM.PART_NO
|
||||
,PM.SPEC
|
||||
,PM.MAKER
|
||||
,PM.REMARK
|
||||
,PM.UNIT
|
||||
,COALESCE(PM.PART_NO, BPQ.PART_NO, '') AS PART_NO
|
||||
,COALESCE(PM.PART_NAME, '') AS PART_NAME
|
||||
,COALESCE(PM.PART_NAME, '') AS PART_FULL_NAME
|
||||
,COALESCE(PM.SPEC, '') AS SPEC
|
||||
,BPQ.QTY AS ORDER_QTY
|
||||
,COALESCE(PM.MAKER, '') AS MAKER
|
||||
,'' AS REMARK
|
||||
,'' AS UNIT
|
||||
,NULL AS SUPPLY_OBJID
|
||||
,NULL AS WRITER
|
||||
FROM
|
||||
PROJECT_MGMT AS PJT
|
||||
INNER JOIN BOM_PART_QTY AS BPQ
|
||||
ON PJT.BOM_REPORT_OBJID = BPQ.BOM_REPORT_OBJID::VARCHAR
|
||||
LEFT JOIN PART_MNG AS PM
|
||||
ON COALESCE(NULLIF(BPQ.LAST_PART_OBJID, ''), BPQ.PART_NO) = PM.OBJID::VARCHAR
|
||||
INNER JOIN BOM_PART_QTY AS BPQ
|
||||
ON PJT.BOM_REPORT_OBJID::VARCHAR = BPQ.BOM_REPORT_OBJID::VARCHAR
|
||||
LEFT JOIN PART_MGMT AS PM
|
||||
ON BPQ.PART_NO = PM.PART_NO
|
||||
WHERE 1=1
|
||||
AND PJT.OBJID = #{PROJECT_OBJID}
|
||||
AND PJT.OBJID::VARCHAR = #{PROJECT_OBJID}
|
||||
AND COALESCE(BPQ.STATUS, '') NOT IN ('deleting', 'deleted')
|
||||
AND PJT.BOM_REPORT_OBJID IS NOT NULL
|
||||
AND PJT.BOM_REPORT_OBJID != ''
|
||||
ORDER BY BPQ.SEQ, PM.PART_NO
|
||||
ORDER BY BPQ.SEQ
|
||||
</select>
|
||||
|
||||
<update id="mergeReceiptSalesRequestInfo" parameterType="map">
|
||||
@@ -2775,18 +2809,19 @@ UPDATE SET
|
||||
</update>
|
||||
|
||||
<!-- 구매리스트 관련 쿼리 -->
|
||||
<!-- M-BOM에서 가져온 PART_OBJID는 BPQ.PART_NO 값이므로 PART_MGMT.PART_NO와 조인 -->
|
||||
<select id="getSalesRequestPartList" parameterType="string" resultType="map">
|
||||
SELECT
|
||||
SRP.OBJID,
|
||||
SRP.PART_OBJID,
|
||||
PM.PART_NO,
|
||||
PM.PART_NAME,
|
||||
COALESCE(PM.PART_NO, '') AS PART_NO,
|
||||
COALESCE(PM.PART_NAME, '') AS PART_NAME,
|
||||
SRP.QTY,
|
||||
SRP.PARTNER_OBJID,
|
||||
SRP.PARTNER_PRICE
|
||||
FROM
|
||||
SALES_REQUEST_PART SRP
|
||||
LEFT JOIN PART_MNG PM ON SRP.PART_OBJID = PM.OBJID::VARCHAR
|
||||
LEFT JOIN PART_MGMT PM ON SRP.PART_OBJID = PM.PART_NO
|
||||
WHERE
|
||||
SRP.SALES_REQUEST_MASTER_OBJID = #{SALES_REQUEST_MASTER_OBJID}
|
||||
ORDER BY SRP.REGDATE
|
||||
@@ -2895,5 +2930,347 @@ UPDATE SET
|
||||
UNIT_PRICE = #{UNIT_PRICE},
|
||||
TOTAL_PRICE = #{TOTAL_PRICE}
|
||||
</update>
|
||||
|
||||
<!-- 구매리스트 상세 조회 (기존 저장된 데이터) -->
|
||||
<select id="getPurchaseListDetail" parameterType="map" resultType="com.pms.common.UpperKeyMap">
|
||||
<!-- SALES_REQUEST_PART에서 저장된 데이터 조회, PART_MNG에서 품목정보 가져옴 -->
|
||||
SELECT
|
||||
SRP.OBJID,
|
||||
SRP.SALES_REQUEST_MASTER_OBJID,
|
||||
SRP.PART_OBJID,
|
||||
COALESCE(PM.PART_NO, '') AS PART_NO,
|
||||
COALESCE(PM.PART_NAME, '') AS PART_NAME,
|
||||
SRP.QTY,
|
||||
0 AS ITEM_QTY,
|
||||
-- 파일 개수
|
||||
(SELECT COUNT(1) FROM ATTACH_FILE_INFO F WHERE PM.OBJID = F.TARGET_OBJID AND F.STATUS = 'Active' AND F.DOC_TYPE IN ('3D_CAD')) AS CU01_CNT,
|
||||
(SELECT COUNT(1) FROM ATTACH_FILE_INFO F WHERE PM.OBJID = F.TARGET_OBJID AND F.STATUS = 'Active' AND F.DOC_TYPE IN ('2D_DRAWING_CAD')) AS CU02_CNT,
|
||||
(SELECT COUNT(1) FROM ATTACH_FILE_INFO F WHERE PM.OBJID = F.TARGET_OBJID AND F.STATUS = 'Active' AND F.DOC_TYPE IN ('2D_PDF_CAD')) AS CU03_CNT,
|
||||
COALESCE(PM.MATERIAL, '') AS MATERIAL,
|
||||
COALESCE(PM.HEAT_TREATMENT_HARDNESS, '') AS HEAT_TREATMENT_HARDNESS,
|
||||
COALESCE(PM.HEAT_TREATMENT_METHOD, '') AS HEAT_TREATMENT_METHOD,
|
||||
COALESCE(PM.SURFACE_TREATMENT, '') AS SURFACE_TREATMENT,
|
||||
COALESCE(PM.MAKER, '') AS VENDOR,
|
||||
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = PM.PART_TYPE) AS PART_TYPE_TITLE,
|
||||
'' AS SUPPLY_TYPE,
|
||||
'' AS RAW_MATERIAL,
|
||||
'' AS SIZE,
|
||||
'' AS RAW_MATERIAL_NO,
|
||||
0 AS REQUIRED_QTY,
|
||||
0 AS ORDER_QTY,
|
||||
0 AS ITEM_QTY2,
|
||||
0 AS PRODUCTION_QTY,
|
||||
'' AS PROCESSING_VENDOR,
|
||||
NULL AS PROCESSING_DEADLINE,
|
||||
NULL AS GRINDING_DEADLINE,
|
||||
-- 구매 관련 컬럼 (SALES_REQUEST_PART에서 조회)
|
||||
COALESCE(SRP.USE_YN, 'Y') AS USE_YN,
|
||||
COALESCE(SRP.NET_QTY, 0) AS NET_QTY,
|
||||
COALESCE(SRP.PO_QTY, 0) AS PO_QTY,
|
||||
COALESCE(SRP.VENDOR_PM, SRP.PARTNER_OBJID) AS VENDOR_PM,
|
||||
COALESCE(SRP.UNIT_PRICE, NULLIF(SRP.PARTNER_PRICE, '')::numeric, 0) AS UNIT_PRICE,
|
||||
COALESCE(SRP.TOTAL_PRICE, 0) AS TOTAL_PRICE,
|
||||
SRP.PROPOSAL_DATE,
|
||||
'SRP' AS DATA_SOURCE -- 데이터 소스 구분용
|
||||
FROM
|
||||
SALES_REQUEST_PART SRP
|
||||
LEFT JOIN PART_MNG PM ON SRP.PART_OBJID::VARCHAR = PM.OBJID::VARCHAR
|
||||
WHERE
|
||||
SRP.SALES_REQUEST_MASTER_OBJID = #{SALES_REQUEST_MASTER_OBJID}
|
||||
ORDER BY
|
||||
SRP.REGDATE
|
||||
</select>
|
||||
|
||||
<!-- M-BOM에서 구매리스트 데이터 가져오기 (STATUS 조건 없음, LEFT JOIN으로 모든 데이터 조회) -->
|
||||
<select id="getMBomForPurchaseList" parameterType="map" resultType="com.pms.common.UpperKeyMap">
|
||||
WITH RECURSIVE VIEW_BOM(
|
||||
MBOM_HEADER_OBJID,
|
||||
OBJID,
|
||||
PARENT_OBJID,
|
||||
CHILD_OBJID,
|
||||
PART_OBJID,
|
||||
PART_NO,
|
||||
PART_NAME,
|
||||
QTY,
|
||||
ITEM_QTY,
|
||||
QTY_TEMP,
|
||||
REGDATE,
|
||||
SEQ,
|
||||
STATUS,
|
||||
LEV,
|
||||
PATH,
|
||||
PATH2,
|
||||
CYCLE,
|
||||
UNIT,
|
||||
SUPPLY_TYPE,
|
||||
MAKE_OR_BUY,
|
||||
RAW_MATERIAL_PART_NO,
|
||||
RAW_MATERIAL_SPEC,
|
||||
RAW_MATERIAL,
|
||||
RAW_MATERIAL_SIZE,
|
||||
PROCESSING_VENDOR,
|
||||
PROCESSING_DEADLINE,
|
||||
GRINDING_DEADLINE,
|
||||
REQUIRED_QTY,
|
||||
ORDER_QTY,
|
||||
PRODUCTION_QTY,
|
||||
STOCK_QTY,
|
||||
SHORTAGE_QTY,
|
||||
VENDOR,
|
||||
UNIT_PRICE,
|
||||
TOTAL_PRICE,
|
||||
CURRENCY,
|
||||
LEAD_TIME,
|
||||
MIN_ORDER_QTY,
|
||||
WRITER,
|
||||
EDITER,
|
||||
EDIT_DATE,
|
||||
REMARK,
|
||||
USE_YN,
|
||||
NET_QTY,
|
||||
PO_QTY,
|
||||
PROPOSAL_DATE
|
||||
) AS (
|
||||
SELECT
|
||||
A.MBOM_HEADER_OBJID,
|
||||
A.OBJID,
|
||||
A.PARENT_OBJID,
|
||||
A.CHILD_OBJID,
|
||||
A.PART_OBJID,
|
||||
A.PART_NO,
|
||||
A.PART_NAME,
|
||||
A.QTY,
|
||||
A.QTY,
|
||||
A.QTY,
|
||||
A.REGDATE,
|
||||
A.SEQ,
|
||||
A.STATUS,
|
||||
1,
|
||||
ARRAY [A.CHILD_OBJID::TEXT],
|
||||
ARRAY [A.SEQ::TEXT],
|
||||
FALSE,
|
||||
A.UNIT,
|
||||
A.SUPPLY_TYPE,
|
||||
A.MAKE_OR_BUY,
|
||||
A.RAW_MATERIAL_PART_NO,
|
||||
A.RAW_MATERIAL_SPEC,
|
||||
A.RAW_MATERIAL,
|
||||
A.RAW_MATERIAL_SIZE,
|
||||
A.PROCESSING_VENDOR,
|
||||
A.PROCESSING_DEADLINE,
|
||||
A.GRINDING_DEADLINE,
|
||||
A.REQUIRED_QTY,
|
||||
A.ORDER_QTY,
|
||||
A.PRODUCTION_QTY,
|
||||
A.STOCK_QTY,
|
||||
A.SHORTAGE_QTY,
|
||||
A.VENDOR,
|
||||
A.UNIT_PRICE,
|
||||
A.TOTAL_PRICE,
|
||||
A.CURRENCY,
|
||||
A.LEAD_TIME,
|
||||
A.MIN_ORDER_QTY,
|
||||
A.WRITER,
|
||||
A.EDITER,
|
||||
A.EDIT_DATE,
|
||||
A.REMARK,
|
||||
COALESCE(A.USE_YN, 'Y'),
|
||||
COALESCE(A.NET_QTY, 0),
|
||||
COALESCE(A.PO_QTY, 0),
|
||||
A.PROPOSAL_DATE
|
||||
FROM
|
||||
MBOM_DETAIL A
|
||||
INNER JOIN MBOM_HEADER MH ON MH.OBJID = A.MBOM_HEADER_OBJID
|
||||
WHERE 1=1
|
||||
AND (A.PARENT_OBJID IS NULL OR A.PARENT_OBJID = '')
|
||||
AND (
|
||||
MH.PROJECT_OBJID::VARCHAR = #{PROJECT_MGMT_OBJID}
|
||||
OR MH.OBJID::VARCHAR = #{PROJECT_MGMT_OBJID}
|
||||
)
|
||||
<!-- STATUS 조건 제거하여 모든 데이터 조회 -->
|
||||
|
||||
UNION ALL
|
||||
|
||||
SELECT
|
||||
B.MBOM_HEADER_OBJID,
|
||||
B.OBJID,
|
||||
B.PARENT_OBJID,
|
||||
B.CHILD_OBJID,
|
||||
B.PART_OBJID,
|
||||
B.PART_NO,
|
||||
B.PART_NAME,
|
||||
B.QTY,
|
||||
B.QTY,
|
||||
B.QTY,
|
||||
B.REGDATE,
|
||||
B.SEQ,
|
||||
B.STATUS,
|
||||
LEV + 1,
|
||||
PATH||B.CHILD_OBJID::TEXT,
|
||||
PATH2||B.SEQ::TEXT,
|
||||
B.PARENT_OBJID = ANY(PATH),
|
||||
B.UNIT,
|
||||
B.SUPPLY_TYPE,
|
||||
B.MAKE_OR_BUY,
|
||||
B.RAW_MATERIAL_PART_NO,
|
||||
B.RAW_MATERIAL_SPEC,
|
||||
B.RAW_MATERIAL,
|
||||
B.RAW_MATERIAL_SIZE,
|
||||
B.PROCESSING_VENDOR,
|
||||
B.PROCESSING_DEADLINE,
|
||||
B.GRINDING_DEADLINE,
|
||||
B.REQUIRED_QTY,
|
||||
B.ORDER_QTY,
|
||||
B.PRODUCTION_QTY,
|
||||
B.STOCK_QTY,
|
||||
B.SHORTAGE_QTY,
|
||||
B.VENDOR,
|
||||
B.UNIT_PRICE,
|
||||
B.TOTAL_PRICE,
|
||||
B.CURRENCY,
|
||||
B.LEAD_TIME,
|
||||
B.MIN_ORDER_QTY,
|
||||
B.WRITER,
|
||||
B.EDITER,
|
||||
B.EDIT_DATE,
|
||||
B.REMARK,
|
||||
COALESCE(B.USE_YN, 'Y'),
|
||||
COALESCE(B.NET_QTY, 0),
|
||||
COALESCE(B.PO_QTY, 0),
|
||||
B.PROPOSAL_DATE
|
||||
FROM
|
||||
MBOM_DETAIL B
|
||||
JOIN
|
||||
VIEW_BOM
|
||||
ON B.PARENT_OBJID = VIEW_BOM.CHILD_OBJID
|
||||
AND VIEW_BOM.MBOM_HEADER_OBJID = B.MBOM_HEADER_OBJID
|
||||
<!-- STATUS 조건 제거하여 모든 데이터 조회 -->
|
||||
)
|
||||
SELECT
|
||||
V.MBOM_HEADER_OBJID AS BOM_REPORT_OBJID,
|
||||
V.OBJID,
|
||||
V.PARENT_OBJID,
|
||||
V.CHILD_OBJID,
|
||||
V.PART_OBJID,
|
||||
V.PART_OBJID AS LAST_PART_OBJID,
|
||||
V.PART_OBJID AS BOM_LAST_PART_OBJID,
|
||||
V.PART_NO,
|
||||
V.PART_NAME,
|
||||
V.QTY,
|
||||
V.ITEM_QTY,
|
||||
V.QTY_TEMP,
|
||||
V.LEV AS LEVEL,
|
||||
(SELECT COUNT(*) FROM MBOM_DETAIL WHERE PARENT_OBJID = V.CHILD_OBJID) AS SUB_PART_CNT,
|
||||
V.SEQ,
|
||||
V.STATUS,
|
||||
-- M-BOM 전용 필드
|
||||
V.UNIT,
|
||||
V.SUPPLY_TYPE,
|
||||
V.MAKE_OR_BUY,
|
||||
V.RAW_MATERIAL_PART_NO AS RAW_MATERIAL_NO,
|
||||
V.RAW_MATERIAL_SPEC,
|
||||
V.RAW_MATERIAL,
|
||||
V.RAW_MATERIAL_SIZE AS SIZE,
|
||||
V.PROCESSING_VENDOR,
|
||||
V.PROCESSING_DEADLINE,
|
||||
V.GRINDING_DEADLINE,
|
||||
V.REQUIRED_QTY,
|
||||
V.ORDER_QTY,
|
||||
V.PRODUCTION_QTY,
|
||||
V.STOCK_QTY,
|
||||
V.SHORTAGE_QTY,
|
||||
V.VENDOR AS VENDOR_PM,
|
||||
V.UNIT_PRICE,
|
||||
V.TOTAL_PRICE,
|
||||
V.CURRENCY,
|
||||
V.LEAD_TIME,
|
||||
V.MIN_ORDER_QTY,
|
||||
V.WRITER,
|
||||
TO_CHAR(V.REGDATE, 'YYYY-MM-DD HH24:MI:SS') AS REGDATE,
|
||||
V.EDITER,
|
||||
CASE WHEN V.EDIT_DATE IS NOT NULL THEN TO_CHAR(V.EDIT_DATE, 'YYYY-MM-DD HH24:MI:SS') ELSE NULL END AS EDIT_DATE,
|
||||
V.REMARK,
|
||||
-- E-BOM 호환 필드
|
||||
NULL AS PARENT_PART_NO,
|
||||
NULL AS CONTRACT_OBJID,
|
||||
CASE WHEN V.LEV = 1 THEN V.OBJID ELSE NULL END AS ROOT_OBJID,
|
||||
CASE WHEN V.LEV = 1 THEN V.OBJID ELSE NULL END AS SUB_ROOT_OBJID,
|
||||
1 AS LEAF,
|
||||
-- PART_MNG 테이블에서 추가 정보 (LEFT JOIN으로 PART_MNG에 없는 품번도 표시)
|
||||
P.SPEC,
|
||||
COALESCE(P.MATERIAL, V.RAW_MATERIAL) AS MATERIAL,
|
||||
P.WEIGHT,
|
||||
P.PART_TYPE,
|
||||
P.REVISION,
|
||||
COALESCE(P.MAKER, V.VENDOR) AS VENDOR,
|
||||
P.THICKNESS,
|
||||
P.WIDTH,
|
||||
P.HEIGHT,
|
||||
P.OUT_DIAMETER,
|
||||
P.IN_DIAMETER,
|
||||
P.LENGTH,
|
||||
P.SOURCING_CODE,
|
||||
COALESCE(P.HEAT_TREATMENT_HARDNESS, '') AS HEAT_TREATMENT_HARDNESS,
|
||||
COALESCE(P.HEAT_TREATMENT_METHOD, '') AS HEAT_TREATMENT_METHOD,
|
||||
COALESCE(P.SURFACE_TREATMENT, '') AS SURFACE_TREATMENT,
|
||||
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = P.UNIT) AS UNIT_TITLE,
|
||||
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = P.PART_TYPE) AS PART_TYPE_TITLE,
|
||||
(SELECT COUNT(1) FROM ATTACH_FILE_INFO F WHERE P.OBJID = F.TARGET_OBJID AND F.STATUS = 'Active' AND F.DOC_TYPE IN ('3D_CAD')) AS CU01_CNT,
|
||||
(SELECT COUNT(1) FROM ATTACH_FILE_INFO F WHERE P.OBJID = F.TARGET_OBJID AND F.STATUS = 'Active' AND F.DOC_TYPE IN ('2D_DRAWING_CAD')) AS CU02_CNT,
|
||||
(SELECT COUNT(1) FROM ATTACH_FILE_INFO F WHERE P.OBJID = F.TARGET_OBJID AND F.STATUS = 'Active' AND F.DOC_TYPE IN ('2D_PDF_CAD')) AS CU03_CNT,
|
||||
V.LEV,
|
||||
-- 구매 컬럼들 (VIEW_BOM에서 가져온 MBOM_DETAIL 값)
|
||||
V.USE_YN,
|
||||
V.NET_QTY,
|
||||
V.PO_QTY,
|
||||
V.PROPOSAL_DATE,
|
||||
'MBOM' AS DATA_SOURCE -- 데이터 소스 구분용
|
||||
FROM VIEW_BOM V
|
||||
LEFT JOIN PART_MNG P ON P.OBJID::VARCHAR = V.PART_OBJID::VARCHAR
|
||||
WHERE 1=1
|
||||
ORDER BY V.PATH2
|
||||
</select>
|
||||
|
||||
<!-- PROJECT_OBJID로 MBOM_HEADER 조회 (PROJECT_MGMT.SOURCE_MBOM_OBJID 우선 사용) -->
|
||||
<select id="getMbomHeaderByProjectId" parameterType="map" resultType="map">
|
||||
SELECT
|
||||
COALESCE(PM.SOURCE_MBOM_OBJID::VARCHAR, MH.OBJID::VARCHAR) AS OBJID,
|
||||
PM.OBJID AS PROJECT_OBJID,
|
||||
PM.PROJECT_NO
|
||||
FROM PROJECT_MGMT PM
|
||||
LEFT JOIN MBOM_HEADER MH ON MH.PROJECT_OBJID = PM.OBJID
|
||||
WHERE PM.OBJID::VARCHAR = #{projectObjId}
|
||||
ORDER BY MH.REGDATE DESC
|
||||
LIMIT 1
|
||||
</select>
|
||||
|
||||
<!-- 구매리스트 저장 - MBOM_DETAIL 업데이트 -->
|
||||
<update id="updateMbomDetailForPurchase" parameterType="map">
|
||||
UPDATE MBOM_DETAIL SET
|
||||
USE_YN = #{USE_YN},
|
||||
NET_QTY = COALESCE(NULLIF(TRIM(#{NET_QTY}::TEXT), '')::NUMERIC, 0),
|
||||
PO_QTY = COALESCE(NULLIF(TRIM(#{PO_QTY}::TEXT), '')::NUMERIC, 0),
|
||||
VENDOR = #{VENDOR_PM},
|
||||
UNIT_PRICE = COALESCE(NULLIF(TRIM(#{UNIT_PRICE}::TEXT), '')::NUMERIC, 0),
|
||||
TOTAL_PRICE = COALESCE(NULLIF(TRIM(#{TOTAL_PRICE}::TEXT), '')::NUMERIC, 0),
|
||||
PROPOSAL_DATE = CASE WHEN NULLIF(TRIM(#{PROPOSAL_DATE}::TEXT), '') IS NOT NULL THEN #{PROPOSAL_DATE}::DATE ELSE NULL END,
|
||||
EDITER = #{EDITER},
|
||||
EDIT_DATE = NOW()
|
||||
WHERE OBJID::VARCHAR = #{OBJID}
|
||||
</update>
|
||||
|
||||
<!-- 구매리스트 저장 - SALES_REQUEST_PART 업데이트 -->
|
||||
<update id="updateSalesRequestPartForPurchase" parameterType="map">
|
||||
UPDATE SALES_REQUEST_PART SET
|
||||
USE_YN = #{USE_YN},
|
||||
NET_QTY = COALESCE(NULLIF(TRIM(#{NET_QTY}::TEXT), '')::NUMERIC, 0),
|
||||
PO_QTY = COALESCE(NULLIF(TRIM(#{PO_QTY}::TEXT), '')::NUMERIC, 0),
|
||||
VENDOR_PM = #{VENDOR_PM},
|
||||
UNIT_PRICE = COALESCE(NULLIF(TRIM(#{UNIT_PRICE}::TEXT), '')::NUMERIC, 0),
|
||||
TOTAL_PRICE = COALESCE(NULLIF(TRIM(#{TOTAL_PRICE}::TEXT), '')::NUMERIC, 0),
|
||||
PROPOSAL_DATE = CASE WHEN NULLIF(TRIM(#{PROPOSAL_DATE}::TEXT), '') IS NOT NULL THEN #{PROPOSAL_DATE}::DATE ELSE NULL END,
|
||||
WRITER = #{EDITER}
|
||||
WHERE OBJID::VARCHAR = #{OBJID}
|
||||
</update>
|
||||
|
||||
</mapper>
|
||||
@@ -1095,23 +1095,90 @@ public class SalesMngController {
|
||||
*/
|
||||
@RequestMapping("/salesMng/purchaseListFormPopUp.do")
|
||||
public String purchaseListFormPopUp(HttpServletRequest request, @RequestParam Map paramMap){
|
||||
Map resultMap = new HashMap();
|
||||
try{
|
||||
String salesRequestMasterObjId = CommonUtils.checkNull(paramMap.get("SALES_REQUEST_MASTER_OBJID"));
|
||||
String projectMgmtObjId = CommonUtils.checkNull(paramMap.get("PROJECT_MGMT_OBJID"));
|
||||
|
||||
if(!"".equals(salesRequestMasterObjId)){
|
||||
// 기존 구매리스트 조회
|
||||
resultMap = salesMngService.getSalesRequestMasterInfo(request, paramMap);
|
||||
}else if(!"".equals(projectMgmtObjId)){
|
||||
// M-BOM에서 새로 생성
|
||||
resultMap.put("OBJID", CommonUtils.createObjId());
|
||||
resultMap.put("STATUS", "create");
|
||||
}else{
|
||||
resultMap.put("OBJID", CommonUtils.createObjId());
|
||||
resultMap.put("STATUS", "create");
|
||||
}
|
||||
}catch(Exception e){
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
request.setAttribute("resultMap", resultMap);
|
||||
return "/salesMng/purchaseListFormPopUp";
|
||||
}
|
||||
|
||||
/**
|
||||
* 구매리스트 데이터 조회
|
||||
* 구매리스트 상세 조회 (기존 구매리스트)
|
||||
* @param request
|
||||
* @param paramMap
|
||||
* @return
|
||||
*/
|
||||
@ResponseBody
|
||||
@RequestMapping("/salesMng/getPurchaseListData.do")
|
||||
public Map getPurchaseListData(HttpServletRequest request, @RequestParam Map<String, Object> paramMap){
|
||||
@RequestMapping("/salesMng/getPurchaseListDetail.do")
|
||||
public Map getPurchaseListDetail(HttpServletRequest request, @RequestParam Map<String, Object> paramMap){
|
||||
Map resultMap = new HashMap();
|
||||
try{
|
||||
resultMap = salesMngService.getPurchaseListData(request, paramMap);
|
||||
List<Map> list = salesMngService.getPurchaseListDetail(request, paramMap);
|
||||
resultMap.put("list", list);
|
||||
}catch(Exception e){
|
||||
e.printStackTrace();
|
||||
resultMap.put("list", new ArrayList());
|
||||
}
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
/**
|
||||
* M-BOM에서 구매리스트 생성
|
||||
* @param request
|
||||
* @param paramMap
|
||||
* @return
|
||||
*/
|
||||
@ResponseBody
|
||||
@RequestMapping("/salesMng/getMBomForPurchaseList.do")
|
||||
public Map getMBomForPurchaseList(HttpServletRequest request, @RequestParam Map<String, Object> paramMap){
|
||||
Map resultMap = new HashMap();
|
||||
try{
|
||||
System.out.println("========== getMBomForPurchaseList 호출 ==========");
|
||||
System.out.println("paramMap: " + paramMap);
|
||||
System.out.println("PROJECT_MGMT_OBJID: " + paramMap.get("PROJECT_MGMT_OBJID"));
|
||||
System.out.println("bomReportObjId: " + paramMap.get("bomReportObjId"));
|
||||
|
||||
List<Map> list = salesMngService.getMBomForPurchaseList(request, paramMap);
|
||||
|
||||
// 키를 대문자로 변환
|
||||
List<Map<String, Object>> upperList = new ArrayList<Map<String, Object>>();
|
||||
if(list != null) {
|
||||
for(Map item : list) {
|
||||
Map<String, Object> upperItem = new HashMap<String, Object>();
|
||||
for(Object key : item.keySet()) {
|
||||
upperItem.put(key.toString().toUpperCase(), item.get(key));
|
||||
}
|
||||
upperList.add(upperItem);
|
||||
}
|
||||
}
|
||||
|
||||
System.out.println("결과 리스트 크기: " + upperList.size());
|
||||
if(!upperList.isEmpty()) {
|
||||
System.out.println("첫번째 항목: " + upperList.get(0));
|
||||
}
|
||||
|
||||
resultMap.put("list", upperList);
|
||||
}catch(Exception e){
|
||||
System.out.println("getMBomForPurchaseList 오류 발생!");
|
||||
e.printStackTrace();
|
||||
resultMap.put("list", new ArrayList());
|
||||
}
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
@@ -1736,15 +1736,23 @@ public class SalesMngService {
|
||||
try {
|
||||
sqlSession = SqlMapConfig.getInstance().getSqlSession(false);
|
||||
String salesRequestMasterObjid = CommonUtils.checkNull(paramMap.get("SALES_REQUEST_MASTER_OBJID"));
|
||||
String partListJson = CommonUtils.checkNull(paramMap.get("partList"));
|
||||
String purchaseListJson = CommonUtils.checkNull(paramMap.get("purchaseListData"));
|
||||
|
||||
// JSON 파싱 - 기존 코드 참고하여 간단하게 처리
|
||||
// partListJson이 이미 파싱된 상태일 수 있으므로 직접 처리
|
||||
List<Map> partList = new ArrayList<Map>();
|
||||
// TODO: JSON 파싱 로직 추가 필요
|
||||
System.out.println("========== savePurchaseList ==========");
|
||||
System.out.println("salesRequestMasterObjid: " + salesRequestMasterObjid);
|
||||
System.out.println("purchaseListJson length: " + purchaseListJson.length());
|
||||
|
||||
if(partList == null || partList.isEmpty()) {
|
||||
resultMap.put("result", "error");
|
||||
// JSON 파싱
|
||||
List<Map> purchaseList = new ArrayList<Map>();
|
||||
if(purchaseListJson != null && !purchaseListJson.isEmpty()) {
|
||||
org.codehaus.jackson.map.ObjectMapper mapper = new org.codehaus.jackson.map.ObjectMapper();
|
||||
purchaseList = mapper.readValue(purchaseListJson, List.class);
|
||||
}
|
||||
|
||||
System.out.println("purchaseList size: " + purchaseList.size());
|
||||
|
||||
if(purchaseList == null || purchaseList.isEmpty()) {
|
||||
resultMap.put("resultFlag", "F");
|
||||
resultMap.put("message", "저장할 데이터가 없습니다.");
|
||||
return resultMap;
|
||||
}
|
||||
@@ -1754,29 +1762,36 @@ public class SalesMngService {
|
||||
PersonBean personBean = (PersonBean) session.getAttribute(Constants.PERSON_BEAN);
|
||||
String userId = personBean.getUserId();
|
||||
|
||||
// 각 품목별로 구매리스트 정보 저장
|
||||
for(Map partData : partList) {
|
||||
String objid = CommonUtils.checkNull(partData.get("OBJID"));
|
||||
// 각 품목별로 데이터 소스에 따라 다른 테이블 업데이트
|
||||
for(Map itemData : purchaseList) {
|
||||
String objid = CommonUtils.checkNull(itemData.get("OBJID"));
|
||||
String dataSource = CommonUtils.checkNull(itemData.get("DATA_SOURCE"));
|
||||
|
||||
if(objid.isEmpty()) {
|
||||
objid = CommonUtils.createObjId();
|
||||
System.out.println("OBJID가 없는 항목 스킵");
|
||||
continue;
|
||||
}
|
||||
|
||||
partData.put("OBJID", objid);
|
||||
partData.put("SALES_REQUEST_MASTER_OBJID", salesRequestMasterObjid);
|
||||
partData.put("WRITER", userId);
|
||||
itemData.put("EDITER", userId);
|
||||
|
||||
// SALES_REQUEST_PART 테이블에 저장
|
||||
sqlSession.insert("salesMng.mergePurchaseListInfo", partData);
|
||||
if("SRP".equals(dataSource)) {
|
||||
// SALES_REQUEST_PART 테이블 업데이트 (구매요청서에서 수동 추가한 품목)
|
||||
System.out.println("SALES_REQUEST_PART 업데이트: " + objid);
|
||||
sqlSession.update("salesMng.updateSalesRequestPartForPurchase", itemData);
|
||||
} else {
|
||||
// MBOM_DETAIL 테이블 업데이트 (M-BOM에서 가져온 품목)
|
||||
System.out.println("MBOM_DETAIL 업데이트: " + objid);
|
||||
sqlSession.update("salesMng.updateMbomDetailForPurchase", itemData);
|
||||
}
|
||||
}
|
||||
|
||||
resultMap.put("result", "success");
|
||||
resultMap.put("resultFlag", "S");
|
||||
resultMap.put("message", "저장되었습니다.");
|
||||
sqlSession.commit();
|
||||
|
||||
} catch(Exception e) {
|
||||
if(sqlSession != null) sqlSession.rollback();
|
||||
resultMap.put("result", "error");
|
||||
resultMap.put("resultFlag", "F");
|
||||
resultMap.put("message", "저장 중 오류가 발생했습니다: " + e.getMessage());
|
||||
e.printStackTrace();
|
||||
} finally {
|
||||
@@ -1785,4 +1800,53 @@ public class SalesMngService {
|
||||
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
/**
|
||||
* 구매리스트 상세 조회 (기존 저장된 데이터)
|
||||
* @param request
|
||||
* @param paramMap
|
||||
* @return
|
||||
* @throws Exception
|
||||
*/
|
||||
public List<Map> getPurchaseListDetail(HttpServletRequest request, Map<String, Object> paramMap) throws Exception {
|
||||
SqlSession sqlSession = null;
|
||||
List<Map> resultList = new ArrayList<Map>();
|
||||
|
||||
try {
|
||||
sqlSession = SqlMapConfig.getInstance().getSqlSession(false);
|
||||
resultList = sqlSession.selectList("salesMng.getPurchaseListDetail", paramMap);
|
||||
} catch(Exception e) {
|
||||
e.printStackTrace();
|
||||
throw e;
|
||||
} finally {
|
||||
if(sqlSession != null) sqlSession.close();
|
||||
}
|
||||
|
||||
return resultList;
|
||||
}
|
||||
|
||||
/**
|
||||
* M-BOM에서 구매리스트 데이터 가져오기
|
||||
* @param request
|
||||
* @param paramMap
|
||||
* @return
|
||||
* @throws Exception
|
||||
*/
|
||||
public List<Map> getMBomForPurchaseList(HttpServletRequest request, Map<String, Object> paramMap) throws Exception {
|
||||
SqlSession sqlSession = null;
|
||||
List<Map> resultList = new ArrayList<Map>();
|
||||
|
||||
try {
|
||||
sqlSession = SqlMapConfig.getInstance().getSqlSession(false);
|
||||
// M-BOM 데이터 조회 (레벨 구조 없이 평평하게)
|
||||
resultList = sqlSession.selectList("salesMng.getMBomForPurchaseList", paramMap);
|
||||
} catch(Exception e) {
|
||||
e.printStackTrace();
|
||||
throw e;
|
||||
} finally {
|
||||
if(sqlSession != null) sqlSession.close();
|
||||
}
|
||||
|
||||
return resultList;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user