diff --git a/WebContent/WEB-INF/view/contractMgmt/estimateList_new.jsp b/WebContent/WEB-INF/view/contractMgmt/estimateList_new.jsp index 50547d7..74fd096 100644 --- a/WebContent/WEB-INF/view/contractMgmt/estimateList_new.jsp +++ b/WebContent/WEB-INF/view/contractMgmt/estimateList_new.jsp @@ -596,7 +596,7 @@ function fn_openEstimateByObjId(templateObjId, templateType){ Swal.close(); var popup_width = 900; - var popup_height = 800; + var popup_height = 1200; var url = ""; if(templateType === "1"){ @@ -613,7 +613,7 @@ function fn_openEstimateByObjId(templateObjId, templateType){ //견적서 양식 열기 (CONTRACT_OBJID로) function fn_openEstimateTemplate(objId, templateType){ var popup_width = 900; - var popup_height = 800; + var popup_height = 1200; var url = ""; if(templateType === "1"){ @@ -686,6 +686,9 @@ function fn_sendEstimateMail(contractObjId){ text: '견적서가 성공적으로 발송되었습니다.', icon: 'success', confirmButtonText: '확인' + }).then(() => { + // 메일 발송 상태 업데이트를 위해 목록 새로고침 + fn_search(); }); } else { Swal.fire({ diff --git a/WebContent/WEB-INF/view/contractMgmt/estimateRegistFormPopup.jsp b/WebContent/WEB-INF/view/contractMgmt/estimateRegistFormPopup.jsp index 7ad8c60..75ec44d 100644 --- a/WebContent/WEB-INF/view/contractMgmt/estimateRegistFormPopup.jsp +++ b/WebContent/WEB-INF/view/contractMgmt/estimateRegistFormPopup.jsp @@ -42,9 +42,15 @@ var itemCounter = 1; var itemList = []; + // 반납사유 공통코드 옵션 (숨겨진 div에서 읽어옴) + var returnReasonOptions = ''; + // 품번 데이터는 AJAX로 검색하므로 초기 데이터 없음 $(function() { + // 반납사유 옵션을 템플릿에서 읽어옴 + returnReasonOptions = $('#return_reason_template').html(); + //alert("${info.CATEGORY_CD}") if("${info.CATEGORY_CD}" == '0000170' || "${info.CATEGORY_CD}" == '0000171'){//오버홀, 개조 $(".DIRECT").show(); @@ -480,7 +486,8 @@ var serialNos = "<%= item.get("SERIAL_NOS") != null ? item.get("SERIAL_NOS") : (item.get("serial_nos") != null ? item.get("serial_nos") : "") %>"; var quantity = "<%= item.get("QUANTITY") != null ? item.get("QUANTITY") : (item.get("quantity") != null ? item.get("quantity") : "") %>"; var dueDate = "<%= item.get("DUE_DATE") != null ? item.get("DUE_DATE") : (item.get("due_date") != null ? item.get("due_date") : "") %>"; - var customerRequest = "<%= item.get("CUSTOMER_REQUEST") != null ? item.get("CUSTOMER_REQUEST") : (item.get("customer_request") != null ? item.get("customer_request") : "") %>"; + // 고객요청사항 - 특수문자 이스케이프 처리 + var customerRequest = <%= new com.google.gson.Gson().toJson(item.get("CUSTOMER_REQUEST") != null ? item.get("CUSTOMER_REQUEST") : (item.get("customer_request") != null ? item.get("customer_request") : "")) %>; var returnReason = "<%= item.get("RETURN_REASON") != null ? item.get("RETURN_REASON") : (item.get("return_reason") != null ? item.get("return_reason") : "") %>"; html += '
| - | + | - | + | diff --git a/WebContent/WEB-INF/view/contractMgmt/estimateTemplate1.jsp b/WebContent/WEB-INF/view/contractMgmt/estimateTemplate1.jsp index 669d267..11b6fe4 100644 --- a/WebContent/WEB-INF/view/contractMgmt/estimateTemplate1.jsp +++ b/WebContent/WEB-INF/view/contractMgmt/estimateTemplate1.jsp @@ -4,8 +4,45 @@ <%@ 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()); +// init.jsp에서 이미 connectUserName이 설정되어 있음 +String userName = connectUserName; +String userId = connectUserId; + +// 전화번호는 별도로 조회 필요 +String userPhone = ""; +try { + com.pms.common.SqlMapConfig sqlMapConfig = com.pms.common.SqlMapConfig.getInstance(); + org.apache.ibatis.session.SqlSession sqlSession = sqlMapConfig.getSqlSession(false); + + Map | |||||
| ' + nextNo + ' | ' + - '' + + ' | ' + + '' + + '' + + '' + + ' | ' + '' + ' | ' + ' | ' + ' | ' + - ' | ' + + ' | ' + ' | ' + ' |
| ' + (i + 1) + ' | '; - itemsHtml += ''; - itemsHtml += ' | '; - itemsHtml += ' | '; - itemsHtml += ' | '; - itemsHtml += ' | '; - itemsHtml += ' | '; - itemsHtml += ' | '; - itemsHtml += ' | ||
| ' + (i + 1) + ' | '; + itemsHtml += ''; + itemsHtml += ''; + itemsHtml += ''; + itemsHtml += ''; + itemsHtml += ' | '; + itemsHtml += ''; + itemsHtml += ' | '; + itemsHtml += ' | '; + itemsHtml += ' | '; + itemsHtml += ' | '; + itemsHtml += ' | '; + itemsHtml += ' | '; itemsHtml += ''; - // 원화환산 공급가액 행 추가 - itemsHtml += ' | |
| ' + (idx + 1) + ' | '); - row.append(''); - row.append(' | '); - row.append(' | '); - row.append(' | '); - row.append(' | '); - row.append(' | '); - row.append(' | '); - $("#itemsTableBody").append(row); - }); + // 품목 데이터 채우기 + if(data.items && data.items.length > 0){ + $("#itemsTableBody").empty(); + + // 품목 HTML 생성 + var itemsHtml = ""; + for(var i = 0; i < data.items.length; i++) { + var item = data.items[i]; + var itemId = 'template_item_' + i; + var description = item.DESCRIPTION || item.description || ''; + var specification = item.SPECIFICATION || item.specification || ''; + var quantity = item.QUANTITY || item.quantity || ''; + var unit = item.UNIT || item.unit || ''; + var unitPrice = item.UNIT_PRICE || item.unit_price || item.unitPrice || ''; + var amount = item.AMOUNT || item.amount || ''; + var note = item.NOTE || item.note || ''; + var partObjId = item.PART_OBJID || item.part_objid || ''; - // 계 행 추가 - var totalRow = $(" | ||
| 계 | '); - totalRow.append('0 | '); - totalRow.append(''); - $("#itemsTableBody").append(totalRow); + // 단가와 금액에 콤마 추가 + var unitPriceFormatted = unitPrice ? addComma(unitPrice) : ''; + var amountFormatted = amount ? addComma(amount) : ''; - // 원화환산 공급가액 행 추가 - var totalKRWRow = $(" | |||||||
| 원화환산 공급가액 (KRW) | '); - totalKRWRow.append('0 | '); - totalKRWRow.append(''); - $("#itemsTableBody").append(totalKRWRow); + itemsHtml += ' | |||||||
| ' + (i + 1) + ' | '; + itemsHtml += ''; + itemsHtml += ''; + itemsHtml += ''; + itemsHtml += ''; + itemsHtml += ' | '; + itemsHtml += ''; + itemsHtml += ' | '; + itemsHtml += ' | '; + itemsHtml += ' | '; + itemsHtml += ' | '; + itemsHtml += ' | '; + itemsHtml += ' | ||
| 계 | '; + itemsHtml += '0 | '; + itemsHtml += ''; + itemsHtml += ' | |||||||
| ';
+ itemsHtml += ' <비고> ';
+ itemsHtml += '';
+ itemsHtml += ' | ';
+ itemsHtml += '|||||||||
| ' +
- ' <비고> ' +
- '' +
- ' | ');
- $("#itemsTableBody").append(remarksRow);
+ // PART_OBJID가 있으면 해당 품목을 셀렉트박스에 설정
+ if(partObjId) {
+ // AJAX로 품목 정보 조회하여 셀렉트박스에 옵션 추가
+ $.ajax({
+ url: '/contractMgmt/searchPartList.do',
+ type: 'POST',
+ data: { partObjId: partObjId },
+ dataType: 'json',
+ async: false, // 동기 처리
+ success: function(partData) {
+ if(partData && partData.length > 0) {
+ var part = partData[0];
+ var objId = part.OBJID || part.objid || part.objId;
+ var partName = part.PART_NAME || part.part_name || part.partName;
+ var spec = part.SPEC || part.spec || '';
+
+ // 옵션 생성 및 추가 (selected 상태로)
+ var newOption = new Option(partName, objId, true, true);
+ $("#" + itemId + " .item-desc-select").append(newOption);
+
+ // hidden 필드 업데이트
+ $("#" + itemId + " .item-desc").val(partName);
+ $("#" + itemId + " .item-part-objid").val(objId);
+
+ // 규격이 있으면 자동 입력 (기존 값이 없을 때만)
+ if(spec && !$("#" + itemId + " .item-spec").val()) {
+ $("#" + itemId + " .item-spec").val(spec);
+ }
+ }
+ }
+ });
+ }
+
+ // 셀렉트박스 초기화 (옵션 추가 후)
+ fn_initItemDescSelect(itemId);
+ }
// 테이블 내 비고 값 설정 (textarea 생성 직후)
$("#note_remarks").val(noteRemarks);
@@ -610,6 +980,31 @@ function fn_loadTemplateData(templateObjId){
}
// 저장
+// 고객사 담당자 정보 로드
+function fn_loadCustomerContact(customerObjId) {
+ if(!customerObjId || customerObjId === "") {
+ $("#contact_person").val("");
+ return;
+ }
+
+ $.ajax({
+ url: "/contractMgmt/getCustomerContactInfo.do",
+ type: "POST",
+ data: { customerObjId: customerObjId },
+ dataType: "json",
+ success: function(data) {
+ if(data && data.contactPerson) {
+ $("#contact_person").val(data.contactPerson + " 귀하");
+ } else {
+ $("#contact_person").val("구매 담당자님 귀하");
+ }
+ },
+ error: function() {
+ $("#contact_person").val("구매 담당자님 귀하");
+ }
+ });
+}
+
function fn_save() {
var items = [];
// 계 행, 원화환산 행, 비고 행 제외하고 품목 행만 저장
@@ -621,6 +1016,7 @@ function fn_save() {
items.push({
seq: idx + 1,
+ part_objid: row.find(".item-part-objid").val() || "", // part_objid 추가
description: row.find(".item-desc").val() || "",
specification: row.find(".item-spec").val() || "",
quantity: quantity.replace(/,/g, ""), // 콤마 제거
@@ -716,37 +1112,40 @@ function fn_save() {
|||||||||
| 시행일자 | -- - | -
-
-
-
+ 시행일자 |
+
+
+ |
+
+ |
-
+
+
-
- 담당자 :
- - 연락처 : 수신처 |
-
-
- |
- 수신인 |
-
-
- |
-
+ 담당자 :
+ + 연락처 : + |
+
| 수신처 | ++ + | +||||||||
| 수신인 | ++ + | +||||||||
| 견적번호 | @@ -780,35 +1179,43 @@ function fn_save() { | 비고 | |||||||
|---|---|---|---|---|---|---|---|---|---|
| 1 | -- | - | - | - | - | - | - | ||
| 2 | -- | - | - | - | - | - | - | ||
| 1 | ++ + + + | ++ | + | + | + | + | + | ||
| 2 | ++ + + + | ++ | + | + | + | + | + | ||
| 계 | 0 | ||||||||