From 0ff0933f0119c5aa5c49b01733aace39c5bdab9b Mon Sep 17 00:00:00 2001 From: hjjeong Date: Fri, 30 Jan 2026 10:50:51 +0900 Subject: [PATCH 1/3] =?UTF-8?q?=EA=B5=AC=EB=A7=A4=EB=A6=AC=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=EB=8B=A8=EA=B0=80=20=EC=B4=88=EA=B8=B0=ED=99=94=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../view/salesMng/salesRequestMngRegList.jsp | 106 ++++++++++++++++++ src/com/pms/mapper/salesMng.xml | 13 +++ .../controller/SalesMngController.java | 45 ++++++++ 3 files changed, 164 insertions(+) diff --git a/WebContent/WEB-INF/view/salesMng/salesRequestMngRegList.jsp b/WebContent/WEB-INF/view/salesMng/salesRequestMngRegList.jsp index 4578a3a..b933c9f 100644 --- a/WebContent/WEB-INF/view/salesMng/salesRequestMngRegList.jsp +++ b/WebContent/WEB-INF/view/salesMng/salesRequestMngRegList.jsp @@ -121,6 +121,11 @@ $(document).ready(function(){ fn_openQuotationRequestPopup(); }); + // 단가초기화 + $("#btnResetPrice").click(function(){ + fn_resetMbomPrice(); + }); + $("#btnOrderBOMReg").click(function(){ fn_salesRequestTargetBOMListPopUp(); }); @@ -514,6 +519,106 @@ function fn_formPopUp(objId,sales_request_objid){ hiddenForm.submit(); */ } +/** + * 단가초기화 함수 + * - 선택된 구매요청서의 M-BOM에서 소재단가/가공단가를 0으로 초기화 + * - 재수주 시 이전 단가를 삭제하고 새로운 견적을 받기 위함 + */ +function fn_resetMbomPrice() { + // 1. 선택된 행 확인 + var selectedRows = _tabulGrid.getSelectedData(); + + if(selectedRows.length == 0) { + Swal.fire({ + title: '알림', + text: '단가를 초기화할 구매요청서를 선택해주세요.', + icon: 'info' + }); + return; + } + + if(selectedRows.length > 1) { + Swal.fire({ + title: '알림', + text: '한 번에 하나의 구매요청서만 선택해주세요.', + icon: 'info' + }); + return; + } + + var selectedRow = selectedRows[0]; + var mbomHeaderObjid = fnc_checkNull(selectedRow.MBOM_HEADER_OBJID); + var salesRequestObjid = fnc_checkNull(selectedRow.OBJID); + var projectNumber = fnc_checkNull(selectedRow.PROJECT_NUMBER); + + // MBOM_HEADER_OBJID 확인 + if(!mbomHeaderObjid) { + Swal.fire({ + title: '알림', + text: 'M-BOM 정보가 없습니다.\n구매리스트가 생성되지 않았거나 M-BOM이 할당되지 않았습니다.', + icon: 'warning' + }); + return; + } + + // 확인 메시지 + Swal.fire({ + title: '단가 초기화', + html: '

선택된 구매요청서의 M-BOM 단가를 초기화하시겠습니까?

' + + '

프로젝트: ' + projectNumber + '

' + + '
' + + '

초기화 대상:

