summaryrefslogtreecommitdiff
path: root/db
diff options
context:
space:
mode:
Diffstat (limited to 'db')
-rw-r--r--db/schema/ECC/ecc.ts74
-rw-r--r--db/schema/index.ts5
-rw-r--r--db/schema/knox/employee.ts53
3 files changed, 131 insertions, 1 deletions
diff --git a/db/schema/ECC/ecc.ts b/db/schema/ECC/ecc.ts
new file mode 100644
index 00000000..e836909e
--- /dev/null
+++ b/db/schema/ECC/ecc.ts
@@ -0,0 +1,74 @@
+import {
+ integer,
+ varchar,
+ timestamp,
+ decimal,
+ pgSchema,
+} from 'drizzle-orm/pg-core';
+
+// 적용된 WSDL 파일: IF_ECC_EVCP_PR_INFORMATION.wsdl
+
+// WSDL 정의에서 CHG_GB, 응답할 메시지 타입(성공/실패) 및 내용은 메타데이터이다.
+// 따라서 로깅 테이블에 저장하고, 별도 스키마를 생성하지는 않는다.
+
+// S-ERP에서 받는 ECC 데이터를 MDG와 구분하기 위해 스키마를 새로 생성한다.
+export const ECCSchema = pgSchema('ecc');
+
+// Table: PR_INFORMATION_T_BID_HEADER
+export const PR_INFORMATION_T_BID_HEADER = ECCSchema.table(
+ 'PR_INFORMATION_T_BID_HEADER',
+ {
+ id: integer('id').primaryKey().generatedByDefaultAsIdentity(),
+ ANFNR: varchar({ length: 10 }).notNull(), // Bidding/RFQ Number // From: IF_ECC_EVCP_PR_INFORMATION.wsdl // Required
+ EKGRP: varchar({ length: 10 }), // Purchaing Group // From: IF_ECC_EVCP_PR_INFORMATION.wsdl
+ EKORG: varchar({ length: 10 }), // Purchasing Organization // From: IF_ECC_EVCP_PR_INFORMATION.wsdl
+ WERKS: varchar({ length: 10 }), // Plant // From: IF_ECC_EVCP_PR_INFORMATION.wsdl
+ ZBSART: varchar({ length: 10 }).notNull(), // Bidding // From: IF_ECC_EVCP_PR_INFORMATION.wsdl // Required
+ ZRFQ_TRS_DT: varchar({ length: 10 }), // Date on Creating Bidding // From: IF_ECC_EVCP_PR_INFORMATION.wsdl
+ ZRFQ_TRS_TM: varchar({ length: 10 }), // Time of Creating Bidding // From: IF_ECC_EVCP_PR_INFORMATION.wsdl
+
+ createdAt: timestamp('created_at').defaultNow().notNull(),
+ updatedAt: timestamp('updated_at').defaultNow().notNull(),
+ }
+);
+
+// Table: PR_INFORMATION_T_BID_ITEM
+export const PR_INFORMATION_T_BID_ITEM = ECCSchema.table(
+ 'PR_INFORMATION_T_BID_ITEM',
+ {
+ id: integer('id').primaryKey().generatedByDefaultAsIdentity(),
+ ANFNR: varchar({ length: 10 }).notNull(), // Bidding/RFQ Number // From: IF_ECC_EVCP_PR_INFORMATION.wsdl // Required
+ ANFPS: varchar({ length: 10 }).notNull(), // Item Number of Bidding // From: IF_ECC_EVCP_PR_INFORMATION.wsdl // Required
+ AUFNR: varchar({ length: 12 }), // Order Number // From: IF_ECC_EVCP_PR_INFORMATION.wsdl
+ BANFN: varchar({ length: 10 }).notNull(), // Purchase Requisition Number // From: IF_ECC_EVCP_PR_INFORMATION.wsdl // Required
+ BANPO: varchar({ length: 10 }).notNull(), // Item Number of Purchase Requisition // From: IF_ECC_EVCP_PR_INFORMATION.wsdl // Required
+ BPRME: varchar({ length: 10 }), // Order Price Unit (Purchasing) // From: IF_ECC_EVCP_PR_INFORMATION.wsdl
+ BRGEW: decimal({ precision: 15, scale: 3 }), // Gross Weight // From: IF_ECC_EVCP_PR_INFORMATION.wsdl
+ DISMM: varchar({ length: 10 }), // MRP Type // From: IF_ECC_EVCP_PR_INFORMATION.wsdl
+ EBELP: varchar({ length: 10 }), // Series PO Item Seq // From: IF_ECC_EVCP_PR_INFORMATION.wsdl
+ GEWEI: varchar({ length: 10 }), // Weight Unit // From: IF_ECC_EVCP_PR_INFORMATION.wsdl
+ KNTTP: varchar({ length: 10 }), // Account Assignment Category // From: IF_ECC_EVCP_PR_INFORMATION.wsdl
+ KOSTL: varchar({ length: 10 }), // Cost Center // From: IF_ECC_EVCP_PR_INFORMATION.wsdl
+ LFDAT: varchar({ length: 10 }), // Delivery Date // From: IF_ECC_EVCP_PR_INFORMATION.wsdl
+ MATKL: varchar({ length: 10 }), // Material Group // From: IF_ECC_EVCP_PR_INFORMATION.wsdl
+ MATNR: varchar({ length: 18 }), // Material Number // From: IF_ECC_EVCP_PR_INFORMATION.wsdl
+ MEINS: varchar({ length: 10 }), // Purchase Requisition Unit of Measure // From: IF_ECC_EVCP_PR_INFORMATION.wsdl
+ MENGE: decimal({ precision: 15, scale: 3 }), // Purchase Requisition Quantity // From: IF_ECC_EVCP_PR_INFORMATION.wsdl
+ PEINH: integer(), // Price Unit // From: IF_ECC_EVCP_PR_INFORMATION.wsdl
+ PERNR: varchar({ length: 20 }), // Employee ID // From: IF_ECC_EVCP_PR_INFORMATION.wsdl
+ POSID: varchar({ length: 24 }), // WBS No // From: IF_ECC_EVCP_PR_INFORMATION.wsdl
+ PREIS: decimal({ precision: 15, scale: 2 }), // Price in Purchase Requisition // From: IF_ECC_EVCP_PR_INFORMATION.wsdl
+ PSPID: varchar({ length: 24 }), // Project No // From: IF_ECC_EVCP_PR_INFORMATION.wsdl
+ SAKTO: varchar({ length: 10 }), // G/L Account Number // From: IF_ECC_EVCP_PR_INFORMATION.wsdl
+ TXZ01: varchar({ length: 40 }), // Short Text // From: IF_ECC_EVCP_PR_INFORMATION.wsdl
+ WAERS1: varchar({ length: 10 }), // PR Currency Key // From: IF_ECC_EVCP_PR_INFORMATION.wsdl
+ WAERS2: varchar({ length: 10 }), // Reference Price Currency Key // From: IF_ECC_EVCP_PR_INFORMATION.wsdl
+ ZCON_NO_PO: varchar({ length: 15 }), // PR Consolidation Number // From: IF_ECC_EVCP_PR_INFORMATION.wsdl
+ ZREQ_FN: varchar({ length: 10 }), // P/R Request Number // From: IF_ECC_EVCP_PR_INFORMATION.wsdl
+ ZREQ_PO: varchar({ length: 10 }), // Item Number of P/R Request // From: IF_ECC_EVCP_PR_INFORMATION.wsdl
+ ZRSLT_AMT: decimal({ precision: 17, scale: 2 }), // Reference Price // From: IF_ECC_EVCP_PR_INFORMATION.wsdl
+
+ createdAt: timestamp('created_at').defaultNow().notNull(),
+ updatedAt: timestamp('updated_at').defaultNow().notNull(),
+ }
+);
diff --git a/db/schema/index.ts b/db/schema/index.ts
index e3a3469c..100084ed 100644
--- a/db/schema/index.ts
+++ b/db/schema/index.ts
@@ -37,4 +37,7 @@ export * from './MDG/mdg'
export * from './SOAP/soap';
// NONSAP Oracle DB 스키마
-export * from './NONSAP/nonsap'; \ No newline at end of file
+export * from './NONSAP/nonsap';
+
+// ECC SOAP 수신용 (RFQ, PO, PR 데이터)
+export * from './ECC/ecc'; \ No newline at end of file
diff --git a/db/schema/knox/employee.ts b/db/schema/knox/employee.ts
new file mode 100644
index 00000000..8c228130
--- /dev/null
+++ b/db/schema/knox/employee.ts
@@ -0,0 +1,53 @@
+import { pgSchema, varchar, timestamp, jsonb, text, index } from "drizzle-orm/pg-core";
+
+export const knoxSchema = pgSchema("knox");
+
+export const employee = knoxSchema.table("employee", {
+ epId: varchar("ep_id", { length: 25 }).primaryKey(),
+ employeeNumber: varchar("employee_number", { length: 20 }),
+ userId: varchar("user_id", { length: 50 }),
+ fullName: varchar("full_name", { length: 100 }),
+ givenName: varchar("given_name", { length: 100 }),
+ sirName: varchar("sir_name", { length: 50 }),
+ companyCode: varchar("company_code", { length: 10 }),
+ companyName: varchar("company_name", { length: 100 }),
+ departmentCode: varchar("department_code", { length: 50 }),
+ departmentName: varchar("department_name", { length: 255 }),
+ titleCode: varchar("title_code", { length: 20 }),
+ titleName: varchar("title_name", { length: 100 }),
+ emailAddress: varchar("email_address", { length: 255 }),
+ mobile: varchar("mobile", { length: 50 }),
+ employeeStatus: varchar("employee_status", { length: 2 }),
+ employeeType: varchar("employee_type", { length: 2 }),
+ accountStatus: varchar("account_status", { length: 2 }),
+ securityLevel: varchar("security_level", { length: 2 }),
+ preferredLanguage: varchar("preferred_language", { length: 5 }),
+ description: text("description"),
+ raw: jsonb("raw").notNull(),
+ createdAt: timestamp("created_at", { withTimezone: true }).defaultNow().notNull(),
+ updatedAt: timestamp("updated_at", { withTimezone: true }).defaultNow().notNull(),
+ enCompanyName: varchar("en_company_name", { length: 100 }),
+ enDepartmentName: varchar("en_department_name", { length: 255 }),
+ enDiscription: varchar("en_discription", { length: 255 }),
+ enFullName: varchar("en_full_name", { length: 100 }),
+ enGivenName: varchar("en_given_name", { length: 100 }),
+ enGradeName: varchar("en_grade_name", { length: 100 }),
+ enSirName: varchar("en_sir_name", { length: 50 }),
+ enTitleName: varchar("en_title_name", { length: 100 }),
+ gradeName: varchar("grade_name", { length: 100 }),
+ gradeTitleIndiCode: varchar("grade_title_indi_code", { length: 2 }),
+ jobName: varchar("job_name", { length: 100 }),
+ realNameYn: varchar("real_name_yn", { length: 2 }),
+ serverLocation: varchar("server_location", { length: 2 }),
+ titleSortOrder: varchar("title_sort_order", { length: 10 }),
+}, (table) => {
+ return {
+ companyDepartmentIdx: index("knox_employee_company_department_idx").on(table.companyCode, table.departmentCode),
+ employeeNumberIdx: index("knox_employee_number_idx").on(table.employeeNumber),
+ userIdIdx: index("knox_employee_user_id_idx").on(table.userId),
+ emailIdx: index("knox_employee_email_idx").on(table.emailAddress),
+ };
+});
+
+export type KnoxEmployee = typeof employee.$inferSelect;
+export type NewKnoxEmployee = typeof employee.$inferInsert; \ No newline at end of file