Files
sam-docs/projects/legacy-5130/03_ESTIMATE.md
hskwon 08a8259313 docs: 5130 레거시 분석 문서 및 기존 문서 초기 커밋
- 5130 레거시 시스템 분석 (00_OVERVIEW ~ 08_SAM_COMPARISON)
- MES 프로젝트 문서
- API/프론트엔드 스펙 문서
- 가이드 및 레퍼런스 문서
2025-12-04 18:47:19 +09:00

8.1 KiB
Raw Blame History

견적 (Estimate) 분석

개요

  • 디렉토리: /estimate/
  • DB 테이블: estimate (동적 테이블명 가능)
  • 주요 기능: 견적서 작성, 단가 자동계산, 견적 이력 관리

디렉토리 구조

/estimate/
├── _request.php              # 요청 파라미터
├── _row.php                  # 행 렌더링
├── insert.php                # 견적 저장
├── list.php                  # 견적 목록
├── list_unit.php             # 단가 목록
├── write_form.php            # 견적서 작성 폼 (103KB)
├── edit.php                  # 견적 수정
├── edit_slat.php             # 슬랫 견적 수정
├── estimate.php              # 견적서 메인
├── estimateSlat.php          # 슬랫 견적
├── estimateUnit.php          # 단가 견적
├── view.php                  # 견적 상세
├── viewEstimate.php          # 견적서 보기
├── viewEstimateDetail.php    # 견적 상세 보기
├── statistics.php            # 견적 통계
├── fetch_unitprice.php       # 단가 조회 (32KB)
├── get_estimate_amount.php   # 견적 금액 계산
├── get_screen_amount.php     # 스크린 금액 계산
├── get_slat_amount.php       # 슬랫 금액 계산
├── generate_serial_pjnum.php # 프로젝트 번호 생성
├── screen_view_*.php         # 스크린 견적 뷰
├── slat_view_*.php           # 슬랫 견적 뷰
└── common/                   # 공통 모듈

DB 스키마

estimate 테이블

CREATE TABLE estimate (
    num INT AUTO_INCREMENT PRIMARY KEY,

    -- 기본 정보
    pjnum VARCHAR(50),                 -- 프로젝트 번호 (KD-PR-YYMMDD-NN)
    indate DATE,                       -- 등록일
    orderman VARCHAR(50),              -- 담당자
    outworkplace VARCHAR(200),         -- 현장명/거래처

    -- 분류 정보
    major_category VARCHAR(50),        -- 대분류 (슬랫, 스크린)
    model_name VARCHAR(100),           -- 모델명
    position VARCHAR(50),              -- 위치

    -- 규격 정보
    makeWidth INT,                     -- 제작 폭 (기본 160)
    makeHeight INT,                    -- 제작 높이 (기본 350)
    maguriWing VARCHAR(20),            -- 마구리 윙 (기본 50)

    -- 발주처 정보
    con_num VARCHAR(50),               -- 계약번호
    secondord VARCHAR(100),            -- 2차 발주처
    secondordman VARCHAR(50),          -- 2차 담당자
    secondordmantel VARCHAR(20),       -- 2차 담당자 연락처
    secondordnum VARCHAR(50),          -- 2차 발주번호

    -- 견적 상세 (JSON)
    estimateList TEXT,                 -- 스크린 견적 리스트 (JSON)
    estimateList_auto TEXT,            -- 스크린 자동계산 리스트 (JSON)
    estimateSlatList TEXT,             -- 슬랫 견적 리스트 (JSON)
    estimateSlatList_auto TEXT,        -- 슬랫 자동계산 리스트 (JSON)

    -- 금액 정보
    estimateTotal INT DEFAULT 0,       -- 견적 총액
    EstimateFirstSum INT DEFAULT 0,    -- 최초 견적 합계
    EstimateUpdatetSum INT DEFAULT 0,  -- 수정 견적 합계
    EstimateDiffer INT DEFAULT 0,      -- 차액
    estimateSurang INT DEFAULT 0,      -- 수량

    -- 할인 정보
    EstimateDiscountRate INT DEFAULT 0,-- 할인율
    EstimateDiscount INT DEFAULT 0,    -- 할인금액
    EstimateFinalSum INT DEFAULT 0,    -- 최종 금액

    -- 검사비/부가정보
    inspectionFee INT DEFAULT 50000,   -- 인정검사비
    steel VARCHAR(50),                 -- 강종
    motor VARCHAR(100),                -- 모터
    warranty VARCHAR(100),             -- 보증기간

    -- 체크 플래그
    slatcheck VARCHAR(10),             -- 슬랫 체크
    partscheck VARCHAR(10),            -- 부품 체크

    -- 시스템 필드
    comment TEXT,                      -- 비고
    update_log TEXT,                   -- 수정이력
    is_deleted TINYINT DEFAULT 0,      -- 삭제플래그

    INDEX idx_pjnum (pjnum),
    INDEX idx_outworkplace (outworkplace),
    INDEX idx_indate (indate)
);

