+
+
+
+
+
+ <%@include file= "/WEB-INF/view/common/common_gridArea.jsp" %>
+
+
+
+
+
\ No newline at end of file
diff --git a/WebContent/WEB-INF/view/contractMgmt/estimateTemplate1.jsp b/WebContent/WEB-INF/view/contractMgmt/estimateTemplate1.jsp
new file mode 100644
index 0000000..276ed87
--- /dev/null
+++ b/WebContent/WEB-INF/view/contractMgmt/estimateTemplate1.jsp
@@ -0,0 +1,552 @@
+<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
+<%@ page import="com.pms.common.utils.*"%>
+<%@ page import="java.util.*" %>
+<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
+<%@include file= "/init.jsp" %>
+<%
+PersonBean person = (PersonBean)session.getAttribute(Constants.PERSON_BEAN);
+String userId = CommonUtils.checkNull(person.getUserId());
+String objId = CommonUtils.checkNull(request.getParameter("objId"));
+%>
+
+
+
+
+
<%=Constants.SYSTEM_NAME%> - 견적서 양식1
+
+
+
+
+
+
+
견 적 서
+
+
+
+
+
+
+ 견적을 요청해 주셔서 대단히 감사합니다.
+ 하기와 같이 견적서를 제출합니다.
+
+
+
+
+ 부가세 별도
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/WebContent/WEB-INF/view/contractMgmt/estimateTemplate2.jsp b/WebContent/WEB-INF/view/contractMgmt/estimateTemplate2.jsp
new file mode 100644
index 0000000..bd0cb1d
--- /dev/null
+++ b/WebContent/WEB-INF/view/contractMgmt/estimateTemplate2.jsp
@@ -0,0 +1,718 @@
+<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
+<%@ page import="com.pms.common.utils.*"%>
+<%@ page import="java.util.*" %>
+<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
+<%@include file= "/init.jsp" %>
+<%
+PersonBean person = (PersonBean)session.getAttribute(Constants.PERSON_BEAN);
+String userId = CommonUtils.checkNull(person.getUserId());
+String objId = CommonUtils.checkNull(request.getParameter("objId"));
+%>
+
+
+
+
+
<%=Constants.SYSTEM_NAME%> - 장비 견적서
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ | NO |
+ DESCRIPTION |
+ SPECIFICATION |
+ Q'TY |
+ UNIT PRICE |
+ AMOUNT |
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ - ■ 최종 견적가는 부가세 별도입니다.
+ - ■ 장비 납기 : 발주 후 7개월
+ - ■ 운송 조건 : -
+ - ■ 결제 조건 : 계약금 : 30% / 잔금 : 70%
+ - - 계약금 : 발주
+ - - 잔금 : 검사 완료 후
+ - ■ 특이사항 : 최종 장비 사양 확인 후 추가 변경 발생 시 견적 재산정 진행
+ - ■ Warrenty Period: 1년(소모성 parts 제외)
+ - ■ 주의 : RPS 등의의인 초음파 스캔용 임의 탈거 또는 세척시 보증 할 수 없음.
+ - ■ 패킹 견적은 양산 20대 기준의 견적조건 운송 장비 전달 시 동일한 가격 적용 모로.
+
+
+
+
+
+
+ * RPS 견적서 - 문서번호: RPS-SE-사업부명 양식 제치부작성 적용본 등을은 결제안전버리
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/WebContent/images/company_stamp.png b/WebContent/images/company_stamp.png
new file mode 100644
index 0000000..bd7d53e
Binary files /dev/null and b/WebContent/images/company_stamp.png differ
diff --git a/database/estimate_template_tables.sql b/database/estimate_template_tables.sql
new file mode 100644
index 0000000..140f6df
--- /dev/null
+++ b/database/estimate_template_tables.sql
@@ -0,0 +1,86 @@
+-- 견적서 템플릿 테이블 생성 SQL
+
+-- 1. 견적서 템플릿 메인 테이블
+CREATE TABLE IF NOT EXISTS ESTIMATE_TEMPLATE (
+ OBJID SERIAL PRIMARY KEY,
+ CONTRACT_OBJID NUMERIC NOT NULL, -- CONTRACT_MGMT 테이블의 OBJID 참조
+ TEMPLATE_TYPE VARCHAR(10) NOT NULL, -- '1': 일반 견적서, '2': 장비 견적서
+
+ -- 일반 견적서 필드 (Template 1)
+ EXECUTOR VARCHAR(200), -- 시행일자
+ RECIPIENT VARCHAR(200), -- 수신처
+ ESTIMATE_NO VARCHAR(100), -- 견적번호
+ CONTACT_PERSON VARCHAR(100), -- 수신인
+ GREETING_TEXT TEXT, -- 인사말
+
+ -- 장비 견적서 필드 (Template 2)
+ MODEL_NAME VARCHAR(200), -- 설비 Model 품명
+ MODEL_CODE VARCHAR(100), -- 설비 Model 코드
+ EXECUTOR_DATE VARCHAR(50), -- 시행일자
+
+ -- 비고 필드 (공통)
+ NOTE1 VARCHAR(500),
+ NOTE2 VARCHAR(500),
+ NOTE3 VARCHAR(500),
+ NOTE4 VARCHAR(500),
+
+ -- 카테고리 정보 (장비 견적서용, JSON 형태로 저장)
+ CATEGORIES_JSON TEXT,
+
+ -- 시스템 필드
+ WRITER VARCHAR(50),
+ REGDATE TIMESTAMP DEFAULT NOW(),
+ CHG_USER_ID VARCHAR(50),
+ CHGDATE TIMESTAMP DEFAULT NOW(),
+
+ CONSTRAINT fk_estimate_contract FOREIGN KEY (CONTRACT_OBJID)
+ REFERENCES CONTRACT_MGMT(OBJID) ON DELETE CASCADE
+);
+
+-- 인덱스 생성
+CREATE INDEX idx_estimate_contract ON ESTIMATE_TEMPLATE(CONTRACT_OBJID);
+CREATE INDEX idx_estimate_type ON ESTIMATE_TEMPLATE(TEMPLATE_TYPE);
+
+-- 코멘트 추가
+COMMENT ON TABLE ESTIMATE_TEMPLATE IS '견적서 템플릿 정보';
+COMMENT ON COLUMN ESTIMATE_TEMPLATE.CONTRACT_OBJID IS '견적요청 OBJID (CONTRACT_MGMT 참조)';
+COMMENT ON COLUMN ESTIMATE_TEMPLATE.TEMPLATE_TYPE IS '템플릿 타입 (1:일반견적서, 2:장비견적서)';
+
+
+-- 2. 견적서 템플릿 품목 테이블
+CREATE TABLE IF NOT EXISTS ESTIMATE_TEMPLATE_ITEM (
+ OBJID SERIAL PRIMARY KEY,
+ TEMPLATE_OBJID NUMERIC NOT NULL, -- ESTIMATE_TEMPLATE 테이블의 OBJID 참조
+ SEQ INTEGER NOT NULL, -- 순번
+ CATEGORY VARCHAR(100), -- 카테고리 (장비 견적서용)
+ DESCRIPTION VARCHAR(500), -- 품명
+ SPECIFICATION TEXT, -- 규격/사양
+ QUANTITY VARCHAR(50), -- 수량
+ UNIT VARCHAR(50), -- 단위
+ UNIT_PRICE NUMERIC(15,2), -- 단가
+ AMOUNT NUMERIC(15,2), -- 금액
+ NOTE VARCHAR(500), -- 비고
+ REMARK VARCHAR(500), -- 특이사항
+
+ CONSTRAINT fk_item_template FOREIGN KEY (TEMPLATE_OBJID)
+ REFERENCES ESTIMATE_TEMPLATE(OBJID) ON DELETE CASCADE
+);
+
+-- 인덱스 생성
+CREATE INDEX idx_item_template ON ESTIMATE_TEMPLATE_ITEM(TEMPLATE_OBJID);
+CREATE INDEX idx_item_seq ON ESTIMATE_TEMPLATE_ITEM(TEMPLATE_OBJID, SEQ);
+
+-- 코멘트 추가
+COMMENT ON TABLE ESTIMATE_TEMPLATE_ITEM IS '견적서 템플릿 품목 정보';
+COMMENT ON COLUMN ESTIMATE_TEMPLATE_ITEM.TEMPLATE_OBJID IS '견적서 템플릿 OBJID';
+COMMENT ON COLUMN ESTIMATE_TEMPLATE_ITEM.SEQ IS '품목 순번';
+COMMENT ON COLUMN ESTIMATE_TEMPLATE_ITEM.CATEGORY IS '카테고리 (장비견적서: CNC Machine, UTILITY 등)';
+
+
+-- 3. CONTRACT_MGMT 테이블에 CATEGORIES_JSON 컬럼 추가 (이미 없는 경우)
+-- ALTER TABLE ESTIMATE_TEMPLATE ADD COLUMN IF NOT EXISTS CATEGORIES_JSON TEXT;
+
+-- 샘플 데이터 조회 쿼리
+-- SELECT * FROM ESTIMATE_TEMPLATE WHERE CONTRACT_OBJID = 123;
+-- SELECT * FROM ESTIMATE_TEMPLATE_ITEM WHERE TEMPLATE_OBJID = 456 ORDER BY SEQ;
+
diff --git a/src/com/pms/salesmgmt/controller/ContractMgmtController.java b/src/com/pms/salesmgmt/controller/ContractMgmtController.java
index d0b5e04..3985450 100644
--- a/src/com/pms/salesmgmt/controller/ContractMgmtController.java
+++ b/src/com/pms/salesmgmt/controller/ContractMgmtController.java
@@ -1763,4 +1763,122 @@ public class ContractMgmtController {
}
return "/ajax/ajaxResult";
}
+
+ /**
+ * 견적서 양식1 (일반 견적서) 팝업
+ * @param session
+ * @param request
+ * @param paramMap
+ * @return
+ */
+ @RequestMapping("/contractMgmt/estimateTemplate1.do")
+ public String estimateTemplate1(HttpSession session, HttpServletRequest request, @RequestParam Map
paramMap){
+ String objId = CommonUtils.checkNull(paramMap.get("objId"));
+
+ try{
+ Map estimate = null;
+ List