ERP-node/docs/screen-implementation-guide/04_purchase/purchase-order.md

5.9 KiB

발주관리 화면 구현 가이드

화면명: 발주관리 파일: 발주관리.html 분류: 구매관리 구현 가능: 완전 (현재 V2 컴포넌트)


1. 화면 개요

자재/원자재 발주를 생성하고 관리하는 화면입니다.

핵심 기능

  • 발주 목록 조회/검색
  • 발주 등록/수정/삭제
  • 발주서 인쇄
  • 입고 연계

2. 화면 레이아웃

┌─────────────────────────────────────────────────────────────────┐
│ [기간] [공급업체] [발주번호] [품목명] [상태▼] [초기화][조회]      │
│                                          [사용자옵션][OCR][엑셀] │
├─────────────────────────────────────────────────────────────────┤
│ 📋 발주 목록                        [신규등록]                   │
│ ─────────────────────────────────────────────────────────────  │
│ │□|발주번호  |발주일    |공급업체  |발주금액   |상태  |담당자│   │
│ │□|PO-2026..|2026-01-30|(주)원자재|5,000,000 |진행중|홍길동│   │
│ │□|PO-2026..|2026-01-29|(주)부품사|3,200,000 |완료  |김철수│   │
│ │□|PO-2026..|2026-01-28|(주)자재사|1,800,000 |진행중|이영희│   │
└─────────────────────────────────────────────────────────────────┘

3. V2 컴포넌트 매핑

HTML 영역 V2 컴포넌트 상태
검색 섹션 v2-table-search-widget 가능
발주 목록 v2-table-list 가능
발주 등록 모달 v2-modal-form (필요) ⚠️ 대체 가능

4. 테이블 정의

columns: [
  { id: 'checkbox', type: 'checkbox', width: 50 },
  { id: 'po_no', label: '발주번호', width: 120 },
  { id: 'po_date', label: '발주일', width: 100 },
  { id: 'supplier_name', label: '공급업체', width: 200 },
  { id: 'total_amount', label: '발주금액', width: 120, align: 'right', format: 'currency' },
  { id: 'delivery_date', label: '납기일', width: 100 },
  { id: 'status', label: '상태', width: 80 },
  { id: 'receive_status', label: '입고상태', width: 100 },
  { id: 'manager', label: '담당자', width: 100 }
]

5. 검색 조건

필드명 컴포넌트 설정
기간 v2-date dateRange: true
공급업체 v2-input placeholder: "공급업체"
발주번호 v2-input placeholder: "발주번호"
품목명 v2-input placeholder: "품목명"
상태 v2-select 작성중, 발주, 부분입고, 입고완료

6. 구현 JSON

{
  "screen_code": "PO_MAIN",
  "screen_name": "발주관리",
  "components": [
    {
      "type": "v2-table-search-widget",
      "position": { "x": 0, "y": 0, "w": 12, "h": 2 },
      "config": {
        "searchFields": [
          { "type": "date", "id": "date_range", "placeholder": "발주기간", "dateRange": true },
          { "type": "input", "id": "supplier_name", "placeholder": "공급업체" },
          { "type": "input", "id": "po_no", "placeholder": "발주번호" },
          { "type": "input", "id": "item_name", "placeholder": "품목명" },
          { "type": "select", "id": "status", "placeholder": "상태" }
        ],
        "buttons": [
          { "label": "초기화", "action": "reset", "variant": "outline" },
          { "label": "조회", "action": "search", "variant": "primary" }
        ],
        "rightButtons": [
          { "label": "사용자옵션", "action": "userOptions" },
          { "label": "OCR입력", "action": "ocr" },
          { "label": "엑셀다운로드", "action": "excelDownload" }
        ]
      }
    },
    {
      "type": "v2-table-list",
      "position": { "x": 0, "y": 2, "w": 12, "h": 10 },
      "config": {
        "title": "발주 목록",
        "entityId": "purchase_order",
        "buttons": [
          { "label": "신규등록", "action": "create", "variant": "primary" }
        ],
        "columns": [
          { "id": "po_no", "label": "발주번호", "width": 120 },
          { "id": "po_date", "label": "발주일", "width": 100 },
          { "id": "supplier_name", "label": "공급업체", "width": 200 },
          { "id": "total_amount", "label": "발주금액", "width": 120, "align": "right" },
          { "id": "delivery_date", "label": "납기일", "width": 100 },
          { "id": "status", "label": "상태", "width": 80 },
          { "id": "manager", "label": "담당자", "width": 100 }
        ],
        "rowActions": [
          { "label": "상세", "action": "view" },
          { "label": "수정", "action": "edit" },
          { "label": "삭제", "action": "delete" }
        ]
      }
    }
  ]
}

7. 데이터베이스 테이블

purchase_order (발주 헤더)

CREATE TABLE purchase_order (
  id SERIAL PRIMARY KEY,
  company_code VARCHAR(20) NOT NULL,
  po_no VARCHAR(50) NOT NULL,
  po_date DATE NOT NULL,
  supplier_code VARCHAR(50),
  supplier_name VARCHAR(200),
  total_amount NUMERIC(15,2),
  tax_amount NUMERIC(15,2),
  status VARCHAR(20) DEFAULT 'draft',
  delivery_date DATE,
  manager VARCHAR(100),
  remark TEXT,
  created_at TIMESTAMPTZ DEFAULT NOW()
);

8. 구현 체크리스트

  • 검색 영역: v2-table-search-widget
  • 발주 목록 테이블: v2-table-list
  • 컬럼 정렬/필터
  • 발주 등록 모달
  • OCR 입력 기능 (별도)
  • 인쇄 기능

현재 V2 컴포넌트로 핵심 기능 구현 가능