Files
wace_plm/WebContent/WEB-INF/view/purchaseOrder/deliveryResultFormPopUp.jsp
chpark da06c4684c Initial commit: WACE PLM with database initialization features
- Add Docker Compose configurations for dev, prod, and standalone environments
- Add database initialization scripts (init-db.sh, init-db-docker.sh)
- Add enhanced start-docker-linux.sh with DB init support
- Add comprehensive database initialization guide
- Support for automatic dbexport.pgsql import on first run
- Include safety checks for production environment
2025-08-29 15:46:08 +09:00

582 lines
20 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() {
$("#btnClose").click(function(){
self.close(0);
});
$("#btnReg").click(function(){
fn_save();
});
fn_getPurchaseOrderTargetPartList();
//fn_setInventoryLocation();
fnc_datepickForName();
});
});
</script>
<script>
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_getPurchaseOrderTargetPartList(){
var appendText = "";
var requestStatus = $("#STATUS").val();
$("#partListArea").empty();
$.ajax({
url:"/purchaseOrder/getPurchaseOrderTargetPartList.do",
type:"POST",
data:{"checkArr":"${param.checkArr}"},
dataType:"json",
async:false,
success:function(data){
var resultData = data;
if(0 < resultData.length){
$.each(resultData, function(i){
var RNUM = fnc_checkNull(resultData[i].RNUM);
var PURCHASE_ORDER_NO = fnc_checkNull(resultData[i].PURCHASE_ORDER_NO);
var OBJID = fnc_checkNull(resultData[i].OBJID);
var PART_OBJID = fnc_checkNull(resultData[i].PART_OBJID);
var PART_NO = fnc_checkNull(resultData[i].PART_NO);
var LD_PART_OBJID = fnc_checkNull(resultData[i].LD_PART_OBJID); //장납기부품OBJID
var PART_NAME = fnc_checkNull(resultData[i].PART_NAME);
var PURCHASE_ORDER_MASTER_OBJID = fnc_checkNull(resultData[i].PURCHASE_ORDER_MASTER_OBJID);
var SPEC = fnc_checkNull(resultData[i].SPEC);
var MAKER = fnc_checkNull(resultData[i].MAKER);
var QTY = fnc_checkNull(resultData[i].ORDER_QTY);
//var NON_ARRIVAL_QTY = fnc_checkNullDefaultValue(resultData[i].NON_ARRIVAL_QTY,QTY);
var NON_ARRIVAL_QTY = fnc_checkNull(resultData[i].NON_ARRIVAL_QTY);
var TOTAL_DELIVERY_QTY = fnc_checkNull(resultData[i].TOTAL_DELIVERY_QTY);
var TOTAL_DEFECT_QTY = fnc_checkNull(resultData[i].TOTAL_DEFECT_QTY);
var PARTNER_NAME = fnc_checkNull(resultData[i].PARTNER_NAME);
var PARTNER_PRICE = fnc_checkNull(resultData[i].PARTNER_PRICE);
var SUPPLY_UNIT_PRICE = fnc_checkNull(resultData[i].SUPPLY_UNIT_PRICE);
var REMARK = fnc_checkNull(resultData[i].REMARK);
var TARGET_TITLE = fnc_checkNull(resultData[i].TARGET_TITLE);
var UNIT_TITLE = fnc_checkNull(resultData[i].UNIT_TITLE);
var UNIT = fnc_checkNull(resultData[i].UNIT);
var POM_DELIVERY_DATE = fnc_checkNull(resultData[i].POM_DELIVERY_DATE); //입고요청일
var DELIVERY_DATE = fnc_checkNull(resultData[i].DELIVERY_DATE);
var DH_OBJID = fnc_checkNull(resultData[i].DELIVERY_HISTORY_OBJID);
var DELIVERY_PLAN_DATE = fnc_checkNull(resultData[i].DELIVERY_PLAN_DATE);
appendText += " <tr class='dataTr' id='"+OBJID+"'>";
appendText += " <input type='hidden' name='OBJID' value='"+OBJID+"'>";
appendText += " <input type='hidden' name='PART_OBJID_"+OBJID+"' value='"+PART_OBJID+"'>";
appendText += " <input type='hidden' name='LD_PART_OBJID_"+OBJID+"' value='"+LD_PART_OBJID+"'>";
appendText += " <input type='hidden' name='DH_OBJID_"+OBJID+"' value='"+DH_OBJID+"'>";
appendText += " <input type='hidden' name='DB_NON_ARRIVAL_QTY_"+OBJID+"' id='DB_NON_ARRIVAL_QTY_"+OBJID+"' value='"+NON_ARRIVAL_QTY+"'>";
appendText += " <input type='hidden' name='DB_TOTAL_DELIVERY_QTY_"+OBJID+"' id='DB_TOTAL_DELIVERY_QTY_"+OBJID+"' value='"+TOTAL_DELIVERY_QTY+"'>";
appendText += " <input type='hidden' name='DB_TOTAL_DEFECT_QTY_"+OBJID+"' id='DB_TOTAL_DEFECT_QTY_"+OBJID+"' value='"+TOTAL_DEFECT_QTY+"'>";
/* No */
appendText += " <td title='"+RNUM+"' class='align_c'>"+RNUM+"</td>";
/* 발주번호 */
appendText += " <td title='"+PURCHASE_ORDER_NO+"' class='align_c'>"+PURCHASE_ORDER_NO+"</td>";
/* 관리번호 */
appendText += " <td class='align_l' title='"+PART_NO+"' class='align_c'>"+PART_NO+"</td>";
/* 품명(재질,규격)/품번 */
//appendText += " <td class='align_l' title='"+TARGET_TITLE+"'>";
////appendText += " <a href='#' onclick=\"fn_openPartPopup('"+PART_OBJID+"');\">"+TARGET_TITLE+"</a>";
//appendText += TARGET_TITLE;
//appendText += " </td>";
/* 품명 */
appendText += " <td class='align_l' title='"+PART_NAME+"'>";
appendText += " <input type='hidden' name='PART_NAME_"+OBJID+"' id='PART_NAME_"+OBJID+"' value='"+PART_NAME+"'>";
appendText += PART_NAME;
appendText += " </td>";
/* 규격 */
appendText += " <td class='align_l' title='"+SPEC+"'>";
appendText += " <input type='hidden' name='SPEC_"+OBJID+"' id='SPEC_"+OBJID+"' value='"+SPEC+"'>";
appendText += SPEC;
appendText += " </td>";
/* Maker */
appendText += " <td class='align_l' title='"+MAKER+"'>";
appendText += " <input type='hidden' name='MAKER_"+OBJID+"' id='MAKER_"+OBJID+"' value='"+MAKER+"'>";
appendText += MAKER;
appendText += " </td>";
/* 단위 */
//appendText += " <td title='"+UNIT_TITLE+"' class='align_c'>"+UNIT_TITLE+"</td>";
appendText += " <td class='align'>";
appendText += " <input type='hidden' name='UNIT_"+OBJID+"' id='UNIT_"+OBJID+"' value='"+UNIT+"'>";
appendText += " "+UNIT_TITLE;
appendText += " </td>";
/* 업체 */
//appendText += " <td title='"+PARTNER_NAME+"' class='align_c'>"+PARTNER_NAME+"</td>";
/* 발주수량 */
appendText += " <td class='align_r'>";
appendText += " <input type='hidden' name='ORDER_QTY_"+OBJID+"' id='ORDER_QTY_"+OBJID+"' value='"+QTY+"'>";
appendText += " "+numberWithCommas(QTY);
appendText += " </td>";
/* 단가 */
appendText += " <td class='align_r'>";
appendText += " <input type='hidden' name='PARTNER_PRICE_"+OBJID+"' id='PARTNER_PRICE_"+OBJID+"' value='"+PARTNER_PRICE+"'>";
appendText += " "+numberWithCommas(PARTNER_PRICE);
appendText += " </td>";
/* 공급가 */
appendText += " <td class='align_r'>";
appendText += " <input type='hidden' name='SUPPLY_UNIT_PRICE_"+OBJID+"' id='SUPPLY_UNIT_PRICE_"+OBJID+"' value='"+SUPPLY_UNIT_PRICE+"'>";
appendText += " "+numberWithCommas(SUPPLY_UNIT_PRICE);
appendText += " </td>";
/* 입고요청일 */
appendText += " <td class='align_c'>";
appendText += " <input type='hidden' name='POM_DELIVERY_DATE_"+OBJID+"' id='POM_DELIVERY_DATE_"+OBJID+"' value='"+POM_DELIVERY_DATE+"'>";
appendText += " "+POM_DELIVERY_DATE;
appendText += " </td>";
/* 입고일자 */
appendText += " <td class='align_c'>";
appendText += " <input type='hidden' name='DELIVERY_DATE_"+OBJID+"' id='DELIVERY_DATE_"+OBJID+"' value='"+POM_DELIVERY_DATE+"' onchange='fn_calc("+OBJID+");' >";
appendText += " "+DELIVERY_DATE;
appendText += " </td>";
/* 입고수량 */
appendText += " <td class='align_r'>";
appendText += " <input type='hidden' name='DELIVERY_QTY_"+OBJID+"' id='DELIVERY_QTY_"+OBJID+"' value='0' style='text-align:right;' onchange='fn_calc("+OBJID+");' >";
appendText += " "+TOTAL_DELIVERY_QTY;
appendText += " </td>";
/* 검사일자 */
//appendText += " <td class='align_c'>";
//appendText += " <input type='text' name='INSPECT_DATE_"+OBJID+"' id='INSPECT_DATE_"+OBJID+"' value=''>";
//appendText += " </td>";
/* 수입검사서 */
//appendText += " <td class='align_c' id='ATTACH_"+OBJID+"'><a href='#' onclick='openFilePopup("+DH_OBJID+", "+OBJID+");' >□</a></td>";
/* 입고위치 */
//appendText += " <td class='align_r'>";
//appendText += " <select name='DELIVERY_PLACE_CD_"+OBJID+"' id='DELIVERY_PLACE_CD_"+OBJID+"'><option value=''>선택</option>${code_map.location}</select>";
//appendText += " </td>";
/* 부적합수량 */
appendText += " <td class='align_r'>";
appendText += " <input type='hidden' name='DEFECT_QTY_"+OBJID+"' id='DEFECT_QTY_"+OBJID+"' value='0' style='text-align:right;' onchange='fn_calc("+OBJID+");' >";
appendText += " "+TOTAL_DEFECT_QTY;
appendText += " </td>";
/* 사유 */
//appendText += " <td class='align_r'>";
//appendText += " <select name='DEFECT_REASON_"+OBJID+"' id='DEFECT_REASON_"+OBJID+"'><option value=''>선택</option>${code_map.defectReason}</select>";
//appendText += " </td>";
/* 귀책 */
//appendText += " <td class='align_r'>";
//appendText += " <select name='DEFECT_RESP_"+OBJID+"' id='DEFECT_RESP_"+OBJID+"'><option value=''>선택</option>${code_map.defectResp}</select>";
//appendText += " </td>";
/* 미입고수량 */
appendText += " <input type='hidden' name='NON_ARRIVAL_QTY_"+OBJID+"' id='NON_ARRIVAL_QTY_"+OBJID+"' value='"+NON_ARRIVAL_QTY+"'>";
appendText += " <td class='align_r' id='NON_ARRIVAL_QTY_TXT_"+OBJID+"'>";
appendText += " "+NON_ARRIVAL_QTY;
appendText += " </td>";
/* 입고결과 */
var result = "미입고";
if(TOTAL_DELIVERY_QTY > 0 && NON_ARRIVAL_QTY < 1){
result = "입고완료";
}
appendText += " <input type='hidden' name='RESULT_"+OBJID+"' id='RESULT_"+OBJID+"' value='"+result+"'>";
appendText += " <td class='align_c' id='RESULT_TXT_"+OBJID+"'>";
appendText += " "+result;
appendText += " </td>";
/* 입고예정일 */
if(TOTAL_DELIVERY_QTY > 0 && NON_ARRIVAL_QTY < 1){
appendText += " <td class=''>";
appendText += " <input type='text' name='DELIVERY_PLAN_DATE_"+OBJID+"' id='DELIVERY_PLAN_DATE_"+OBJID+"' value='-' style='text-align:center;' readonly disabled>";
appendText += " </td>";
}else{
appendText += " <td class='align_c'>";
appendText += " <input type='text' name='DELIVERY_PLAN_DATE_"+OBJID+"' id='DELIVERY_PLAN_DATE_"+OBJID+"' value='"+DELIVERY_PLAN_DATE+"' style='text-align:center;'>";
appendText += " "+DELIVERY_PLAN_DATE;
appendText += " </td>";
}
/* 입고단가 */
//appendText += " <td class='align_l'>";
//appendText += " <input type='number' name='DELIVERY_PRICE_"+OBJID+"' id='DELIVERY_PRICE_"+OBJID+"' value='"+PARTNER_PRICE+"'>";
//appendText += " </td>";
/* 비고 */
//appendText += " <td class='align_l'>";
//appendText += " <input type='text' name='REMARK_"+OBJID+"' id='REMARK_"+OBJID+"' value=''>";
//appendText += " </td>";
appendText += " </tr>";
});
}else{
appendText += "<tr>";
appendText += "<td colspan='15'>조회된 내용이 없습니다.</td>";
appendText +="</tr>";
}
},
error: function(jqxhr, status, error){
}
});
$("#partListArea").append(appendText);
}
function fn_save(){
var formData = $("#form1").serialize();
if(fn_checkInputData()){
var check_over_qty = false;
$("input[name^=NON_ARRIVAL_QTY_]").each(function(i,o){
if($(o).val() < 0){
Swal.fire("입고수량을 초과하였습니다.");
check_over_qty = true;
return false;
}
});
if(check_over_qty){
return;
}
if(confirm("저장하시겠습니까?")){
$.ajax({
type: "POST",
url: "/purchaseOrder/saveDeliveryResultInfo.do",
data: $("#form1").serialize(),
dataType:"json",
success:function(data){
Swal.fire(data.msg);
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 = $("#DELIVERY_QTY_"+targetObjId).val()
var DELIVERY_DATE = $("#DELIVERY_DATE_"+targetObjId).val()
var DELIVERY_PLACE_CD = $("#DELIVERY_PLACE_CD_"+targetObjId).val()
if(0 < DELIVERY_QTY){
if("" == DELIVERY_PLACE_CD){
Swal.fire("입력된 입고위치가 없습니다.");
returnFlag = false;
return false;
}
if("" == DELIVERY_DATE){
Swal.fire("입력된 입고일자가 없습니다.");
returnFlag = false;
return false;
}
}
});
return returnFlag;
}
//자동계산
function fn_calc(objid){
var ORDER_QTY = Number($("#ORDER_QTY_" +objid).val()); //발주수량
var DELIVERY_QTY = Number($("#DELIVERY_QTY_"+objid).val()); //입고수량
var DEFECT_QTY = Number($("#DEFECT_QTY_" +objid).val()); //부적합수량
var DB_TOTAL_DELIVERY_QTY = Number($("#DB_TOTAL_DELIVERY_QTY_" +objid).val()); //DB기존 입고수량
var DB_NON_ARRIVAL_QTY = Number($("#DB_NON_ARRIVAL_QTY_" +objid).val()); //DB기존 미입고수량
var POM_DELIVERY_DATE= $("#POM_DELIVERY_DATE_"+objid).val(); //입고요청일
var DELIVERY_DATE= $("#DELIVERY_DATE_"+objid).val(); //입고일
var nowDate = $.datepicker.formatDate('yyyy-mm-dd', new Date());
var nonQty = ORDER_QTY - (DELIVERY_QTY - DEFECT_QTY);
if(DB_TOTAL_DELIVERY_QTY > 0){ //기존 입고수량이 있으면
nonQty = DB_NON_ARRIVAL_QTY - (DELIVERY_QTY - DEFECT_QTY); //기존 미입고수량에서 계산
}
var result = "미입고";
var planDate = "";
//if(DELIVERY_QTY != 0){
if(POM_DELIVERY_DATE >= DELIVERY_DATE && nonQty <= 0){
result = "입고완료";
planDate = "-";
}else if(POM_DELIVERY_DATE >= DELIVERY_DATE && nonQty > 0){
result = "입고중";
}else if(POM_DELIVERY_DATE < DELIVERY_DATE || POM_DELIVERY_DATE < nowDate){
result = "지연";
}
//}
//미입고수량
$("#NON_ARRIVAL_QTY_"+objid).val(nonQty);
$("#NON_ARRIVAL_QTY_TXT_"+objid).text(nonQty);
//입고결과
$("#RESULT_"+objid).val(result);
$("#RESULT_TXT_"+objid).text(result);
//입고예정일
$("#DELIVERY_PLAN_DATE_"+objid).val(planDate);
}
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" />
<input type="hidden" name="status" value="0" />
</form>
<form name="form1" id="form1" action="" method="post">
<section>
<div class="plm_menu_name" style="display:flex;">
<h2>
<span>입고결과 등록</span>
</h2>
</div>
<div id="businessPopupFormWrap" style="z-index:99;">
<table class="pmsPopupForm" style="margin-top:10px;">
<tr>
<td class="input_title">
<label for="">입고 품목</label>
</td>
</tr>
<tr>
<td>
<!-- <div class="in_table_scroll_wrap _table1" style="height:22px;width:99.5%;">
<table class="plm_table">
<colgroup>
<col width="30px" />
<col width="80px" />
<col width="170px" />
<col width="170px" />
<col width="80px" />
<col width="50px" />
<col width="50px" />
<col width="80px" />
<col width="80px" />
<col width="80px" />
<col width="80px" />
<col width="80px" />
<col width="80px" />
<col width="80px" />
<col width="100px" />
<col width="80px" />
<col width="80px" />
<col width="80px" />
<col width="70px" />
<col width="70px" />
<col width="70px" />
</colgroup>
<thead>
<tr class="plm_thead">
<td>No</td>
<td>발주번호</td>
<td>품명</td>
<td>규격</td>
<td>Maker</td>
<td>단위</td>
<td>수량</td>
<td>단가</td>
<td>공급가</td>
<td>입고요청일</td>
<td>입고일</td>
<td>입고수량</td>
<td>검사일</td>
<td>수입검사서</td>
<td>Location</td>
<td>부적합수량</td>
<td>사유</td>
<td>귀책</td>
<td>미입고수량</td>
<td>입고결과</td>
<td>입고예정일</td>
</tr>
</thead>
</table>
</div> -->
<div class="in_table_scroll_wrap _table2" style="height:400px;width:100%;">
<table class="plm_table">
<colgroup>
<col width="30px" />
<col width="120px" />
<col width="120px" />
<col width="170px" />
<col width="170px" />
<col width="80px" />
<col width="50px" />
<col width="50px" />
<col width="80px" />
<col width="80px" />
<col width="80px" />
<col width="80px" />
<col width="50px" />
<!-- <col width="80px" />
<col width="80px" />
<col width="100px" />-->
<col width="80px" />
<!-- <col width="80px" />
<col width="80px" /> -->
<col width="70px" />
<col width="70px" />
<col width="70px" />
<!-- <col width="70px" /> -->
</colgroup>
<thead>
<tr class="plm_thead">
<td>No</td>
<td>발주번호</td>
<td>품번</td>
<td>품명</td>
<td>규격</td>
<td>Maker</td>
<td>단위</td>
<td>수량</td>
<td>단가</td>
<td>공급가</td>
<td>입고요청일</td>
<td>입고일</td>
<td>입고수량</td>
<!-- <td>검사일</td>
<td>수입검사서</td>
<td>Location</td>-->
<td>부적합수량</td>
<!-- <td>사유</td>
<td>귀책</td> -->
<td>미입고수량</td>
<td>입고결과</td>
<td>입고예정일</td>
<!-- <td>단가</td> -->
</tr>
</thead>
<tbody id="partListArea">
</tbody>
</table>
</div>
</td>
</tr>
</table>
</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>