290 lines
8.1 KiB
Markdown
290 lines
8.1 KiB
Markdown
|
|
# 견적 (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 테이블
|
|||
|
|
```sql
|
|||
|
|
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 구조
|
|||
|
|
```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 구조
|
|||
|
|
```json
|
|||
|
|
[
|
|||
|
|
{
|
|||
|
|
"item_code": "AUTO001",
|
|||
|
|
"item_name": "벤딩 가공비",
|
|||
|
|
"calc_type": "per_meter",
|
|||
|
|
"base_value": 120.5,
|
|||
|
|
"unit_price": 2500,
|
|||
|
|
"amount": 301250
|
|||
|
|
}
|
|||
|
|
]
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 비즈니스 로직
|
|||
|
|
|
|||
|
|
### 프로젝트 번호 생성
|
|||
|
|
```php
|
|||
|
|
// 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;
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 금액 계산
|
|||
|
|
```php
|
|||
|
|
// 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. 견적 구조 개선
|
|||
|
|
```sql
|
|||
|
|
-- 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. 단가표 관리
|
|||
|
|
```sql
|
|||
|
|
-- 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. 견적 이력
|
|||
|
|
```sql
|
|||
|
|
-- 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` - 번호 생성
|