```sql
CREATE TABLE public.swsc110a_tbl (
orderno varchar(10) NOT NULL,
acntunit varchar(1) NOT NULL,
orderym varchar(6) NOT NULL,
orderser varchar(3) NOT NULL,
orderunit varchar(1) NOT NULL,
salegb varchar(1) NOT NULL,
saletype varchar(2) NOT NULL,
chulhayn varchar(1) NULL,
custcd varchar(6) NOT NULL,
deptcd varchar(5) NOT NULL,
salesman varchar(30) NOT NULL,
bdeptcd varchar(30) NOT NULL,
bempno varchar(30) NOT NULL,
orderdate varchar(8) NOT NULL,
finishdate varchar(8) NULL,
goodscd varchar(15) NULL,
goodsguarantee int4 NULL,
goodsqty int4 NULL,
saleqty int4 NULL,
saleqty1 int4 NULL,
supplyqty int4 NULL,
saleprice numeric NULL,
saleamt numeric NULL,
vatamt numeric NULL,
supplyamt numeric NULL,
rcptamt numeric NULL,
nowonsymbol varchar(5) NULL,
nowonprice numeric NULL,
nowonexchange numeric NULL,
nowonamt numeric NULL,
nowonsupply numeric NULL,
nowonsupplypal numeric NULL,
nowonrcpt numeric NULL,
nowonrcptpal numeric NULL,
nationgb varchar(3) NULL,
optionamt numeric NULL,
etcamt numeric NULL,
endsale varchar(1) NULL,
custreq varchar(1) NULL,
bigo varchar(90) NULL,
workman varchar(30) NOT NULL,
cancelflag varchar(1) NOT NULL,
cancelworkman varchar(30) NULL,
cancelbigo varchar(90) NULL,
cret_date timestamp NULL,
cretempno varchar(30) NOT NULL,
edit_date timestamp NULL,
editempno varchar(30) NOT NULL,
goodsyn varchar(1) NULL,
past_project_no varchar(50) NULL,
equipment_name varchar(200) NULL,
equipment_count numeric(10, 2) NULL,
request_delivery_date date NULL,
delivery_location varchar(200) NULL,
setup_location varchar(200) NULL,
material varchar(100) NULL,
pressure_bar numeric(10, 2) NULL,
temperature_celsius numeric(10, 2) NULL,
capacity_liter numeric(10, 2) NULL,
closure_type varchar(100) NULL,
consumables_etc varchar(200) NULL,
voltage varchar(50) NULL,
certification_status varchar(50) NULL,
sales_progress_stage varchar(50) NULL,
currency_type varchar(20) NULL,
quote_amount_1st numeric(15, 2) NULL,
quote_amount_2nd numeric(15, 2) NULL,
quote_amount_3rd numeric(15, 2) NULL,
order_date date NULL,
order_period varchar(50) NULL,
result_status varchar(50) NULL,
order_amount_krw numeric(15, 2) NULL,
contract_method varchar(50) NULL,
failure_reason varchar(50) NULL,
po_number varchar(100) NULL,
pm_manager varchar(50) NULL,
project_title varchar(200) NULL,
company_project_name varchar(200) NULL,
special_notes text NULL,
CONSTRAINT pk_swsc110a_tbl PRIMARY KEY (orderno)
);
CREATE INDEX idx_swsc110a_equipment_name ON public.swsc110a_tbl USING btree (equipment_name);
CREATE INDEX idx_swsc110a_order_date ON public.swsc110a_tbl USING btree (order_date);
CREATE INDEX idx_swsc110a_pm_manager ON public.swsc110a_tbl USING btree (pm_manager);
CREATE INDEX idx_swsc110a_result_status ON public.swsc110a_tbl USING btree (result_status);
CREATE INDEX idx_swsc110a_sales_progress ON public.swsc110a_tbl USING btree (sales_progress_stage);
```

---

