diff --git a/WebContent/WEB-INF/view/purchaseOrder/deliveryMngAcceptanceList.jsp b/WebContent/WEB-INF/view/purchaseOrder/deliveryMngAcceptanceList.jsp
index b917b69..491d89b 100644
--- a/WebContent/WEB-INF/view/purchaseOrder/deliveryMngAcceptanceList.jsp
+++ b/WebContent/WEB-INF/view/purchaseOrder/deliveryMngAcceptanceList.jsp
@@ -88,6 +88,7 @@ $(document).ready(function(){
var columns = [
// 요구사항: 품의서 No, 발주서 No, 프로젝트번호, 품번, 품명, 공급업체, 발주수량, 입고수량, 미입고수량, 검사성적서, 입고결과
+ {title:'STATUS' ,field:'STATUS' ,visible:false, frozen:true},
{title:'TOTAL_SUPPLY_PRICE' ,field:'TOTAL_SUPPLY_PRICE' ,visible:false, frozen:true},
{title:'TOTAL_DELIVERY_PRICE' ,field:'TOTAL_DELIVERY_PRICE' ,visible:false, frozen:true},
{title:'TOTAL_NOT_DELIVERY_PRICE',field:'TOTAL_NOT_DELIVERY_PRICE',visible:false, frozen:true},
@@ -127,15 +128,36 @@ var columns = [
}
},
{headerHozAlign : 'center', hozAlign : 'center', minWidth : 90, widthGrow : 1, title : '입고결과', field : 'DELIVERY_STATUS',
- formatter:fnc_createGridAnchorTag,
- cellClick:function(e, cell){
+ formatter: function(cell, formatterParams, onRendered){
+ var status = fnc_checkNull(cell.getData().STATUS);
+ var deliveryStatus = fnc_checkNull(cell.getValue());
+
+ // 발주취소 상태인 경우
+ if(status === 'orderCancel'){
+ return '발주취소';
+ }
+
+ // 일반 상태 - 링크로 표시
+ if(deliveryStatus != ''){
+ return '' + deliveryStatus + '';
+ }
+ return deliveryStatus;
+ },
+ cellClick:function(e, cell){
+ var status = fnc_checkNull(cell.getData().STATUS);
+
+ // 발주취소 상태인 경우 팝업 열지 않음
+ if(status === 'orderCancel'){
+ return;
+ }
+
var objId = fnc_checkNull(cell.getData().OBJID);
var DELIVERY_STATUS = fnc_checkNull(cell.getData().DELIVERY_STATUS);
var purchaseOrderNo = fnc_checkNull(cell.getData().PURCHASE_ORDER_NO);
fn_deliveryAcceptanceViewPopUp(objId,DELIVERY_STATUS);
}
- },
- {headerHozAlign : 'center', hozAlign : 'center', minWidth : 140, widthGrow : 1, title : '매입마감', field : 'PURCHASE_CLOSE_DATE'}
+ }
+ // {headerHozAlign : 'center', hozAlign : 'center', minWidth : 140, widthGrow : 1, title : '매입마감', field : 'PURCHASE_CLOSE_DATE'}
];
//var grid;
@@ -219,7 +241,14 @@ function fn_deliveryAcceptancePopUp(){
if(selected.length > 1){
Swal.fire("한건씩 등록 가능합니다.");
return;
- }else{
+ }else{
+ // 발주취소 상태 체크
+ var status = fnc_checkNull(selected[0].STATUS);
+ if(status === 'orderCancel'){
+ Swal.fire("발주취소된 건은 입고등록할 수 없습니다.");
+ return;
+ }
+
var MULTI_MASTER_YN = fnc_checkNull(selected[0].MULTI_MASTER_YN);
var MULTI_YN = fnc_checkNull(selected[0].MULTI_YN);
@@ -472,7 +501,7 @@ function fn_purchaseClose(){
-
+
<%-- --%>
diff --git a/WebContent/WEB-INF/view/purchaseOrder/purchaseOrderList_new.jsp b/WebContent/WEB-INF/view/purchaseOrder/purchaseOrderList_new.jsp
index 5315041..0e0f59c 100644
--- a/WebContent/WEB-INF/view/purchaseOrder/purchaseOrderList_new.jsp
+++ b/WebContent/WEB-INF/view/purchaseOrder/purchaseOrderList_new.jsp
@@ -76,6 +76,11 @@ $(document).ready(function(){
fn_sendPurchaseOrder();
});
+ // 발주 취소 버튼 클릭
+ $("#btnOrderCancel").click(function(){
+ fn_orderCancel();
+ });
+
//수주활동 복사 팝업
$("#btnCopy").click(function(){
var checkedObj = _tabulGrid.getSelectedData();
@@ -352,7 +357,11 @@ var columns = [
{headerHozAlign:'center', hozAlign:'center', widthGrow:1, title:'메일발송', field:'MAIL_SEND_YN',
formatter: function(cell, formatterParams, onRendered){
var value = fnc_checkNull(cell.getValue());
- if(value === 'Y'){
+ var status = fnc_checkNull(cell.getData().STATUS);
+ // 발주취소 상태인 경우
+ if(status === 'orderCancel'){
+ return '발주취소';
+ } else if(value === 'Y'){
return '발송완료';
} else {
return '';
@@ -771,7 +780,7 @@ function fn_sendPurchaseOrder(){
var mailSendYn = fnc_checkNull(selectedData[0].MAIL_SEND_YN);
// 취소 상태 확인
- if(status === "cancel"){
+ if(status === "cancel" || status === "orderCancel"){
Swal.fire("취소된 발주서는 발송할 수 없습니다.");
return false;
}
@@ -817,6 +826,119 @@ function fn_openMailFormPopup(purchaseOrderObjId){
window.open(url, "purchaseOrderMailForm", "width="+popup_width+",height="+popup_height+",menubar=no,scrollbars=yes,resizable=yes");
}
+// 발주 취소
+function fn_orderCancel(){
+ var selectedData = _tabulGrid.getSelectedData();
+
+ if(selectedData.length < 1){
+ Swal.fire("발주 취소할 행을 선택해주세요.");
+ return false;
+ } else if(selectedData.length > 1){
+ Swal.fire("한번에 한 개의 발주서만 취소 가능합니다.");
+ return false;
+ }
+
+ var objId = fnc_checkNull(selectedData[0].OBJID);
+ var status = fnc_checkNull(selectedData[0].STATUS);
+ var MULTI_YN = fnc_checkNull(selectedData[0].MULTI_YN);
+ var MULTI_MASTER_YN = fnc_checkNull(selectedData[0].MULTI_MASTER_YN);
+ var purchaseOrderNo = fnc_checkNull(selectedData[0].PURCHASE_ORDER_NO);
+
+ // 이미 취소된 상태 확인
+ if(status === 'cancel'){
+ Swal.fire("이미 취소된 발주서입니다.");
+ return false;
+ }
+
+ // 이미 발주취소된 상태 확인
+ if(status === 'orderCancel'){
+ Swal.fire("이미 발주취소된 발주서입니다.");
+ return false;
+ }
+
+ // 동시발주 하위건 확인
+ if(MULTI_YN === 'Y' && MULTI_MASTER_YN !== 'Y'){
+ Swal.fire("동시발주 하위건은 마스터건으로 취소해주세요.");
+ return false;
+ }
+
+ // 입고 여부 확인 후 취소 진행
+ $.ajax({
+ type: "POST",
+ url: "/purchaseOrder/checkReceiptForCancel.do",
+ data: { PURCHASE_ORDER_MASTER_OBJID: objId },
+ dataType: "json",
+ success: function(data){
+ if(data.hasReceipt){
+ // 입고된 항목이 있는 경우
+ Swal.fire({
+ title: '취소 불가',
+ html: '입고된 항목이 있어 발주 취소가 불가합니다.
' +
+ '입고수량: ' + data.totalReceiptQty + '개',
+ icon: 'error'
+ });
+ } else {
+ // 입고된 항목이 없는 경우 - 취소 확인
+ Swal.fire({
+ title: '발주 취소',
+ html: '발주서 ' + purchaseOrderNo + '을(를) 취소하시겠습니까?
' +
+ '취소 후에도 목록에서 확인 가능하며, 메일발송 컬럼에 "발주취소"로 표시됩니다.',
+ icon: 'warning',
+ showCancelButton: true,
+ confirmButtonColor: '#d33',
+ confirmButtonText: '취소하기',
+ cancelButtonText: '닫기'
+ }).then((result) => {
+ if(result.isConfirmed){
+ fn_executeOrderCancel(objId);
+ }
+ });
+ }
+ },
+ error: function(jqxhr, status, error){
+ console.error("입고 확인 오류:", error);
+ Swal.fire("입고 확인 중 오류가 발생했습니다.");
+ }
+ });
+}
+
+// 발주 취소 실행
+function fn_executeOrderCancel(objId){
+ $.ajax({
+ type: "POST",
+ url: "/purchaseOrder/executeOrderCancel.do",
+ data: { PURCHASE_ORDER_MASTER_OBJID: objId },
+ dataType: "json",
+ beforeSend: function(){
+ _startLoading("처리중입니다.");
+ },
+ complete: function(){
+ _endLoading();
+ },
+ success: function(data){
+ if(data.result){
+ Swal.fire({
+ title: '완료',
+ text: '발주가 취소되었습니다.',
+ icon: 'success'
+ }).then(() => {
+ fn_search();
+ });
+ } else {
+ Swal.fire({
+ title: '오류',
+ text: data.message || '발주 취소 중 오류가 발생했습니다.',
+ icon: 'error'
+ });
+ }
+ },
+ error: function(jqxhr, status, error){
+ console.error("발주 취소 오류:", error);
+ Swal.fire("발주 취소 중 오류가 발생했습니다.");
+ }
+ });
+}
+