feat: 견적서 작성 기능 추가 (일반 견적서, 장비 견적서)

- 견적서 템플릿 2종 추가 (estimateTemplate1.jsp, estimateTemplate2.jsp)
- 견적서 작성 팝업 기능 구현 (estimateList_new.jsp)
- 견적서 템플릿 컨트롤러 및 서비스 메서드 추가
- 견적서 템플릿용 DB 테이블 스키마 생성 스크립트 추가
- 회사 직인 이미지 추가
- 견적서 양식: A4 인쇄 최적화, 동적 품목 추가/수정, 자동 금액 계산
This commit is contained in:
2025-10-15 15:45:34 +09:00
parent c3c86ae9cf
commit 60356f886c
8 changed files with 2409 additions and 0 deletions

View File

@@ -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<String, Object> paramMap){
String objId = CommonUtils.checkNull(paramMap.get("objId"));
try{
Map estimate = null;
List<Map> items = new ArrayList<Map>();
if(!"".equals(objId) && !"-1".equals(objId)){
// 기존 견적서 데이터 조회
estimate = contractMgmtService.getEstimateTemplateInfo(paramMap);
items = contractMgmtService.getEstimateTemplateItems(paramMap);
}
request.setAttribute("estimate", estimate);
request.setAttribute("items", items);
} catch (Exception e) {
e.printStackTrace();
}
return "/contractMgmt/estimateTemplate1";
}
/**
* 견적서 양식2 (장비 견적서) 팝업
* @param session
* @param request
* @param paramMap
* @return
*/
@RequestMapping("/contractMgmt/estimateTemplate2.do")
public String estimateTemplate2(HttpSession session, HttpServletRequest request, @RequestParam Map<String, Object> paramMap){
String objId = CommonUtils.checkNull(paramMap.get("objId"));
try{
Map estimate = null;
List<Map> items = new ArrayList<Map>();
if(!"".equals(objId) && !"-1".equals(objId)){
// 기존 견적서 데이터 조회
estimate = contractMgmtService.getEstimateTemplateInfo(paramMap);
items = contractMgmtService.getEstimateTemplateItems(paramMap);
}
request.setAttribute("estimate", estimate);
request.setAttribute("items", items);
} catch (Exception e) {
e.printStackTrace();
}
return "/contractMgmt/estimateTemplate2";
}
/**
* 견적서 상세 정보 조회 (AJAX)
* @param request
* @param paramMap
* @return
*/
@ResponseBody
@RequestMapping(value="/contractMgmt/getEstimateDetail.do", method=RequestMethod.POST)
public Map getEstimateDetail(HttpServletRequest request, @RequestParam Map<String, Object> paramMap){
Map resultMap = new HashMap();
try {
Map estimate = contractMgmtService.getEstimateTemplateInfo(paramMap);
List<Map> items = contractMgmtService.getEstimateTemplateItems(paramMap);
resultMap.put("estimate", estimate);
resultMap.put("items", items);
resultMap.put("result", "success");
} catch (Exception e) {
e.printStackTrace();
resultMap.put("result", "error");
resultMap.put("message", e.getMessage());
}
return resultMap;
}
/**
* 견적서 저장 (AJAX)
* @param request
* @param paramMap
* @return
*/
@ResponseBody
@RequestMapping(value="/contractMgmt/saveEstimate.do", method=RequestMethod.POST)
public Map saveEstimate(HttpServletRequest request, @RequestParam Map<String, Object> paramMap){
Map resultMap = new HashMap();
try {
PersonBean person = (PersonBean)request.getSession().getAttribute(Constants.PERSON_BEAN);
paramMap.put("userId", person.getUserId());
contractMgmtService.saveEstimateTemplate(request, paramMap);
resultMap.put("result", "success");
} catch (Exception e) {
e.printStackTrace();
resultMap.put("result", "error");
resultMap.put("message", e.getMessage());
}
return resultMap;
}
}