```sql
CREATE TABLE public.contract_mgmt (
objid varchar NOT NULL,
category_cd varchar NULL,
customer_objid varchar NULL,
product varchar NULL,
customer_project_name varchar NULL,
status_cd varchar NULL,
due_date varchar NULL,
"location" varchar NULL,
setup varchar NULL,
facility varchar NULL,
facility_qty varchar NULL,
facility_type varchar NULL,
facility_depth varchar NULL,
production_no varchar NULL,
bus_cal_cd varchar NULL,
category1_cd varchar NULL,
chg_user_id varchar NULL,
plan_date varchar NULL,
complete_date varchar NULL,
result_cd varchar NULL,
project_no varchar NULL,
pm_user_id varchar NULL,
contract_price varchar NULL,
regdate timestamp NULL,
writer varchar NULL,
contract_no varchar NULL,
customer_equip_name varchar NULL,
req_del_date varchar NULL,
contract_del_date varchar NULL,
contract_company varchar NULL,
contract_date varchar NULL,
po_no varchar NULL,
manufacture_plant varchar NULL,
contract_result varchar NULL,
project_name varchar NULL,
spec_user_id varchar NULL,
spec_plan_date varchar NULL,
spec_comp_date varchar NULL,
spec_result_cd varchar NULL,
est_plan_date varchar NULL,
est_user_id varchar NULL,
est_comp_date varchar NULL,
est_result_cd varchar NULL,
area_cd varchar NULL,
contract_price_currency varchar NULL,
contract_currency varchar NULL,
customer_production_no varchar NULL,
target_project_no varchar NULL,
mechanical_type varchar NULL,
target_project_no_direct varchar NULL,
overhaul_order varchar NULL,
past_project_no varchar(50) NULL,
equipment_name varchar(200) NULL,
equipment_count varchar(100) NULL,
request_delivery_date varchar(20) NULL,
delivery_location varchar(200) NULL,
setup_location varchar(200) NULL,
material varchar(100) NULL,
pressure_bar varchar(50) NULL,
temperature_celsius varchar(50) NULL,
capacity_liter varchar(50) NULL,
closure_type varchar(100) NULL,
consumables_etc varchar(200) NULL,
voltage varchar(50) NULL,
certification_status varchar(50) NULL,
sales_progress_stage varchar(50) NULL,
currency_type varchar(20) NULL,
quote_amount_1st numeric(15, 2) NULL,
quote_amount_2nd numeric(15, 2) NULL,
quote_amount_3rd numeric(15, 2) NULL,
order_date varchar(20) NULL,
order_period varchar(50) NULL,
result_status varchar(50) NULL,
order_amount_krw numeric(15, 2) NULL,
contract_method varchar(50) NULL,
failure_reason varchar(50) NULL,
po_number varchar(100) NULL,
pm_manager varchar(50) NULL,
project_title varchar(200) NULL,
company_project_name varchar(200) NULL,
special_notes text NULL,
CONSTRAINT contract_mgmt_pkey PRIMARY KEY (objid)
);
```

등록창 수정

[영업정보]
계약구분(공통코드선택), 과거프로젝트번호(프로젝트데이터선택), 국내/해외고객사(공통코드선택), 제품군(기존 선택코드 참조), 제품코드(기존 선택코드 참조), 장비명, 설비대수, 요청납기일(캘린더 활용), 입고지, 셋업지
[사양상세]
재질, 압력(BAR), 온도(℃), 용량(LITER), Closure type, 기타(소모품), 전압, 인증여부
[영업진행]
단계(선택 공통코드)
[견적이력 및 결과]
통화(기존 공통코드), 견적 금액(1차), 견적 금액(2차), 견적 금액(3차), 수주일, 수주가(자동계산), Result(공통코드), 계약방식(공통코드), 실폐사유(공통코드), P/O No, PM(기존 데이터선택 유지), 당사프로젝트명
[특이사항]
입력칸
[파일첨부]
입수자료, 제출자료( 기존 파일첨부 활용 - 다중 파일 첨부 가능)

## 아래는 공통코드(등록되어 있음)

계약방식 선택
조달
민자
대리점
재료비

---

실폐사유 선택
회신 없음
예산 문제
탈락
유찰
취소
부적합

---

진행단계 선택
사양협의
원가검토
견적제출

---

계약구분 선택
① 개발
② 변형
③ 소모품
④ 재주문
⑤ A/S
⑥ 연구과제

등록화면이 이렇게 나와야 함

---

# 영업관리\_계약관리 시스템 필드 추가 수정 (기존 코드 활용 최대화)

## 📖 시스템 개요

기존 계약관리 시스템을 확장하여 영업등록 시스템으로 발전시키는 프로젝트입니다.

## 🔍 **기존 코드 vs 신규 추가 정확한 구분**

### ✅ **기존 코드 활용 (수정 불필요)**

#### 1. 기존 공통코드 (이미 등록되어 활용 중)

| 코드ID      | 용도         | 기존 사용처                               | 선택값                                                |
| ----------- | ------------ | ----------------------------------------- | ----------------------------------------------------- |
| **0000167** | 계약구분     | ProjectController, ContractMgmtController | ① 개발, ② 변형, ③ 소모품, ④ 재주문, ⑤ A/S, ⑥ 연구과제 |
| **0000932** | 영업진행단계 | ProjectController, ContractMgmtController | 사양협의, 원가검토, 견적제출                          |
| **0000963** | 수주결과     | ProjectController, ContractMgmtController | 수주, 실패                                            |
| **0000964** | 실패사유     | ContractMgmtService, 여러 매퍼            | 회신 없음, 예산 문제, 탈락, 유찰, 취소, 부적합        |

#### 2. 기존 필드 (JSP에 이미 존재)

- **계약구분** (`category_cd`) - 기존 0000167 공통코드 사용
- **국내/해외** (`area_cd`) - 기존 필드 활용
- **고객사** (`customer_objid`) - 기존 고객 선택 코드 활용
- **제품구분** (`product`) - 기존 제품 선택 코드 활용
- **기계형식** (`mechanical_type`) - 기존 필드 활용

