ERP-node/WebContent/WEB-INF/view/purchaseOrder/deliveryAcceptanceFormPopUp...

550 lines
23 KiB
Plaintext

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="com.pms.common.utils.*"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ page import="java.util.*" %>
<%@include file= "/init.jsp" %>
<%
PersonBean person = (PersonBean)session.getAttribute(Constants.PERSON_BEAN);
String userId = CommonUtils.checkNull(person.getUserId());
%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title><%=Constants.SYSTEM_NAME%></title>
</head>
<script>
$(function() {
$(document).ready(function() {
$('.select2').select2();
$("#btnClose").click(function(){
self.close(0);
});
$("#btnReg").click(function(){
fn_save();
});
//fn_setInventoryLocation();
fnc_datepickForName();
$("input[numberOnly='']").each(function(){
//$(this).css({'text-align':'right'})
}).on("keyup", function() {
$(this).val(fn_addComma($(this).val().replace(/[^0-9]/g,"")));
});
/* $("#LOCATION").change(function(){
fnc_getCodeListAppend($(this).val(),"SUB_LOCATION","");
}) */
//출력
$(".bacordprint").click(function(){
var popup_width = 1200;
var popup_height = 750;
var objId = $(this).attr("data-OBJID");
var printCnt = $("#DELIVERY_QTY_"+objId).val();
var DELIVERY_DATE = $("#DELIVERY_DATE_"+objId).val();
var DELIVERY_PLACE_NAME = $("#DELIVERY_PLACE_CD_"+objId).find('option:selected').text();
if(DELIVERY_DATE ==""){
Swal.fire('입고일을 입력해 주세요');
$("#DELIVERY_DATE_"+objId).focus();
return;
}
if(printCnt <= 0 || printCnt ==""){
Swal.fire('입고 수량을 입력해 주세요');
$("#DELIVERY_QTY_"+objId).focus();
return;
}
if(DELIVERY_PLACE_NAME ==""){
Swal.fire('Location 정보를 입력해주세요');
$("#DELIVERY_PLACE_CD_"+objId).focus();
return;
}
var params = "?OBJID="+objId+"&CNT="+printCnt+"&DELIVERY_DATE="+DELIVERY_DATE+"&DELIVERY_PLACE_NAME="+DELIVERY_PLACE_NAME;
var url = "/purchaseOrder/bacodePrint.do"+params;
fn_centerPopup(popup_width, popup_height, url);
});
});
});
</script>
<script>
function chageLangSelect(objId, subLocation){
var location = $("#LOCATION_"+objId).val();
fnc_getCodeListAppend(location, "SUB_LOCATION_"+objId, subLocation);
}
function fn_setInventoryLocation(){
var resultList = fnc_getCodeList("<%=Constants.INVENTORY_LOCATION_CD%>");
var _sel = [];
_sel.push("<option value=''>선택</option>");
if(resultList != null && 0 < resultList.length){
for (var i = 0; i < resultList.length; i++) {
var commonCodeId = resultList[i].CODE_ID;
var commonCodeName = resultList[i].CODE_NAME;
_sel.push("<option value='"+commonCodeId+"'>"+commonCodeName+"</option>");
}
}
$("input[name=OBJID]").each(function(i) {
var targetObjId = $(this).val();
$("#DELIVERY_PLACE_CD_"+targetObjId).empty();
$("#DELIVERY_PLACE_CD_"+targetObjId).append(_sel.join(""));
$("#DELIVERY_PLACE_CD_"+targetObjId).val("");
});
}
function fn_save(){
var formData = $("#form1").serialize();
if(fn_checkInputData()){
if(confirm("저장하시겠습니까?")){
$("input[name*='_QTY']").each(function(){
$(this).val($(this).val().replace(/,/gi,""));
});
$.ajax({
type: "POST",
/* url: "/purchaseOrder/saveDeliveryAcceptanceInfo.do", */
url: "/purchaseOrder/saveDeliveryInfo.do",
data: $("#form1").serialize(),
dataType:"json",
success:function(data){
Swal.fire(data.message);
if(data.RESULT){
opener.fn_search();
self.close();
}
},
error: function(jqxhr, status, error){
}
});
}
}
}
function fn_checkInputData(){
var returnFlag = true;
$("input[name=OBJID]").each(function(i) {
var targetObjId = $(this).val();
var DELIVERY_QTY = $("#RECEIPT_QTY_"+targetObjId).val()
var DELIVERY_DATE = $("#RECEIPT_DATE_"+targetObjId).val()
var DELIVERY_PLACE_CD = $("#LOCATION_"+targetObjId).val()
var DEFECT_QTY = $("#ERROR_QTY_"+targetObjId).val()
var DEFECT_REASON = $("#ERROR_REASON_"+targetObjId).val()
var DEFECT_RESP = $("#ATTRIBUTION_"+targetObjId).val()
var INSPECT_DATE = $("#INSPECT_DATE"+targetObjId).val()
/* if(DEFECT_QTY > DELIVERY_QTY){
Swal.fire("부적합수량이 입고수량보다 클 수 없습니다.");
returnFlag = false;
return false;
} */
if(0 < DELIVERY_QTY){
if("" == DELIVERY_DATE){
Swal.fire("입력된 입고일자가 없습니다.");
returnFlag = false;
return false;
}
if("" == DELIVERY_PLACE_CD){
Swal.fire("입력된 입고위치가 없습니다.");
returnFlag = false;
return false;
}
}
if(0 < DEFECT_QTY){
if("" == DEFECT_REASON){
Swal.fire("입력된 사유가 없습니다.");
returnFlag = false;
return false;
}
if("" == DEFECT_RESP){
Swal.fire("입력된 귀책이 없습니다.");
returnFlag = false;
return false;
}
}
});
return returnFlag;
}
//자동계산
function fn_calc(objid){
alert("objid::"+objid);
var ORDER_QTY = Number($(".ORDER_QTY_" +objid).val().replace(/[^0-9]/g,"")); //발주수량
var DELIVERY_QTY = 0;
$(".RECEIPT_QTY_"+objid).each(function() {
var value = Number($(this).val().replace(/[^0-9]/g,""));
DELIVERY_QTY += value;
});
var DEFECT_QTY = 0;
$(".ERROR_QTY_"+objid).each(function() {
var errorValue = Number($(this).val().replace(/[^0-9]/g,""));
DEFECT_QTY += errorValue;
});
alert("ORDER_QTY::"+ORDER_QTY);
alert("DELIVERY_QTY::"+DELIVERY_QTY);
alert("DEFECT_QTY::"+DEFECT_QTY);
//미입고수량
var nonQty = ORDER_QTY - (DELIVERY_QTY - DEFECT_QTY);
alert("nonQty::"+nonQty);
$("#NON_ARRIVAL_QTY_"+objid).val(nonQty);
$("#NON_ARRIVAL_QTY_TXT_"+objid).text(nonQty);
}
function openFilePopup(dh_objId, objId){
var title = "수입검사서";
var docType = "DELIVERY_INSPECT";
var popup_width = 600;
var popup_height = 250;
var hiddenForm = document.hiddenForm;
var url = "/common/FileRegistPopup.do";
var target = "deliveryResultFormPopup";
fn_centerPopup(popup_width, popup_height, url, target);
hiddenForm.action = url;
hiddenForm.targetObjId.value = dh_objId;
hiddenForm.docType.value = docType;
hiddenForm.docTypeName.value = docType;
hiddenForm.TITLE.value = title;
hiddenForm.OBJID.value = objId;
hiddenForm.callbackFnc.value = "openFilePopupCallback";
hiddenForm.target = target;
hiddenForm.submit();
}
function openFilePopupCallback(fileList){
if(fileList == undefined){
return;
}
var objid = hiddenForm.OBJID.value;
var _txt = "□";
if(fnc_checkNull(fileList)){
var arrFile = fileList.split(",");
if(arrFile.length > 0){
_txt = "■";
}
}
$("#ATTACH_"+objid+" a").text(_txt);
}
</script>
<style>
.input_title {border-left:1px solid #ccc;}
.input_sub_title {border-left:1px solid #ccc;}
.pmsPopupForm tr:last-child td{border-bottom:1px solid #ccc;}
</style>
<body>
<form name="hiddenForm" id="hiddenForm" action="" method="post">
<input type="hidden" name="targetObjId" />
<input type="hidden" name="docType" />
<input type="hidden" name="docTypeName" />
<input type="hidden" name="TITLE" />
<input type="hidden" name="callbackFnc" />
<input type="hidden" name="OBJID" />
</form>
<form name="form1" id="form1" action="" method="post">
<section>
<div class="plm_menu_name" style="display:flex;">
<h2>
<span>수입검사 등록</span>
</h2>
</div>
<input type="hidden" name="CONTRACT_MGMT_OBJID" value="${infoMap.CONTRACT_MGMT_OBJID}" />
<input type="hidden" name="UNIT_CODE" value="${infoMap.UNIT_CODE}" />
<input type="hidden" name="ORDER_OBJID" value="${infoMap.OBJID}" />
<div id="businessPopupFormWrap" style="z-index:99;">
<table class="pmsPopupForm" style="margin-top:10px;">
<tr>
<td class="input_title">
<label for="">입고 품목</label>
&nbsp;&nbsp;&nbsp;&nbsp;발주번호 : <label id="PURCHASE_ORDER_NO">${param.PURCHASE_ORDER_NO}</label>
</td>
</tr>
</table>
<div style="width:29%; display: inline-block; float:left; margin-left:10px;">
<div class="plm_table_wrap" style="height: auto;">
<div class="in_table_scroll_wrap _table1" style="height:75%;">
<table class="plm_table" style="position:absolute; border-Spacing:0; border-Collapse: separate;">
<colgroup>
<col width="13%" />
<col width="10%" />
<col width="10%" />
<col width="8%" />
<col width="5%" />
<col width="5%" />
<col width="9%" />
</colgroup>
<thead>
<tr class="plm_thead">
<td colspan="7">발주품목</td>
</tr>
<tr class="plm_thead">
<td>품번</td>
<td>품명</td>
<td>규격</td>
<td>Maker</td>
<td>단위</td>
<td>수량</td>
<td>입고요청일</td>
</tr>
</thead>
<c:choose>
<c:when test="${empty partList}">
<tr style="text-align:center;">
<td align="center" colspan="7">조회된 데이터가 없습니다.</td>
</tr>
</c:when>
<c:otherwise>
<c:forEach var="item" items="${partList}" varStatus="varStatus">
<tr>
<input type="hidden" name="DETAIL_GROUP" value="${varStatus.count}" />
<input type="hidden" name="DH_OBJID" value="${item.OBJID}" />
<input type="hidden" name="ORDER_PART_OBJID_${varStatus.count}" value="${item.ORDER_PART_OBJID}" />
<input type="hidden" name="PART_OBJID_${varStatus.count}" value="${item.PART_OBJID}" />
<input type="hidden" name="LD_PART_OBJID_${varStatus.count}" value="${item.LD_PART_OBJID}" />
<td title="${item.PART_NO}" style="text-align:left;">${item.PART_NO}</td>
<td title="${item.PART_NAME}" style="text-align:left;">${item.PART_NAME}</td>
<td title="${item.SPEC}" style="text-align:left;">${item.SPEC}</td>
<td title="${item.MAKER}" style="text-align:left;">${item.MAKER}</td>
<td title="${item.UNIT_TITLE}">${item.UNIT_TITLE}</td>
<td title="${item.ORDER_QTY}"><input type="hidden" name="ORDER_QTY" class="ORDER_QTY_${item.PART_OBJID}" value="${item.ORDER_QTY}" onchange="fn_calc('${item.PART_OBJID}');"/><fmt:formatNumber value="${item.ORDER_QTY}" pattern="#,###" /></td>
<td title="${item.POM_DELIVERY_DATE}">${item.POM_DELIVERY_DATE}</td>
</tr>
</c:forEach>
</c:otherwise>
</c:choose>
</table>
</div>
</div>
</div>
<div style="width:70%; display: inline-block;">
<div class="plm_table_wrap" style="height: auto;overflow-x:auto;">
<div class="in_table_scroll_wrap _table1" style="height:75%; width: 100%;">
<table class="plm_table" style="position:absolute; border-Spacing:0; border-Collapse: separate; width: 100%;" id="addData">
<c:choose>
<c:when test="${empty arrivalList}">
</c:when>
<c:otherwise>
<c:forEach var="item" items="${arrivalList}" varStatus="varStatus">
<c:choose>
<c:when test="${varStatus.index == 0}">
<colgroup>
<col width="75px" />
<col width="75px" />
<col width="75px" />
<col width="80px" />
<col width="80px" />
<col width="75px" />
<col width="75px" />
<col width="80px" />
<col width="80px" />
</colgroup>
<tr class="plm_thead" id="head1">
<td colspan="9">1차</td>
</tr>
<tr class="plm_thead" id='head2'>
<td>입고예정수량</td>
<td>입고예정일</td>
<td>입고일</td>
<td>Location</td>
<td>Sub_Location</td>
<td>입고수량</td>
<td>부적합수량</td>
<td>부적합사유</td>
<td>귀책</td>
</tr>
<tr id="dataTr_${varStatus.count}">
<td>
<input type="hidden" name="OBJID" value="${item.OBJID}" />
<input type="hidden" name="GROUP_SEQ" value="${item.GROUP_SEQ}" />
<input type="hidden" name="SEQ" value="${item.SEQ}" />
<input type="hidden" name="INVENTORY_STATUS" value="${item.INVENTORY_STATUS}" />
<fmt:formatNumber value="${item.ARRIVAL_QTY}" pattern="#,###" />
</td>
<td>
<input type='text' name='ARRIVAL_PLAN_DATE' disabled readonly id='ARRIVAL_PLAN_DATE_${item.OBJID}' class='date' value='${item.ARRIVAL_PLAN_DATE}' />
</td>
<td>
<input type="text" name="RECEIPT_DATE" id="RECEIPT_DATE_${item.OBJID}" class="date" value="${item.RECEIPT_DATE}" />
</td>
<td>
<select name="LOCATION" id="LOCATION_${item.OBJID}" data-select="${item.LOCATION}" onchange="chageLangSelect('${item.OBJID}','${item.SUB_LOCATION}')"><option value="">선택</option>${code_map.location}</select>
</td>
<td>
<select name="SUB_LOCATION" id="SUB_LOCATION_${item.OBJID}" data-select="${item.SUB_LOCATION}" ></select>
</td>
<td>
<input type="text" name="RECEIPT_QTY" id="RECEIPT_QTY_${item.OBJID}" class="RECEIPT_QTY_${item.PART_OBJID}" style="text-align:center;" value="<fmt:formatNumber value="${item.RECEIPT_QTY}" pattern="#,###" />" numberOnly onchange="fn_calc('${item.PART_OBJID}');" />
</td>
<td>
<input type="text" name="ERROR_QTY" id="ERROR_QTY_${item.OBJID}" class="ERROR_QTY_${item.PART_OBJID}" style="text-align:center;" value="${item.ERROR_QTY}" numberOnly onchange="fn_calc('${item.PART_OBJID}');" />
</td>
<td>
<select name="ERROR_REASON" id="ERROR_REASON_${item.OBJID}" data-select="${item.ERROR_REASON}" ><option value="">선택</option>${code_map.defectReason}</select>
</td>
<td>
<select name="ATTRIBUTION" id="ATTRIBUTION_${item.OBJID}" data-select="${item.ATTRIBUTION}"><option value="">선택</option>${code_map.defectResp}</select>
</td>
</tr>
</c:when>
<c:otherwise>
<c:if test="${varStatus.index % partList.size() == 0}">
<script>
var appendHead1Text ="<td colspan='9'>${item.GROUP_SEQ}차</td>";
var appendHead2Text ="<td>입고예정수량</td> <td>입고예정일</td> <td>입고일</td> <td>Location</td> <td>Sub_Location</td> <td>입고수량</td> <td>부적합수량</td> <td>부적합사유</td> <td>귀책</td>";
$("#head1").append(appendHead1Text);
$("#head2").append(appendHead2Text);
</script>
</c:if>
<c:if test="${varStatus.count <= partList.size()}">
<colgroup>
<col width="75px" />
<col width="75px" />
<col width="75px" />
<col width="80px" />
<col width="80px" />
<col width="75px" />
<col width="75px" />
<col width="80px" />
<col width="80px" />
</colgroup>
<tr id="dataTr_${varStatus.count}">
<td>
<input type="hidden" name="OBJID" value="${item.OBJID}" />
<input type="hidden" name="GROUP_SEQ" value="${item.GROUP_SEQ}" />
<input type="hidden" name="SEQ" value="${item.SEQ}" />
<input type="hidden" name="INVENTORY_STATUS" value="${item.INVENTORY_STATUS}" />
<fmt:formatNumber value="${item.ARRIVAL_QTY}" pattern="#,###" />
</td>
<td>
<input type='text' name='ARRIVAL_PLAN_DATE' disabled readonly id='ARRIVAL_PLAN_DATE_${item.OBJID}' class='date' value='${item.ARRIVAL_PLAN_DATE}' />
</td>
<td>
<input type="text" name="RECEIPT_DATE" id="RECEIPT_DATE_${item.OBJID}" class="date" value="${item.RECEIPT_DATE}" />
</td>
<td>
<select name="LOCATION" id="LOCATION_${item.OBJID}" data-select="${item.LOCATION}" onchange="chageLangSelect('${item.OBJID}','${item.SUB_LOCATION}')"><option value="">선택</option>${code_map.location}</select>
</td>
<td>
<select name="SUB_LOCATION" id="SUB_LOCATION_${item.OBJID}" data-select="${item.SUB_LOCATION}" ></select>
</td>
<td>
<input type="text" name="RECEIPT_QTY" id="RECEIPT_QTY_${item.OBJID}" class="RECEIPT_QTY_${item.PART_OBJID}" style="text-align:center;" value="<fmt:formatNumber value="${item.RECEIPT_QTY}" pattern="#,###" />" numberOnly onchange="fn_calc('${item.PART_OBJID}');"/>
</td>
<td>
<input type="text" name="ERROR_QTY" id="ERROR_QTY_${item.OBJID}" class="ERROR_QTY_${item.PART_OBJID}" style="text-align:center;" value="${item.ERROR_QTY}" numberOnly onchange="fn_calc('${item.PART_OBJID}');"/>
</td>
<td>
<select name="ERROR_REASON" id="ERROR_REASON_${item.OBJID}" data-select="${item.ERROR_REASON}" ><option value="">선택</option>${code_map.defectReason}</select>
</td>
<td>
<select name="ATTRIBUTION" id="ATTRIBUTION_${item.OBJID}" data-select="${item.ATTRIBUTION}" ><option value="">선택</option>${code_map.defectResp}</select>
</td>
</tr>
</c:if>
<c:if test="${varStatus.count > partList.size()}">
<script>
var Text ="";
Text += "<td>";
Text += "<input type='hidden' name='OBJID' value='${item.OBJID}' />";
Text += "<input type='hidden' name='GROUP_SEQ' value='${item.GROUP_SEQ}' />";
Text += "<input type='hidden' name='SEQ' value='${item.SEQ}' />";
Text += "<input type='hidden' name='INVENTORY_STATUS' value='${item.INVENTORY_STATUS}' />";
Text += numberWithCommas(fnc_checkNull(${item.ARRIVAL_QTY}));
Text += "</td>";
Text += "<td>";
/* Text += ${item.ARRIVAL_PLAN_DATE}; */
Text += "<input type='text' name='ARRIVAL_PLAN_DATE' disabled readonly id='ARRIVAL_PLAN_DATE_${item.OBJID}' class='date' value='${item.ARRIVAL_PLAN_DATE}' />";
Text += "</td>";
Text += "<td>";
Text += "<input type='text' name='RECEIPT_DATE' id='RECEIPT_DATE_${item.OBJID}' class='date' value='${item.RECEIPT_DATE}' />";
Text += "</td>";
Text += "<td class='align_c'>";
Text += " <select name='LOCATION' id='LOCATION_${item.OBJID}' data-select='${item.LOCATION}' onchange='chageLangSelect(\"${item.OBJID}\",\"${item.SUB_LOCATION}\")'><option value=''>선택</option>${code_map.location}</select>";
Text += "</td>";
Text += "<td class='align_c'>";
Text += " <select name='SUB_LOCATION' id='SUB_LOCATION_${item.OBJID}' data-select='${item.SUB_LOCATION}'></select>";
Text += "</td>";
Text += "<td class='align_c'>";
Text += "<input type='text' numberOnly name='RECEIPT_QTY' id='RECEIPT_QTY_${item.OBJID}' class='RECEIPT_QTY_${item.PART_OBJID}' value='${item.RECEIPT_QTY}' style='text-align:center;' onchange='fn_calc(${item.PART_OBJID});'>";
Text += "</td>";
Text += "<td class='align_c'>";
Text += "<input type='text' numberOnly name='ERROR_QTY' id='ERROR_QTY_${item.OBJID}' class='ERROR_QTY_${item.PART_OBJID}' value='${item.ERROR_QTY}' style='text-align:center;' onchange='fn_calc(${item.PART_OBJID});'>";
Text += "</td>";
Text += "<td class='align_c'>";
Text += " <select name='ERROR_REASON' id='ERROR_REASON_${item.OBJID}' data-select='${item.ERROR_REASON}'><option value=''>선택</option>${code_map.defectReason}</select>";
Text += "</td>";
Text += "<td class='align_c'>";
Text += " <select name='ATTRIBUTION' id='ATTRIBUTION_${item.OBJID}' data-select='${item.ATTRIBUTION}'><option value=''>선택</option>${code_map.defectResp}</select>";
Text += "</td>";
$("#dataTr_${varStatus.index % partList.size()+1}").append(Text);
selectSetVal("data-select", true);
</script>
</c:if>
</c:otherwise>
</c:choose>
</c:forEach>
<script>
var appendText ="<td rowspan='2' style='width:100px;'>미입고수량</td>";
$("#head1").append(appendText);
</script>
<c:forEach var="item" items="${partList}" varStatus="varStatus">
<script>
var Text ="";
Text += "<tr>";
Text += "<input type='hidden' name='DETAIL_GROUP' value='${varStatus.count}' />";
Text += "<input type='hidden' name='DH_OBJID' value='${item.OBJID}' />";
Text += "<input type='hidden' name='ORDER_PART_OBJID_${varStatus.count}' value='${item.ORDER_PART_OBJID}' />";
Text += "<input type='hidden' name='PART_OBJID_${varStatus.count}' value='${item.PART_OBJID}' />";
Text += "<input type='hidden' name='LD_PART_OBJID_${varStatus.count}' value='${item.LD_PART_OBJID}' />";
Text += "<input type='hidden' name='NON_ARRIVAL_QTY_${varStatus.count}' id='NON_ARRIVAL_QTY_${item.PART_OBJID}' value='${item.NON_ARRIVAL_QTY}'>";
Text += "<td style='width:100px;' id='NON_ARRIVAL_QTY_TXT_${item.PART_OBJID}'>"+numberWithCommas(${item.NON_ARRIVAL_QTY})+"</td>";
Text += "</tr>";
$("#dataTr_${varStatus.index % partList.size()+1}").append(Text);
</script>
</c:forEach>
</c:otherwise>
</c:choose>
</table>
</div>
</div>
</div>
</div>
<div class="btn_wrap">
<div class="plm_btn_wrap_center">
<input type="button" value="저장" class="plm_btns" id="btnReg">
<input type="button" value="닫기" id="btnClose" class="plm_btns">
</div>
</div>
</section>
</form>
</body>
</html>