- 5130 레거시 시스템 분석 (00_OVERVIEW ~ 08_SAM_COMPARISON) - MES 프로젝트 문서 - API/프론트엔드 스펙 문서 - 가이드 및 레퍼런스 문서
8.1 KiB
8.1 KiB
견적 (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- 번호 생성