feat: 재작업 카드를 지정 공정에 생성
- target_process_code가 있으면 해당 공정의 마스터를 찾아서 재작업 카드 생성 - 없으면 기존처럼 같은 공정에 생성 - 지정 공정의 seq_no, process_code, routing_detail_id 사용
This commit is contained in:
@@ -998,14 +998,44 @@ export const saveResult = async (
|
||||
// 재작업 카드 자동 생성 (disposition = 'rework' 항목이 있을 때)
|
||||
if (currentSeq.rowCount > 0 && defect_detail && Array.isArray(defect_detail)) {
|
||||
let totalReworkQty = 0;
|
||||
let targetProcessCode: string | null = null;
|
||||
for (const item of defect_detail) {
|
||||
if (item.disposition === "rework") {
|
||||
totalReworkQty += parseInt(item.qty, 10) || 0;
|
||||
if (item.target_process_code) targetProcessCode = item.target_process_code;
|
||||
}
|
||||
}
|
||||
if (totalReworkQty > 0) {
|
||||
const proc = currentSeq.rows[0];
|
||||
const masterId = proc.parent_process_id || work_order_process_id;
|
||||
|
||||
// 재작업 대상 공정 결정
|
||||
let reworkSeqNo = proc.seq_no;
|
||||
let reworkProcessCode = proc.process_code;
|
||||
let reworkProcessName = proc.process_name;
|
||||
let reworkRoutingDetailId = proc.routing_detail_id;
|
||||
let reworkMasterId = masterId;
|
||||
|
||||
// target_process_code가 지정되면 해당 공정 정보를 조회
|
||||
if (targetProcessCode) {
|
||||
const targetProc = await pool.query(
|
||||
`SELECT id, seq_no, process_code, process_name, routing_detail_id
|
||||
FROM work_order_process
|
||||
WHERE wo_id = $1 AND process_code = $2 AND company_code = $3
|
||||
AND parent_process_id IS NULL
|
||||
LIMIT 1`,
|
||||
[proc.wo_id, targetProcessCode, companyCode]
|
||||
);
|
||||
if (targetProc.rowCount > 0) {
|
||||
const tp = targetProc.rows[0];
|
||||
reworkSeqNo = tp.seq_no;
|
||||
reworkProcessCode = tp.process_code;
|
||||
reworkProcessName = tp.process_name;
|
||||
reworkRoutingDetailId = tp.routing_detail_id;
|
||||
reworkMasterId = tp.id; // 지정 공정의 마스터 ID
|
||||
}
|
||||
}
|
||||
|
||||
const reworkInsert = await pool.query(
|
||||
`INSERT INTO work_order_process (
|
||||
id, wo_id, seq_no, process_code, process_name, is_required, is_fixed_order,
|
||||
@@ -1020,23 +1050,25 @@ export const saveResult = async (
|
||||
$12, $13, $14
|
||||
) RETURNING id`,
|
||||
[
|
||||
proc.wo_id, proc.seq_no, proc.process_code, proc.process_name,
|
||||
proc.wo_id, reworkSeqNo, reworkProcessCode, reworkProcessName,
|
||||
proc.is_required, proc.is_fixed_order, proc.standard_time,
|
||||
proc.equipment_code, proc.routing_detail_id,
|
||||
proc.equipment_code, reworkRoutingDetailId,
|
||||
String(totalReworkQty), work_order_process_id,
|
||||
masterId, companyCode, userId,
|
||||
reworkMasterId, companyCode, userId,
|
||||
]
|
||||
);
|
||||
// 재작업 카드에 체크리스트 복사
|
||||
const reworkId = reworkInsert.rows[0]?.id;
|
||||
if (reworkId) {
|
||||
const reworkChecklistCount = await copyChecklistToSplit(
|
||||
pool, masterId, reworkId, proc.routing_detail_id, companyCode, userId
|
||||
pool, reworkMasterId, reworkId, reworkRoutingDetailId, companyCode, userId
|
||||
);
|
||||
logger.info("[pop/production] 재작업 카드 자동 생성", {
|
||||
reworkId,
|
||||
sourceId: work_order_process_id,
|
||||
reworkQty: totalReworkQty,
|
||||
targetProcess: targetProcessCode || "(같은 공정)",
|
||||
reworkSeqNo,
|
||||
checklistCount: reworkChecklistCount,
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user