summaryrefslogtreecommitdiff
path: root/db
diff options
context:
space:
mode:
authorjoonhoekim <26rote@gmail.com>2025-11-25 22:04:56 +0900
committerjoonhoekim <26rote@gmail.com>2025-11-25 22:04:56 +0900
commit2b59582194fc5c23140f52c42c793c324856a35e (patch)
tree0db8ef0e913b3a44dfd6e3e20fe92b8e4984aeba /db
parent835df8ddc115ffa74414db2a4fab7efc0d0056a9 (diff)
(김준회) 벤더풀&AVL 구매 추가요청사항 반영
Diffstat (limited to 'db')
-rw-r--r--db/schema/avl/vendor-pool.ts67
1 files changed, 33 insertions, 34 deletions
diff --git a/db/schema/avl/vendor-pool.ts b/db/schema/avl/vendor-pool.ts
index 9f2cdd1a..53e09f34 100644
--- a/db/schema/avl/vendor-pool.ts
+++ b/db/schema/avl/vendor-pool.ts
@@ -1,4 +1,4 @@
-import { pgTable, text, boolean, integer, timestamp, varchar, uniqueIndex } from "drizzle-orm/pg-core";
+import { pgTable, boolean, integer, timestamp, varchar, uniqueIndex } from "drizzle-orm/pg-core";
import { sql } from 'drizzle-orm';
import { createInsertSchema, createSelectSchema } from "drizzle-zod";
@@ -13,22 +13,21 @@ export const vendorPool = pgTable("vendor_pool", {
htDivision: varchar("ht_division", { length: 10 }).notNull(), // H 또는 T 또는 공통
// 설계 정보
- designCategoryCode: varchar("design_category_code", { length: 2 }).notNull(), // 2자리 영문대문자
- designCategory: varchar("design_category", { length: 50 }).notNull(), // 전장 등
+ discipline: varchar("discipline", { length: 50 }), // 설계공종 (ARCHITECTURE 등)
equipBulkDivision: varchar("equip_bulk_division", { length: 1 }), // E 또는 B
// 패키지 정보
- packageCode: varchar("package_code", { length: 50 }), // 패키지 코드
- packageName: varchar("package_name", { length: 100 }), // 패키지 명
+ // 삭제! packageCode: varchar("package_code", { length: 50 }), // 패키지 코드
+ // 삭제! packageName: varchar("package_name", { length: 100 }), // 패키지 명
// 자재그룹 정보
materialGroupCode: varchar("material_group_code", { length: 50 }), // 자재그룹 코드
materialGroupName: varchar("material_group_name", { length: 100 }), // 자재그룹 명
// 자재 관련 정보
- smCode: varchar("sm_code", { length: 50 }),
+ // 삭제! smCode: varchar("sm_code", { length: 50 }),
similarMaterialNamePurchase: varchar("similar_material_name_purchase", { length: 100 }), // 유사자재명 (구매)
- similarMaterialNameOther: varchar("similar_material_name_other", { length: 100 }), // 유사자재명 (구매 외)
+ // 삭제! similarMaterialNameOther: varchar("similar_material_name_other", { length: 100 }), // 유사자재명 (구매 외)
// 협력업체 정보
vendorCode: varchar("vendor_code", { length: 50 }), // 협력업체 코드
@@ -38,13 +37,13 @@ export const vendorPool = pgTable("vendor_pool", {
taxId: varchar("tax_id", { length: 50 }), // 사업자번호
faTarget: boolean("fa_target").default(false), // FA대상
faStatus: varchar("fa_status", { length: 50 }), // FA현황
- faRemark: varchar("fa_remark", { length: 200 }), // FA상세
+ // faRemark: varchar("fa_remark", { length: 200 }), // FA상세
tier: varchar("tier", { length: 20 }), // 등급
- isAgent: boolean("is_agent").default(false), // Agent 여부
+ // 삭제! isAgent: boolean("is_agent").default(false), // Agent 여부
// 계약 정보
- contractSignerCode: varchar("contract_signer_code", { length: 50 }), // 계약서명주체 코드
- contractSignerName: varchar("contract_signer_name", { length: 100 }), // 계약서명주체 명
+ // 삭제! contractSignerCode: varchar("contract_signer_code", { length: 50 }), // 계약서명주체 코드
+ // 삭제! contractSignerName: varchar("contract_signer_name", { length: 100 }), // 계약서명주체 명
// 위치 정보
headquarterLocation: varchar("headquarter_location", { length: 50 }), // 본사 위치 (국가)
@@ -53,7 +52,7 @@ export const vendorPool = pgTable("vendor_pool", {
// AVL 관련 정보
avlVendorName: varchar("avl_vendor_name", { length: 100 }), // AVL 등재업체명
similarVendorName: varchar("similar_vendor_name", { length: 100 }), // 유사업체명(기술영업)
- hasAvl: boolean("has_avl").default(false), // AVL 존재여부
+ // 삭제! hasAvl: boolean("has_avl").default(false), // AVL 존재여부
// 상태 정보
isBlacklist: boolean("is_blacklist").default(false), // Blacklist
@@ -61,29 +60,29 @@ export const vendorPool = pgTable("vendor_pool", {
purchaseOpinion: varchar("purchase_opinion", { length: 500 }), // 구매의견
// AVL 적용 선종(조선)
- shipTypeCommon: boolean("ship_type_common").default(false), // 공통
- shipTypeAmax: boolean("ship_type_amax").default(false), // A-max
- shipTypeSmax: boolean("ship_type_smax").default(false), // S-max
- shipTypeVlcc: boolean("ship_type_vlcc").default(false), // VLCC
- shipTypeLngc: boolean("ship_type_lngc").default(false), // LNGC
- shipTypeCont: boolean("ship_type_cont").default(false), // CONT
+ // 삭제! shipTypeCommon: boolean("ship_type_common").default(false), // 공통
+ // 삭제! shipTypeAmax: boolean("ship_type_amax").default(false), // A-max
+ // 삭제! shipTypeSmax: boolean("ship_type_smax").default(false), // S-max
+ // 삭제! shipTypeVlcc: boolean("ship_type_vlcc").default(false), // VLCC
+ // 삭제! shipTypeLngc: boolean("ship_type_lngc").default(false), // LNGC
+ // 삭제! shipTypeCont: boolean("ship_type_cont").default(false), // CONT
// AVL 적용 선종(해양)
- offshoreTypeCommon: boolean("offshore_type_common").default(false), // 공통
- offshoreTypeFpso: boolean("offshore_type_fpso").default(false), // FPSO
- offshoreTypeFlng: boolean("offshore_type_flng").default(false), // FLNG
- offshoreTypeFpu: boolean("offshore_type_fpu").default(false), // FPU
- offshoreTypePlatform: boolean("offshore_type_platform").default(false), // Platform
- offshoreTypeWtiv: boolean("offshore_type_wtiv").default(false), // WTIV
- offshoreTypeGom: boolean("offshore_type_gom").default(false), // GOM
+ // 삭제! offshoreTypeCommon: boolean("offshore_type_common").default(false), // 공통
+ // 삭제! offshoreTypeFpso: boolean("offshore_type_fpso").default(false), // FPSO
+ // 삭제! offshoreTypeFlng: boolean("offshore_type_flng").default(false), // FLNG
+ // 삭제! offshoreTypeFpu: boolean("offshore_type_fpu").default(false), // FPU
+ // 삭제! offshoreTypePlatform: boolean("offshore_type_platform").default(false), // Platform
+ // 삭제! offshoreTypeWtiv: boolean("offshore_type_wtiv").default(false), // WTIV
+ // 삭제! offshoreTypeGom: boolean("offshore_type_gom").default(false), // GOM
// eVCP 미등록 정보
- picName: varchar("pic_name", { length: 50 }), // PIC(담당자)
- picEmail: varchar("pic_email", { length: 100 }), // PIC(E-mail)
- picPhone: varchar("pic_phone", { length: 20 }), // PIC(Phone)
- agentName: varchar("agent_name", { length: 50 }), // Agent(담당자)
- agentEmail: varchar("agent_email", { length: 100 }), // Agent(E-mail)
- agentPhone: varchar("agent_phone", { length: 20 }), // Agent(Phone)
+ // 삭제! picName: varchar("pic_name", { length: 50 }), // PIC(담당자)
+ // 삭제! picEmail: varchar("pic_email", { length: 100 }), // PIC(E-mail)
+ // 삭제! picPhone: varchar("pic_phone", { length: 20 }), // PIC(Phone)
+ // 삭제! agentName: varchar("agent_name", { length: 50 }), // Agent(담당자)
+ // 삭제! agentEmail: varchar("agent_email", { length: 100 }), // Agent(E-mail)
+ // 삭제! agentPhone: varchar("agent_phone", { length: 20 }), // Agent(Phone)
// 업체 실적 현황
recentQuoteDate: varchar("recent_quote_date", { length: 10 }), // 최근견적일 (YYYY-MM-DD)
@@ -98,10 +97,10 @@ export const vendorPool = pgTable("vendor_pool", {
lastModifier: varchar("last_modifier", { length: 50 }), // 최종변경자
}, (table) => ({
- // 새로운 unique 제약조건: 공사부문 + H/T + 자재그룹코드 + 협력업체명
+ // 새로운 unique 제약조건: 공사부문 + H/T + 설계공종 + 자재그룹코드 + 협력업체명
uniqueVendorPoolCombination: uniqueIndex("unique_vendor_pool_combination")
- .on(table.constructionSector, table.htDivision, table.materialGroupCode, table.vendorName)
- .where(sql`${table.materialGroupCode} IS NOT NULL AND ${table.vendorName} IS NOT NULL`)
+ .on(table.constructionSector, table.htDivision, table.discipline, table.materialGroupCode, table.vendorName)
+ .where(sql`${table.discipline} IS NOT NULL AND ${table.materialGroupCode} IS NOT NULL AND ${table.vendorName} IS NOT NULL`)
}));
// 복합키 인덱스 (자재그룹코드 + 벤더코드)