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

469 lines
16 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);
});
$("#btnSave").click(function(){
fn_save();
});
//fn_getPurchaseOrderTargetPartList();
fnc_datepickForName();
$("input[numberOnly='']")
.each(function(){
$(this).css({'text-align':'right'})
})
.on("keyup", function() {
$(this).val(fn_addComma($(this).val().replace(/[^0-9]/g,"")));
});
$("#btnAdd").click(function(){
var selectedRows = _tabulGrid.getSelectedRows();
if (selectedRows.length < 1) {
alert("추가할 대상을 선택하세요.");
} else if (selectedRows.length > 1) {
alert("대상을 한건만 선택하세요.");
}else{
var row = selectedRows[0];
var rowData = row.getData();
var taskName = rowData.TASK_NAME;
var vcCode = rowData.VC_CODE;
var selectedIndex = _tabulGrid.getSelectedRows()[0].getPosition(true); // 선택된 행의 인덱스
//alert(selectedIndex);
var sameRows = _tabulGrid.searchRows("TASK_NAME", "=", taskName);
var maxNo = '01';
sameRows.forEach(function (sameRow) {
var sameVcCode = fnc_checkNull(sameRow.getData().VC_CODE).replace("VC", "");
if(Number(maxNo) < Number(sameVcCode) ){
maxNo = sameVcCode;
selectedIndex = sameRow.getPosition(true);
}
});
maxNo = (Number(maxNo)+1);
//if(maxNo.length < 2){
if(maxNo < 10){
maxNo = '0'+maxNo;
}
var newData = JSON.parse(JSON.stringify(rowData)); //{TASK_NAME:taskName, VC_CODE:'VC'+maxNo};
//newData = rowData;
newData.VC_CODE = 'VC'+maxNo;
//newData.OBJID = '';
<c:choose>
<c:when test="${empty projectList}">
</c:when>
<c:otherwise>
<c:forEach var="info" items="${projectList}" varStatus="status">
newData.OBJID_${info.PROJECT_NO} = '';
newData.VALUE_${info.PROJECT_NO} = '';
</c:forEach>
</c:otherwise>
</c:choose>
/*
//_tabulGrid.addRow({}, false, selectedRows[0]._row.getIndex() + 1);
//selectedRow[0]._row.getIndex()
//alert(selectedIndex);
// 선택된 행 다음에 새로운 행을 추가
_tabulGrid.addRow(newData, true, selectedIndex + 1)
.then((row) => {
var position = row.getPosition(); //get position of row
//alert(position);
});
//_tabulGrid.addRow({});
*/
// 특정 인덱스에 데이터를 삽입하고 테이블을 다시 렌더링
var indexToInsert = selectedIndex;
var tableData = _tabulGrid.getData();
tableData.splice(indexToInsert, 0, newData);
_tabulGrid.setData(tableData);
}
//Table2의 3번째 tr 다음에 tr 삽입
//var table2tr3rd = $('#dataTable > tbody').children()[2];
/* newTable
var newTr = $("#dataTable > tbody > tr:last").clone();
$("#dataTable > tbody > tr:last").after(newTr);
$(lastTd).next().css('background-color', "#bbbbbb");
$(lastTd).find('.select2').select2();
fnc_datepick();
*/
//$("#dataTable > tbody > tr:last").find('.select2').select2();
//fnc_datepick();
});
$("#btnDelete").click(function(){
var selectedRows = _tabulGrid.getSelectedRows();
if (selectedRows.length > 0) {
var existsVC01 = false;
selectedRows.forEach(function (row) {
if('VC01' == row.getData().VC_CODE){
existsVC01 = true;
}
});
if(existsVC01){
alert("VC01은 삭제 할 수 없습니다.");
return;
}
if(confirm("삭제하시겠습니까?")){ // 삭제 후 저장하여야 최종 삭제됩니다.
//var checkArr = new Array();
var param = $("#form1").serializeObject();
selectedRows.forEach(function (row, i) {
//row.delete();
//param.dataListJson[i] = {UNIT_OBJID : row.getData().UNIT_OBJID, VC_CODE : row.getData().VC_CODE};
});
//param.dataListJson = JSON.stringify(_tabulGrid.getData());
param.dataListJson = JSON.stringify(_tabulGrid.getSelectedData());
$.ajax({
type: "POST",
url: "/productKindSpec/deleteProductKindSpec.do",
//data: $("#form1").serialize(),
//data: $("#form1").serializeObject(),
data: param,
//data: {"dataListJson" : JSON.stringify(_tabulGrid.getData())},
dataType:"json",
success:function(data){
alert(data.msg);
if(data.result){
selectedRows.forEach(function (row) {
row.delete();
});
//opener.fn_search();
//self.close();
}
},
error: function(jqxhr, status, error){
}
});
}
} else {
alert("삭제할 대상을 선택하세요.");
}
});
//var cnt = fnc_checkNull(${masterInfo.FACILITY_QTY}, 1);
var cnt = fnc_checkNull(${fn:length(projectList)}, 1);
window.resizeTo(490+(cnt*100), 990);
fn_search();
});
});
</script>
<script>
var columns = [
{title:'OBJID_PROJECT',field:'OBJID_PROJECT' ,visible:false},
{title:'UNIT_OBJID',field:'UNIT_OBJID' ,visible:false},
{title:'SPEC_OBJID',field:'SPEC_OBJID' ,visible:false},
/*
{ title : '신청번호', field : 'EXPENSE_ID',
headerHozAlign : 'center', hozAlign : 'center', width : '70',
formatter : fnc_createGridAnchorTag,
cellClick : function(e, cell) {
fn_apply(cell.getData().EXPENSE_MASTER_OBJID);
}
},
{ title : '정산금액', field : 'SETTLE_AMOUNT',
headerHozAlign : 'center', hozAlign : 'center', width : '70',
formatter:"money", formatterParams:{ thousand:",", symbolAfter:"p", precision:false, }
},
{title:'PROJECT_NO',field:'PROJECT_NO' ,visible:false},
*/
{headerHozAlign : 'center', hozAlign : 'left ', width : '300', title : '유닛명', field : 'TASK_NAME' },
{headerHozAlign : 'center', hozAlign : 'center', width : '120', title : '사양', field : 'VC_CODE' },
<c:choose>
<c:when test="${empty projectList}">
</c:when>
<c:otherwise>
<c:forEach var="info" items="${projectList}" varStatus="status">
{headerHozAlign : 'center', hozAlign : 'center', width : '100', title : 'OBJID_${info.PROJECT_NO}', field : 'OBJID_${info.PROJECT_NO}', headerSort:false, visible:false},
{headerHozAlign : 'center', hozAlign : 'center', width : '100', title : '${info.PROJECT_NO}', field : 'VALUE_${info.PROJECT_NO}', headerSort:false,
editor:"number", editorParams:{
min:1, max:9, maxlength:1,//step:10, mask:"999",
elementAttributes:{ maxlength:"1", pattern:"\d*",min:1, max:9, oninput:"fnc_maxLengthCheck(this)" }, //set the maximum character length of the input element to 10 characters
selectContents:true, verticalNavigation:"table", //up and down arrow keys navigate away from cell without changing value
}
},
</c:forEach>
</c:otherwise>
</c:choose>
<%--
<c:choose>
<c:when test="${empty masterInfo or empty masterInfo.FACILITY_QTY}">
</c:when>
<c:otherwise>
<c:forEach begin="${masterInfo.PROJECT_NO_MAX_NUM+1}" end="${masterInfo.PROJECT_NO_MAX_NUM+masterInfo.FACILITY_QTY}" var="no">
{headerHozAlign : 'center', hozAlign : 'center', width : '100', title : '${masterInfo.TITLE}-${no}', field : '${masterInfo.TITLE}-${no}', headerSort:false,
editor:"number", editorParams:{
min:1, max:1, //step:10, mask:"999",
elementAttributes:{ maxlength:"1",}, //set the maximum character length of the input element to 10 characters
selectContents:true, verticalNavigation:"table", //up and down arrow keys navigate away from cell without changing value
}
},
</c:forEach>
</c:otherwise>
</c:choose>
--%>
/*
{headerHozAlign : 'center', hozAlign : 'center', width : '120', title : '${masterInfo.TITLE}', field : '${masterInfo.TITLE}',
//editor:"input", editorParams:{mask:"AAA-999"}
editor:"input", editorParams:{
//search:true,
//mask:"AAA-999",
//selectContents:true,
elementAttributes:{
maxlength:"1", //set the maximum character length of the input element to 10 characters
}
},
},
*/
/*
{title:'input', field:'aa', headerHozAlign:'center', hozAlign:'center'
,editor: fnc_customSelectEditor
,editorParams: {values:_PRODUCT_CODE_LIST, valueId:"CODE_ID", labelId:"CODE_NAME"}
,formatterParams:{values:_PRODUCT_CODE_LIST, valueId:"CODE_ID", labelId:"CODE_NAME"}
,formatter:fnc_customSelectFormatter},
*/
//{headerHozAlign : 'center', hozAlign : 'center', width : '100', title : '상태', field : 'APPR_STATUS' },
];
//var grid;
function fn_search(){
_tabulGrid = fnc_tabul_search(_tabul_layout_fitColumns, _tabulGrid, "/productKindSpec/getProductKindSpecPopupListPaging.do", columns, true);
}
function fn_getPurchaseOrderTargetPartList(){
var appendText = "";
var requestStatus = $("#STATUS").val();
$("#formListArea").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){
var PURCHASE_ORDER_NO = '';
$.each(resultData, function(i){
var RNUM = fnc_checkNull(resultData[i].RNUM);
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 completed = false; //입고완료
var inputReadOnly = "";
if(0 < 1){
completed = true;
//inputReadOnly = " readonly ";
}
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+"'>";
/* No */
appendText += " <td title='"+RNUM+"' class='align_c'>"+RNUM+"</td>";
/* 품번 */
appendText += " <td class='align_l' title='"+PART_NO+"' class='align_c'>"+PART_NO+"</td>";
appendText += " <td class='align_l' title='"+PART_NO+"' class='align_c'>"+PART_NO+"</td>";
appendText += " </tr>";
});
$("#PURCHASE_ORDER_NO").html(PURCHASE_ORDER_NO);
}else{
appendText += "<tr>";
appendText += "<td colspan='11'>조회된 내용이 없습니다.</td>";
appendText += "</tr>";
}
},
error: function(jqxhr, status, error){
}
});
$("#formListArea").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){
alert("입고수량을 초과하였습니다.");
check_over_qty = true;
return false;
}
});
if(check_over_qty){
return;
}
*/
if(confirm("저장하시겠습니까?")){
var param = $("#form1").serializeObject();
param.dataListJson = JSON.stringify(_tabulGrid.getData());
//param.dataListJson = JSON.stringify(_tabulGrid.getSelectedData());
$.ajax({
type: "POST",
url: "/productKindSpec/saveProductKindSpec.do",
//data: $("#form1").serialize(),
//data: $("#form1").serializeObject(),
data: param,
//data: {"dataListJson" : JSON.stringify(_tabulGrid.getData())},
dataType:"json",
success:function(data){
alert(data.msg);
if(data.result){
opener.fn_search();
//self.close();
}
},
beforeSend:function(){
//_startLoading("저장중입니다. 데이터에 따라 시간이 걸릴 수 있습니다.");
_startLoading("저장중입니다.");
},
complete:function(){
_endLoading();
},
error: function(jqxhr, status, error){
}
});
}
}
}
function fn_checkInputData(){
return true;
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){
alert("입력된 입고위치가 없습니다.");
returnFlag = false;
return false;
}
}
});
return returnFlag;
}
</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 class="bodyNoScroll">
<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">
<input type="hidden" name="OBJID" value="${param.OBJID }"/>
<input type="hidden" name="SPEC_OBJID" id="SPEC_OBJID" value="${param.SPEC_OBJID }"/>
<input type="hidden" name="OBJID_CONTRACT" value="${param.OBJID_CONTRACT }"/>
<input type="hidden" name="OBJID_PRODUCT" value="${param.OBJID_PRODUCT }"/>
<input type="hidden" name="MECHANICAL_TYPE" value="${param.MECHANICAL_TYPE }"/>
<section>
<div class="plm_menu_name_gdnsi" style="display:flex;">
<h2>
<span>제품별 사양 등록</span>
</h2>
<div class="plm_btn_wrap" style="padding:4 4 0 0;width:">
<input type="button" value="추가" class="plm_btns" id="btnAdd">
<input type="button" value="삭제" class="plm_btns" id="btnDelete">
<input type="button" value="저장" class="plm_btns" id="btnSave">
</div>
</div>
<%@include file= "/WEB-INF/view/common/common_gridArea.jsp" %>
<%--
<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"></label>
</td>
</tr>
<tr>
<td>
<div class="in_table_scroll_wrap _table2" style="height:400px;width:100%;">
<table class="plm_table">
<colgroup>
<col width="30px" /> <!-- No</td> -->
<col width="50px" /> <!-- 입고수량</td> -->
</colgroup>
<thead>
<tr class="plm_thead">
<td>No</td>
<td>단가</td>
</tr>
</thead>
<tbody id="formListArea">
</tbody>
</table>
</div>
</td>
</tr>
</table>
</div>
--%>
<div class="btn_wrap">
<div class="plm_btn_wrap_center">
<input type="button" value="닫기" id="btnClose" class="plm_btns">
</div>
</div>
</section>
</form>
</body>
</html>