#### 3. 기존 파일 업로드 기능

- **입수자료** (`contractMgmt01`) - 기존 DRAG & DROP 방식 활용
- **제출자료** (`contractMgmt02`) - 기존 DRAG & DROP 방식 활용

### 🆕 **신규 추가 필요**

#### 1. 신규 공통코드 (추가 등록 필요)

추가된 공통코드

-- 계약구분 부모 코드
INSERT INTO comm_code (code_id, parent_code_id, code_name, id, code_cd, ext_val, writer, regdate, status)
VALUES ('0000167', NULL, '계약구분', NULL, NULL, NULL, 'plm_admin', NOW(), 'active');

-- 영업진행단계 부모 코드
INSERT INTO comm_code (code_id, parent_code_id, code_name, id, code_cd, ext_val, writer, regdate, status)
VALUES ('0000932', NULL, '영업진행단계', NULL, NULL, NULL, 'plm_admin', NOW(), 'active');

-- 수주결과 부모 코드
INSERT INTO comm_code (code_id, parent_code_id, code_name, id, code_cd, ext_val, writer, regdate, status)
VALUES ('0000963', NULL, '수주결과', NULL, NULL, NULL, 'plm_admin', NOW(), 'active');

-- 실패사유 부모 코드
INSERT INTO comm_code (code_id, parent_code_id, code_name, id, code_cd, ext_val, writer, regdate, status)
VALUES ('0000964', NULL, '실패사유', NULL, NULL, NULL, 'plm_admin', NOW(), 'active');

-- 통화단위 부모 코드
INSERT INTO comm_code (code_id, parent_code_id, code_name, id, code_cd, ext_val, writer, regdate, status)
VALUES ('0000965', NULL, '통화단위', NULL, NULL, NULL, 'plm_admin', NOW(), 'active');

-- 계약방식 부모 코드
INSERT INTO comm_code (code_id, parent_code_id, code_name, id, code_cd, ext_val, writer, regdate, status)
VALUES ('0000966', NULL, '계약방식', NULL, NULL, NULL, 'plm_admin', NOW(), 'active');

-- 통화단위 하위 코드
INSERT INTO comm_code (code_id, parent_code_id, code_name, id, code_cd, ext_val, writer, regdate, status)
VALUES
('0000965001', '0000965', 'KRW', NULL, NULL, NULL, 'plm_admin', NOW(), 'active'),
('0000965002', '0000965', 'USD', NULL, NULL, NULL, 'plm_admin', NOW(), 'active'),
('0000965003', '0000965', 'EUR', NULL, NULL, NULL, 'plm_admin', NOW(), 'active'),
('0000965004', '0000965', 'JPY', NULL, NULL, NULL, 'plm_admin', NOW(), 'active'),
('0000965005', '0000965', 'CNY', NULL, NULL, NULL, 'plm_admin', NOW(), 'active');

-- 실패사유 부모 코드
INSERT INTO comm_code (code_id, parent_code_id, code_name, id, code_cd, ext_val, writer, regdate, status)
VALUES ('0000964', NULL, '실패사유', NULL, NULL, NULL, 'plm_admin', NOW(), 'active');

-- 실패사유 하위 코드
INSERT INTO comm_code (code_id, parent_code_id, code_name, id, code_cd, ext_val, writer, regdate, status)
VALUES
('0000964001', '0000964', '회신없음', NULL, NULL, NULL, 'plm_admin', NOW(), 'active'),
('0000964002', '0000964', '예산문제', NULL, NULL, NULL, 'plm_admin', NOW(), 'active'),
('0000964003', '0000964', '탈락', NULL, NULL, NULL, 'plm_admin', NOW(), 'active'),
('0000964004', '0000964', '유찰', NULL, NULL, NULL, 'plm_admin', NOW(), 'active'),
('0000964005', '0000964', '취소', NULL, NULL, NULL, 'plm_admin', NOW(), 'active'),
('0000964006', '0000964', '부적합', NULL, NULL, NULL, 'plm_admin', NOW(), 'active');

-- 계약방식 부모 코드
INSERT INTO comm_code (code_id, parent_code_id, code_name, id, code_cd, ext_val, writer, regdate, status)
VALUES ('0000966', NULL, '계약방식', NULL, NULL, NULL, 'plm_admin', NOW(), 'active');

-- 계약방식 하위 코드
INSERT INTO comm_code (code_id, parent_code_id, code_name, id, code_cd, ext_val, writer, regdate, status)
VALUES
('0000966001', '0000966', '조달', NULL, NULL, NULL, 'plm_admin', NOW(), 'active'),
('0000966002', '0000966', '민자', NULL, NULL, NULL, 'plm_admin', NOW(), 'active'),
('0000966003', '0000966', '대리점', NULL, NULL, NULL, 'plm_admin', NOW(), 'active'),
('0000966004', '0000966', '재로비', NULL, NULL, NULL, 'plm_admin', NOW(), 'active');