견적 데이터 구조

estimateList JSON 구조

[
    {
        "item_name": "가이드레일",
        "specification": "A형 65×80",
        "unit": "EA",
        "quantity": 2,
        "unit_price": 150000,
        "amount": 300000,
        "remark": ""
    },
    {
        "item_name": "스크린 판넬",
        "specification": "1.0T × 1200W",
        "unit": "m²",
        "quantity": 24.5,
        "unit_price": 45000,
        "amount": 1102500,
        "remark": "SUS304"
    }
]

estimateList_auto JSON 구조

[
    {
        "item_code": "AUTO001",
        "item_name": "벤딩 가공비",
        "calc_type": "per_meter",
        "base_value": 120.5,
        "unit_price": 2500,
        "amount": 301250
    }
]

비즈니스 로직

프로젝트 번호 생성

// generate_serial_pjnum.php
function generatePjnum() {
    // 형식: KD-PR-YYMMDD-NN
    // KD: 경동
    // PR: 프로젝트
    // YYMMDD: 날짜
    // NN: 일련번호 (01~99)

    $today = date('ymd');
    $prefix = "KD-PR-{$today}-";

    // 오늘 날짜의 마지막 번호 조회
    $sql = "SELECT pjnum FROM estimate
            WHERE pjnum LIKE '{$prefix}%'
            ORDER BY pjnum DESC LIMIT 1";

    // 일련번호 증가
    $nextNum = str_pad($lastNum + 1, 2, '0', STR_PAD_LEFT);

    return $prefix . $nextNum;
}

금액 계산

// insert.php
$estimateTotal = intval(str_replace(',', '', $estimateTotal));
$EstimateFirstSum = intval(str_replace(',', '', $EstimateFirstSum));
$EstimateUpdatetSum = intval(str_replace(',', '', $EstimateUpdatetSum));
$EstimateDiffer = intval(str_replace(',', '', $EstimateDiffer));
$EstimateFinalSum = intval(str_replace(',', '', $EstimateFinalSum));

단가 조회 (fetch_unitprice.php)

  • 모델별 기본 단가
  • 규격별 가격 가감
  • 강종(steel)별 가격 계수
  • 마진율 적용

견적 유형

1. 스크린 견적 (Screen)

  • 파일: estimate.php, screen_view_*.php
  • 특징: 면적(m²) 기반 계산
  • 주요 항목: 판넬, 가이드레일, 브라켓

2. 슬랫 견적 (Slat)

  • 파일: estimateSlat.php, slat_view_*.php
  • 특징: 폭/높이 기반 계산
  • 주요 항목: 슬랫 코일, 인터락, 샤프트

3. 단가 견적 (Unit)

  • 파일: estimateUnit.php, list_unit.php
  • 특징: 품목별 단가 설정

견적서 출력

  • /estimate/print_list.php - 견적 목록 인쇄
  • /estimate/viewEstimate.php - 견적서 보기
  • /estimate/saveExcel.php - 엑셀 저장

SAM 마이그레이션 포인트

1. 견적 구조 개선

-- SAM: 견적 헤더/상세 분리
estimates (
    id,
    tenant_id,
    estimate_number,      -- 견적번호
    customer_id,          -- 거래처
    project_name,
    estimate_date,
    valid_until,          -- 유효기간
    status,               -- draft, sent, accepted, rejected
    total_amount,
    discount_rate,
    discount_amount,
    final_amount,
    created_by
)

estimate_items (
    id,
    estimate_id,
    item_type,            -- manual, auto_calculated
    item_code,
    item_name,
    specification,
    unit,
    quantity,
    unit_price,
    amount,
    sort_order
)

2. 단가표 관리

-- SAM: 단가 마스터
price_masters (
    id,
    tenant_id,
    category_id,
    item_code,
    item_name,
    base_price,
    effective_from,
    effective_to,
    is_active
)

-- SAM: 단가 조건
price_conditions (
    id,
    price_master_id,
    condition_type,       -- size, material, quantity
    condition_value,
    adjustment_type,      -- fixed, percentage
    adjustment_value
)

3. 견적 이력

-- SAM: 견적 버전 관리
estimate_versions (
    id,
    estimate_id,
    version,
    snapshot JSON,        -- 견적 전체 스냅샷
    changed_by,
    changed_at,
    change_reason
)

참고 파일

  • /estimate/insert.php - 저장 로직
  • /estimate/write_form.php - 견적서 UI (대용량 파일)
  • /estimate/fetch_unitprice.php - 단가 계산 로직
  • /estimate/generate_serial_pjnum.php - 번호 생성