summaryrefslogtreecommitdiff
path: root/lib/vendor-document-list/plant
diff options
context:
space:
mode:
Diffstat (limited to 'lib/vendor-document-list/plant')
-rw-r--r--lib/vendor-document-list/plant/shi-buyer-system-api.ts37
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,