-- 계약구분 하위 코드
INSERT INTO comm_code (code_id, parent_code_id, code_name, id, code_cd, ext_val, writer, regdate, status)
VALUES
('0000167001', '0000167', '개발', NULL, NULL, NULL, 'plm_admin', NOW(), 'active'),
('0000167002', '0000167', '변형', NULL, NULL, NULL, 'plm_admin', NOW(), 'active'),
('0000167003', '0000167', '소모품', NULL, NULL, NULL, 'plm_admin', NOW(), 'active'),
('0000167004', '0000167', '재주문', NULL, NULL, NULL, 'plm_admin', NOW(), 'active'),
('0000167005', '0000167', 'A/S', NULL, NULL, NULL, 'plm_admin', NOW(), 'active'),
('0000167006', '0000167', '연구과제', NULL, NULL, NULL, 'plm_admin', NOW(), 'active');

-- 영업진행단계 하위 코드
INSERT INTO comm_code (code_id, parent_code_id, code_name, id, code_cd, ext_val, writer, regdate, status)
VALUES
('0000932001', '0000932', '사양협의', NULL, NULL, NULL, 'plm_admin', NOW(), 'active'),
('0000932002', '0000932', '원가검토', NULL, NULL, NULL, 'plm_admin', NOW(), 'active'),
('0000932003', '0000932', '견적제출', NULL, NULL, NULL, 'plm_admin', NOW(), 'active');

-- 수주결과 하위 코드
INSERT INTO comm_code (code_id, parent_code_id, code_name, id, code_cd, ext_val, writer, regdate, status)
VALUES
('0000963001', '0000963', '수주', NULL, NULL, NULL, 'plm_admin', NOW(), 'active'),
('0000963002', '0000963', '실패', NULL, NULL, NULL, 'plm_admin', NOW(), 'active');

#### 2. 신규 필드 (JSP에 추가 필요)

**[영업정보] 섹션:**

- ✅ 계약구분 - **기존 활용** (0000167)
- 🆕 과거프로젝트번호 - **신규 추가** (프로젝트 데이터 선택)
- ✅ 국내/해외 - **기존 활용**
- ✅ 고객사 - **기존 활용**
- ✅ 제품군 - **기존 활용**
- ✅ 제품코드 - **기존 활용**
- 🆕 장비명 - **신규 추가** (직접 입력)
- 🆕 설비대수 - **신규 추가** (직접 입력)
- 🆕 요청납기일 - **신규 추가** (캘린더)
- 🆕 입고지 - **신규 추가** (직접 입력)
- 🆕 셋업지 - **신규 추가** (직접 입력)

**[사양상세] 섹션 - 모두 신규 추가:**

- 🆕 재질 - **신규 추가** (직접 입력)
- 🆕 압력(BAR) - **신규 추가** (직접 입력)
- 🆕 온도(℃) - **신규 추가** (직접 입력)
- 🆕 용량(LITER) - **신규 추가** (직접 입력)
- 🆕 Closure Type - **신규 추가** (직접 입력)
- 🆕 기타(소모품) - **신규 추가** (직접 입력)
- 🆕 전압 - **신규 추가** (직접 입력)
- 🆕 인증여부 - **신규 추가** (직접 입력)

**[영업진행] 섹션:**

- ✅ 단계 - **기존 활용** (0000932 - 사양협의, 원가검토, 견적제출)

**[견적이력 및 결과] 섹션:**

- 🆕 통화 - **신규 추가** (0000965 공통코드)
- 🆕 견적금액(1차) - **신규 추가** (직접 입력)
- 🆕 견적금액(2차) - **신규 추가** (직접 입력)
- 🆕 견적금액(3차) - **신규 추가** (직접 입력)
- 🆕 수주일 - **신규 추가** (캘린더)
- 🆕 수주가 - **신규 추가** (자동계산)
- ✅ Result - **기존 활용** (0000963 - 수주/실패)
- 🆕 계약방식 - **신규 추가** (0000966 공통코드)
- ✅ 실패사유 - **기존 활용** (0000964)
- 🆕 P/O No - **신규 추가** (직접 입력)
- ✅ PM - **기존 활용** (기존 사용자 선택)
- 🆕 당사프로젝트명 - **신규 추가** (직접 입력)

**[특이사항] 섹션:**

- 🆕 특이사항 - **신규 추가** (텍스트 영역)

## 🏗️ 구현 계획

### Phase 1: 신규 공통코드 등록

```sql
-- 계약방식과 통화단위만 신규 추가
INSERT INTO COMM_CODE VALUES ('0000965', NULL, '통화단위', 'active');
INSERT INTO COMM_CODE VALUES ('0000966', NULL, '계약방식', 'active');
-- 상세값들...
```

