INSERT INTO PLANNING_ISSUE
(
OBJID
,ISSUE_NO
,PROJECT_OBJID
,UNIT_CODE
,PART_OBJID
,ISSUE_CATEGORY
,ISSUE_TYPE
,CONTENT
,DESIGN_USERID
,DESIGN_RESULT
,DESIGN_DATE
,PURCHASE_USERID
,PURCHASE_RESULT
,PURCHASE_DATE
,QUALITY_USERID
,QUALITY_RESULT
,QUALITY_DATE
,PRODUCTION_USERID
,PRODUCTION_RESULT
,PRODUCTION_DATE
,REG_DATE
,WRITER
,STATUS
)
VALUES
(
#{objId}
,(SELECT 'ISSUE' || to_char(now(),'YY')||'-'||LPAD((SELECT CASE WHEN MAX(SUBSTR(ISSUE_NO,9,3)) IS NULL THEN 1 ELSE MAX(SUBSTR(ISSUE_NO,9,3))::INTEGER+1 END FROM PLANNING_ISSUE)::VARCHAR,3,'0'))
,#{project_objid}
,#{unit_code}
,#{part_objid}
,#{issue_category}
,#{issue_type}
,#{content}
,#{design_userid}
,#{design_result}
,#{design_date}
,#{purchase_userid}
,#{purchase_result}
,#{purchase_date}
,#{quality_userid}
,#{quality_result}
,#{quality_date}
,#{production_userid}
,#{production_result}
,#{production_date}
,now()
,#{writer}
,'write'
)
ON CONFLICT (OBJID) DO
UPDATE
SET
PROJECT_OBJID=#{project_objid}
,UNIT_CODE=#{unit_code}
,PART_OBJID=#{part_objid}
,ISSUE_CATEGORY=#{issue_category}
,ISSUE_TYPE=#{issue_type}
,CONTENT=#{content}
,DESIGN_USERID=#{design_userid}
,DESIGN_RESULT=#{design_result}
,DESIGN_DATE=#{design_date}
,PURCHASE_USERID=#{purchase_userid}
,PURCHASE_RESULT=#{purchase_result}
,PURCHASE_DATE=#{purchase_date}
,QUALITY_USERID=#{quality_userid}
,QUALITY_RESULT=#{quality_result}
,QUALITY_DATE=#{quality_date}
,PRODUCTION_USERID=#{production_userid}
,PRODUCTION_RESULT=#{production_result}
,PRODUCTION_DATE=#{production_date}
DELETE FROM PLANNING_ISSUE WHERE OBJID = #{OBJID}
UPDATE PLANNING_ISSUE SET
STATUS='release'
WHERE OBJID = #{OBJID}
INSERT INTO ASSEMBLY_WBS_TASK
(
OBJID
,BOM_QTY_CHILD_OBJID
,PART_OBJID
,PARENT_OBJID
,ASSEMBLY_USER_ID
,ASSEMBLY_DATE
,INSOURCING
,OUTSOURCING
,WRITER
,REGDATE
)
VALUES
(
#{OBJID}
,#{CHILD_OBJID}
,#{PART_OBJID}
,#{PARENT_OBJID}
,#{ASSEMBLY_USER_ID}
,#{ASSEMBLY_DATE}
,#{INSOURCING}
,#{OUTSOURCING}
,#{WRITER}
,now()
) ON CONFLICT (OBJID) DO
UPDATE
SET
ASSEMBLY_USER_ID = #{ASSEMBLY_USER_ID}
,ASSEMBLY_DATE = #{ASSEMBLY_DATE}
,INSOURCING = #{INSOURCING}
,OUTSOURCING = #{OUTSOURCING}
,WRITER = #{WRITER}
DELETE FROM RECEIVE_HISTORY WHERE OBJID = #{OBJID}
DELETE FROM RECEIVE_HISTORY
WHERE PARENT_OBJID = #{parentObjId}
AND PART_OBJID = #{partObjid}
INSERT INTO RECEIVE_HISTORY
(
OBJID
,PART_OBJID
,PARENT_OBJID
,RECEIVE_DATE
,RECEIVE_QTY
,RECEIVE_USER_ID
,TRANSFER_USER_ID
,WRITER
,REGDATE
)
VALUES
(
#{OBJID}
,#{PART_OBJID}
,#{PARENT_OBJID}
,#{RECEIVE_DATE}
,#{RECEIVE_QTY}
,#{RECEIVE_USER_ID}
,#{TRANSFER_USER_ID}
,#{WRITER}
,now()
) ON CONFLICT (OBJID) DO
UPDATE
SET
RECEIVE_DATE = #{RECEIVE_DATE}
,RECEIVE_QTY = #{RECEIVE_QTY}
,RECEIVE_USER_ID = #{RECEIVE_USER_ID}
,TRANSFER_USER_ID = #{TRANSFER_USER_ID}
,WRITER = #{WRITER}
INSERT INTO WORK_DIARY
(
OBJID
,CONTRACT_OBJID
,UNIT_CODE
,DIVISION
,TASK_NAME
,WORKER_ID
,WORK_START_DATE
,WORK_END_DATE
,WORK_HOUR
,REMARK
,STATUS
,WRITER
,REGDATE
,SOURCING_TYPE
,PRODUCTION_TYPE
)
VALUES
(
#{objId }
,#{project_objid }
,#{unit_code }
,#{division }
,#{task_name }
,#{worker_id }
,#{work_start_date }
,#{work_end_date }
,#{work_hour }
,#{remark }
,'write'
,#{writer }
,now()
,#{sourcing_type }
,#{production_type }
) ON CONFLICT (OBJID) DO
UPDATE
SET
CONTRACT_OBJID = #{project_objid }
,UNIT_CODE = #{unit_code }
,DIVISION = #{division }
,TASK_NAME = #{task_name }
,WORKER_ID = #{worker_id }
,WORK_START_DATE = #{work_start_date }
,WORK_END_DATE = #{work_end_date }
,WORK_HOUR = #{work_hour }
,REMARK = #{remark }
,SOURCING_TYPE = #{sourcing_type }
,PRODUCTION_TYPE = #{production_type }
DELETE FROM WORK_DIARY WHERE OBJID = #{OBJID}
UPDATE WORK_DIARY SET
STATUS='complete'
WHERE OBJID = #{OBJID}
UPDATE PROJECT_MGMT
SET
PART_OBJID = #{bomReportObjid}
WHERE OBJID = #{projectMgmtObjid}
/* productionplanning.saveMbomFromEbom - E-BOM을 M-BOM으로 복사 */
/* 1. 새로운 PART_BOM_REPORT 생성 (M-BOM용) */
/* M-BOM 품번을 PART_NO에 저장 (규칙: M-{품번}-YYMMDD-01) */
WITH new_bom_report AS (
INSERT INTO PART_BOM_REPORT (
OBJID,
PART_NO,
PART_NAME,
WRITER,
REGDATE,
STATUS
) VALUES (
(SELECT (FLOOR(RANDOM() * 1000000000) + 1000000000)::INTEGER),
#{MBOM_PART_NO},
#{PART_NAME},
#{USER_ID},
NOW(),
'Y'
)
RETURNING OBJID
),
/* 2. E-BOM의 BOM_PART_QTY 데이터를 새 M-BOM으로 복사 */
copied_bom_data AS (
INSERT INTO BOM_PART_QTY (
BOM_REPORT_OBJID,
OBJID,
PARENT_OBJID,
CHILD_OBJID,
PARENT_PART_NO,
PART_NO,
QTY,
ITEM_QTY,
QTY_TEMP,
REGDATE,
WRITER,
SEQ,
STATUS,
LAST_PART_OBJID
)
SELECT
(SELECT OBJID FROM new_bom_report),
(SELECT (FLOOR(RANDOM() * 1000000000) + 1000000000 + ROW_NUMBER() OVER (ORDER BY OBJID))::INTEGER),
PARENT_OBJID,
CHILD_OBJID,
PARENT_PART_NO,
PART_NO,
QTY,
ITEM_QTY,
QTY_TEMP,
NOW(),
#{USER_ID},
ROW_NUMBER() OVER (ORDER BY OBJID),
'adding',
LAST_PART_OBJID
FROM BOM_PART_QTY
WHERE BOM_REPORT_OBJID::VARCHAR = #{SOURCE_BOM_OBJID}
AND COALESCE(STATUS, '') NOT IN ('deleting', 'deleted')
RETURNING 1
)
/* 3. PROJECT_MGMT 업데이트 */
UPDATE PROJECT_MGMT
SET
BOM_REPORT_OBJID = (SELECT OBJID FROM new_bom_report),
MBOM_STATUS = 'Y',
PART_NO = #{PART_NO},
PART_NAME = #{PART_NAME}
WHERE OBJID::VARCHAR = #{PROJECT_OBJID}
UPDATE PROJECT_MGMT
SET
SOURCE_BOM_TYPE = #{sourceBomType},
SOURCE_EBOM_OBJID = CASE WHEN #{sourceBomType} = 'EBOM' THEN #{sourceBomObjId} ELSE NULL END,
SOURCE_MBOM_OBJID = CASE WHEN #{sourceBomType} = 'MBOM' THEN #{sourceBomObjId} ELSE NULL END
WHERE OBJID::VARCHAR = #{projectObjId}
UPDATE MBOM_DETAIL
SET STATUS = 'INACTIVE',
EDIT_DATE = NOW()
WHERE MBOM_HEADER_OBJID = #{mbomHeaderObjid}
INSERT INTO MBOM_DETAIL (
OBJID, MBOM_HEADER_OBJID, PARENT_OBJID, CHILD_OBJID, SEQ, LEVEL,
PART_OBJID, PART_NO, PART_NAME, QTY, 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,
NET_QTY, PO_QTY,
VENDOR, UNIT_PRICE, TOTAL_PRICE, CURRENCY, LEAD_TIME, MIN_ORDER_QTY,
PROPOSAL_DATE,
STATUS, WRITER, REGDATE, REMARK
) VALUES (
#{objid}, #{mbomHeaderObjid}, #{parentObjid}, #{childObjid}, #{seq}, #{level},
#{partObjid}, #{partNo}, #{partName}, #{qty}, #{unit},
#{supplyType}, #{makeOrBuy},
#{rawMaterialPartNo}, #{rawMaterialSpec}, #{rawMaterial}, #{rawMaterialSize},
#{processingVendor}, #{processingDeadline}, #{grindingDeadline},
#{requiredQty}, #{orderQty}, #{productionQty}, #{stockQty}, #{shortageQty},
#{netQty}, #{poQty},
#{vendor}, #{unitPrice}, #{totalPrice}, #{currency}, #{leadTime}, #{minOrderQty},
#{proposalDate},
'ACTIVE', #{sessionUserId}, NOW(), #{remark}
)
DELETE FROM MBOM_DETAIL
WHERE MBOM_HEADER_OBJID = #{mbomHeaderObjid}
INSERT INTO MBOM_HISTORY (
OBJID, MBOM_HEADER_OBJID, CHANGE_TYPE, CHANGE_DESCRIPTION,
BEFORE_DATA, AFTER_DATA, CHANGE_USER, CHANGE_DATE
) VALUES (
#{objid}, #{mbomHeaderObjid}, #{changeType}, #{changeDescription},
#{beforeData}::JSONB, #{afterData}::JSONB, #{sessionUserId}, NOW()
)
UPDATE PROJECT_MGMT
SET
MBOM_STATUS = 'Y',
MBOM_WRITER = #{sessionUserId},
MBOM_REGDATE = NOW()
WHERE OBJID::VARCHAR = #{projectObjId}