Files
wace_plm/WebContent/WEB-INF/view/supplyChainMgmt/arrivalplanFormPopup.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

501 lines
19 KiB
Plaintext

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="com.pms.common.utils.*"%>
<%@ page import="java.util.*"%>
<%@include file="/init.jsp"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title><%=Constants.SYSTEM_NAME%></title>
<script type="text/javascript" src="/js/jquery.floatThead.min.js" ></script>
<script>
var deletedObjIds = [];
var firstWidth = 550;
var tdSavedHeaderCount = ${fn:length(arrivalList)/ fn:length(detailList)};
$(document).ready(function() {
<c:choose>
<c:when test="${empty arrivalList}">
window.resizeTo(firstWidth, 700);
</c:when>
<c:otherwise>
//alert(tdHeaderCount);
window.resizeTo(firstWidth+(tdSavedHeaderCount-0)*260, 700);
</c:otherwise>
</c:choose>
<c:if test="${info.SALES_MNG_USER_ID eq connectUserId}">
$("input:not(:button)").attr("disabled", true);
</c:if>
fnc_datepick();
$('.date').each(function(i,o){
$(this).attr("size","10");
$(this).datepicker({
changeMonth:true,
changeYear:true
});
});
$("#btnClose").click(function(){
self.close(0);
});
$("#btnOk").click(function(){
if(confirm("저장하시겠습니까?")){
$.ajax({
url:"/supplyChainMgmt/updateSalesStatus.do"
,type:"POST"
,data:{"OBJID":"${objId}","STATUS":"OK"}
,dataType:"json"
,async:false
,success:function(data){
alert(data);
opener.fn_search();
self.close();
}
,error: function(jqxhr, status, error){
}
});
}
});
$("#btnNg").click(function(){
if(confirm("저장하시겠습니까?")){
$.ajax({
url:"/supplyChainMgmt/updateSalesStatus.do"
,type:"POST"
,data:{"OBJID":"${objId}","STATUS":"NG"}
,dataType:"json"
,async:false
,success:function(data){
alert(data);
opener.fn_search();
self.close();
}
,error: function(jqxhr, status, error){
}
});
}
});
$("#btnApply").click(function(){
fn_Apply();
});
var _saving = false;
$("#btnSave").click(function(e){
e.preventDefault();
if(confirm("저장하시겠습니까?")){
if(_saving){
alert('ing');
return;
}
_startLoading("Loading...");
_saving = true;
var formData = $("#form1").serializeArray();
// 삭제 대상이 아닌 OBJID만 포함
formData = formData.filter(function(item) {
return !(item.name === 'OBJID' && deletedObjIds.includes(item.value));
});
// 삭제할 OBJID 추가
deletedObjIds.forEach(function(objId) {
formData.push({name: 'deletedObjIds', value: objId});
});
$.ajax({
url: "/supplyChainMgmt/savearrivalplanFormPopup.do",
type: "POST",
data: formData,
dataType: "json",
traditional: true,
async: false,
success: function(data){
_saving = false;
alert(data.message);
opener.fn_search();
self.close();
},
complete:function(){
//_endLoading();
},
error: function(jqxhr, status, error){
_saving = false;
alert("저장 중 오류가 발생했습니다.");
_endLoading();
}
});
}
});
//추가
$("#btnAdd").click(function(){
fn_addarrival();
});
$("#btnRemove").click(function() {
fn_removearrival();
});
fnc_hideResetButton();
});
function fn_addarrival() {
var trCount = $("#addData tr").length;
var appendText = "";
var appendHead1Text = "";
var appendHead2Text = "";
var listSize = "${detailList.size()}";
var addColStr = '<col width="80px"><col width="75px">';
var tdHeaderCount = $(".tdHeader").length + 1;
// 현재 최대 그룹 시퀀스를 찾기 위해 추가
var maxGroupSeq = 0;
$("input[name='GROUP_SEQ']").each(function() {
var currentGroupSeq = parseInt($(this).val());
if (currentGroupSeq > maxGroupSeq) {
maxGroupSeq = currentGroupSeq;
}
});
var newGroupSeq = maxGroupSeq + 1;
// 현재 최대 시퀀스를 찾기 위해 추가
var maxSeq = 0;
$("input[name='SEQ']").each(function() {
var currentSeq = parseInt($(this).val());
if (currentSeq > maxSeq) {
maxSeq = currentSeq;
}
});
if (trCount == 0) {
var seq = 1;
appendText += "<tr class='plm_thead' id='head1'>";
appendText += "<td class='tdHeader' colspan='2'>1차</td>";
appendText += "</tr>";
appendText += "<tr class='plm_thead' id='head2'>";
appendText += "<td>입고예정수량</td>";
appendText += "<td><input type='checkbox' name='groupCheck_1' value='1'>입고예정일</td>";
appendText += "</tr>";
for (var i = 0; i < listSize; i++) {
appendText += "<tr id='dataTr_" + seq + "'>";
appendText += "<td>";
appendText += "<input type='hidden' name='OBJID' />";
appendText += "<input type='hidden' name='GROUP_SEQ' value='1' />";
appendText += "<input type='hidden' name='SEQ' value='" + seq + "' />";
var ARRIVAL_QTY = $('#part_table tbody tr').eq(i).find('td').eq(3).text().trim();
appendText += "<input type='text' class='align_r4' name='ARRIVAL_QTY' value='" + ARRIVAL_QTY + "'/>";
appendText += "</td>";
appendText += "<td>";
appendText += "<input type='text' name='ARRIVAL_PLAN_DATE' class='date ARRIVAL_PLAN_DATE_1' />";
appendText += "</td>";
appendText += "</tr>";
seq++;
}
$("#addColgroup").append(addColStr);
$("#addData").append(appendText);
} else {
var seq = maxSeq;
appendHead1Text += "<td class='tdHeader' colspan='2'>" + tdHeaderCount + "차</td>";
appendHead2Text += "<td>입고예정수량</td>";
appendHead2Text += "<td><input type='checkbox' name='groupCheck_" + newGroupSeq + "' value='" + newGroupSeq + "'>입고예정일</td>";
$("#head1").append(appendHead1Text);
$("#head2").append(appendHead2Text);
for (var i = 0; i < listSize; i++) {
seq++;
var Text = "";
Text += "<td>";
Text += "<input type='hidden' name='OBJID' />";
Text += "<input type='hidden' name='GROUP_SEQ' value='" + newGroupSeq + "' />";
Text += "<input type='hidden' name='SEQ' value='" + seq + "' />";
Text += "<input type='text' class='align_r4' name='ARRIVAL_QTY'/>";
Text += "</td>";
Text += "<td>";
Text += "<input type='text' name='ARRIVAL_PLAN_DATE' class='date ARRIVAL_PLAN_DATE_" + newGroupSeq + "' />";
Text += "</td>";
$("#addColgroup").append(addColStr);
$("#dataTr_" + parseInt(i + 1)).append(Text);
}
}
$('.date').each(function(i, o) {
$(this).attr("size", "10");
$(this).datepicker({
changeMonth: true,
changeYear: true
});
});
adjustWindowSize();
}
function fn_removearrival() {
var tdHeaderCount = $(".tdHeader").length;
if (tdHeaderCount <= 1) {
alert("1차는 삭제할 수 없습니다.");
return;
}
// 마지막 차수의 열 삭제
$("#head1 td.tdHeader:last").remove();
// head2에서 마지막 차수 삭제
var head2Cells = $("#head2 td");
var cellsToRemove = head2Cells.slice(-3).find("input[type='checkbox']").length > 0 ? 2 : 3;
head2Cells.slice(-cellsToRemove).remove();
// 데이터 행에서 마지막 차수 삭제
$("tr[id^='dataTr_']").each(function() {
var cells = $(this).find("td");
var lastThreeCells = cells.slice(-3);
var cellsToRemove;
if (lastThreeCells.eq(0).find("input[name='ARRIVAL_QTY']").length > 0 &&
lastThreeCells.eq(1).find("input[name='ARRIVAL_PLAN_DATE']").length > 0 &&
!lastThreeCells.eq(2).find("input").length) {
// 저장된 데이터인 경우 (3개 열 삭제)
cellsToRemove = lastThreeCells;
} else {
// 새로 추가된 데이터인 경우 (2개 열 삭제)
cellsToRemove = cells.slice(-2);
}
cellsToRemove.find("input[name='OBJID']").each(function() {
var objId = $(this).val();
if (objId) {
deletedObjIds.push(objId);
}
});
cellsToRemove.remove();
});
// colgroup 조정
var colsToRemove = $("#addColgroup col").slice(-3).length === 3 ? 3 : 2;
$("#addColgroup col").slice(-colsToRemove).remove();
// 창 크기 조정
adjustWindowSize();
}
function adjustWindowSize() {
//var visibleHeaderCount = $(".tdHeader").length;
//var columnWidth = 130; // 대략적인 열 너비
//var newWidth = firstWidth + (visibleHeaderCount - 0) * columnWidth * 2;
//window.resizeTo(newWidth, 700);
var tdHeaderCount = $(".tdHeader").length;
window.resizeTo(firstWidth + (tdSavedHeaderCount - 0) * 260 + (tdHeaderCount - tdSavedHeaderCount - 0) * 148, 700);
}
function fn_Apply(){
var planDate = $("#PLAN_DATE").val();
// 각 차수의 체크박스 상태 확인하여 처리
$("input[name^='groupCheck_']").each(function(index) {
var groupCheck = $(this).val();
if ($(this).is(":checked")) {
var arrivalPlanDateClass = ".ARRIVAL_PLAN_DATE_" + groupCheck;
$(arrivalPlanDateClass).val(planDate).trigger("change");
}
});
}
</script>
</head>
<body>
<form name="form1" id="form1" action="" method="post">
<input type="hidden" name="PARENT_OBJID" value="${objId}">
<input type="hidden" name="ACTION_TYPE" value="${param.ACTION_TYPE}">
<section class="contents_page_basic_margin" style="margin-top: 3px;">
<div class="plm_table_wrap" style="height: auto;overflow-y: scroll;overflow-x: scroll;">
<div style="width:510px;min-width:280px; display: inline-block; float:left;">
<div class="in_table_scroll_wrap _table1" style="height:75%;width:30%;min-width:300px;">
<table class="plm_table" style="position:absolute; border-Spacing:0; border-Collapse: separate;min-width:300px;max-width:510px;" id="part_table">
<colgroup>
<col width="120px">
<col width="130px">
<col width="170px">
<col width="50px">
</colgroup>
<thead>
<tr class="plm_thead">
<td colspan="4">발주품목</td>
</tr>
<tr class="plm_thead">
<td>품번</td>
<td>품명</td>
<td>사양(규격)</td>
<td>발주수량</td>
</tr>
</thead>
<c:choose>
<c:when test="${empty detailList}">
<tr style="text-align:center;">
<td align="center" colspan="4">조회된 데이터가 없습니다.</td>
</tr>
</c:when>
<c:otherwise>
<c:forEach var="item" items="${detailList}" varStatus="varStatus">
<tr>
<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="DETAIL_GROUP" value="${varStatus.count}" />
<td title="${item.PART_NO}">${item.PART_NO}</td>
<td class="align_l" title="${item.PART_NAME}">${item.PART_NAME}</td>
<td class="align_l" title="${item.SPEC}">${item.SPEC}</td>
<td class="align_r4" title="${item.REAL_ORDER_QTY}" >${item.REAL_ORDER_QTY}</td>
<%-- <td title="${item.ORDER_QTY}" style="text-align:right;">${item.ORDER_QTY}</td> --%>
</tr>
</c:forEach>
</c:otherwise>
</c:choose>
</table>
</div>
</div>
<div style="width:auto; display: inline-block;">
<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: auto;" id="addData">
<colgroup id="addColgroup">
<col width="80px">
<col width="85px">
<col width="55px">
</colgroup>
<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}">
<tr class="plm_thead" id="head1">
<td colspan="3" class='tdHeader'>1차</td>
</tr>
<tr class="plm_thead" id='head2'>
<td>입고예정수량</td>
<td>입고예정일</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="RECEIPT_QTY" value="${item.RECEIPT_QTY}" >
<input type="text" name='ARRIVAL_QTY' class="align_r4" value="${item.ARRIVAL_QTY}"/>
</td>
<td>
<input type='text' name='ARRIVAL_PLAN_DATE' class='date' value="${item.ARRIVAL_PLAN_DATE}" />";
</td>
<td class="align_r4">${item.RECEIPT_QTY}</td>
<%-- <td>${item.ERROR_QTY}</td>
<td>${item.ERROR_NAME}</td>
<td>${item.ATTRIBUTION_NAME}</td> --%>
</tr>
</c:when>
<c:otherwise>
<c:if test="${varStatus.index % detailList.size() == 0}">
<script>
var appendHead1Text ="<td colspan='3' class='tdHeader'>${item.GROUP_SEQ}차</td>";
var appendHead2Text ="<td>입고예정수량</td> <td>입고예정일</td> <td>입고수량</td>";
$("#head1").append(appendHead1Text);
$("#head2").append(appendHead2Text);
</script>
</c:if>
<c:if test="${varStatus.count <= detailList.size()}">
<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="RECEIPT_QTY" value="${item.RECEIPT_QTY}" >
<input type="text" name='ARRIVAL_QTY' class="align_r4" value="${item.ARRIVAL_QTY}"/>
</td>
<td>
<input type='text' name='ARRIVAL_PLAN_DATE' class='date' value="${item.ARRIVAL_PLAN_DATE}" />";
</td>
<td class="align_r4">${item.RECEIPT_QTY}</td>
<%-- <td>${item.ERROR_QTY}</td>
<td>${item.ERROR_NAME}</td>
<td>${item.ATTRIBUTION_NAME}</td> --%>
</tr>
</c:if>
<c:if test="${varStatus.count > detailList.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='RECEIPT_QTY' value='${item.RECEIPT_QTY}' />";
Text+="<input type='text' class='align_r4' name='ARRIVAL_QTY' value='${item.ARRIVAL_QTY}' />";
Text+="</td>";
Text+="<td>";
Text+="<input type='text' name='ARRIVAL_PLAN_DATE' class='date' value='${item.ARRIVAL_PLAN_DATE}' />";
Text+="</td>";
Text+="<td class='align_r4'>";
Text+="${item.RECEIPT_QTY}";
Text+="</td>";
/* Text+="<td>";
Text+="${item.ERROR_QTY}";
Text+="</td>";
Text+="<td>";
Text+="${item.ERROR_NAME}";
Text+="</td>";
Text+="<td>";
Text+="${item.ATTRIBUTION_NAME}";
Text+="</td>"; */
$("#dataTr_${varStatus.index % detailList.size()+1}").append(Text);
</script>
</c:if>
</c:otherwise>
</c:choose>
</c:forEach>
</c:otherwise>
</c:choose>
</table>
</div>
</div>
</div>
</section>
<div class="btn_wrap" style="top:40px">
<div class="plm_btn_wrap_center" style="">
<div class="btnArea" style="width:100%;">
<%--
${info.PARTNER_OBJID} : ${partnerCd} : ${info.SALES_STATUS}
--%>
<c:if test="${(info.PARTNER_OBJID eq partnerCd) and (param.ACTION_TYPE ne 'view')}">
<c:if test="${info.SALES_STATUS ne 'OK'}">
<input type='text' name='PLAN_DATE' id="PLAN_DATE"class='date' style="float:left; padding-left:5px; margin-top:3px; width:80px;"/>
<input type="button" value="일괄적용" id="btnApply" class="plm_btns">
<input type="button" value="추가" id="btnAdd" class="plm_btns">
<input type="button" value="저장" id="btnSave" class="plm_btns">
<input type="button" value="삭제" id="btnRemove" class="plm_btns">
</c:if>
</c:if>
<c:if test="${(info.SALES_MNG_USER_ID eq connectUserId) and (param.ACTION_TYPE ne 'view')}">
<input type="button" value="OK" id="btnOk" class="plm_btns">
<input type="button" value="NG" id="btnNg" class="plm_btns">
</c:if>
<input type="button" value="닫기" id="btnClose" class="plm_btns">
</div>
</div>
</div>
</form>
</body>
</html>