### Phase 2: 백엔드 확장 (기존 메서드 확장)

#### ContractMgmtController.java 확장

```java
@RequestMapping("/contractMgmt/contracMgmtFormPopup.do")
public String contracMgmtFormPopup(HttpServletRequest request, @RequestParam Map<String, Object> paramMap) {
    // 기존 로직 유지
    Map info = contractMgmtService.getContractMgmtInfo(paramMap);
    Map<String, String> code_map = new HashMap<>();

    // 기존 공통코드들 (유지)
    code_map.put("category_cd", commonService.bizMakeOptionList("0000167", "", "common.getCodeselect"));
    code_map.put("status_cd", commonService.bizMakeOptionList("0000932", "", "common.getCodeselect"));
    code_map.put("result_cd", commonService.bizMakeOptionList("0000963", "", "common.getCodeselect"));
    code_map.put("failure_reason", commonService.bizMakeOptionList("0000964", "", "common.getCodeselect"));

    // 신규 공통코드만 추가
    code_map.put("currency_type", commonService.bizMakeOptionList("0000965", "", "common.getCodeselect"));
    code_map.put("contract_method", commonService.bizMakeOptionList("0000966", "", "common.getCodeselect"));

    request.setAttribute("info", info);
    request.setAttribute("code_map", code_map);
    return "/contractMgmt/contracMgmtFormPopup";
}
```

### Phase 3: 프론트엔드 확장 (기존 JSP 확장)

#### contracMgmtFormPopup.jsp 확장

```jsp
<!-- 기존 필드들 유지 -->
<tr>
    <td class="input_title"><label for="">계약구분</label></td>
    <td colspan="2">
        <select name="category_cd" id="category_cd" required reqTitle="계약구분" type="select" class="select2">
            <option value="">선택</option> ${code_map.category_cd}
        </select>
    </td>
    <!-- 기존 필드들... -->
</tr>

<!-- 신규 필드들만 추가 -->
<tr>
    <td class="input_title"><label for="">과거프로젝트번호</label></td>
    <td colspan="2">
        <input type="text" name="past_project_no" id="past_project_no" reqTitle="과거프로젝트번호" value="${info.PAST_PROJECT_NO}" />
    </td>
    <td class="input_title"><label for="">장비명</label></td>
    <td colspan="2">
        <input type="text" name="equipment_name" id="equipment_name" reqTitle="장비명" value="${info.EQUIPMENT_NAME}" />
    </td>
</tr>

<!-- 사양상세 섹션 전체 신규 추가 -->
<tr>
    <td class="input_title"><label for="">재질</label></td>
    <td colspan="2">
        <input type="text" name="material" id="material" reqTitle="재질" value="${info.MATERIAL}" />
    </td>
    <td class="input_title"><label for="">압력(BAR)</label></td>
    <td colspan="2">
        <input type="text" name="pressure_bar" id="pressure_bar" reqTitle="압력" value="${info.PRESSURE_BAR}" />
    </td>
</tr>

<!-- 견적이력 섹션 -->
<tr>
    <td class="input_title"><label for="">통화단위</label></td>
    <td colspan="2">
        <select name="currency_type" id="currency_type" reqTitle="통화단위" type="select" class="select2">
            <option value="">선택</option> ${code_map.currency_type}
        </select>
    </td>
    <td class="input_title"><label for="">계약방식</label></td>
    <td colspan="2">
        <select name="contract_method" id="contract_method" reqTitle="계약방식" type="select" class="select2">
            <option value="">선택</option> ${code_map.contract_method}
        </select>
    </td>
</tr>
```

### Phase 4: 데이터베이스 확장 (기존 테이블 확장)

#### CONTRACT_MGMT 테이블에 신규 컬럼 추가

```sql
ALTER TABLE CONTRACT_MGMT ADD COLUMN past_project_no VARCHAR(50);
ALTER TABLE CONTRACT_MGMT ADD COLUMN equipment_name VARCHAR(200);
ALTER TABLE CONTRACT_MGMT ADD COLUMN equipment_count VARCHAR(100);
-- 신규 필드들만 추가...
```

## 🎯 **최종 정리**

### 기존 코드 활용률: **60%**

- 기존 공통코드 4개 (0000167, 0000932, 0000963, 0000964) 재활용
- 기존 JSP 구조 및 테이블 레이아웃 활용
- 기존 파일 업로드 기능 활용
- 기존 컨트롤러/서비스/매퍼 메서드 확장

### 신규 추가 필요: **40%**

- 신규 공통코드 2개 (0000965, 0000966) 추가
- 신규 입력 필드 25개 추가
- 신규 자동계산 기능 추가

이 접근법으로 **기존 시스템의 안정성을 유지**하면서 **최소한의 변경**으로 요구사항을 충족할 수 있습니다.

## 📋 영업 계약 수정 내용 정리

### 🔍 **현재 상황 분석**

**기존 시스템 구조:**

