품목별 입고관리 메뉴 추가
This commit is contained in:
@@ -0,0 +1,406 @@
|
|||||||
|
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
|
||||||
|
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
|
||||||
|
<%@ page import="com.pms.common.utils.*"%>
|
||||||
|
<%@ page import="java.util.*" %>
|
||||||
|
<%@include file= "/init.jsp" %>
|
||||||
|
<c:set var="now" value="<%=new java.util.Date() %>"/>
|
||||||
|
<c:set var="sysYear"><fmt:formatDate value="${now}" pattern="yyyy" /></c:set>
|
||||||
|
<%
|
||||||
|
// DB에서 메뉴명 조회 (공통 유틸 사용)
|
||||||
|
String menuObjId = request.getParameter("menuObjId");
|
||||||
|
String menuName = CommonUtils.getMenuName(menuObjId, "품목별 입고 관리");
|
||||||
|
%>
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||||
|
<title><%=Constants.SYSTEM_NAME%></title>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.select2-selection__choice {
|
||||||
|
font-size: 11px;
|
||||||
|
background-color: #fff !important;
|
||||||
|
border: none !important;
|
||||||
|
margin-right: 0px !important;
|
||||||
|
}
|
||||||
|
.select2-selection__choice__remove {
|
||||||
|
display: contents !important;
|
||||||
|
}
|
||||||
|
.select2-container .select2-selection--multiple {
|
||||||
|
min-height: 20px !important;
|
||||||
|
}
|
||||||
|
.select2-container--default .select2-selection--multiple .select2-selection__choice {
|
||||||
|
margin-top: 3.5px !important;
|
||||||
|
}
|
||||||
|
.select2-selection__rendered {
|
||||||
|
height: 18px !important;
|
||||||
|
}
|
||||||
|
.select2-container .select2-selection--multiple .select2-selection__rendered {
|
||||||
|
overflow: auto !important;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
$(document).ready(function(){
|
||||||
|
fnc_changePaginationAndTotalCountArea();
|
||||||
|
$('.select2').select2();
|
||||||
|
fnc_datepick();
|
||||||
|
|
||||||
|
// 품번/품명 Select2 AJAX 초기화
|
||||||
|
initPartSelect2Ajax("#SEARCH_PART_NO", "#SEARCH_PART_NAME", "#SEARCH_PART_OBJID");
|
||||||
|
|
||||||
|
$("input").keyup(function(e){
|
||||||
|
if(e.keyCode == 13){
|
||||||
|
$("#page").val("1");
|
||||||
|
fn_search();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
$("#delivery_status").val("${param.delivery_status}").trigger("change");
|
||||||
|
|
||||||
|
// 조회
|
||||||
|
$("#btnSearch").click(function(){
|
||||||
|
$("#page").val("1");
|
||||||
|
fn_search();
|
||||||
|
});
|
||||||
|
|
||||||
|
// 입고등록
|
||||||
|
$("#btnAccept").click(function(){
|
||||||
|
fn_deliveryAcceptancePopUp();
|
||||||
|
});
|
||||||
|
|
||||||
|
// 매입마감 버튼
|
||||||
|
$("#btnClose").click(function(){
|
||||||
|
fn_purchaseClose();
|
||||||
|
});
|
||||||
|
|
||||||
|
$("#project_no").change(function(){
|
||||||
|
fn_UnitCodeList(this.value, "unit_code", "");
|
||||||
|
});
|
||||||
|
|
||||||
|
fn_search();
|
||||||
|
});
|
||||||
|
|
||||||
|
var columns = [
|
||||||
|
{title:'STATUS', field:'STATUS', visible:false, frozen:true},
|
||||||
|
{title:'PURCHASE_ORDER_MASTER_OBJID', field:'PURCHASE_ORDER_MASTER_OBJID', visible:false, frozen:true},
|
||||||
|
{title:'PURCHASE_ORDER_PART_OBJID', field:'PURCHASE_ORDER_PART_OBJID', visible:false, frozen:true},
|
||||||
|
{title:'FORM_TYPE', field:'FORM_TYPE', visible:false, frozen:true},
|
||||||
|
{headerHozAlign:'center', hozAlign:'center', minWidth:120, widthGrow:0.9, title:'품의서 No', field:'PROPOSAL_NO',
|
||||||
|
formatter: fnc_createGridAnchorTag,
|
||||||
|
cellClick: function(e, cell){
|
||||||
|
fn_openProposalFormPopUp(cell.getData().SALES_REQUEST_OBJID);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{headerHozAlign:'center', hozAlign:'center', minWidth:120, widthGrow:0.9, title:'발주서 No', field:'PURCHASE_ORDER_NO',
|
||||||
|
formatter: fnc_createGridAnchorTag,
|
||||||
|
cellClick: function(e, cell){
|
||||||
|
var objId = fnc_checkNull(cell.getData().PURCHASE_ORDER_MASTER_OBJID);
|
||||||
|
var formType = fnc_checkNull(cell.getData().FORM_TYPE, 'general');
|
||||||
|
fn_formPopUp(objId, formType);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{headerHozAlign:'center', hozAlign:'center', minWidth:130, widthGrow:0.9, title:'프로젝트번호', field:'PROJECT_NO'},
|
||||||
|
{headerHozAlign:'center', hozAlign:'left', minWidth:120, widthGrow:1.5, title:'품번', field:'PART_NO'},
|
||||||
|
{headerHozAlign:'center', hozAlign:'left', minWidth:150, widthGrow:2, title:'품명', field:'PART_NAME'},
|
||||||
|
{headerHozAlign:'center', hozAlign:'left', minWidth:120, widthGrow:1.2, title:'공급업체', field:'PARTNER_NAME'},
|
||||||
|
{headerHozAlign:'center', hozAlign:'right', minWidth:80, widthGrow:0.8, title:'발주수량', field:'ORDER_QTY',
|
||||||
|
formatter:"money", formatterParams:{thousand:",", symbolAfter:"p", precision:false}
|
||||||
|
},
|
||||||
|
{headerHozAlign:'center', hozAlign:'right', minWidth:80, widthGrow:0.8, title:'입고수량', field:'DELIVERY_QTY',
|
||||||
|
formatter:"money", formatterParams:{thousand:",", symbolAfter:"p", precision:false}
|
||||||
|
},
|
||||||
|
{headerHozAlign:'center', hozAlign:'right', minWidth:80, widthGrow:0.8, title:'미입고수량', field:'NON_DELIVERY_QTY',
|
||||||
|
formatter:"money", formatterParams:{thousand:",", symbolAfter:"p", precision:false}
|
||||||
|
},
|
||||||
|
{headerHozAlign:'center', hozAlign:'center', minWidth:90, widthGrow:1.1, title:'수입검사 검사현황', field:'INSPECTION_STATUS'},
|
||||||
|
{headerHozAlign:'center', hozAlign:'right', minWidth:80, widthGrow:1.1, title:'처리결과 폐기수량', field:'DEFECT_QTY',
|
||||||
|
formatter:"money", formatterParams:{thousand:",", symbolAfter:"p", precision:false}
|
||||||
|
},
|
||||||
|
{headerHozAlign:'center', hozAlign:'right', minWidth:90, widthGrow:0.9, title:'확정입고수량', field:'CONFIRMED_QTY',
|
||||||
|
formatter:"money", formatterParams:{thousand:",", symbolAfter:"p", precision:false}
|
||||||
|
},
|
||||||
|
{headerHozAlign:'center', hozAlign:'center', minWidth:90, widthGrow:0.6, title:'매입마감', field:'PURCHASE_CLOSE_DATE'}
|
||||||
|
];
|
||||||
|
|
||||||
|
function fn_search(){
|
||||||
|
var selectedValues = $("#project_no").val();
|
||||||
|
$('<input>').attr({
|
||||||
|
type: 'hidden',
|
||||||
|
name: 'project_nos',
|
||||||
|
value: selectedValues
|
||||||
|
}).appendTo('#form1');
|
||||||
|
|
||||||
|
var selectedIdValues = $("#sales_mng_user_id").val();
|
||||||
|
$('input[name="sales_mng_user_ids"]').remove();
|
||||||
|
$('<input>').attr({
|
||||||
|
type: 'hidden',
|
||||||
|
name: 'sales_mng_user_ids',
|
||||||
|
value: selectedIdValues
|
||||||
|
}).appendTo('#form1');
|
||||||
|
|
||||||
|
// 그리드 조회
|
||||||
|
_tabulGrid = fnc_tabul_search(_tabul_layout_fitColumns, _tabulGrid, "/purchaseOrder/deliveryMngAcceptancePartGridList.do", columns, true);
|
||||||
|
|
||||||
|
// 데이터 렌더링 완료 후 높이 조절
|
||||||
|
if(_tabulGrid) {
|
||||||
|
_tabulGrid.off("renderComplete");
|
||||||
|
_tabulGrid.on("renderComplete", function(){
|
||||||
|
fnc_calculateContentHeight("gridDiv", 30);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// 윈도우 리사이즈 이벤트
|
||||||
|
$(window).off("resize.gridHeight").on("resize.gridHeight", function() {
|
||||||
|
fnc_calculateContentHeight("gridDiv", 30);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// 입고등록 팝업
|
||||||
|
function fn_deliveryAcceptancePopUp(){
|
||||||
|
var selected = _tabulGrid.getSelectedData();
|
||||||
|
if(selected.length == 0){
|
||||||
|
Swal.fire("선택된 데이터가 없습니다.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if(selected.length > 1){
|
||||||
|
Swal.fire("한건씩 등록 가능합니다.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var status = fnc_checkNull(selected[0].STATUS);
|
||||||
|
if(status === 'orderCancel'){
|
||||||
|
Swal.fire("발주취소된 건은 입고등록할 수 없습니다.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var popup_width = 1560;
|
||||||
|
var popup_height = 1050;
|
||||||
|
|
||||||
|
var hiddenForm = document.hiddenForm;
|
||||||
|
var target = "deliveryAcceptancePopUp";
|
||||||
|
var url = "/purchaseOrder/deliveryAcceptanceFormPopUp_new.do";
|
||||||
|
var purchaseOrderMasterObjid = fnc_checkNull(selected[0].PURCHASE_ORDER_MASTER_OBJID);
|
||||||
|
var purchaseOrderNo = fnc_checkNull(selected[0].PURCHASE_ORDER_NO);
|
||||||
|
var deliveryStatus = fnc_checkNull(selected[0].DELIVERY_STATUS);
|
||||||
|
|
||||||
|
fn_centerPopup(popup_width, popup_height, "", target);
|
||||||
|
|
||||||
|
hiddenForm.action = url;
|
||||||
|
hiddenForm.checkArr.value = purchaseOrderMasterObjid;
|
||||||
|
hiddenForm.PURCHASE_ORDER_MASTER_OBJID.value = purchaseOrderMasterObjid;
|
||||||
|
hiddenForm.PURCHASE_ORDER_NO.value = purchaseOrderNo;
|
||||||
|
hiddenForm.DELIVERY_STATUS.value = deliveryStatus;
|
||||||
|
hiddenForm.actionType.value = 'regist';
|
||||||
|
hiddenForm.target = target;
|
||||||
|
hiddenForm.submit();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 품의서 상세 팝업
|
||||||
|
function fn_openProposalFormPopUp(objId){
|
||||||
|
var url = "/salesMng/proposalFormPopUp.do?PROPOSAL_OBJID=" + fnc_checkNull(objId);
|
||||||
|
window.open(url, "proposalFormPopUp", "width=1200,height=900,scrollbars=yes,resizable=yes");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 발주서 팝업
|
||||||
|
function fn_formPopUp(objId, formType){
|
||||||
|
var popup_width = 1460;
|
||||||
|
var popup_height = 1050;
|
||||||
|
|
||||||
|
formType = fnc_checkNull(formType, 'general');
|
||||||
|
|
||||||
|
var hiddenForm = document.hiddenForm;
|
||||||
|
var target = "";
|
||||||
|
var url = "";
|
||||||
|
|
||||||
|
if(formType == 'outsourcing'){
|
||||||
|
target = "purchaseOrderFormPopup_outsourcing";
|
||||||
|
url = "/purchaseOrder/purchaseOrderFormPopup_outsourcing.do";
|
||||||
|
popup_width = 1200;
|
||||||
|
popup_height = 900;
|
||||||
|
} else if(formType == 'general'){
|
||||||
|
target = "purchaseOrderFormPopup_general";
|
||||||
|
url = "/purchaseOrder/purchaseOrderFormPopup_general.do";
|
||||||
|
popup_width = 1000;
|
||||||
|
popup_height = 900;
|
||||||
|
} else {
|
||||||
|
target = "purchaseOrderFormPopup_new";
|
||||||
|
url = "/purchaseOrder/purchaseOrderFormPopup_new.do";
|
||||||
|
}
|
||||||
|
|
||||||
|
fn_centerPopup(popup_width, popup_height, "", target);
|
||||||
|
|
||||||
|
hiddenForm.PURCHASE_ORDER_MASTER_OBJID.value = objId;
|
||||||
|
hiddenForm.action = url;
|
||||||
|
hiddenForm.target = target;
|
||||||
|
hiddenForm.submit();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 매입마감 처리
|
||||||
|
function fn_purchaseClose(){
|
||||||
|
var selected = _tabulGrid.getSelectedData();
|
||||||
|
if(selected.length == 0){
|
||||||
|
Swal.fire("선택된 데이터가 없습니다.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 이미 마감된 건 체크
|
||||||
|
var alreadyClosed = selected.filter(function(item){
|
||||||
|
return fnc_checkNull(item.PURCHASE_CLOSE_DATE) != '';
|
||||||
|
});
|
||||||
|
if(alreadyClosed.length > 0){
|
||||||
|
Swal.fire("이미 매입마감 처리된 건이 포함되어 있습니다.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 입고완료 건만 마감 가능
|
||||||
|
var notCompleted = selected.filter(function(item){
|
||||||
|
return item.DELIVERY_STATUS != '입고완료';
|
||||||
|
});
|
||||||
|
if(notCompleted.length > 0){
|
||||||
|
Swal.fire("입고완료 건만 매입마감 처리가 가능합니다.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Swal.fire({
|
||||||
|
title: '매입마감',
|
||||||
|
text: '선택한 ' + selected.length + '건을 매입마감 처리하시겠습니까?',
|
||||||
|
icon: 'question',
|
||||||
|
showCancelButton: true,
|
||||||
|
confirmButtonText: '확인',
|
||||||
|
cancelButtonText: '취소'
|
||||||
|
}).then((result) => {
|
||||||
|
if(result.isConfirmed){
|
||||||
|
var objIds = selected.map(function(item){
|
||||||
|
return item.PURCHASE_ORDER_MASTER_OBJID;
|
||||||
|
}).join(',');
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
url: '/purchaseOrder/purchaseClose.do',
|
||||||
|
type: 'POST',
|
||||||
|
data: { objIds: objIds },
|
||||||
|
dataType: 'json',
|
||||||
|
success: function(response){
|
||||||
|
if(response.result == 'SUCCESS'){
|
||||||
|
Swal.fire('매입마감 처리가 완료되었습니다.').then(function(){
|
||||||
|
fn_search();
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
Swal.fire('매입마감 처리 중 오류가 발생했습니다.');
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error: function(){
|
||||||
|
Swal.fire('서버 통신 중 오류가 발생했습니다.');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
<body class="bodyNoScroll">
|
||||||
|
<form name="hiddenForm" id="hiddenForm" method="post">
|
||||||
|
<input type="hidden" name="checkArr" id="checkArr">
|
||||||
|
<input type="hidden" name="PURCHASE_ORDER_MASTER_OBJID" id="PURCHASE_ORDER_MASTER_OBJID">
|
||||||
|
<input type="hidden" name="PURCHASE_ORDER_NO" id="PURCHASE_ORDER_NO">
|
||||||
|
<input type="hidden" name="DELIVERY_STATUS" id="DELIVERY_STATUS">
|
||||||
|
<input type="hidden" name="actionType" id="actionType">
|
||||||
|
</form>
|
||||||
|
<form name="form1" id="form1" action="" method="post">
|
||||||
|
<textarea style="width:0px; height:0px; visibility: hidden;" id="jsonLevel3_csmCategory">${code_map.jsonLevel3_csmCategory}</textarea>
|
||||||
|
|
||||||
|
<div class="content-box" style="height: 99.3%;">
|
||||||
|
<div class="content-box-s">
|
||||||
|
<div class="plm_menu_name_gdnsi">
|
||||||
|
<h2>
|
||||||
|
<span><%=menuName%></span>
|
||||||
|
</h2>
|
||||||
|
<div class="btnArea">
|
||||||
|
<input type="button" class="plm_btns" value="조회" id="btnSearch">
|
||||||
|
<input type="button" class="plm_btns" value="입고등록" id="btnAccept">
|
||||||
|
<input type="button" class="plm_btns" value="매입마감" id="btnClose">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="plmSearchZon">
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<td><label for="Year">년도</label></td>
|
||||||
|
<td>
|
||||||
|
<select name="Year" id="Year" class="select2" autocomplete="off" style="width:170px;">
|
||||||
|
<option value="">선택</option>
|
||||||
|
<c:forEach begin="${sysYear-4}" end="${sysYear}" var="req_year">
|
||||||
|
<option value="${req_year}"${param.Year eq req_year ? 'selected':''}>${req_year}</option>
|
||||||
|
</c:forEach>
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<td><label for="">고객사</label></td>
|
||||||
|
<td><select name="customer_cd" id="customer_cd" class="select2" autocomplete="off" style="width:170px;"><option value="">선택</option>${code_map.customer_cd}</select></td>
|
||||||
|
|
||||||
|
<td><label for="project_no">프로젝트번호</label></td>
|
||||||
|
<td>
|
||||||
|
<select name="project_no" id="project_no" style="width:253px;" class="select2" autocomplete="off" multiple="multiple">
|
||||||
|
<option value="">선택</option>
|
||||||
|
${code_map.project_no}
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<td><label for="">발주No.</label></td>
|
||||||
|
<td><input type="text" name="purchase_order_no" id="purchase_order_no" autocomplete="off" value="${param.purchase_order_no}" style="width:185px;"/></td>
|
||||||
|
|
||||||
|
<td><label for="">규격</label></td>
|
||||||
|
<td><input type="text" name="SEARCH_PART_SPEC" id="SEARCH_PART_SPEC" autocomplete="off" value="${param.SEARCH_PART_SPEC}" style=""/></td>
|
||||||
|
|
||||||
|
<td><label for="">품명</label></td>
|
||||||
|
<td>
|
||||||
|
<select name="SEARCH_PART_NAME" id="SEARCH_PART_NAME" class="select2-part" style="">
|
||||||
|
<option value="">품명 선택</option>
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><label for="">공급업체</label></td>
|
||||||
|
<td><select name="partner_objid" id="partner_objid" class="select2" autocomplete="off" style="width:170px;"><option value="">선택</option>${code_map.partner_objid}</select></td>
|
||||||
|
|
||||||
|
<td><label for="">구매담당자</label></td>
|
||||||
|
<td><select name="sales_mng_user_id" id="sales_mng_user_id" class="select2" autocomplete="off" style="width:170px;" multiple="multiple"><option value="">선택</option>${code_map.sales_mng_user_id}</select></td>
|
||||||
|
|
||||||
|
<td class=""><label>입고요청일</label></td>
|
||||||
|
<td>
|
||||||
|
<input type="text" name="delivery_start_date" id="delivery_start_date" style="width:120px;" autocomplete="off" value="${param.delivery_start_date}" class="date_icon">~
|
||||||
|
<input type="text" name="delivery_end_date" id="delivery_end_date" style="width:120px;" autocomplete="off" value="${param.delivery_end_date}" class="date_icon">
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<td class=""><label>발주일</label></td>
|
||||||
|
<td>
|
||||||
|
<input type="text" name="reg_start_date" id="reg_start_date" style="width:87px;" autocomplete="off" value="${param.reg_start_date}" class="date_icon">~
|
||||||
|
<input type="text" name="reg_end_date" id="reg_end_date" style="width:87px;" autocomplete="off" value="${param.reg_end_date}" class="date_icon">
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<td><label for="">입고결과</label></td>
|
||||||
|
<td>
|
||||||
|
<select name="delivery_status" id="delivery_status" class="select2" autocomplete="off" style="">
|
||||||
|
<option value="">선택</option>
|
||||||
|
<option value="입고중">입고중</option>
|
||||||
|
<option value="입고완료">입고완료</option>
|
||||||
|
<option value="지연">지연</option>
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
<td><label for="">품번</label></td>
|
||||||
|
<td>
|
||||||
|
<select name="SEARCH_PART_NO" id="SEARCH_PART_NO" class="select2-part" style="width:120px;">
|
||||||
|
<option value="">품번 선택</option>
|
||||||
|
</select>
|
||||||
|
<input type="hidden" name="SEARCH_PART_OBJID" id="SEARCH_PART_OBJID" value="">
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<%@include file= "/WEB-INF/view/common/common_gridArea.jsp" %>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -1341,6 +1341,53 @@ public class PurchaseOrderController {
|
|||||||
return purchaseOrderService.updatePurchaseCloseDate(objIds);
|
return purchaseOrderService.updatePurchaseCloseDate(objIds);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 품목별 입고 관리 화면
|
||||||
|
*/
|
||||||
|
@RequestMapping("/purchaseOrder/deliveryMngAcceptancePartList.do")
|
||||||
|
public String deliveryMngAcceptancePartList(HttpServletRequest request, @RequestParam Map paramMap){
|
||||||
|
ArrayList list = new ArrayList();
|
||||||
|
Map code_map = new HashMap();
|
||||||
|
|
||||||
|
try{
|
||||||
|
// 고객사
|
||||||
|
code_map.put("customer_cd", commonService.bizMakeOptionList("", (String)paramMap.get("customer_cd"), "common.getsupplyselect"));
|
||||||
|
// 고객사프로젝트명
|
||||||
|
code_map.put("customer_project_name", commonService.bizMakeOptionList("", (String)paramMap.get("customer_project_name"), "common.getsupplyselect"));
|
||||||
|
// 당사프로젝트번호
|
||||||
|
code_map.put("project_no", commonService.bizMakeOptionList("", (String)paramMap.get("project_no"), "common.getProjectNameList"));
|
||||||
|
// PART구분
|
||||||
|
code_map.put("part_type", commonService.bizMakeOptionList(Constants.PART_TYPE_CODE, (String)paramMap.get("part_type"), "common.getCodeselect"));
|
||||||
|
// 발주구분
|
||||||
|
code_map.put("type", commonService.bizMakeOptionList("0001068", (String)paramMap.get("type"), "common.getCodeselect"));
|
||||||
|
// 공급업체 (공급업체 + 일반거래처 통합)
|
||||||
|
code_map.put("partner_objid", commonService.bizMakeOptionList("", (String)paramMap.get("partner_objid"), "common.getAllSupplySelect"));
|
||||||
|
// 조치담당자
|
||||||
|
code_map.put("sales_mng_user_id", commonService.bizMakeOptionList("", (String)paramMap.get("sales_mng_user_id"), "common.getUserselect"));
|
||||||
|
// 상태코드
|
||||||
|
code_map.put("appr_status", commonService.bizMakeOptionList("0000099", (String)paramMap.get("appr_status"), "common.getCodeselect"));
|
||||||
|
|
||||||
|
list = commonService.selectListPaging("purchaseOrder.deliveryMngPartList", request, paramMap);
|
||||||
|
}catch(Exception e){
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
request.setAttribute("code_map", code_map);
|
||||||
|
request.setAttribute("LIST", JsonUtil.ListToJson(list));
|
||||||
|
|
||||||
|
return "/purchaseOrder/deliveryMngAcceptancePartList";
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 품목별 입고 관리 그리드 조회
|
||||||
|
*/
|
||||||
|
@ResponseBody
|
||||||
|
@RequestMapping("/purchaseOrder/deliveryMngAcceptancePartGridList.do")
|
||||||
|
public Map deliveryMngAcceptancePartGridList(HttpSession session, HttpServletRequest request, @RequestParam Map<String, Object> paramMap){
|
||||||
|
commonService.selectListPagingNew("purchaseOrder.deliveryMngPartList", request, paramMap);
|
||||||
|
return paramMap;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 입고 관리
|
* 입고 관리
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -6156,4 +6156,165 @@ FROM(
|
|||||||
WHERE MULTI_MASTER_OBJID = #{OBJID}
|
WHERE MULTI_MASTER_OBJID = #{OBJID}
|
||||||
</update>
|
</update>
|
||||||
|
|
||||||
|
<!-- =====================================================
|
||||||
|
품목별 입고 관리 리스트 조회
|
||||||
|
===================================================== -->
|
||||||
|
<select id="deliveryMngPartList" parameterType="map" resultType="map">
|
||||||
|
SELECT
|
||||||
|
POP.OBJID AS PURCHASE_ORDER_PART_OBJID
|
||||||
|
,POM.OBJID AS PURCHASE_ORDER_MASTER_OBJID
|
||||||
|
,POM.STATUS
|
||||||
|
,COALESCE(POM.FORM_TYPE, '') AS FORM_TYPE
|
||||||
|
|
||||||
|
<!-- 품의서 정보 -->
|
||||||
|
,POM.SALES_REQUEST_OBJID
|
||||||
|
,(SELECT REQUEST_MNG_NO FROM SALES_REQUEST_MASTER SRM
|
||||||
|
WHERE SRM.OBJID::VARCHAR = POM.SALES_REQUEST_OBJID
|
||||||
|
AND SRM.DOC_TYPE IN ('PROPOSAL', 'PURCHASE_REG_PROPOSAL')) AS PROPOSAL_NO
|
||||||
|
|
||||||
|
<!-- 발주서 정보 -->
|
||||||
|
,POM.PURCHASE_ORDER_NO
|
||||||
|
,CM.PROJECT_NO
|
||||||
|
|
||||||
|
<!-- 품목 정보 -->
|
||||||
|
,POP.PART_NO
|
||||||
|
,POP.PART_NAME
|
||||||
|
|
||||||
|
<!-- 공급업체 -->
|
||||||
|
,(SELECT CLIENT_NM FROM CLIENT_MNG WHERE OBJID::VARCHAR = POM.PARTNER_OBJID) AS PARTNER_NAME
|
||||||
|
|
||||||
|
<!-- 발주수량 -->
|
||||||
|
,COALESCE(POP.ORDER_QTY::NUMERIC, 0) AS ORDER_QTY
|
||||||
|
|
||||||
|
<!-- 입고수량 (ARRIVAL_PLAN에서 합계) -->
|
||||||
|
,COALESCE(AP_AGG.DELIVERY_QTY, 0) AS DELIVERY_QTY
|
||||||
|
|
||||||
|
<!-- 미입고수량 = 발주수량 - 입고수량 -->
|
||||||
|
,(COALESCE(POP.ORDER_QTY::NUMERIC, 0) - COALESCE(AP_AGG.DELIVERY_QTY, 0)) AS NON_DELIVERY_QTY
|
||||||
|
|
||||||
|
<!-- 수입검사 검사현황 (품목별: INVENTORY_MGMT_IN → INVENTORY_MGMT → PART_MNG 연결) -->
|
||||||
|
,(CASE
|
||||||
|
WHEN IID_AGG.TOTAL_COUNT > 0 AND IID_AGG.TOTAL_COUNT = IID_AGG.COMPLETED_COUNT THEN '완료'
|
||||||
|
WHEN IID_AGG.COMPLETED_COUNT > 0 THEN '진행중'
|
||||||
|
ELSE ''
|
||||||
|
END) AS INSPECTION_STATUS
|
||||||
|
|
||||||
|
<!-- 반품 처리결과 폐기수량 (품목별) -->
|
||||||
|
,COALESCE(DEFECT_AGG.DEFECT_QTY, 0) AS DEFECT_QTY
|
||||||
|
|
||||||
|
<!-- 매입마감수량 확정입고수량 = 입고수량 - 폐기수량 -->
|
||||||
|
,(COALESCE(AP_AGG.DELIVERY_QTY, 0) - COALESCE(DEFECT_AGG.DEFECT_QTY, 0)) AS CONFIRMED_QTY
|
||||||
|
|
||||||
|
<!-- 매입마감일 -->
|
||||||
|
,POM.PURCHASE_CLOSE_DATE
|
||||||
|
|
||||||
|
<!-- 입고결과 -->
|
||||||
|
,(CASE
|
||||||
|
WHEN COALESCE(POP.ORDER_QTY::NUMERIC, 0) - COALESCE(AP_AGG.DELIVERY_QTY, 0) <![CDATA[ <= ]]> 0 THEN '입고완료'
|
||||||
|
WHEN TO_CHAR(NOW(),'YYYY-MM-DD') <![CDATA[ > ]]> POM.DELIVERY_DATE THEN '지연'
|
||||||
|
ELSE '입고중'
|
||||||
|
END) AS DELIVERY_STATUS
|
||||||
|
|
||||||
|
FROM PURCHASE_ORDER_PART POP
|
||||||
|
INNER JOIN PURCHASE_ORDER_MASTER POM ON POM.OBJID::VARCHAR = POP.PURCHASE_ORDER_MASTER_OBJID
|
||||||
|
LEFT OUTER JOIN PROJECT_MGMT CM ON POM.CONTRACT_MGMT_OBJID = CM.OBJID
|
||||||
|
|
||||||
|
<!-- 입고 수량 집계 (ARRIVAL_PLAN) -->
|
||||||
|
LEFT OUTER JOIN (
|
||||||
|
SELECT ORDER_PART_OBJID
|
||||||
|
,SUM(COALESCE(RECEIPT_QTY::NUMERIC, 0)) AS DELIVERY_QTY
|
||||||
|
FROM ARRIVAL_PLAN
|
||||||
|
GROUP BY ORDER_PART_OBJID
|
||||||
|
) AP_AGG ON POP.OBJID = AP_AGG.ORDER_PART_OBJID
|
||||||
|
|
||||||
|
<!-- 수입검사 현황 집계 (발주마스터+품목 기준: 불량상세가 있는 건만 카운트) -->
|
||||||
|
LEFT OUTER JOIN (
|
||||||
|
SELECT IMI.PURCHASE_ORDER_MASTER_OBJID
|
||||||
|
,IM.PART_OBJID
|
||||||
|
,COUNT(IDF.OBJID) AS TOTAL_COUNT /* 불량상세가 있는 건수 */
|
||||||
|
,COUNT(CASE WHEN IDF.ACTION_RESULT IS NOT NULL AND IDF.ACTION_RESULT != '' THEN 1 END) AS COMPLETED_COUNT
|
||||||
|
FROM INCOMING_INSPECTION_DETAIL IID
|
||||||
|
INNER JOIN INVENTORY_MGMT_IN IMI ON IMI.OBJID = IID.INVENTORY_IN_OBJID
|
||||||
|
INNER JOIN INVENTORY_MGMT IM ON IM.OBJID = IMI.PARENT_OBJID
|
||||||
|
LEFT JOIN INCOMING_INSPECTION_DEFECT IDF ON IDF.INSPECTION_DETAIL_OBJID = IID.OBJID
|
||||||
|
WHERE IMI.PURCHASE_ORDER_MASTER_OBJID IS NOT NULL
|
||||||
|
GROUP BY IMI.PURCHASE_ORDER_MASTER_OBJID, IM.PART_OBJID
|
||||||
|
) IID_AGG ON POM.OBJID::VARCHAR = IID_AGG.PURCHASE_ORDER_MASTER_OBJID
|
||||||
|
AND POP.PART_OBJID = IID_AGG.PART_OBJID
|
||||||
|
|
||||||
|
<!-- 폐기수량 집계 (발주마스터+품목 기준) -->
|
||||||
|
LEFT OUTER JOIN (
|
||||||
|
SELECT IMI.PURCHASE_ORDER_MASTER_OBJID
|
||||||
|
,IM.PART_OBJID
|
||||||
|
,SUM(COALESCE(NULLIF(IDF.DEFECT_QTY, '')::NUMERIC, 0)) AS DEFECT_QTY
|
||||||
|
FROM INCOMING_INSPECTION_DETAIL IID
|
||||||
|
INNER JOIN INVENTORY_MGMT_IN IMI ON IMI.OBJID = IID.INVENTORY_IN_OBJID
|
||||||
|
INNER JOIN INVENTORY_MGMT IM ON IM.OBJID = IMI.PARENT_OBJID
|
||||||
|
LEFT JOIN INCOMING_INSPECTION_DEFECT IDF ON IDF.INSPECTION_DETAIL_OBJID = IID.OBJID
|
||||||
|
WHERE IMI.PURCHASE_ORDER_MASTER_OBJID IS NOT NULL
|
||||||
|
AND IDF.ACTION_RESULT IN ('폐기', 'SCRAP')
|
||||||
|
GROUP BY IMI.PURCHASE_ORDER_MASTER_OBJID, IM.PART_OBJID
|
||||||
|
) DEFECT_AGG ON POM.OBJID::VARCHAR = DEFECT_AGG.PURCHASE_ORDER_MASTER_OBJID
|
||||||
|
AND POP.PART_OBJID = DEFECT_AGG.PART_OBJID
|
||||||
|
|
||||||
|
WHERE 1=1
|
||||||
|
AND POM.MAIL_SEND_DATE IS NOT NULL
|
||||||
|
AND pom.status = 'create'
|
||||||
|
AND (POM.MULTI_MASTER_YN = 'Y' OR NVL(POM.MULTI_MASTER_YN, '') != 'Y' AND NVL(POM.MULTI_YN, '') != 'Y')
|
||||||
|
|
||||||
|
<if test="Year != null and Year != ''">
|
||||||
|
AND TO_CHAR(POM.REGDATE, 'YYYY') = #{Year}
|
||||||
|
</if>
|
||||||
|
<if test="customer_cd != null and customer_cd != ''">
|
||||||
|
AND CM.CUSTOMER_OBJID = REPLACE(#{customer_cd}, 'C_', '')
|
||||||
|
</if>
|
||||||
|
<if test="project_nos != null and project_nos != ''">
|
||||||
|
AND CM.OBJID IN
|
||||||
|
<foreach item="state" collection="project_nos.split(',')" open="(" separator="," close=")">
|
||||||
|
#{state}
|
||||||
|
</foreach>
|
||||||
|
</if>
|
||||||
|
<if test="purchase_order_no != null and purchase_order_no != ''">
|
||||||
|
AND TRIM(UPPER(POM.PURCHASE_ORDER_NO)) LIKE '%'||TRIM(UPPER(#{purchase_order_no}))||'%'
|
||||||
|
</if>
|
||||||
|
<if test="delivery_start_date != null and delivery_start_date != ''">
|
||||||
|
AND TO_DATE(POM.DELIVERY_DATE, 'YYYY-MM-DD') <![CDATA[ >= ]]> TO_DATE(#{delivery_start_date}, 'YYYY-MM-DD')
|
||||||
|
</if>
|
||||||
|
<if test="delivery_end_date != null and delivery_end_date != ''">
|
||||||
|
AND TO_DATE(POM.DELIVERY_DATE, 'YYYY-MM-DD') <![CDATA[ <= ]]> TO_DATE(#{delivery_end_date}, 'YYYY-MM-DD')
|
||||||
|
</if>
|
||||||
|
<if test="partner_objid != null and partner_objid != ''">
|
||||||
|
AND POM.PARTNER_OBJID = REPLACE(#{partner_objid}, 'C_', '')
|
||||||
|
</if>
|
||||||
|
<if test="sales_mng_user_ids != null and sales_mng_user_ids != ''">
|
||||||
|
AND POM.SALES_MNG_USER_ID IN
|
||||||
|
<foreach item="value" collection="sales_mng_user_ids.split(',')" open="(" separator="," close=")">
|
||||||
|
#{value}
|
||||||
|
</foreach>
|
||||||
|
</if>
|
||||||
|
<if test="reg_start_date != null and reg_start_date != ''">
|
||||||
|
AND TO_DATE(TO_CHAR(POM.REGDATE,'YYYY-MM-DD'), 'YYYY-MM-DD') <![CDATA[ >= ]]> TO_DATE(#{reg_start_date}, 'YYYY-MM-DD')
|
||||||
|
</if>
|
||||||
|
<if test="reg_end_date != null and reg_end_date != ''">
|
||||||
|
AND TO_DATE(TO_CHAR(POM.REGDATE,'YYYY-MM-DD'), 'YYYY-MM-DD') <![CDATA[ <= ]]> TO_DATE(#{reg_end_date}, 'YYYY-MM-DD')
|
||||||
|
</if>
|
||||||
|
<if test="delivery_status != null and delivery_status != ''">
|
||||||
|
AND (CASE
|
||||||
|
WHEN COALESCE(POP.ORDER_QTY::NUMERIC, 0) - COALESCE(AP_AGG.DELIVERY_QTY, 0) <![CDATA[ <= ]]> 0 THEN '입고완료'
|
||||||
|
WHEN TO_CHAR(NOW(),'YYYY-MM-DD') <![CDATA[ > ]]> POM.DELIVERY_DATE THEN '지연'
|
||||||
|
ELSE '입고중'
|
||||||
|
END) = #{delivery_status}
|
||||||
|
</if>
|
||||||
|
<if test="SEARCH_PART_NO != null and SEARCH_PART_NO != ''">
|
||||||
|
AND TRIM(UPPER(POP.PART_NO)) LIKE '%'||TRIM(UPPER(#{SEARCH_PART_NO}))||'%'
|
||||||
|
</if>
|
||||||
|
<if test="SEARCH_PART_NAME != null and SEARCH_PART_NAME != ''">
|
||||||
|
AND TRIM(UPPER(POP.PART_NAME)) LIKE '%'||TRIM(UPPER(#{SEARCH_PART_NAME}))||'%'
|
||||||
|
</if>
|
||||||
|
<if test="SEARCH_PART_SPEC != null and SEARCH_PART_SPEC != ''">
|
||||||
|
AND TRIM(UPPER(POP.SPEC)) LIKE '%'||TRIM(UPPER(#{SEARCH_PART_SPEC}))||'%'
|
||||||
|
</if>
|
||||||
|
ORDER BY POM.REGDATE DESC, POP.OBJID
|
||||||
|
</select>
|
||||||
|
|
||||||
</mapper>
|
</mapper>
|
||||||
Reference in New Issue
Block a user