구매리스트 단가 초기화 기능 추가
This commit is contained in:
@@ -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">
|
||||
|
||||
@@ -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">
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user