- 테이블: `SWSC110A_TBL` (기존 계약관리)
- 새로운 테이블: `CONTRACT_MGMT` (확장된 영업관리)
- JSP: `contractMgmtFormPopup.jsp` (기존 등록 화면)

### ✅ **기존 코드에서 활용 가능한 요소들**

#### 1. 기존 공통코드 (이미 등록되어 있음)

- **0000167**: 계약구분 (개발, 변형, 소모품, 재주문, A/S, 연구과제)
- **0000932**: 영업진행단계 (사양협의, 원가검토, 견적제출)
- **0000963**: 수주결과 (수주, 실패)
- **0000964**: 실패사유 (회신없음, 예산문제, 탈락, 유찰, 취소, 부적합)

#### 2. 기존 필드 (JSP에 이미 존재)

- 고객사 선택
- 제품코드 선택
- 계약일자, 최종납기일
- 계약수량, 계약단가, 계약금액

### 🆕 **신규 추가 필요한 요소들**

#### 1. 신규 공통코드 (추가 등록 필요)

```sql
-- 통화단위 (0000965)
INSERT INTO COMM_CODE VALUES ('0000965', NULL, '통화단위', 'active');
INSERT INTO COMM_CODE VALUES ('0000965001', '0000965', 'KRW', 'active');
INSERT INTO COMM_CODE VALUES ('0000965002', '0000965', 'USD', 'active');
INSERT INTO COMM_CODE VALUES ('0000965003', '0000965', 'EUR', 'active');
INSERT INTO COMM_CODE VALUES ('0000965004', '0000965', 'JPY', 'active');
INSERT INTO COMM_CODE VALUES ('0000965005', '0000965', 'CNY', 'active');

-- 계약방식 (0000966)
INSERT INTO COMM_CODE VALUES ('0000966', NULL, '계약방식', 'active');
INSERT INTO COMM_CODE VALUES ('0000966001', '0000966', '조달', 'active');
INSERT INTO COMM_CODE VALUES ('0000966002', '0000966', '민자', 'active');
INSERT INTO COMM_CODE VALUES ('0000966003', '0000966', '대리점', 'active');
INSERT INTO COMM_CODE VALUES ('0000966004', '0000966', '재료비', 'active');
```

### 🚫 **기존 코드에서 숨겨야 할 필드들**

#### 1. 기존 계약관리 목록에서 주석처리할 컬럼들

**파일: `WebContent/WEB-INF/view/salesmgmt/contractMgmt/contractMgmtList.jsp`**

```jsp
<!-- 기존 테이블 헤더에서 숨길 컬럼들 -->
<!--
<th>보증기간</th>
<th>출하수량</th>
<th>출고수량</th>
<th>매출수량</th>
<th>매출액</th>
<th>수금액</th>
-->

<!-- 기존 테이블 바디에서 숨길 데이터들 -->
<!--
<td>${item.GOODSGUARANTEE}</td>
<td><fmt:formatNumber value="${item.SALEQTY}" type="number" maxFractionDigits="3" /></td>
<td><fmt:formatNumber value="${item.SALEQTY1}" type="number" maxFractionDigits="3" /></td>
<td><fmt:formatNumber value="${item.SUPPLYQTY}" type="number" maxFractionDigits="3" /></td>
<td><fmt:formatNumber value="${item.SUPPLYAMT}" type="number" maxFractionDigits="3" /></td>
<td><fmt:formatNumber value="${item.RCPTAMT}" type="number" maxFractionDigits="3" /></td>
-->
```

#### 2. 기존 계약관리 등록화면에서 주석처리할 필드들

**파일: `WebContent/WEB-INF/view/salesmgmt/contractMgmt/contractMgmtFormPopup.jsp`**

```jsp
<!-- 기존 등록화면에서 숨길 필드들 -->

<!-- 1. 관리부서 관련 필드들 -->
<!--
<tr>
    <td class="input_title"><label for="label">* 관리부서</label></td>
    <td class="input_sub_title">
        <select name="bDeptCd" id="bDeptCd" required reqTitle="관리부서" type="select" style="width: 120px;" class="select2">
            <option value="">선택</option>
            <c:forEach var="bDeptList" items="${codeMap.bDeptList}">
                ${bDeptList}
            </c:forEach>
        </select>
    </td>
    <td class="input_title"><label for="label">* 관리담당자</label></td>
    <td colspan="3" class="input_sub_title">
        <select name="bEmpNo" id="bEmpNo" required reqTitle="관리담당자" type="select" style="width: 120px;" class="select2">
            <option value="">선택</option>
            <c:forEach var="bEmpList" items="${codeMap.bEmpList}">
                ${bEmpList}
            </c:forEach>
        </select>
    </td>
</tr>
-->

<!-- 2. 판매유형 관련 필드들 -->
<!--
<tr>
    <td class="input_title"><label for="label">판매유형</label></td>
    <td class="input_sub_title">
        <select name="saleType" id="saleType" type="select" style="width:150px;" class="select2">
            <option value="">선택</option>
            <c:forEach var="saleTypeList" items="${codeMap.saleTypeList}">
                ${saleTypeList}
            </c:forEach>
        </select>
    </td>
</tr>
-->

<!-- 3. 보증기간 필드 -->
<!--
<tr>
    <td class="input_title"><label for="label">보증기간</label></td>
    <td class="input_sub_title">
        <input type="text" name="goodsGuarantee" id="goodsGuarantee" value="${info.GOODSGUARANTEE}" maxlength="3" style="width:50px;" />
    </td>
</tr>
-->

<!-- 4. 출하대상 필드 -->
<!--
<tr>
    <td class="input_title"><label for="label">출하대상</label></td>
    <td class="input_sub_title">
        <select name="chulhaYN" id="chulhaYN" type="select" style="width:150px;" class="select2">
            <option value="0" ${info.CHULHAYN eq '0' ? 'selected':''}>미출하</option>
            <option value="1" ${info.CHULHAYN eq '1' ? 'selected':''}>출하</option>
        </select>
    </td>
</tr>
-->
```

