구매리스트 단가 초기화 기능 추가

This commit is contained in:
2026-01-30 10:50:51 +09:00
parent 0d22f64d53
commit 0ff0933f01
3 changed files with 164 additions and 0 deletions

View File

@@ -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: '<p>선택된 구매요청서의 M-BOM 단가를 초기화하시겠습니까?</p>' +
'<p style="font-size:12px; color:#666;">프로젝트: <strong>' + projectNumber + '</strong></p>' +
'<div style="margin-top:15px; padding:10px; background:#fff3cd; border:1px solid #ffc107; border-radius:4px; text-align:left;">' +
'<p style="margin:0; color:#856404;"><strong>초기화 대상:</strong></p>' +
'<ul style="margin:5px 0 0 0; padding-left:20px; color:#856404;">' +
'<li>소재단가 (UNIT_PRICE) → 0</li>' +
'<li>가공단가 (PROCESSING_UNIT_PRICE) → 0</li>' +
'</ul>' +
'</div>',
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
<!-- <input type="button" value="구매요청서작성" class="plm_btns" id="btnOrderReg"> -->
<input type="button" value="견적요청서생성" class="plm_btns" id="btnQuotationRequest" style="background-color: #4CAF50; border-color: #4CAF50;">
<input type="button" value="품의서생성" class="plm_btns" id="btnReg">
<input type="button" value="단가초기화" class="plm_btns" id="btnResetPrice" style="background-color: #ff9800; border-color: #ff9800;">
</div>
</div>
<div id="plmSearchZon">

View File

@@ -4825,6 +4825,19 @@ ORDER BY V.PATH2
WHERE OBJID = #{SALES_REQUEST_PART_OBJID}
</update>
<!-- MBOM_DETAIL 단가 초기화 (재수주 시 기존 단가 삭제) -->
<!-- 소재단가(UNIT_PRICE), 가공단가(PROCESSING_UNIT_PRICE)를 0으로 초기화 -->
<update id="resetMbomDetailPrice" parameterType="map">
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}
</update>
<!-- 구매리스트에서 견적요청서 생성 대상 조회 - M-BOM 기반 (MBOM_DETAIL에서 조회) -->
<!-- 공급업체/가공업체별로 견적요청서 생성 가능 여부 플래그 포함 -->
<select id="getPurchaseListForQuotationFromMBom" parameterType="map" resultType="map">

View File

@@ -1542,6 +1542,51 @@ public class SalesMngController {
return createProposal(request, paramMap);
}
/**
* M-BOM 단가 초기화 (재수주 시 기존 단가 삭제)
* - 소재단가(UNIT_PRICE), 가공단가(PROCESSING_UNIT_PRICE)를 0으로 초기화
* @param request
* @param paramMap MBOM_HEADER_OBJID, SALES_REQUEST_MASTER_OBJID
* @return
*/
@ResponseBody
@RequestMapping("/salesMng/resetMbomPrice.do")
public Map resetMbomPrice(HttpServletRequest request, @RequestParam Map<String, Object> paramMap){
Map resultMap = new HashMap();
SqlSession sqlSession = null;
try {
String mbomHeaderObjid = CommonUtils.checkNull(paramMap.get("MBOM_HEADER_OBJID"));
if("".equals(mbomHeaderObjid)) {
resultMap.put("resultFlag", "F");
resultMap.put("message", "M-BOM 정보가 없습니다.");
return resultMap;
}
sqlSession = SqlMapConfig.getInstance().getSqlSession(false);
// MBOM_DETAIL 단가 초기화
int updateCount = sqlSession.update("salesMng.resetMbomDetailPrice", paramMap);
sqlSession.commit();
resultMap.put("resultFlag", "S");
resultMap.put("message", "단가가 초기화되었습니다.\n(총 " + updateCount + "건 초기화)");
resultMap.put("updateCount", updateCount);
} catch (Exception e) {
if(sqlSession != null) sqlSession.rollback();
e.printStackTrace();
resultMap.put("resultFlag", "F");
resultMap.put("message", "단가 초기화 중 오류가 발생했습니다: " + e.getMessage());
} finally {
if(sqlSession != null) sqlSession.close();
}
return resultMap;
}
/**
* 품의서 저장 (마스터 + 품목)
* @param request