' + + '' + + '
', + icon: 'warning', + showCancelButton: true, + confirmButtonText: '초기화', + cancelButtonText: '취소', + confirmButtonColor: '#ff9800' + }).then((result) => { + if(result.isConfirmed) { + // 초기화 실행 + $.ajax({ + url: "/salesMng/resetMbomPrice.do", + type: "POST", + data: { + MBOM_HEADER_OBJID: mbomHeaderObjid, + SALES_REQUEST_MASTER_OBJID: salesRequestObjid + }, + dataType: "json", + success: function(response) { + if(response.resultFlag === "S") { + Swal.fire({ + title: '완료', + html: response.message || '단가가 초기화되었습니다.', + icon: 'success' + }).then(() => { + fn_search(); // 목록 새로고침 + }); + } else { + Swal.fire({ + title: '오류', + html: response.message || '단가 초기화 중 오류가 발생했습니다.', + icon: 'error' + }); + } + }, + error: function(xhr, status, error) { + console.error("단가 초기화 오류:", status, error); + Swal.fire({ + title: '오류', + text: '서버 통신 중 오류가 발생했습니다.', + icon: 'error' + }); + } + }); + } + }); +} + /** * 품의서 생성 함수 * - 선택된 구매요청서에서 소재단가/가공단가가 입력된 품목만 필터링 @@ -971,6 +1076,7 @@ function fn_executeCreateQuotationRequests(salesRequestObjid, supplyVendorGroups +
diff --git a/src/com/pms/mapper/salesMng.xml b/src/com/pms/mapper/salesMng.xml index 4fdf75f..1d20370 100644 --- a/src/com/pms/mapper/salesMng.xml +++ b/src/com/pms/mapper/salesMng.xml @@ -4825,6 +4825,19 @@ ORDER BY V.PATH2 WHERE OBJID = #{SALES_REQUEST_PART_OBJID} + + + + UPDATE MBOM_DETAIL SET + UNIT_PRICE = 0, + PROCESSING_UNIT_PRICE = 0, + TOTAL_PRICE = 0, + PROCESSING_TOTAL_PRICE = 0, + GRAND_TOTAL_PRICE = 0, + EDIT_DATE = NOW() + WHERE MBOM_HEADER_OBJID = #{MBOM_HEADER_OBJID} + + ').attr({ - type: 'hidden', - name: 'request_status_filter', - value: '요청완료' - }).appendTo('#form1'); - - _tabulGrid = fnc_tabul_search(_tabul_layout_fitColumns, _tabulGrid, "/quality/incomingInspectionGridList.do", columns, true); + // 신규 API 호출 (입고품목 상세 기준) + _tabulGrid = fnc_tabul_search(_tabul_layout_fitColumns, _tabulGrid, "/quality/incomingInspectionProgressGridList.do", columns, true); } -// 수입검사 진행 팝업 +// ===================================================== +// 수입검사 진행 팝업 (INCOMING_INSPECTION_DETAIL.OBJID 전달) - 신규 +// ===================================================== function fn_inspectionPopUp(objId){ var selected = []; if(objId){ - // 검사결과 클릭으로 호출된 경우 + // 검사현황 클릭으로 호출된 경우 selected = [{OBJID: objId}]; } else { // 버튼 클릭으로 호출된 경우 @@ -184,8 +199,9 @@ function fn_inspectionPopUp(objId){ } } - var popup_width = 1800; - var popup_height = 700; + // 팝업 크기 조정 (불량상세만 표시하므로 너비 축소) + var popup_width = 1400; + var popup_height = 600; var hiddenForm = document.hiddenForm; var target = "incomingInspectionProgressPopUp"; var url = "/quality/incomingInspectionProgressPopUp.do"; @@ -193,11 +209,21 @@ function fn_inspectionPopUp(objId){ fn_centerPopup(popup_width, popup_height, "", target); hiddenForm.action = url; + // INCOMING_INSPECTION_DETAIL.OBJID 전달 hiddenForm.OBJID.value = selected[0].OBJID; hiddenForm.target = target; hiddenForm.submit(); } +// 품목상세 팝업 +function fn_openPartDetailPopUp(partObjId) { + if (!partObjId) return; + var popup_width = 1200; + var popup_height = 900; + var url = "/partMng/partMngDetailPopUp.do?OBJID=" + partObjId; + window.open(url, "partMngDetailPopUp", "width=" + popup_width + ",height=" + popup_height + ",scrollbars=yes,resizable=yes"); +} + // 품의서 팝업 function fn_openProposalPopUp(objId){ var popup_width = 1200; @@ -232,21 +258,17 @@ function fn_excelDownload(){ // 첨부파일 팝업 function fn_FileRegist(objId, docType, docTypeName){ - var popup_width = 800; - var popup_height = 300; - - var objId = objId; - var docType = docType; - var docTypeName = docTypeName; - var params = "?targetObjId="+objId+"&docType="+docType+"&docTypeName="+docTypeName; - var url = "/projectConcept/FileRegistPopup.do"+params; - - fn_centerPopup(popup_width, popup_height, url); + var popup_width = 800; + var popup_height = 300; + var params = "?targetObjId="+objId+"&docType="+docType+"&docTypeName="+docTypeName; + var url = "/projectConcept/FileRegistPopup.do"+params; + fn_centerPopup(popup_width, popup_height, url); } -function fn_deliveryAcceptanceViewPopUp(objId,DELIVERY_STATUS){ +// 입고결과 팝업 (발주서 기준) +function fn_deliveryAcceptanceViewPopUp(objId, deliveryStatus){ var popup_width = 1560; - var popup_height = 1050; + var popup_height = 1050; var hiddenForm = document.hiddenForm; var target = "deliveryAcceptancePopUp"; @@ -255,8 +277,8 @@ function fn_deliveryAcceptanceViewPopUp(objId,DELIVERY_STATUS){ hiddenForm.action = url; hiddenForm.PURCHASE_ORDER_MASTER_OBJID.value = objId; - hiddenForm.DELIVERY_STATUS.value = DELIVERY_STATUS; - hiddenForm.actionType.value = 'view'; // 뷰 전용으로 설정 + hiddenForm.DELIVERY_STATUS.value = deliveryStatus; + hiddenForm.actionType.value = 'view'; hiddenForm.target = target; hiddenForm.submit(); } diff --git a/WebContent/WEB-INF/view/quality/incomingInspectionProgressPopUp.jsp b/WebContent/WEB-INF/view/quality/incomingInspectionProgressPopUp.jsp index c3032f7..50c2f81 100644 --- a/WebContent/WEB-INF/view/quality/incomingInspectionProgressPopUp.jsp +++ b/WebContent/WEB-INF/view/quality/incomingInspectionProgressPopUp.jsp @@ -18,48 +18,45 @@ String connector = person.getUserId();