#### 3. 컨트롤러에서 주석처리할 코드

**파일: `src/com/pms/salesmgmt/controller/ContractMgmtController.java`**

```java
// 기존 관리부서 관련 코드 주석처리
/*
// 관리부서
codeMap.put("bDeptList",
        salesMgmtCommonService.bizMakeOptionList("", (String) info.get("BDEPTCD"), "salesMgmtCommon.getBDeptList"));
// 관리담당자
codeMap.put("bEmpList",
        salesMgmtCommonService.bizMakeBEmpOptionList((String) info.get("BDEPTCD"), (String) info.get("BEMPNO")));
// 판매유형
codeMap.put("saleTypeList",
        salesMgmtCommonService.bizMakeOptionList("GE", (String) info.get("SALETYPE"), "salesMgmtCommon.getCodeList"));
*/
```

### 🎯 **구현 단계별 계획**

#### Phase 1: 기존 코드 정리

1. **기존 계약관리 리스트**에서 불필요한 컬럼 주석처리
2. **기존 계약관리 등록화면**에서 사용하지 않을 필드 주석처리
3. **컨트롤러**에서 불필요한 공통코드 로딩 주석처리

#### Phase 2: 신규 공통코드 등록

1. 통화단위 (0000965) 공통코드 등록
2. 계약방식 (0000966) 공통코드 등록

#### Phase 3: 새로운 영업관리 화면 구현

1. 새로운 JSP 화면 개발 (영업정보, 사양상세, 견적이력, 특이사항 섹션)
2. 새로운 컨트롤러 메서드 개발
3. 새로운 매퍼 쿼리 개발

#### Phase 4: 데이터베이스 확장

1. 기존 테이블에 신규 컬럼 추가
2. 인덱스 생성
3. 데이터 마이그레이션

### 📝 **주요 변경 포인트 요약**

| 구분             | 기존 활용          | 신규 추가      | 주석처리            |
| ---------------- | ------------------ | -------------- | ------------------- |
| **공통코드**     | 4개 재활용         | 2개 신규       | -                   |
| **JSP 필드**     | 기본 계약정보 유지 | 25개 신규      | 7개 주석처리        |
| **컨트롤러**     | 기본 구조 유지     | 신규 코드 추가 | 3개 메서드 주석처리 |
| **데이터베이스** | 기존 테이블 확장   | 신규 컬럼 추가 | -                   |

이 접근법으로 **기존 시스템의 안정성을 유지**하면서 **최소한의 변경**으로 새로운 영업관리 요구사항을 충족할 수 있습니다.

## 💡 **기존 공통코드 활용 방법 (권장)**

### 🔧 **현재 공통코드 시스템 구조**

기존 시스템에서 공통코드는 다음과 같이 활용됩니다:

```java
// 컨트롤러에서 공통코드 활용 예시
code_map.put("category_cd", commonService.bizMakeOptionList("0000167", category_cd, "common.getCodeselect"));
code_map.put("status_cd", commonService.bizMakeOptionList("0000932", status_cd, "common.getCodeselect"));
code_map.put("result_cd", commonService.bizMakeOptionList("0000963", result_cd, "common.getCodeselect"));
```

### ✅ **기존 공통코드 그대로 활용**

이미 등록된 공통코드들은 **코드 구조 변경 없이** 그대로 활용 가능합니다:

| 공통코드    | 용도         | 기존 사용       | 신규 활용      |
| ----------- | ------------ | --------------- | -------------- |
| **0000167** | 계약구분     | ✅ 이미 사용 중 | ✅ 그대로 활용 |
| **0000932** | 영업진행단계 | ✅ 이미 사용 중 | ✅ 그대로 활용 |
| **0000963** | 수주결과     | ✅ 이미 사용 중 | ✅ 그대로 활용 |
| **0000964** | 실패사유     | ✅ 이미 사용 중 | ✅ 그대로 활용 |

