summaryrefslogtreecommitdiff
path: root/db/schema/vendors.ts
diff options
context:
space:
mode:
authorjoonhoekim <26rote@gmail.com>2025-09-02 08:39:43 +0000
committerjoonhoekim <26rote@gmail.com>2025-09-02 08:39:43 +0000
commit47cf8c3d82a90da60b128278f611c7c51d67554f (patch)
tree5fa2ff2bc94800538224b5c6ae2c7302c94096f9 /db/schema/vendors.ts
parent659c46ed04758584b79a8f97074d3213bb7e252e (diff)
(김준회) vendors.items --> vendorPossibleMaterials 테이블로 공급품목 관리 책임 변경
Diffstat (limited to 'db/schema/vendors.ts')
-rw-r--r--db/schema/vendors.ts42
1 files changed, 32 insertions, 10 deletions
diff --git a/db/schema/vendors.ts b/db/schema/vendors.ts
index d53fb674..e2b00632 100644
--- a/db/schema/vendors.ts
+++ b/db/schema/vendors.ts
@@ -1,8 +1,7 @@
// db/schema/vendors.ts
-import { pgTable, serial, varchar, text, timestamp, boolean, integer ,pgView} from "drizzle-orm/pg-core";
+import { pgTable, serial, varchar, text, timestamp, boolean, integer ,pgView } from "drizzle-orm/pg-core";
import { items, materials } from "./items";
import { sql, eq, relations } from "drizzle-orm";
-import { users } from "./users";
// vendorTypes 테이블 생성
@@ -58,7 +57,7 @@ export const vendors = pgTable("vendors", {
corporateRegistrationNumber: varchar("corporate_registration_number", {
length: 100,
}),
- items: text("items"),
+ items: text("items"), // 이전 입력값들이 필요 없을 때 제거할 것. 벤더의 공급품목은 vendorPossibleMaterials 테이블에서 관리함.
creditAgency: varchar("credit_agency", { length: 50 }),
creditRating: varchar("credit_rating", { length: 50 }),
@@ -119,15 +118,39 @@ export const vendorPossibleItems = pgTable("vendor_possible_items", {
});
+// MDG 자재마스터에 대해 벤더의 공급품목 정보를 저장하는 테이블
+// 업체 회원 가입시 입력 정보는 업체입력정보(notConfirmed), 구매담당자가 PQ, 실사, 정규업체등록요청 했을 때, PO I/F 통해 받은 자재그룹코드는 확정정보(Confirmed)임
+// MDG 자재마스터와의 정규화 레벨은 의도적으로 낮춤. (스캔 비용)
export const vendorPossibleMateirals = pgTable("vendor_possible_materials", {
+ // 인공키
id: serial("id").primaryKey(),
+ // 벤더 아이디
vendorId: integer("vendor_id").notNull().references(() => vendors.id),
- // itemId: integer("item_id"), // 별도 item 테이블 연동시
- itemCode: varchar("item_code", { length: 100 })
- .notNull()
- .references(() => materials.itemCode, { onDelete: "cascade" }),
- createdAt: timestamp("created_at").defaultNow().notNull(),
- updatedAt: timestamp("updated_at").defaultNow().notNull(),
+
+ // 자재그룹코드 (MATKL)
+ itemCode: varchar("item_code", { length: 100 }),
+ // 자재그룹명 (= 자재명)
+ itemName: varchar("item_name", { length: 255 }),
+ // 업체유형 (vendorType에서 가져오거나 강미경프로가 제공하겠다는 자재그룹코드별 업체유형 정보를 저장. confirm 건들은 강미경프로 제공 데이터를, notConfirmed 건들은 vendorType 정보 사용)
+ vendorType: varchar("vendor_type", { length: 255 }),
+
+ registerUserId: integer("register_user_id"), // 등록자ID (추후 필요시 FK 세팅)
+ registerUserName: varchar("register_user_name", { length: 255 }), // 등록자명
+
+ // 확정정보 여부 (업체입력시 확정정보 아님, 구매담당자가 PQ, 실사, 정규업체등록요청 했을 때, PO I/F 통해 받은 자재그룹코드는 확정정보임)
+ isConfirmed: boolean("is_confirmed").default(false),
+
+ // 확정정보에 한해 필요한 부가정보 (시작)
+ recentPoNo: varchar("recent_po_no", { length: 100 }), // 최근 Po. No
+ recentPoDate: timestamp("recent_po_date"), // 최근 Po일
+ recentDeliveryDate: timestamp("recent_delivery_date"), // 최근 납품일
+ recentOrderDate: timestamp("recent_order_date"), // 최근 발주일
+ recentOrderUserName: varchar("recent_order_user_name", { length: 255 }), // 최근 발주자명
+ purchaseGroupCode: varchar("purchase_group_code", { length: 10 }), // 구매그룹코드
+ // 확정정보에 한해 필요한 부가정보 (끝)
+
+ createdAt: timestamp("created_at").defaultNow().notNull(), // 등록일
+ updatedAt: timestamp("updated_at").defaultNow().notNull(), // 수정일
});
export const vendorItemsView = pgView("vendor_items_view").as((qb) => {
@@ -439,7 +462,6 @@ export const vendorsWithTypesView = pgView("vendors_with_types").as((qb) => {
representativeEmail: sql<string>`${vendors.representativeEmail}`.as("representative_email"),
representativePhone: sql<string>`${vendors.representativePhone}`.as("representative_phone"),
corporateRegistrationNumber: sql<string>`${vendors.corporateRegistrationNumber}`.as("corporate_registration_number"),
- items: sql<string>`${vendors.items}`.as("items"),
creditAgency: sql<string>`${vendors.creditAgency}`.as("credit_agency"),
creditRating: sql<string>`${vendors.creditRating}`.as("credit_rating"),
cashFlowRating: sql<string>`${vendors.cashFlowRating}`.as("cash_flow_rating"),