발주취소 기능 추가, 발주서 메일 발송 시 도면 첨부 선택 기능 추가
This commit is contained in:
@@ -2112,6 +2112,44 @@ public class PurchaseOrderController {
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
/**
|
||||
* 도면 파일 개수 조회 (AJAX)
|
||||
* @param request
|
||||
* @param paramMap - objId (PURCHASE_ORDER_MASTER_OBJID)
|
||||
* @return
|
||||
*/
|
||||
@ResponseBody
|
||||
@RequestMapping("/purchaseOrder/getDrawingFileCount.do")
|
||||
public Map getDrawingFileCount(HttpServletRequest request, @RequestParam Map paramMap){
|
||||
Map resultMap = new HashMap();
|
||||
|
||||
try {
|
||||
String objId = CommonUtils.checkNull(paramMap.get("objId"));
|
||||
|
||||
if("".equals(objId)){
|
||||
resultMap.put("result", "error");
|
||||
resultMap.put("message", "잘못된 요청입니다.");
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
// 도면 파일 개수 조회
|
||||
paramMap.put("PURCHASE_ORDER_MASTER_OBJID", objId);
|
||||
paramMap.put("MULTI_MASTER_OBJID", objId);
|
||||
List fileList = commonService.selectList("purchaseOrder.purchaseOrderPartFileListForMail", null, paramMap);
|
||||
|
||||
int count = (fileList != null) ? fileList.size() : 0;
|
||||
resultMap.put("result", "success");
|
||||
resultMap.put("count", count);
|
||||
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
resultMap.put("result", "error");
|
||||
resultMap.put("message", "도면 파일 조회 중 오류가 발생했습니다.");
|
||||
}
|
||||
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
/**
|
||||
* PDF 청크 업로드 (AJAX)
|
||||
* @param request
|
||||
@@ -2234,4 +2272,48 @@ public class PurchaseOrderController {
|
||||
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
/**
|
||||
* 발주 취소 전 입고 여부 확인
|
||||
* @param request
|
||||
* @param paramMap
|
||||
* @return
|
||||
*/
|
||||
@ResponseBody
|
||||
@RequestMapping("/purchaseOrder/checkReceiptForCancel.do")
|
||||
public Map checkReceiptForCancel(HttpServletRequest request, @RequestParam Map paramMap){
|
||||
Map resultMap = new HashMap();
|
||||
|
||||
try {
|
||||
resultMap = purchaseOrderService.checkReceiptForCancel(request, paramMap);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
resultMap.put("hasReceipt", true);
|
||||
resultMap.put("message", "입고 확인 중 오류가 발생했습니다.");
|
||||
}
|
||||
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
/**
|
||||
* 발주 취소 실행 (입고가 없는 경우만)
|
||||
* @param request
|
||||
* @param paramMap
|
||||
* @return
|
||||
*/
|
||||
@ResponseBody
|
||||
@RequestMapping("/purchaseOrder/executeOrderCancel.do")
|
||||
public Map executeOrderCancel(HttpServletRequest request, @RequestParam Map paramMap){
|
||||
Map resultMap = new HashMap();
|
||||
|
||||
try {
|
||||
resultMap = purchaseOrderService.executeOrderCancel(request, paramMap);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
resultMap.put("result", false);
|
||||
resultMap.put("message", "발주 취소 중 오류가 발생했습니다: " + e.getMessage());
|
||||
}
|
||||
|
||||
return resultMap;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4246,6 +4246,7 @@ SELECT T.*
|
||||
|
||||
<select id="deliveryMngList_new" parameterType="map" resultType="map">
|
||||
SELECT POM.OBJID
|
||||
,POM.STATUS
|
||||
<!-- ,TO_CHAR(CM.REGDATE, 'YYYY') AS CM_YEAR -->
|
||||
,TO_CHAR(POM.REGDATE,'YYYY') AS POM_YEAR
|
||||
,(SELECT SUPPLY_NAME FROM SUPPLY_MNG AS O WHERE O.OBJID::VARCHAR = CM.CUSTOMER_OBJID) AS CUSTOMER_NAME
|
||||
@@ -6123,4 +6124,31 @@ FROM(
|
||||
ORDER BY PART_NO
|
||||
</select>
|
||||
|
||||
<!-- 발주 취소를 위한 입고 수량 조회 (ARRIVAL_PLAN 테이블) -->
|
||||
<select id="getTotalReceiptQtyForCancel" parameterType="map" resultType="map">
|
||||
SELECT
|
||||
COALESCE(SUM(
|
||||
CASE
|
||||
WHEN AP.RECEIPT_QTY IS NULL OR AP.RECEIPT_QTY = '' THEN 0
|
||||
ELSE AP.RECEIPT_QTY::NUMERIC
|
||||
END
|
||||
), 0) AS TOTAL_RECEIPT_QTY
|
||||
FROM ARRIVAL_PLAN AP
|
||||
WHERE AP.PARENT_OBJID = #{PURCHASE_ORDER_MASTER_OBJID}
|
||||
</select>
|
||||
|
||||
<!-- 발주 취소 상태 업데이트 -->
|
||||
<update id="updateOrderCancelStatus" parameterType="map">
|
||||
UPDATE PURCHASE_ORDER_MASTER
|
||||
SET STATUS = #{STATUS}
|
||||
WHERE OBJID = #{OBJID}
|
||||
</update>
|
||||
|
||||
<!-- 동시발주 하위건 발주 취소 상태 업데이트 -->
|
||||
<update id="updateOrderCancelStatusMulti" parameterType="map">
|
||||
UPDATE PURCHASE_ORDER_MASTER
|
||||
SET STATUS = #{STATUS}
|
||||
WHERE MULTI_MASTER_OBJID = #{OBJID}
|
||||
</update>
|
||||
|
||||
</mapper>
|
||||
@@ -2961,6 +2961,8 @@ public class PurchaseOrderService {
|
||||
String contents = CommonUtils.checkNull(paramMap.get("contents"));
|
||||
String writerEmail = CommonUtils.checkNull(paramMap.get("WRITER_EMAIL"));
|
||||
String writer = CommonUtils.checkNull(paramMap.get("WRITER"));
|
||||
// 도면 파일 첨부 여부 (기본값: Y)
|
||||
String includeDrawingFiles = CommonUtils.checkNull(paramMap.get("includeDrawingFiles"), "Y");
|
||||
|
||||
// 발주서 정보 조회
|
||||
Map infoParam = new HashMap();
|
||||
@@ -3035,8 +3037,8 @@ public class PurchaseOrderService {
|
||||
attachFileList.add(excelFile);
|
||||
}
|
||||
|
||||
// 2. 도면 파일 압축 첨부
|
||||
if(partFileList != null && partFileList.size() > 0) {
|
||||
// 2. 도면 파일 압축 첨부 (includeDrawingFiles가 Y인 경우에만)
|
||||
if("Y".equals(includeDrawingFiles) && partFileList != null && partFileList.size() > 0) {
|
||||
File zf = MailUtil.zipFileListMail(zipName, partFileList);
|
||||
if(zf != null && zf.exists()) {
|
||||
HashMap hm = new HashMap();
|
||||
@@ -3177,4 +3179,126 @@ public class PurchaseOrderService {
|
||||
}
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
/**
|
||||
* 발주 취소 전 입고 여부 확인
|
||||
* @param request
|
||||
* @param paramMap
|
||||
* @return hasReceipt: 입고 여부, totalReceiptQty: 총 입고수량
|
||||
*/
|
||||
public Map checkReceiptForCancel(HttpServletRequest request, Map paramMap) throws Exception {
|
||||
Map resultMap = new HashMap();
|
||||
SqlSession sqlSession = null;
|
||||
|
||||
try {
|
||||
sqlSession = SqlMapConfig.getInstance().getSqlSession();
|
||||
|
||||
String purchaseOrderMasterObjid = CommonUtils.checkNull(paramMap.get("PURCHASE_ORDER_MASTER_OBJID"));
|
||||
|
||||
if(purchaseOrderMasterObjid.isEmpty()) {
|
||||
resultMap.put("hasReceipt", true);
|
||||
resultMap.put("message", "발주서 정보가 없습니다.");
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
// 입고 수량 조회 (ARRIVAL_PLAN 테이블에서 RECEIPT_QTY 합계)
|
||||
Map queryParam = new HashMap();
|
||||
queryParam.put("PURCHASE_ORDER_MASTER_OBJID", purchaseOrderMasterObjid);
|
||||
|
||||
Map receiptInfo = (Map)sqlSession.selectOne("purchaseOrder.getTotalReceiptQtyForCancel", queryParam);
|
||||
|
||||
int totalReceiptQty = 0;
|
||||
if(receiptInfo != null) {
|
||||
// 대소문자 구분 없이 키 찾기
|
||||
Object qtyValue = receiptInfo.get("TOTAL_RECEIPT_QTY");
|
||||
if(qtyValue == null) {
|
||||
qtyValue = receiptInfo.get("total_receipt_qty");
|
||||
}
|
||||
if(qtyValue != null) {
|
||||
totalReceiptQty = Integer.parseInt(qtyValue.toString());
|
||||
}
|
||||
System.out.println("=== 발주취소 입고확인(check) === OBJID: " + purchaseOrderMasterObjid + ", receiptInfo: " + receiptInfo + ", totalReceiptQty: " + totalReceiptQty);
|
||||
}
|
||||
|
||||
resultMap.put("hasReceipt", totalReceiptQty > 0);
|
||||
resultMap.put("totalReceiptQty", totalReceiptQty);
|
||||
|
||||
} finally {
|
||||
if(sqlSession != null) sqlSession.close();
|
||||
}
|
||||
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
/**
|
||||
* 발주 취소 실행 (입고가 없는 경우만)
|
||||
* STATUS를 'orderCancel'로 변경
|
||||
* @param request
|
||||
* @param paramMap
|
||||
* @return
|
||||
*/
|
||||
public Map executeOrderCancel(HttpServletRequest request, Map paramMap) throws Exception {
|
||||
Map resultMap = new HashMap();
|
||||
SqlSession sqlSession = null;
|
||||
|
||||
try {
|
||||
sqlSession = SqlMapConfig.getInstance().getSqlSession(false);
|
||||
|
||||
String purchaseOrderMasterObjid = CommonUtils.checkNull(paramMap.get("PURCHASE_ORDER_MASTER_OBJID"));
|
||||
|
||||
if(purchaseOrderMasterObjid.isEmpty()) {
|
||||
resultMap.put("result", false);
|
||||
resultMap.put("message", "발주서 정보가 없습니다.");
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
// 입고 여부 재확인
|
||||
Map queryParam = new HashMap();
|
||||
queryParam.put("PURCHASE_ORDER_MASTER_OBJID", purchaseOrderMasterObjid);
|
||||
|
||||
Map receiptInfo = (Map)sqlSession.selectOne("purchaseOrder.getTotalReceiptQtyForCancel", queryParam);
|
||||
|
||||
int totalReceiptQty = 0;
|
||||
if(receiptInfo != null) {
|
||||
// 대소문자 구분 없이 키 찾기
|
||||
Object qtyValue = receiptInfo.get("TOTAL_RECEIPT_QTY");
|
||||
if(qtyValue == null) {
|
||||
qtyValue = receiptInfo.get("total_receipt_qty");
|
||||
}
|
||||
if(qtyValue != null) {
|
||||
totalReceiptQty = Integer.parseInt(qtyValue.toString());
|
||||
}
|
||||
System.out.println("=== 발주취소 입고확인 === OBJID: " + purchaseOrderMasterObjid + ", receiptInfo: " + receiptInfo + ", totalReceiptQty: " + totalReceiptQty);
|
||||
}
|
||||
|
||||
if(totalReceiptQty > 0) {
|
||||
resultMap.put("result", false);
|
||||
resultMap.put("message", "입고된 항목이 있어 취소할 수 없습니다. (입고수량: " + totalReceiptQty + ")");
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
// 발주 취소 처리 (STATUS = 'orderCancel')
|
||||
Map updateParam = new HashMap();
|
||||
updateParam.put("OBJID", purchaseOrderMasterObjid);
|
||||
updateParam.put("STATUS", "orderCancel");
|
||||
|
||||
sqlSession.update("purchaseOrder.updateOrderCancelStatus", updateParam);
|
||||
|
||||
// 동시발주 하위건도 함께 취소
|
||||
sqlSession.update("purchaseOrder.updateOrderCancelStatusMulti", updateParam);
|
||||
|
||||
sqlSession.commit();
|
||||
|
||||
resultMap.put("result", true);
|
||||
resultMap.put("message", "발주가 취소되었습니다.");
|
||||
|
||||
} catch(Exception e) {
|
||||
if(sqlSession != null) sqlSession.rollback();
|
||||
throw e;
|
||||
} finally {
|
||||
if(sqlSession != null) sqlSession.close();
|
||||
}
|
||||
|
||||
return resultMap;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user