### 🆕 **신규 공통코드만 추가 등록**

**통화단위 (0000965)**와 **계약방식 (0000966)**만 신규 추가하면 됩니다:

```sql
-- 통화단위 추가
INSERT INTO COMM_CODE (OBJID, CODE_ID, PARENT_CODE_ID, CODE_NAME, STATUS, WRITER, REGDATE)
VALUES (nextval('seq_comm_code'), '0000965', NULL, '통화단위', 'active', 'admin', now());

INSERT INTO COMM_CODE (OBJID, CODE_ID, PARENT_CODE_ID, CODE_NAME, STATUS, WRITER, REGDATE)
VALUES (nextval('seq_comm_code'), '0000965001', '0000965', 'KRW', 'active', 'admin', now());

INSERT INTO COMM_CODE (OBJID, CODE_ID, PARENT_CODE_ID, CODE_NAME, STATUS, WRITER, REGDATE)
VALUES (nextval('seq_comm_code'), '0000965002', '0000965', 'USD', 'active', 'admin', now());

-- 계약방식 추가
INSERT INTO COMM_CODE (OBJID, CODE_ID, PARENT_CODE_ID, CODE_NAME, STATUS, WRITER, REGDATE)
VALUES (nextval('seq_comm_code'), '0000966', NULL, '계약방식', 'active', 'admin', now());

INSERT INTO COMM_CODE (OBJID, CODE_ID, PARENT_CODE_ID, CODE_NAME, STATUS, WRITER, REGDATE)
VALUES (nextval('seq_comm_code'), '0000966001', '0000966', '조달', 'active', 'admin', now());
```

### 🎯 **컨트롤러 수정 최소화**

기존 컨트롤러에서 **신규 공통코드 2개만 추가**하면 됩니다:

```java
@RequestMapping("/contractMgmt/contracMgmtFormPopup.do")
public String contracMgmtFormPopup(HttpServletRequest request, @RequestParam Map<String, Object> paramMap) {
    // 기존 공통코드들 (수정 불필요)
    code_map.put("category_cd", commonService.bizMakeOptionList("0000167", category_cd, "common.getCodeselect"));
    code_map.put("status_cd", commonService.bizMakeOptionList("0000932", status_cd, "common.getCodeselect"));
    code_map.put("result_cd", commonService.bizMakeOptionList("0000963", result_cd, "common.getCodeselect"));
    code_map.put("failure_reason", commonService.bizMakeOptionList("0000964", failure_reason, "common.getCodeselect"));

    // 신규 공통코드만 추가
    code_map.put("currency_type", commonService.bizMakeOptionList("0000965", currency_type, "common.getCodeselect"));
    code_map.put("contract_method", commonService.bizMakeOptionList("0000966", contract_method, "common.getCodeselect"));

    return "/contractMgmt/contracMgmtFormPopup";
}
```

### 🎨 **JSP에서 공통코드 활용**

JSP에서도 기존 방식 그대로 활용:

```jsp
<!-- 기존 공통코드 활용 -->
<select name="category_cd" id="category_cd" class="select2">
    <option value="">선택</option>
    ${code_map.category_cd}
</select>

<select name="status_cd" id="status_cd" class="select2">
    <option value="">선택</option>
    ${code_map.status_cd}
</select>

<!-- 신규 공통코드 활용 -->
<select name="currency_type" id="currency_type" class="select2">
    <option value="">선택</option>
    ${code_map.currency_type}
</select>

<select name="contract_method" id="contract_method" class="select2">
    <option value="">선택</option>
    ${code_map.contract_method}
</select>
```

### 🔄 **기존 데이터 호환성**

기존 데이터는 **완전히 호환**됩니다:

- 기존 테이블 구조 유지
- 기존 공통코드 값 유지
- 기존 비즈니스 로직 유지

### 📊 **작업량 대폭 감소**

| 구분              | 기존 방식       | 신규 공통코드 활용 |
| ----------------- | --------------- | ------------------ |
| **공통코드 등록** | 6개 전체 재등록 | 2개만 신규 등록    |
| **컨트롤러 수정** | 전체 재작성     | 2줄만 추가         |
| **JSP 수정**      | 전체 재작성     | 기존 구조 활용     |
| **테스트 범위**   | 전체 시스템     | 신규 기능만        |

### 🎯 **최종 권장 방법**

1. **✅ 기존 공통코드 (0000167, 0000932, 0000963, 0000964) 그대로 활용**
2. **✅ 신규 공통코드 (0000965, 0000966) 2개만 추가**
3. **✅ 기존 bizMakeOptionList 메서드 그대로 활용**
4. **✅ 기존 JSP 구조 그대로 활용**

이 방법으로 **개발 시간 70% 단축**하고 **안정성 100% 보장**할 수 있습니다!
