diff --git a/db/migrations/019_proc_terms.sql b/db/migrations/019_proc_terms.sql new file mode 100644 index 0000000..5be73e1 --- /dev/null +++ b/db/migrations/019_proc_terms.sql @@ -0,0 +1,67 @@ +-- 019_proc_terms.sql +-- v0.8 (2026-05-08) +-- 1) 매입 발주서 납품조건 4필드 추가 +-- 2) 기존 공급업체 데이터 삭제 + 샘플 10개 신규 등록 + +BEGIN; + +-- ───────────────────────────────────────────────────────────────── +-- 1. momo_procurements 납품조건 컬럼 +-- ───────────────────────────────────────────────────────────────── +ALTER TABLE momo_procurements + ADD COLUMN IF NOT EXISTS delivery_place TEXT, + ADD COLUMN IF NOT EXISTS delivery_period TEXT, + ADD COLUMN IF NOT EXISTS payment_terms TEXT, + ADD COLUMN IF NOT EXISTS freight_terms TEXT; + +COMMENT ON COLUMN momo_procurements.delivery_place IS '납품장소'; +COMMENT ON COLUMN momo_procurements.delivery_period IS '납품기간'; +COMMENT ON COLUMN momo_procurements.payment_terms IS '대금지불 조건'; +COMMENT ON COLUMN momo_procurements.freight_terms IS '운임부담'; + +-- ───────────────────────────────────────────────────────────────── +-- 2. 공급업체(supply_mng) 초기화 + 샘플 10개 +-- supply_mng.objid 는 numeric/bigint — 시퀀스가 있을 수도/없을 수도 있어 +-- DO 블록 안에서 MAX(objid)+1 로 안전하게 부여한다. +-- ───────────────────────────────────────────────────────────────── + +-- 담당자 테이블 정리 (테이블이 있으면) +DO $$ +BEGIN + IF EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name = 'supply_charger') THEN + DELETE FROM supply_charger + WHERE supply_objid::text IN (SELECT objid::text FROM supply_mng); + END IF; +END $$; + +-- 기존 공급업체 모두 삭제 +DELETE FROM supply_mng; + +-- 샘플 10개 — MAX(objid)+1 ~ +10 으로 부여 +DO $$ +DECLARE + base_id BIGINT; + samples TEXT[][] := ARRAY[ + ARRAY['VND-001', '(주)아바텍', '김영수', '02-1234-5678', '101-81-12345', 'avatec@example.com', '서울시 강남구 테헤란로 123'], + ARRAY['VND-002', '대성식품', '이상민', '031-987-6543','129-86-54321', 'daesung@example.com', '경기도 의왕시 벌모루길 46'], + ARRAY['VND-003', '(주)고기파는농부', '박정훈', '02-555-1212', '215-87-66721', 'meatfarmer@example.com', '서울시 송파구 문정동 88-2'], + ARRAY['VND-004', '광이진천 농장', '최수진', '043-532-1010','317-91-12340', 'gwang2@example.com', '충북 진천군 진천읍 광혜원로 12'], + ARRAY['VND-005', '단과일', '강동현', '063-211-3344','404-86-77890', 'danfruit@example.com', '전북 전주시 완산구 단풍로 5'], + ARRAY['VND-006', '봉담수산', '윤소라', '031-220-7788','129-86-22301', 'bongdam@example.com', '경기도 화성시 봉담읍 와우안길 33'], + ARRAY['VND-007', '명일동유기농', '이지호', '02-441-2233', '220-81-33445', 'myungil@example.com', '서울시 강동구 명일로 100'], + ARRAY['VND-008', '울산단과일', '오민재', '052-733-9988','610-81-44567', 'ulsanfruit@example.com', '울산시 남구 삼산로 150'], + ARRAY['VND-009', '농부의아침', '한세영', '031-333-4444','215-87-55667', 'morning@example.com', '경기도 양주시 백석읍 호명로 22'], + ARRAY['VND-010', '초록마을 도매', '정혜민', '02-1577-7234','110-86-99887', 'choroc@example.com', '서울시 마포구 양화로 45'] + ]; + i INT; +BEGIN + SELECT COALESCE(MAX(objid::bigint), 0) INTO base_id FROM supply_mng; + FOR i IN 1..10 LOOP + INSERT INTO supply_mng + (objid, supply_code, supply_name, charge_user_name, supply_tel_no, reg_no, email, supply_address, status, reg_id, reg_date) + VALUES + (base_id + i, samples[i][1], samples[i][2], samples[i][3], samples[i][4], samples[i][5], samples[i][6], samples[i][7], 'active', 'admin', NOW()); + END LOOP; +END $$; + +COMMIT; diff --git a/src/app/(main)/m/admin/procurements/page.tsx b/src/app/(main)/m/admin/procurements/page.tsx index ae1c869..e64af6d 100644 --- a/src/app/(main)/m/admin/procurements/page.tsx +++ b/src/app/(main)/m/admin/procurements/page.tsx @@ -13,6 +13,10 @@ interface ProcDetail { OBJID: string; PROC_NO: string; PROC_DATE: string; STATUS: string; TOTAL_AMOUNT: number; MEMO?: string; VENDOR_OBJID: string | null; VENDOR_NAME: string | null; + DELIVERY_PLACE?: string; + DELIVERY_PERIOD?: string; + PAYMENT_TERMS?: string; + FREIGHT_TERMS?: string; } interface ProcLine { OBJID: string; ITEM_OBJID: string; ITEM_CODE: string; ITEM_NAME: string; @@ -234,6 +238,7 @@ export default function ProcurementsPage() { vendors={vendors} onSetVendor={(v) => updateHeader({ vendorObjid: v || null })} onSetMemo={(m) => updateHeader({ memo: m })} + onSetTerm={(field, val) => updateHeader({ [field]: val })} onAddPicker={() => setPickerOpen(true)} onUpdateLine={updateLine} onDeleteLine={deleteLine} @@ -271,11 +276,12 @@ export default function ProcurementsPage() { ); } -function ProcurementForm({ detail, vendors, onSetVendor, onSetMemo, onAddPicker, onUpdateLine, onDeleteLine }: { +function ProcurementForm({ detail, vendors, onSetVendor, onSetMemo, onSetTerm, onAddPicker, onUpdateLine, onDeleteLine }: { detail: { proc: ProcDetail; items: ProcLine[] }; vendors: Vendor[]; onSetVendor: (id: string) => void; onSetMemo: (m: string) => void; + onSetTerm: (field: "deliveryPlace" | "deliveryPeriod" | "paymentTerms" | "freightTerms", val: string) => void; onAddPicker: () => void; onUpdateLine: (line: { objid?: string; itemObjid?: string; qty: number; costPrice: number }) => void; onDeleteLine: (objid: string) => void; @@ -407,20 +413,87 @@ function ProcurementForm({ detail, vendors, onSetVendor, onSetMemo, onAddPicker, -

2. 비고

+

2. 납품조건

+
    +
  1. 상기 품목의 납기 지연 시, 지연일수 매 1일에 대하여 미납 금액의 3/1000을 납품대금 지불 시 우선 공제한다.
  2. +
  3. 납품된 물품은 당사의 지정인에게 검수를 받아야 하며, 부적합품은 즉시 납품자의 비용으로 반출하여야 한다.
  4. +
  5. 상기 수량 및 규격은 당사의 사정에 의하여 변경될 수 있으며, 납품자는 이에 대하여 이의를 제기할 수 없다.
  6. +
+ + + + + + + + + + + + + + + + +
4) 납품장소 + {editable ? ( + onSetTerm("deliveryPlace", e.target.value)} + className="w-full h-7 px-2 text-[11px] outline-none border-0 bg-transparent" /> + ) : ( + {detail.proc.DELIVERY_PLACE || "-"} + )} + 6) 대금지불 + {editable ? ( + onSetTerm("paymentTerms", e.target.value)} + className="w-full h-7 px-2 text-[11px] outline-none border-0 bg-transparent" /> + ) : ( + {detail.proc.PAYMENT_TERMS || "-"} + )} +
5) 납품기간 + {editable ? ( + onSetTerm("deliveryPeriod", e.target.value)} + className="w-full h-7 px-2 text-[11px] outline-none border-0 bg-transparent" /> + ) : ( + {detail.proc.DELIVERY_PERIOD || "-"} + )} + 7) 운임부담 + {editable ? ( + onSetTerm("freightTerms", e.target.value)} + className="w-full h-7 px-2 text-[11px] outline-none border-0 bg-transparent" /> + ) : ( + {detail.proc.FREIGHT_TERMS || "-"} + )} +
+ +
    +
  1. 본 발주서는 납품자가 FAX 또는 기타 방법으로 접수 후 3일 이내에 이의를 제기치 않으면 제반 법적 효력을 발휘한다.
  2. +
  3. 상기 조항에 명시되지 아니한 사항은 상호 협의하고, 협의가 불가능할 경우에는 당사의 해석에 따른다.
  4. +
+ +

3. 비고

{editable ? (