diff options
Diffstat (limited to 'db')
| -rw-r--r-- | db/schema/basicContractDocumnet.ts | 10 | ||||
| -rw-r--r-- | db/schema/compliance.ts | 7 | ||||
| -rw-r--r-- | db/schema/pq.ts | 18 |
3 files changed, 33 insertions, 2 deletions
diff --git a/db/schema/basicContractDocumnet.ts b/db/schema/basicContractDocumnet.ts index e571c7e0..5edc9836 100644 --- a/db/schema/basicContractDocumnet.ts +++ b/db/schema/basicContractDocumnet.ts @@ -7,6 +7,7 @@ import { rfqLastVendorResponses } from './rfqVendor'; import { rfqLastDetails } from './rfqLast'; import { generalContracts } from './generalContract'; import { legalWorks } from './legal'; +import { vendorPQSubmissions } from './pq'; export const basicContractTemplates = pgTable('basic_contract_templates', { id: integer("id").primaryKey().generatedAlwaysAsIdentity(), @@ -42,6 +43,10 @@ export const basicContract = pgTable('basic_contract', { biddingCompanyId: integer('bidding_company_id').references(() => biddingCompanies.id), rfqCompanyId: integer('rfq_company_id').references(() => rfqLastDetails.id), generalContractId: integer('general_contract_id').references(() => generalContracts.id), + pqSubmissionId: integer('pq_submission_id').references(() => vendorPQSubmissions.id, { + onDelete: "cascade", + onUpdate: "cascade", + }), requestedBy: integer('requested_by').references(() => users.id), // 상태값을 더 세분화 @@ -88,6 +93,8 @@ export const basicContractView = pgView('basic_contract_view').as((qb) => { vendorId: sql<number | null>`${basicContract.vendorId}`.as('vendor_id'), requestedBy: sql<number | null>`${basicContract.requestedBy}`.as('requested_by'), status: sql<string>`${basicContract.status}`.as('basic_contract_status'), + pqSubmissionId: sql<number | null>`${basicContract.pqSubmissionId}`.as('pq_submission_id'), + pqNumber: sql<string | null>`${vendorPQSubmissions.pqNumber}`.as('pq_number'), //견적,입찰, 계약 rfqCompanyId: sql<number | null>`${basicContract.rfqCompanyId}`.as('rfq_company_id'), @@ -156,7 +163,8 @@ export const basicContractView = pgView('basic_contract_view').as((qb) => { .from(basicContract) .leftJoin(vendors, eq(basicContract.vendorId, vendors.id)) .leftJoin(users, eq(basicContract.requestedBy, users.id)) - .leftJoin(basicContractTemplates, eq(basicContract.templateId, basicContractTemplates.id)); + .leftJoin(basicContractTemplates, eq(basicContract.templateId, basicContractTemplates.id)) + .leftJoin(vendorPQSubmissions, eq(basicContract.pqSubmissionId, vendorPQSubmissions.id)); }); // 타입 정의 diff --git a/db/schema/compliance.ts b/db/schema/compliance.ts index 09d945d1..efad9bf0 100644 --- a/db/schema/compliance.ts +++ b/db/schema/compliance.ts @@ -82,11 +82,12 @@ export const complianceResponseFiles = pgTable('compliance_response_files', { uploadedAt: timestamp('uploaded_at').defaultNow(), }); -// 7. 레드플래그 담당자 관리 +// 7. 담당자 관리(레드플래그, 준법, 안전) export const redFlagManagers = pgTable('red_flag_managers', { id: serial('id').primaryKey(), purchasingManagerId: integer('purchasing_manager_id').references(() => users.id), // 구매기획 담당자 complianceManagerId: integer('compliance_manager_id').references(() => users.id), // 준법 담당자 + hseManagerId: integer('hse_manager_id').references(() => users.id), // 안전(HSE) 담당자 createdAt: timestamp('created_at').defaultNow(), updatedAt: timestamp('updated_at').defaultNow(), }); @@ -158,6 +159,10 @@ export const redFlagManagersRelations = relations(redFlagManagers, ({ one }) => fields: [redFlagManagers.complianceManagerId], references: [users.id], }), + hseManager: one(users, { + fields: [redFlagManagers.hseManagerId], + references: [users.id], + }), })); // 타입 정의 diff --git a/db/schema/pq.ts b/db/schema/pq.ts index a9d92953..68c58613 100644 --- a/db/schema/pq.ts +++ b/db/schema/pq.ts @@ -63,6 +63,23 @@ export const pqCriterias = pgTable("pq_criterias", { .notNull() .default("TEXT"), + // 내자/외자/내외자 구분 (nullable, 기본값: 내외자) + type: varchar("type", { length: 20 }).default("내외자"), + + createdAt: timestamp("created_at").defaultNow().notNull(), + updatedAt: timestamp("updated_at").defaultNow().notNull(), +}); + +// PQ 기준 첨부파일 +export const pqCriteriasAttachments = pgTable("pq_criterias_attachments", { + id: serial("id").primaryKey(), + pqCriteriaId: integer("pq_criteria_id") + .notNull() + .references(() => pqCriterias.id, { onDelete: "cascade", onUpdate: "cascade" }), + fileName: varchar("file_name", { length: 255 }).notNull(), + originalFileName: varchar("original_file_name", { length: 255 }), + filePath: varchar("file_path", { length: 1024 }).notNull(), + fileSize: integer("file_size"), createdAt: timestamp("created_at").defaultNow().notNull(), updatedAt: timestamp("updated_at").defaultNow().notNull(), }); @@ -419,6 +436,7 @@ export const vendorInvestigationsView = pgView( // PQ 정보 pqItems: vendorPQSubmissions.pqItems, + pqType: vendorPQSubmissions.type, pqNumber: vendorPQSubmissions.pqNumber, // User names and emails instead of just IDs |
