diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/vendor-document-list/plant/shi-buyer-system-api.ts | 37 |
1 files changed, 23 insertions, 14 deletions
diff --git a/lib/vendor-document-list/plant/shi-buyer-system-api.ts b/lib/vendor-document-list/plant/shi-buyer-system-api.ts index 14de10c2..e919d95f 100644 --- a/lib/vendor-document-list/plant/shi-buyer-system-api.ts +++ b/lib/vendor-document-list/plant/shi-buyer-system-api.ts @@ -238,7 +238,8 @@ export class ShiBuyerSystemAPI { } private async getDocumentsToSend(contractId: number) { - const result = await db + // 1. 먼저 문서 목록을 가져옴 + const documents = await db .select({ documentId: stageDocuments.id, docNumber: stageDocuments.docNumber, @@ -248,14 +249,6 @@ export class ShiBuyerSystemAPI { projectCode: sql<string>`(SELECT code FROM projects WHERE id = ${stageDocuments.projectId})`, vendorCode: sql<string>`(SELECT vendor_code FROM vendors WHERE id = ${stageDocuments.vendorId})`, vendorName: sql<string>`(SELECT vendor_name FROM vendors WHERE id = ${stageDocuments.vendorId})`, - stages: sql<any[]>` - COALESCE( - (SELECT json_agg(row_to_json(s.*) ORDER BY s.stage_order) - FROM stage_issue_stages s - WHERE s.document_id = ${stageDocuments.id}), - '[]'::json - ) - ` }) .from(stageDocuments) .where( @@ -270,8 +263,23 @@ export class ShiBuyerSystemAPI { ) ) + // 2. 각 문서에 대해 스테이지 정보를 별도로 조회 + const documentsWithStages = await Promise.all( + documents.map(async (doc) => { + const stages = await db + .select() + .from(stageIssueStages) + .where(eq(stageIssueStages.documentId, doc.documentId)) + .orderBy(stageIssueStages.stageOrder) + + return { + ...doc, + stages: stages || [] + } + }) + ) - return result + return documentsWithStages } private async sendDocumentInfo(documents: any[]) { @@ -320,16 +328,17 @@ export class ShiBuyerSystemAPI { for (const doc of documents) { for (const stage of doc.stages) { - if (stage.plan_date) { + // 날짜에서 1은 Issue, 2는 Receipt + if (stage.planDate) { schedules.push({ PROJ_NO: doc.projectCode, SHI_DOC_NO: doc.docNumber, DDPKIND: "V", - SCHEDULE_TYPE: stage.stage_name, - BASELINE1: stage.plan_date ? new Date(stage.plan_date).toISOString() : null, + SCHEDULE_TYPE: stage.stageName, + BASELINE1: stage.planDate ? new Date(stage.planDate).toISOString() : null, REVISED1: null, FORECAST1: null, - ACTUAL1: stage.actual_date ? new Date(stage.actual_date).toISOString() : null, + ACTUAL1: stage.actualDate ? new Date(stage.actualDate).toISOString() : null, BASELINE2: null, REVISED2: null, FORECAST2: null, |
