feat: 리워크 SPLIT에 is_rework 전달 + 진행중 리워크 배지 표시

- 리워크 카드 접수 시 SPLIT에 is_rework='Y', rework_source_id 복사
- 진행중/완료 탭에서 리워크 SPLIT에 리워크 배지 표시
- 리워크 마스터만 숨기고 리워크 SPLIT은 표시
This commit is contained in:
SeongHyun Kim
2026-04-06 15:44:53 +09:00
parent 2aa90f9351
commit 2ff9f04d86
2 changed files with 19 additions and 7 deletions
@@ -1828,22 +1828,34 @@ export const acceptProcess = async (req: AuthenticatedRequest, res: Response) =>
const batchId = req.body.batch_id || `BATCH-${Date.now()}-${Math.random().toString(36).slice(2, 6)}`;
const hasBatchCol = _batchMigrationDone;
// 분할 행 INSERT (batch_id는 컬럼 존재 시에만)
// 리워크 카드에서 접수 시 is_rework, rework_source_id 전달
const parentReworkInfo = isRework ? await client.query(
`SELECT is_rework, rework_source_id FROM work_order_process WHERE id = $1`, [work_order_process_id]
) : null;
const splitIsRework = parentReworkInfo?.rows[0]?.is_rework || null;
const splitReworkSourceId = parentReworkInfo?.rows[0]?.rework_source_id || null;
// 분할 행 INSERT (batch_id는 컬럼 존재 시에만, 리워크 정보 포함)
const reworkCols = splitIsRework ? ", is_rework, rework_source_id" : "";
const reworkVals = splitIsRework ? `, $${hasBatchCol ? 15 : 14}, $${hasBatchCol ? 16 : 15}` : "";
const reworkParams = splitIsRework ? [splitIsRework, splitReworkSourceId] : [];
const insertCols = `id, wo_id, seq_no, process_code, process_name, is_required, is_fixed_order,
standard_time, equipment_code, routing_detail_id,
status, input_qty, good_qty, defect_qty, total_production_qty,
result_status, accepted_by, accepted_at, started_at,
parent_process_id, company_code, writer${hasBatchCol ? ", batch_id" : ""}`;
parent_process_id, company_code, writer${hasBatchCol ? ", batch_id" : ""}${reworkCols}`;
const insertVals = `gen_random_uuid()::text, $1, $2, $3, $4, $5, $6, $7, $8, $9,
'in_progress', $10, '0', '0', '0',
'draft', $11, NOW()::text, NOW()::text,
$12, $13, $11${hasBatchCol ? ", $14" : ""}`;
$12, $13, $11${hasBatchCol ? ", $14" : ""}${reworkVals}`;
const insertParams = [
row.wo_id, row.seq_no, row.process_code, row.process_name,
row.is_required, row.is_fixed_order, row.standard_time,
row.equipment_code, row.routing_detail_id,
String(qty), userId, masterId, companyCode,
...(hasBatchCol ? [batchId] : []),
...reworkParams,
];
const result = await client.query(
@@ -920,8 +920,8 @@ export function WorkOrderList() {
const isMaster = !proc.parent_process_id;
// 완료/진행중 탭에서는 SPLIT만 표시 (마스터 제외)
if (isMaster && !isRework && (activeTab === "completed" || activeTab === "in_progress")) return false;
// 리워크 카드가 in_progress/completed면 SPLIT이 생성된 것 → 리워크 카드 자체 숨김 (SPLIT 표시)
if (isRework && (proc.status === "in_progress" || proc.status === "completed")) return false;
// 리워크 마스터가 in_progress/completed면 SPLIT이 생성된 것 → 리워크 마스터 숨김 (SPLIT 표시)
if (isRework && !proc.parent_process_id && (proc.status === "in_progress" || proc.status === "completed")) return false;
// 재작업 카드는 공정 필터 무시 (모든 공정에서 표시)
if (!isRework && proc.process_code !== selectedProcess) return false;
if (selectedEquipment !== "__all__") {
@@ -961,8 +961,8 @@ export function WorkOrderList() {
for (const proc of preFiltered) {
const isMaster = !proc.parent_process_id;
const isRw = proc.is_rework === "Y" || proc.is_rework === "true" || proc.is_rework === "1";
// 리워크 카드가 in_progress/completed면 SPLIT이 있으므로 카운트 제외
if (isRw && (proc.status === "in_progress" || proc.status === "completed")) continue;
// 리워크 마스터가 in_progress/completed면 SPLIT이 있으므로 카운트 제외
if (isRw && !proc.parent_process_id && (proc.status === "in_progress" || proc.status === "completed")) continue;
if (proc.status === "acceptable") counts.acceptable++;
else if (proc.status === "in_progress" && (!isMaster || isRw)) counts.in_progress++;
else if (proc.status === "completed" && (!isMaster || isRw)) counts.completed++;