2025-08-29 15:46:08 +09:00
|
|
|
<%@ 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_jqGrid.jsp"%>
|
|
|
|
|
<!DOCTYPE html>
|
|
|
|
|
<html>
|
|
|
|
|
<head>
|
|
|
|
|
|
|
|
|
|
<style>
|
|
|
|
|
.ui-jqgrid .ui-jqgrid-htable #jqgh_expenseDetailGrid_NOTE {
|
|
|
|
|
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#FF9966), to(#FF9966));
|
|
|
|
|
background-image: -webkit-linear-gradient(top, #FF9966 0, #FF9966 100%);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[aria-describedby="list_rn"] {
|
|
|
|
|
color: red !important;
|
|
|
|
|
}
|
|
|
|
|
</style>
|
|
|
|
|
|
|
|
|
|
<script type="text/javascript">
|
|
|
|
|
var grid;
|
|
|
|
|
$(document).ready(function(){
|
|
|
|
|
|
|
|
|
|
$(".dataTr").each(function(i){
|
|
|
|
|
var lev = $(this).attr("data-LEVEL");
|
|
|
|
|
if(lev == 1){
|
|
|
|
|
$(this).show();
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
$(".btnToggle").click(function(){
|
|
|
|
|
var choosedIsMinus = false;
|
|
|
|
|
var choosedSrc = $(this).attr("src");
|
|
|
|
|
if(choosedSrc.indexOf("Minus")>-1){
|
|
|
|
|
$(this).attr("src", "/images/btnPlus.png");
|
|
|
|
|
choosedIsMinus = true;
|
|
|
|
|
}else if(choosedSrc.indexOf("Plus")>-1){
|
|
|
|
|
$(this).attr("src", "/images/btnMinus.png");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var choosedBomObjId = $(this).attr("data-BOM_REPORT_OBJID");
|
|
|
|
|
var choosedObjId = $(this).attr("data-OBJID");
|
|
|
|
|
var choosedTopObjId = $(this).attr("data-TOP_OBJID");
|
|
|
|
|
var choosedSubTopObjId = $(this).attr("data-SUB_TOP_OBJID");
|
|
|
|
|
var choosedLev = $(this).attr("data-REAL_LEVEL");
|
|
|
|
|
|
|
|
|
|
//Swal.fire("choosedBomObjId : "+choosedBomObjId+"\nchoosedObjId : "+choosedObjId+"\nchoosedTopObjId : "+choosedTopObjId+"\nchoosedSubTopObjId : "+choosedSubTopObjId);
|
|
|
|
|
|
|
|
|
|
var isSelectedTopRow = false; //클릭한 최상위 로우 여부
|
|
|
|
|
var isBeforeSub = false; //이전의 자식 여부
|
|
|
|
|
var isBeforeMinus = false;
|
|
|
|
|
var isBeforePlus = false; //+버튼이 있을때(하위는 hide상태)
|
|
|
|
|
var isBeforePlusLev = '';
|
|
|
|
|
var isBeforeLev = '';
|
|
|
|
|
$(".dataTr").each(function(i){
|
|
|
|
|
var src = $(this).find("img").attr("src");
|
|
|
|
|
var bomReportObjId = $(this).attr("data-BOM_REPORT_OBJID");
|
|
|
|
|
var objId = $(this).attr("data-OBJID");
|
|
|
|
|
var topObjId = $(this).attr("data-TOP_OBJID");
|
|
|
|
|
var subTopObjId = $(this).attr("data-SUB_TOP_OBJID");
|
|
|
|
|
var lev = $(this).attr("data-REAL_LEVEL");
|
|
|
|
|
|
|
|
|
|
if(isBeforePlusLev >= lev){
|
|
|
|
|
isBeforePlus = false;
|
|
|
|
|
}else{
|
|
|
|
|
if(isBeforePlus && !choosedIsMinus){//+눌러서 보여줄때
|
|
|
|
|
return; //하위의 +인 하위는 pass(숨김상태)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//Swal.fire("bomReportObjId : "+bomReportObjId+"\nobjId : "+objId+"\ntopObjId : "+topObjId+"\nsubTopObjId : "+subTopObjId);
|
|
|
|
|
//console.log("1 " + choosedObjId + ":" + objId + ":" + choosedLev + ":" + lev + ":" + isSelectedTopRow + ":" + isBeforeSub);
|
|
|
|
|
if(isSelectedTopRow && Number(choosedLev) < Number(lev)){
|
|
|
|
|
//$(this).toggle();
|
|
|
|
|
if(choosedIsMinus){
|
|
|
|
|
$(this).hide();
|
|
|
|
|
}else{
|
|
|
|
|
if(!isBeforePlus) //중간에 +인 상태가 있으면 하위는 패스(숨김)
|
|
|
|
|
$(this).show();
|
|
|
|
|
}
|
|
|
|
|
}else{
|
|
|
|
|
isBeforeSub = false; //레벨이 높은게 나오면 자식 아님
|
|
|
|
|
}
|
|
|
|
|
//console.log("2 " + choosedObjId + ":" + objId + ":" + choosedLev + ":" + lev + ":" + isSelectedTopRow + ":" + isBeforeSub);
|
|
|
|
|
|
|
|
|
|
if(isBeforeSub || choosedObjId == objId){
|
|
|
|
|
isSelectedTopRow = true;
|
|
|
|
|
isBeforeSub = true;
|
|
|
|
|
}else{
|
|
|
|
|
isSelectedTopRow = false; //하위로 내려가다가 레벨이 바뀌면 false로 변경
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//var isMinus = false;
|
|
|
|
|
//var src = $(this).attr("src");
|
|
|
|
|
if(src && src.indexOf("Minus")>-1 && choosedObjId != objId){
|
|
|
|
|
//$(this).attr("src", "/images/btnPlus.png");
|
|
|
|
|
isBeforeMinus = true;
|
|
|
|
|
isBeforePlus = false;
|
|
|
|
|
}else if(src && src.indexOf("Plus")>-1 && choosedObjId != objId){
|
|
|
|
|
//$(this).attr("src", "/images/btnMinus.png");
|
|
|
|
|
isBeforeMinus = false;
|
|
|
|
|
isBeforePlus = true;
|
|
|
|
|
isBeforePlusLev = lev;
|
|
|
|
|
}else{
|
|
|
|
|
//isBeforeMinus = false;
|
|
|
|
|
//isBeforePlus = false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//console.log("3 " + choosedObjId + ":" + objId + ":" + choosedLev + ":" + lev + ":" + isSelectedTopRow + ":" + isBeforeSub);
|
|
|
|
|
|
|
|
|
|
/* 기존 로직(1단계에서만 +- 가능)
|
|
|
|
|
if(choosedTopObjId == topObjId){
|
|
|
|
|
//Swal.fire("bomReportObjId : "+bomReportObjId+", choosedBomObjId : "+choosedBomObjId);
|
|
|
|
|
if(lev != "1"){
|
|
|
|
|
var topObjId = $(this).attr("data-TOP_OBJID");
|
|
|
|
|
var realLevel = $(this).attr("data-REAL_LEVEL");
|
|
|
|
|
//Swal.fire(realLevel);
|
|
|
|
|
//Swal.fire("11 choosedObjId : "+choosedObjId+", topObjId : "+topObjId);
|
|
|
|
|
if(realLevel != "1"){
|
|
|
|
|
topObjId = $(this).attr("data-SUB_TOP_OBJID");
|
|
|
|
|
}
|
|
|
|
|
//Swal.fire("22 choosedObjId : "+choosedObjId+", topObjId : "+topObjId);
|
|
|
|
|
if(choosedObjId == topObjId){
|
|
|
|
|
$(this).toggle();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
*/
|
|
|
|
|
isBeforeLev = lev;
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
//level별 색상
|
|
|
|
|
$(".dataTr").each(function(i){
|
|
|
|
|
var lev = $(this).attr("data-REAL_LEVEL");
|
|
|
|
|
if(lev == 1){
|
|
|
|
|
$(this).css("background-color", "#fde9d9");
|
|
|
|
|
}else if(lev == 2){
|
|
|
|
|
$(this).css("background-color", "#daeef3");
|
|
|
|
|
}else if(lev == 3){
|
|
|
|
|
$(this).css("background-color", "#e4dfec");
|
|
|
|
|
}else if(lev == 4){
|
|
|
|
|
$(this).css("background-color", "#ebf1de");
|
|
|
|
|
}else if(lev == 5){
|
|
|
|
|
$(this).css("background-color", "#f2f2f2");
|
|
|
|
|
}else if(lev == 6){
|
|
|
|
|
$(this).css("background-color", "#f2dcdb");
|
|
|
|
|
}else if(lev == 7){
|
|
|
|
|
$(this).css("background-color", "#eeece1");
|
|
|
|
|
}else if(lev == 8){
|
|
|
|
|
$(this).css("background-color", "#dce6f1");
|
|
|
|
|
}else if(lev == 9){
|
|
|
|
|
$(this).css("background-color", "#FFFFEB");
|
|
|
|
|
}else if(lev == 10){
|
|
|
|
|
$(this).css("background-color", "#ffffff");
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
//fn_productSpecList("${product_code}", "param_product_mgmt_spec", "${product_mgmt_spec}");
|
|
|
|
|
//fnc_productUPGNEWList("","${product_mgmt_spec}","param_upg_no", "${upg_no}");
|
|
|
|
|
|
|
|
|
|
//fnc_datepick();
|
|
|
|
|
fnc_setFileDropZone("excelImportDropZone", "${objid}", "PART_EXCEL_IMPORT", "Part Excel Import Template", "setExcelFileArea",true,"fileDelete","/part/excelImportFileProc.do");
|
|
|
|
|
fnc_setFileDropZone("partAttachFileDropZone", "${objid}", "PART_IMPORT_ATTACH", "Import Part Attach File", "setPartFileArea",false,null,"/part/partImportFileProc.do");
|
|
|
|
|
|
|
|
|
|
$("#templateDownload").click(function(){
|
|
|
|
|
location.href="/template/BOM_REPORT_EXCEL_IMPORT_TEMPLATE.xlsx";
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
var unit_cd = $.parseJSON($("#unit_cd").val()); //jqGrid 구분
|
|
|
|
|
var part_type = $.parseJSON($("#part_type").val()); //jqGrid 구분
|
|
|
|
|
var sup_code = $.parseJSON($("#sup_code").val()); //jqGrid 구분
|
|
|
|
|
|
|
|
|
|
//Excel File Upload된 파일 목록 부분을 초기화 한다.
|
|
|
|
|
$("#excelImportList").hide();
|
|
|
|
|
|
|
|
|
|
//Excel File이 Upload되지 않은 경우 파트에 대한 첨부파일 영역을 hide 한다.
|
|
|
|
|
$("#partAttachFileDropZone").hide();
|
|
|
|
|
|
|
|
|
|
grid = $("#expenseDetailGrid").jqGrid({
|
|
|
|
|
url: ""
|
|
|
|
|
,datatype: "local"
|
|
|
|
|
,colNames: ["상태","모품번","자품번","품명","수량","재질","사양(규격)","후처리","MAKER","부품 유형","REMARK"]
|
|
|
|
|
,colModel: [
|
|
|
|
|
{name:"NOTE",index:"NOTE", width: 160, align:"center", hidden: false, sortable:false, editable:true
|
|
|
|
|
,editoptions:{
|
|
|
|
|
dataInit : function(e){
|
|
|
|
|
e.style.fontSize = 13;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
,{name:"PARENT_PART_NO",index:"PARENT_PART_NO", width: 160, align:"center", hidden: false, sortable:false, editable:true
|
|
|
|
|
,editoptions:{
|
|
|
|
|
dataInit : function(e){
|
|
|
|
|
e.style.fontSize = 13;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
,{name:"PART_NO",index:"PART_NO", width: 160, align:"center", hidden: false, sortable:false, editable:true
|
|
|
|
|
,editoptions:{
|
|
|
|
|
dataInit : function(e){
|
|
|
|
|
e.style.fontSize = 13;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
,{name:"PART_NAME",index:"PART_NAME", width: 270, align:"center", hidden: false, sortable:false, editable:true
|
|
|
|
|
,editoptions:{
|
|
|
|
|
dataInit : function(e){
|
|
|
|
|
e.style.fontSize = 13;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
,{name:"QTY",index:"QTY", width: 50, align:"center", hidden: false, sortable:false, editable:true
|
|
|
|
|
,editoptions:{
|
|
|
|
|
dataInit : function(e){
|
|
|
|
|
e.style.fontSize = 13;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
,{name:"MATERIAL",index:"MATERIAL", width: 150, align:"center", hidden: false, sortable:false, editable:true
|
|
|
|
|
,editoptions:{
|
|
|
|
|
dataInit : function(e){
|
|
|
|
|
e.style.fontSize = 13;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
,{name:"SPEC",index:"SPEC", width: 150, align:"center", hidden: false, sortable:false, editable:true
|
|
|
|
|
,editoptions:{
|
|
|
|
|
dataInit : function(e){
|
|
|
|
|
e.style.fontSize = 13;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
,{name:"POST_PROCESSING",index:"POST_PROCESSING", width: 100, align:"center", hidden: false, sortable:false, editable:true
|
|
|
|
|
,editoptions:{
|
|
|
|
|
dataInit : function(e){
|
|
|
|
|
e.style.fontSize = 13;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
,{name:"MAKER",index:"MAKER", width: 150, align:"center", hidden: false, sortable:false, editable:true
|
|
|
|
|
,editoptions:{
|
|
|
|
|
dataInit : function(e){
|
|
|
|
|
e.style.fontSize = 13;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
,{name:"PART_TYPE" ,index:"PART_TYPE" , width:100, align:"center", hidden:false, sortable:false, editable: true
|
|
|
|
|
,edittype :"select"
|
|
|
|
|
,formatter :"select"
|
|
|
|
|
,editoptions:{
|
|
|
|
|
value: part_type
|
|
|
|
|
,dataInit : function(e){
|
|
|
|
|
e.style.width = "92%";
|
|
|
|
|
e.style.fontSize = 13;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
,{name:"REMARK",index:"REMARK", width: 170, align:"center", hidden: false, sortable:false, editable:true
|
|
|
|
|
,editoptions:{
|
|
|
|
|
dataInit : function(e){
|
|
|
|
|
e.style.fontSize = 13;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
]
|
|
|
|
|
//,cellEdit : true
|
|
|
|
|
//,cellsubmit : "clientArray"
|
|
|
|
|
,rownumbers : true
|
|
|
|
|
,viewrecords : true
|
|
|
|
|
,width : 1500
|
|
|
|
|
,height : 420
|
|
|
|
|
,multiselect : false
|
|
|
|
|
,shrinkToFit : false
|
|
|
|
|
,autowidth : true
|
|
|
|
|
,sortable : false
|
|
|
|
|
,rowNum : 5000
|
|
|
|
|
,forceFit : false //컬럼의 width를 변화시킬때 그리드의 width를 고정 여부
|
|
|
|
|
,jsonReader : {repeatitems: false}
|
|
|
|
|
,mtype :"POST"
|
|
|
|
|
,footerrow : false //바닥합계
|
|
|
|
|
,userDataOnFooter: true //바닥합계
|
|
|
|
|
,loadComplete: function(){
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
//동시적용 프로젝트번호 - 신규등록일 때만 보이게
|
|
|
|
|
if(fnc_isEmpty(${bomInfo.OBJID})){
|
|
|
|
|
fn_setMultiInfo("${param.project_name}")
|
|
|
|
|
fn_setMultiInfoForSaved("${info.CONTRACT_MGMT_OBJID}"); //동시적용 정보 셋팅
|
|
|
|
|
}else{
|
|
|
|
|
$("#expenseApplyPopupFormWrap1").hide();
|
|
|
|
|
}
|
|
|
|
|
//gridFn.search();
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var gridFn = {
|
|
|
|
|
addRow : function() {
|
|
|
|
|
var newId = grid.getGridParam("reccount")+1;
|
|
|
|
|
var addData = {
|
|
|
|
|
"PART_NO": "",
|
|
|
|
|
"PARENT_PART_NO": ""
|
|
|
|
|
};
|
|
|
|
|
grid.addRowData(newId, addData);
|
|
|
|
|
grid.jqGrid("editRow", newId);
|
|
|
|
|
}
|
|
|
|
|
,delRow : function(){
|
|
|
|
|
var selectedRowIds = grid.jqGrid("getGridParam","selarrrow");
|
|
|
|
|
if(selectedRowIds.length==0){
|
|
|
|
|
Swal.fire("삭제할 행을 선택해주십시오.");
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
for(var i = selectedRowIds.length - 1; i >= 0; i--){
|
|
|
|
|
grid.delRowData(selectedRowIds[i]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
,opennEdit : function() { //수정가능
|
|
|
|
|
var ids = grid.jqGrid("getDataIDs");
|
|
|
|
|
for (var i = 0; i < ids.length; i++) {
|
|
|
|
|
grid.jqGrid("editRow",ids[i]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
,closeEdit : function() { //수정불가
|
|
|
|
|
var ids = grid.jqGrid("getDataIDs");
|
|
|
|
|
for (var i = 0; i < ids.length; i++) {
|
|
|
|
|
grid.jqGrid("saveRow", ids[i], /*successFunction*/null, /*url*/"clientArray"/*, extraparam, aftersavefunc,errorfunc, afterrestorefunc*/);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
,getStep2Cd : function(obj){ //2단계연결코드 재설정
|
|
|
|
|
var gridExpSubdCdArr = $.parseJSON($("#gridExpSubdCd").val());
|
|
|
|
|
var targetObj = $("#"+$(obj).attr("rowid")+"_EXP_SUBD_CD");
|
|
|
|
|
targetObj.empty(); //초기화
|
|
|
|
|
targetObj.append("<option value=\"\">선택</option>");
|
|
|
|
|
for(var i=0; i<gridExpSubdCdArr.length; i++){
|
|
|
|
|
cd = gridExpSubdCdArr[i];
|
|
|
|
|
if(cd["PARENT_CODE_ID"]==obj.value){
|
|
|
|
|
targetObj.append("<option value=\""+cd["CODE_ID"]+"\">"+cd["CODE_NAME"]+"</option>");
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
,search : function() {
|
|
|
|
|
grid.setGridParam({
|
|
|
|
|
url: "/partMng/parsingExcelFile.do"
|
|
|
|
|
,datatype : "json"
|
|
|
|
|
,postData:{"targetObjId":"${objid}","docType":"PART_EXCEL_IMPORT","OBJID":"${CONTRACT_OBJID}"}
|
|
|
|
|
,loadComplete : function(data) {
|
|
|
|
|
gridFn.footerSummary();
|
|
|
|
|
}
|
|
|
|
|
,gridComplete : function() {
|
|
|
|
|
//gridFn.opennEdit(); //수정가능
|
|
|
|
|
var valid = true;
|
|
|
|
|
gridFn.closeEdit();
|
|
|
|
|
//var tempGrid = $('#expenseDetailGrid');
|
|
|
|
|
$.each(grid.getRowData(), function(i, d){
|
|
|
|
|
console.log(d);
|
|
|
|
|
if(!fnc_isEmpty(d["NOTE"])){
|
|
|
|
|
valid = false;
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
gridFn.opennEdit();
|
|
|
|
|
|
|
|
|
|
if(!valid){
|
|
|
|
|
Swal.fire('엑셀파일 로딩결과가 유효하지 않습니다. 결과메세지를 확인해 주세요.');
|
|
|
|
|
$("#btnSave").hide();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}).trigger("reloadGrid");
|
|
|
|
|
grid.setGridParam({url: "", datatype : "local"});
|
|
|
|
|
}
|
|
|
|
|
,footerSummary: function(){ //자동합계
|
|
|
|
|
$("select[id*=_SORT_CD]").each(function(){
|
|
|
|
|
$(this).select2();
|
|
|
|
|
} );
|
|
|
|
|
|
|
|
|
|
$("select[id*=_SUPPLY_CD]").each(function(){
|
|
|
|
|
$(this).select2();
|
|
|
|
|
} );
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function fn_save(){
|
|
|
|
|
var ids = grid.jqGrid("getDataIDs");
|
|
|
|
|
|
|
|
|
|
if(ids!=""){
|
|
|
|
|
if(fnc_valitate("form1")){
|
|
|
|
|
|
|
|
|
|
var valid = true;
|
|
|
|
|
var existPart = true;
|
|
|
|
|
var part = "";
|
|
|
|
|
if (fnc_isEmpty(${bomInfo.OBJID})) {
|
|
|
|
|
var partNo1 = "";
|
|
|
|
|
|
|
|
|
|
gridFn.closeEdit();
|
|
|
|
|
$.each(grid.getRowData(), function(i, d) {
|
|
|
|
|
if (i == 0) {
|
|
|
|
|
partNo1 = d["PART_NO"];
|
|
|
|
|
}
|
|
|
|
|
var partType = d["PART_TYPE"];
|
|
|
|
|
var partNo = d["PART_NO"];
|
|
|
|
|
|
|
|
|
|
if (partType == '0001788') {
|
|
|
|
|
if (!fn_existPartNo(partNo)) {
|
|
|
|
|
existPart = false;
|
|
|
|
|
part = partNo;
|
|
|
|
|
return false; // Exit the loop
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(!fnc_isEmpty(d["NOTE"])){
|
|
|
|
|
valid = false;
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
gridFn.opennEdit();
|
|
|
|
|
|
|
|
|
|
var project_no = $("#project_name").find("option:selected").text();
|
|
|
|
|
if (partNo1.indexOf(project_no) < 0) {
|
|
|
|
|
valid = false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!existPart) {
|
|
|
|
|
Swal.fire(part+'품번에 해당하는 구매품표준이 없습니다. 확인해 주세요.');
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!valid) {
|
|
|
|
|
Swal.fire('1레벨 품번에 프로젝트번호가 없습니다. 확인해 주세요.');
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var existsDup = false;
|
|
|
|
|
var ARR_APPLICATION_PROJECT_NO = new Array();
|
|
|
|
|
$(".APPLICATION_PROJECT_NO").each(function(){
|
|
|
|
|
for(var i=0; i<ARR_APPLICATION_PROJECT_NO.length; i++){
|
|
|
|
|
if(this.value != '' && ARR_APPLICATION_PROJECT_NO[i] == this.value){
|
|
|
|
|
existsDup = true;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
ARR_APPLICATION_PROJECT_NO.push($(this).val());
|
|
|
|
|
});
|
|
|
|
|
if(existsDup){
|
|
|
|
|
Swal.fire('동시적용 프로젝트번호에 중복건이 존재합니다.');
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(confirm("저장 하시겠습니까?")){
|
|
|
|
|
gridFn.closeEdit();
|
|
|
|
|
$.ajax({
|
|
|
|
|
url:"/partMng/partBomApplySave.do"
|
|
|
|
|
,type:"POST"
|
|
|
|
|
,data: $("#form1").serialize() + "&jqGrid="+ encodeURIComponent(JSON.stringify(grid.getRowData()))
|
|
|
|
|
,dataType:"json"
|
|
|
|
|
,success:function(data){
|
|
|
|
|
/*
|
|
|
|
|
if(data =="SUCCESS"){
|
|
|
|
|
alert("저장되었습니다.");
|
|
|
|
|
top.opener.fn_search();
|
|
|
|
|
self.close();
|
|
|
|
|
};
|
|
|
|
|
*/
|
|
|
|
|
console.log(data);
|
|
|
|
|
if(data && data.RESULT == 'S'){
|
|
|
|
|
alert("저장되었습니다.");
|
|
|
|
|
if(typeof opener.fn_search =="function"){ opener.fn_search() };
|
|
|
|
|
self.close();
|
|
|
|
|
}else{
|
|
|
|
|
alert(data.MSG);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
,error: function(jqxhr, status, error){
|
|
|
|
|
alert('에러가 발생하였습니다. 시스템 관리자에게 문의하여 주세요.');
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}else{
|
|
|
|
|
Swal.fire('저장할 데이터가 없습니다.');
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//Excel 파일 업로드 후 처리함수
|
|
|
|
|
function setExcelFileArea(){
|
|
|
|
|
setUploadTemplateFile("excelImport");
|
|
|
|
|
}
|
|
|
|
|
//파트 관련 첨부파일 업로드 후 처리함수
|
|
|
|
|
function setPartFileArea(){
|
|
|
|
|
setUploadTemplateFile("partAttachFile");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//템플릿 업로드 후 처리
|
|
|
|
|
function setUploadTemplateFile(type){
|
|
|
|
|
var docType = "";
|
|
|
|
|
var deleteCallBackFN = "";
|
|
|
|
|
if(type == "excelImport"){
|
|
|
|
|
docType = "PART_EXCEL_IMPORT";
|
|
|
|
|
deleteCallBackFN = "excelFileDelete";
|
|
|
|
|
}else{
|
|
|
|
|
$("#partAttachFileArea").empty();
|
|
|
|
|
docType = "PART_IMPORT_ATTACH";
|
|
|
|
|
deleteCallBackFN = "setPartFileArea";
|
|
|
|
|
}
|
|
|
|
|
$.ajax({
|
|
|
|
|
url:"/common/getFileList.do",
|
|
|
|
|
type:"POST",
|
|
|
|
|
data:{"targetObjId":"${objid}", "docType":docType},
|
|
|
|
|
dataType:"json",
|
|
|
|
|
async:false,
|
|
|
|
|
success:function(data){
|
|
|
|
|
if(null != data && 0 < data.length){
|
|
|
|
|
if("PART_IMPORT_ATTACH" == docType){
|
|
|
|
|
$("#defaultPartAttachFileRow").hide();
|
|
|
|
|
}
|
|
|
|
|
$("#"+type+"List").show();
|
|
|
|
|
}
|
|
|
|
|
$.each(data, function(i){
|
|
|
|
|
var s = "<tr>";
|
|
|
|
|
|
|
|
|
|
if("PART_IMPORT_ATTACH" == docType){
|
|
|
|
|
s += "<td>"+(i+1)+"</td>";
|
|
|
|
|
}
|
|
|
|
|
s += "<td colspan='2'><a href='javascript:fnc_downloadFile(\""+data[i].OBJID+"\")'>"+data[i].REAL_FILE_NAME+"</a></td>";
|
|
|
|
|
/* s += "<td>"+data[i].FILE_SIZE+"</td>"; */
|
|
|
|
|
s += "<td><div class='delete_btn' onclick='javascript:fnc_deleteFile(\""+data[i].OBJID+"\", \""+deleteCallBackFN+"\")'></div></td>";
|
|
|
|
|
s += "</tr>";
|
|
|
|
|
$("#"+type+"Area").append(s);
|
|
|
|
|
});
|
|
|
|
|
if(type == "excelImport"){
|
|
|
|
|
parsingExcelFile();
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
error: function(jqxhr, status, error){
|
|
|
|
|
Swal.fire(jqxhr.statusText + ", " + status + ", " + error);
|
|
|
|
|
Swal.fire(jqxhr.status);
|
|
|
|
|
Swal.fire(jqxhr.responseText);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function excelFileDelete(){
|
|
|
|
|
$("#excelImportArea").empty();
|
|
|
|
|
$("#excelImportList").hide();
|
|
|
|
|
$("#parsingPartList").empty();
|
|
|
|
|
$("#defaultExcelTemplateRow").show();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//Excel 파일 업로드에 따른 파트 첨부파일 영역 DISPLAY
|
|
|
|
|
function displayPartFileInfo(flag){
|
|
|
|
|
if(flag == "true"){
|
|
|
|
|
$("#partAttachFileDropZone").show();
|
|
|
|
|
$("#partAttachFileArea").empty();
|
|
|
|
|
$("#defaultPartAttachFileRow").show();
|
|
|
|
|
}else{
|
|
|
|
|
$("#partAttachFileDropZone").show();
|
|
|
|
|
$("#partAttachFileArea").empty();
|
|
|
|
|
$("#partAttachFileList").hide();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var duplicateCount = 0;
|
|
|
|
|
function parsingExcelFile(){
|
|
|
|
|
gridFn.search();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function savePart(){
|
|
|
|
|
if(0 < $("input[name='partObjId']").length){
|
|
|
|
|
|
|
|
|
|
var cnt = 0;
|
|
|
|
|
$("input[name='partObjId']").each(function(idx){
|
|
|
|
|
var targetObjId = $(this).val();
|
|
|
|
|
if(!partImportValidation(targetObjId)){
|
|
|
|
|
cnt++;
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(cnt == 0){
|
|
|
|
|
$("input[name='partObjId']").each(function(idx){
|
|
|
|
|
var otherObjId = $(this).val();
|
|
|
|
|
if(otherObjId != targetObjId){
|
|
|
|
|
if($("#"+otherObjId+"_partNo").val() == $("#"+targetObjId+"_partNo").val()){
|
|
|
|
|
Swal.fire("문서내 중복되는 Part No가 존재 합니다.("+$("#"+otherObjId+"_partNo").val()+","+$("#"+targetObjId+"_partNo").val()+")");
|
|
|
|
|
cnt++;
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
if(duplicateCount > 0){
|
|
|
|
|
Swal.fire("등록 불가한 품번이 있어 저장할 수 없습니다.");
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(0 == cnt){
|
|
|
|
|
if(confirm("해당파트 정보를 저장하시겠습니까?")){
|
|
|
|
|
var param = $("#form1").serialize();
|
|
|
|
|
$.ajax({
|
|
|
|
|
type : "POST",
|
|
|
|
|
url : "/part/saveExcelUploadPart.do",
|
|
|
|
|
data: param,
|
|
|
|
|
dataType:"json",
|
|
|
|
|
async:false,
|
|
|
|
|
error: function(jqxhr, status, error){
|
|
|
|
|
Swal.fire(jqxhr.statusText + ", " + status + ", " + error);
|
|
|
|
|
Swal.fire(jqxhr.status);
|
|
|
|
|
Swal.fire(jqxhr.responseText);
|
|
|
|
|
},
|
|
|
|
|
success: function(result){
|
|
|
|
|
if(null != result){
|
|
|
|
|
Swal.fire(result.message);
|
|
|
|
|
opener.search();
|
|
|
|
|
self.close();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}else{
|
|
|
|
|
Swal.fire("저장할 정보가 없습니다.");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//파일을 삭제한다.
|
|
|
|
|
//Excel 파일 삭제 시 파트 첨부파일도 모두 삭제한다.
|
|
|
|
|
function fileDelete(){
|
|
|
|
|
if(confirm("Excel 파일을 변경하시겠습니까? 이미 Part 첨부파일이 첨부된 경우 파일은 삭제됩니다.")){
|
|
|
|
|
$.ajax({
|
|
|
|
|
url:"/common/deleteFileInfo.do",
|
|
|
|
|
type:"POST",
|
|
|
|
|
data:{"targetObjId":"${objid}"},
|
|
|
|
|
dataType:"json",
|
|
|
|
|
async:true,
|
|
|
|
|
success:function(data){
|
|
|
|
|
excelFileDelete();
|
|
|
|
|
},
|
|
|
|
|
error: function(jqxhr, status, error){
|
|
|
|
|
Swal.fire(jqxhr.statusText + ", " + status + ", " + error);
|
|
|
|
|
Swal.fire(jqxhr.status);
|
|
|
|
|
Swal.fire(jqxhr.responseText);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//양산제품에 해당하는 SPEC 정보 목록을 가져온다.
|
|
|
|
|
function fn_productSpecList(productObjId,selectboxId,selectedVal){
|
|
|
|
|
|
|
|
|
|
$("#"+selectboxId).empty();
|
|
|
|
|
|
|
|
|
|
$("#"+selectboxId).append("<option value=''>선택</option>");
|
|
|
|
|
|
|
|
|
|
if("" != productObjId){
|
|
|
|
|
$.ajax({
|
|
|
|
|
url:"/common/getProductSPECList.do",
|
|
|
|
|
type:"POST",
|
|
|
|
|
data:{"isJson":true,"TARGET_OBJID":productObjId},
|
|
|
|
|
dataType:"json",
|
|
|
|
|
async:false,
|
|
|
|
|
success:function(data){
|
|
|
|
|
resultList = data
|
|
|
|
|
|
|
|
|
|
if(0 < resultList.length){
|
|
|
|
|
for (var i = 0; i < resultList.length; i++) {
|
|
|
|
|
var commonCodeId = resultList[i].OBJID;
|
|
|
|
|
var commonCodeName = resultList[i].SPEC_NAME;
|
|
|
|
|
|
|
|
|
|
$("#"+selectboxId).append("<option value='"+commonCodeId+"'>"+commonCodeName+"</option>");
|
|
|
|
|
}
|
|
|
|
|
$("#"+selectboxId).val(selectedVal);
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
error: function(jqxhr, status, error){
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//동시발주 영역 내용 생성
|
|
|
|
|
function fn_setMultiInfo(val){
|
|
|
|
|
var projectCnt = 0;
|
|
|
|
|
$(".APPLICATION_PROJECT_NO option").remove();
|
|
|
|
|
$(".APPLICATION_PROJECT_NO").attr("disabled", "disabled");
|
|
|
|
|
$(".DELIVERY_PLAN_DATE").attr("disabled", "disabled");
|
|
|
|
|
$(".DELIVERY_PLAN_QTY").attr("disabled", "disabled");
|
|
|
|
|
$(".APPLICATION_PROJECT_NO").val('');
|
|
|
|
|
$(".DELIVERY_PLAN_DATE").val('');
|
|
|
|
|
$(".DELIVERY_PLAN_QTY").val('');
|
|
|
|
|
|
|
|
|
|
for (i=1; i < 11; i++){
|
|
|
|
|
var APPLICATION_PROJECT_NO = "APPLICATION_PROJECT_NO"+i
|
|
|
|
|
fn_projectNameList("", APPLICATION_PROJECT_NO, "", val);
|
|
|
|
|
|
|
|
|
|
projectCnt = $("#"+APPLICATION_PROJECT_NO).find('option').length;
|
|
|
|
|
if(projectCnt > 2){
|
|
|
|
|
$("#"+APPLICATION_PROJECT_NO).attr("disabled", false);
|
|
|
|
|
}
|
|
|
|
|
if(projectCnt-2 <= i){ //projectCnt == 0 ||
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//alert($("select[name^=APPLICATION_PROJECT_NO]").length);
|
|
|
|
|
|
|
|
|
|
//마스터 프로젝트번호 제거
|
|
|
|
|
if(fnc_isNotEmpty(val)){
|
|
|
|
|
$("select[name^=APPLICATION_PROJECT_NO]").each(function(){
|
|
|
|
|
$(this).find('option[value='+val+']').remove();
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
<c:choose>
|
|
|
|
|
<c:when test="${empty regiestSameContractUnitNameBomList}">
|
|
|
|
|
</c:when>
|
|
|
|
|
<c:otherwise>
|
|
|
|
|
<c:forEach var="info" items="${regiestSameContractUnitNameBomList}" varStatus="status">
|
|
|
|
|
$("select[name^=APPLICATION_PROJECT_NO]").each(function(){
|
|
|
|
|
$(this).find('option[value=${info.CONTRACT_OBJID}]').remove();
|
|
|
|
|
});
|
|
|
|
|
</c:forEach>
|
|
|
|
|
projectCnt = $("select[name^=APPLICATION_PROJECT_NO]").eq(0).find('option').length;
|
|
|
|
|
for (i=1; i < 11; i++){
|
|
|
|
|
var APPLICATION_PROJECT_NO = "APPLICATION_PROJECT_NO"+i
|
|
|
|
|
if(projectCnt-1 < i){
|
|
|
|
|
$("#"+APPLICATION_PROJECT_NO).attr("disabled", true);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
</c:otherwise>
|
|
|
|
|
</c:choose>
|
|
|
|
|
}
|
|
|
|
|
//저장 정보 표현용
|
|
|
|
|
function fn_setMultiInfoForSaved(val){
|
|
|
|
|
<c:choose>
|
|
|
|
|
<c:when test="${empty multiMasterList}">
|
|
|
|
|
</c:when>
|
|
|
|
|
<c:otherwise>
|
|
|
|
|
//$(".APPLICATION_PROJECT_NO option").remove();
|
|
|
|
|
<c:forEach var="mInfo" items="${multiMasterList}" varStatus="status">
|
|
|
|
|
var i = '${status.index+1}';
|
|
|
|
|
var APPLICATION_PROJECT_NO = "APPLICATION_PROJECT_NO"+i;
|
|
|
|
|
//fn_projectNameList("", APPLICATION_PROJECT_NO, "${mInfo.CONTRACT_MGMT_OBJID}", "${info.CONTRACT_MGMT_OBJID}");
|
|
|
|
|
//projectCnt = $("#"+APPLICATION_PROJECT_NO).find('option').length;
|
|
|
|
|
|
|
|
|
|
$("#"+APPLICATION_PROJECT_NO).val("${mInfo.CONTRACT_MGMT_OBJID}");
|
|
|
|
|
$("#APPLICATION_PROJECT_NUMBER"+i).val("${mInfo.CONTRACT_NO}");
|
|
|
|
|
$("#APPLICATION_OBJID"+i).val("${mInfo.OBJID}");
|
|
|
|
|
$("#DELIVERY_PLAN_DATE"+i).val("${mInfo.DELIVERY_PLAN_DATE}");
|
|
|
|
|
$("#DELIVERY_PLAN_QTY"+i).val("${mInfo.DELIVERY_PLAN_QTY}");
|
|
|
|
|
/*
|
|
|
|
|
if(projectCnt > 2){
|
|
|
|
|
$("#"+APPLICATION_PROJECT_NO).attr("disabled", false);
|
|
|
|
|
$("#DELIVERY_PLAN_DATE"+i).attr("disabled", false);
|
|
|
|
|
$("#DELIVERY_PLAN_QTY"+i).attr("disabled", false);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(projectCnt-2 <= i){ //projectCnt == 0 ||
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
*/
|
|
|
|
|
</c:forEach>
|
|
|
|
|
</c:otherwise>
|
|
|
|
|
</c:choose>
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//구매품표준 존재여부를 확인한다.
|
|
|
|
|
function fn_existPartNo(partNo){
|
|
|
|
|
var returnFlag = false;
|
|
|
|
|
|
|
|
|
|
//alert("partNo:"+partNo);
|
|
|
|
|
$.ajax({
|
|
|
|
|
url:"/partMng/existPartNoCheck.do",
|
|
|
|
|
type:"POST",
|
|
|
|
|
data:{"partNo":partNo},
|
|
|
|
|
dataType:"json",
|
|
|
|
|
async:false,
|
|
|
|
|
success:function(data){
|
|
|
|
|
|
|
|
|
|
if(0 < data.length){
|
|
|
|
|
returnFlag = true;
|
|
|
|
|
}else{
|
|
|
|
|
returnFlag = false;
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
error: function(jqxhr, status, error){
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
return returnFlag;
|
|
|
|
|
}
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
</head>
|
|
|
|
|
<body>
|
|
|
|
|
<form name="form1" id="form1" action="" method="post">
|
|
|
|
|
<input type="hidden" name="importPopObjid" id="importPopObjid" value="${objid}">
|
|
|
|
|
<input type="hidden" name="CUSTOMER_OBJID" id="CUSTOMER_OBJID" value="${CUSTOMER_OBJID}">
|
|
|
|
|
<input type="hidden" name="CONTRACT_OBJID" id="CONTRACT_OBJID" value="${CONTRACT_OBJID}">
|
|
|
|
|
<input type="hidden" name="BOM_REPORT_OBJID" id="BOM_REPORT_OBJID" value="${param.BOM_REPORT_OBJID}">
|
2025-10-13 19:44:37 +09:00
|
|
|
|
2025-08-29 15:46:08 +09:00
|
|
|
<section>
|
|
|
|
|
<div class="plm_menu_name">
|
|
|
|
|
<h2><span>PART 및 구조등록 Excel upload</span></h2>
|
|
|
|
|
</div>
|
|
|
|
|
</section>
|
|
|
|
|
|
|
|
|
|
<div style="font-size:10px;float:left;margin:13px 13px 5px 13px">
|
|
|
|
|
<table class="" style="border:0px solid #dd2a00;">
|
|
|
|
|
<colgroup>
|
|
|
|
|
<col width="40px">
|
|
|
|
|
<col width="180px">
|
|
|
|
|
|
|
|
|
|
<col width="100px">
|
|
|
|
|
<col width="220px">
|
|
|
|
|
|
|
|
|
|
<col width="100px">
|
|
|
|
|
<col width="150px">
|
|
|
|
|
|
|
|
|
|
<col width="50px">
|
|
|
|
|
<col width="150px">
|
|
|
|
|
|
|
|
|
|
<col width="40px">
|
|
|
|
|
<col width="150px">
|
|
|
|
|
|
|
|
|
|
<col width="200px">
|
|
|
|
|
</colgroup>
|
|
|
|
|
<tr>
|
2025-10-13 19:44:37 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<td style="font-size:12px;width: 70px;"><label for="street_number">제품구분</label></td>
|
|
|
|
|
<td>
|
|
|
|
|
<select name="product_cd" id="product_cd" disabled="disabled" style="width: 100px;">
|
|
|
|
|
${code_map.product_cd}
|
|
|
|
|
</select>
|
|
|
|
|
</td>
|
|
|
|
|
|
|
|
|
|
<!-- <td style="font-size:12px;"><label for="street_number">고객사</label></td>
|
2025-08-29 15:46:08 +09:00
|
|
|
<td>
|
|
|
|
|
<select name="customer_cd" id="customer_cd" disabled="disabled">
|
|
|
|
|
${code_map.customer_cd}
|
|
|
|
|
</select>
|
|
|
|
|
</td>
|
|
|
|
|
|
|
|
|
|
<td style="font-size:12px;"><label for="product">고객사프로젝트명</label></td>
|
|
|
|
|
<td class="input_sub_title" colspan="">
|
|
|
|
|
<input type="customer_project_name" name="customer_project_name" value="${info.CUSTOMER_PROJECT_NAME}" readonly disabled="disabled" style="width: 200px;">
|
|
|
|
|
</td>
|
|
|
|
|
|
|
|
|
|
<td style="font-size:12px;"><label for="product">당사프로젝트번호</label></td>
|
|
|
|
|
<td>
|
|
|
|
|
<select name="project_name" id="project_name" disabled="disabled">
|
|
|
|
|
${code_map.project_name}
|
|
|
|
|
</select>
|
|
|
|
|
</td>
|
|
|
|
|
<td style="font-size:12px;"><label for="part_no">제품구분</label></td>
|
|
|
|
|
<td>
|
|
|
|
|
<input type="text" name="product" value="${info.PRODUCT_NAME}" readonly disabled="disabled" style="width: 100px;">
|
|
|
|
|
</td>
|
|
|
|
|
|
|
|
|
|
<td style="font-size:12px;"><label for="product">유닛명</label></td>
|
|
|
|
|
<td>
|
|
|
|
|
<select name="unit" id="unit" disabled="disabled">
|
|
|
|
|
${code_map.unit_code}
|
|
|
|
|
</select>
|
2025-10-13 19:44:37 +09:00
|
|
|
</td> -->
|
2025-08-29 15:46:08 +09:00
|
|
|
<!-- <td class="btn_td">
|
|
|
|
|
<div class="btn_wrap">
|
|
|
|
|
<div class="plm_btn_wrap" style="padding:0 8 0 8; text-align: right;">
|
|
|
|
|
<input type="button" class="plm_btns" value="저장" id="btnRegist" onclick="fn_save();">
|
|
|
|
|
<input type="button" class="plm_btns" value="닫기" onclick="window.close();" >
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</td> -->
|
|
|
|
|
</tr>
|
|
|
|
|
</table>
|
|
|
|
|
</div>
|
|
|
|
|
|
2025-10-13 19:44:37 +09:00
|
|
|
<!-- <div id="expenseApplyPopupFormWrap1" style="margin-top:30px;position: ">
|
2025-08-29 15:46:08 +09:00
|
|
|
|
|
|
|
|
<table class="pmsPopupForm">
|
|
|
|
|
<colgroup>
|
|
|
|
|
<col width="10%" />
|
|
|
|
|
<col width="9%" />
|
|
|
|
|
<col width="9%" />
|
|
|
|
|
<col width="9%" />
|
|
|
|
|
<col width="9%" />
|
|
|
|
|
<col width="9%" />
|
|
|
|
|
<col width="9%" />
|
|
|
|
|
<col width="9%" />
|
|
|
|
|
<col width="9%" />
|
|
|
|
|
<col width="9%" />
|
|
|
|
|
<col width="9%" />
|
|
|
|
|
</colgroup>
|
|
|
|
|
<tr>
|
|
|
|
|
<td colspan="11"><b>※최초 등록시에만 동시적용 프로젝트에 대해 같은 구조로 BOM을 등록합니다.(파트 추가/삭제나 BOM배포는 개별 진행, 배포전에 구조를 전체 변경할 경우에는 등록중인 봄과 파트 전체 삭제 후 다시 업로드)</b></td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td colspan="11"><b> 발주서에서 같은 구조의 프로젝트 BOM에 대해 동시발주 진행</b></td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<input type="hidden" name="APPLICATION_OBJID1" id="APPLICATION_OBJID1" value="" class="APPLICATION_OBJID"/>
|
|
|
|
|
<input type="hidden" name="APPLICATION_OBJID2" id="APPLICATION_OBJID2" value="" class="APPLICATION_OBJID"/>
|
|
|
|
|
<input type="hidden" name="APPLICATION_OBJID3" id="APPLICATION_OBJID3" value="" class="APPLICATION_OBJID"/>
|
|
|
|
|
<input type="hidden" name="APPLICATION_OBJID4" id="APPLICATION_OBJID4" value="" class="APPLICATION_OBJID"/>
|
|
|
|
|
<input type="hidden" name="APPLICATION_OBJID5" id="APPLICATION_OBJID5" value="" class="APPLICATION_OBJID"/>
|
|
|
|
|
<input type="hidden" name="APPLICATION_OBJID6" id="APPLICATION_OBJID6" value="" class="APPLICATION_OBJID"/>
|
|
|
|
|
<input type="hidden" name="APPLICATION_OBJID7" id="APPLICATION_OBJID7" value="" class="APPLICATION_OBJID"/>
|
|
|
|
|
<input type="hidden" name="APPLICATION_OBJID8" id="APPLICATION_OBJID8" value="" class="APPLICATION_OBJID"/>
|
|
|
|
|
<input type="hidden" name="APPLICATION_OBJID9" id="APPLICATION_OBJID9" value="" class="APPLICATION_OBJID"/>
|
|
|
|
|
<input type="hidden" name="APPLICATION_OBJID10" id="APPLICATION_OBJID10" value="" class="APPLICATION_OBJID"/>
|
|
|
|
|
|
|
|
|
|
<input type="hidden" name="APPLICATION_PROJECT_NUMBER1" id="APPLICATION_PROJECT_NUMBER1" value="" class="APPLICATION_PROJECT_NUMBER"/>
|
|
|
|
|
<input type="hidden" name="APPLICATION_PROJECT_NUMBER2" id="APPLICATION_PROJECT_NUMBER2" value="" class="APPLICATION_PROJECT_NUMBER"/>
|
|
|
|
|
<input type="hidden" name="APPLICATION_PROJECT_NUMBER3" id="APPLICATION_PROJECT_NUMBER3" value="" class="APPLICATION_PROJECT_NUMBER"/>
|
|
|
|
|
<input type="hidden" name="APPLICATION_PROJECT_NUMBER4" id="APPLICATION_PROJECT_NUMBER4" value="" class="APPLICATION_PROJECT_NUMBER"/>
|
|
|
|
|
<input type="hidden" name="APPLICATION_PROJECT_NUMBER5" id="APPLICATION_PROJECT_NUMBER5" value="" class="APPLICATION_PROJECT_NUMBER"/>
|
|
|
|
|
<input type="hidden" name="APPLICATION_PROJECT_NUMBER6" id="APPLICATION_PROJECT_NUMBER6" value="" class="APPLICATION_PROJECT_NUMBER"/>
|
|
|
|
|
<input type="hidden" name="APPLICATION_PROJECT_NUMBER7" id="APPLICATION_PROJECT_NUMBER7" value="" class="APPLICATION_PROJECT_NUMBER"/>
|
|
|
|
|
<input type="hidden" name="APPLICATION_PROJECT_NUMBER8" id="APPLICATION_PROJECT_NUMBER8" value="" class="APPLICATION_PROJECT_NUMBER"/>
|
|
|
|
|
<input type="hidden" name="APPLICATION_PROJECT_NUMBER9" id="APPLICATION_PROJECT_NUMBER9" value="" class="APPLICATION_PROJECT_NUMBER"/>
|
|
|
|
|
<input type="hidden" name="APPLICATION_PROJECT_NUMBER10" id="APPLICATION_PROJECT_NUMBER10" value="" class="APPLICATION_PROJECT_NUMBER"/>
|
|
|
|
|
|
|
|
|
|
<td rowspan="" colspan="" class="input_title">동시적용 프로젝트번호</td>
|
|
|
|
|
<td><select name="APPLICATION_PROJECT_NO1" id="APPLICATION_PROJECT_NO1" type="select" class="select2 APPLICATION_PROJECT_NO" autocomplete="off"></select></td>
|
|
|
|
|
<td><select name="APPLICATION_PROJECT_NO2" id="APPLICATION_PROJECT_NO2" type="select" class="select2 APPLICATION_PROJECT_NO" autocomplete="off"></select></td>
|
|
|
|
|
<td><select name="APPLICATION_PROJECT_NO3" id="APPLICATION_PROJECT_NO3" type="select" class="select2 APPLICATION_PROJECT_NO" autocomplete="off"></select></td>
|
|
|
|
|
<td><select name="APPLICATION_PROJECT_NO4" id="APPLICATION_PROJECT_NO4" type="select" class="select2 APPLICATION_PROJECT_NO" autocomplete="off"></select></td>
|
|
|
|
|
<td><select name="APPLICATION_PROJECT_NO5" id="APPLICATION_PROJECT_NO5" type="select" class="select2 APPLICATION_PROJECT_NO" autocomplete="off"></select></td>
|
|
|
|
|
<td><select name="APPLICATION_PROJECT_NO6" id="APPLICATION_PROJECT_NO6" type="select" class="select2 APPLICATION_PROJECT_NO" autocomplete="off"></select></td>
|
|
|
|
|
<td><select name="APPLICATION_PROJECT_NO7" id="APPLICATION_PROJECT_NO7" type="select" class="select2 APPLICATION_PROJECT_NO" autocomplete="off"></select></td>
|
|
|
|
|
<td><select name="APPLICATION_PROJECT_NO8" id="APPLICATION_PROJECT_NO8" type="select" class="select2 APPLICATION_PROJECT_NO" autocomplete="off"></select></td>
|
|
|
|
|
<td><select name="APPLICATION_PROJECT_NO9" id="APPLICATION_PROJECT_NO9" type="select" class="select2 APPLICATION_PROJECT_NO" autocomplete="off"></select></td>
|
|
|
|
|
<td><select name="APPLICATION_PROJECT_NO10" id="APPLICATION_PROJECT_NO10" type="select" class="select2 APPLICATION_PROJECT_NO" autocomplete="off"></select></td>
|
|
|
|
|
</tr>
|
|
|
|
|
</table>
|
2025-10-13 19:44:37 +09:00
|
|
|
</div> -->
|
2025-08-29 15:46:08 +09:00
|
|
|
|
|
|
|
|
<div style="clear:both"></div>
|
2025-10-13 19:44:37 +09:00
|
|
|
<div style="width:100%; display: inline-block; float:left;">
|
2025-08-29 15:46:08 +09:00
|
|
|
<div style=" margin: 0 8px;">
|
|
|
|
|
<div id="partExcelPopupFormWrap">
|
|
|
|
|
<div class="form_popup_title" style="position:relative;"> Excel upload<img src="/images/btnExcel.png" style="position:absolute; top:9px; right:135px;"/><span style="position:absolute; top:0px; right:10px; cursor:pointer;" id="templateDownload">Template Download</span></div>
|
|
|
|
|
<div id="excelUploadPopupForm">
|
|
|
|
|
<div class="fileDnDWrap">
|
|
|
|
|
<div id="excelImportDropZone" class="dropzone" style="height:50px;">Drag & Drop 엑셀 템플릿</div>
|
|
|
|
|
<div id="excelImportList">
|
|
|
|
|
<table id="excelImportTable" class="excelUploadPopupForm">
|
|
|
|
|
<thead>
|
|
|
|
|
<tr><td colspan="3">Excel 첨부파일</td></tr>
|
|
|
|
|
</thead>
|
|
|
|
|
<tbody id="excelImportArea">
|
|
|
|
|
</tbody>
|
|
|
|
|
</table>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<section>
|
|
|
|
|
<div class="btn_wrap">
|
|
|
|
|
|
|
|
|
|
<div class="plm_btn_wrap" style="padding:0 8 0 8; text-align: right;">
|
|
|
|
|
<input type="button" class="plm_btns" value="저장" onclick="fn_save();">
|
|
|
|
|
<input type="button" class="plm_btns" value="닫기" onclick="window.close();" >
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<style>
|
|
|
|
|
#excelUploadPopupForm .dropzone {width:99.8% !important}
|
|
|
|
|
</style>
|
|
|
|
|
<div id="plm_table_wrap1" style="padding:0 8 0 8;">
|
|
|
|
|
<div style="">
|
|
|
|
|
<div style="height: 500px;">
|
|
|
|
|
<table id="expenseDetailGrid"></table>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</section>
|
|
|
|
|
</div>
|
2025-10-13 19:44:37 +09:00
|
|
|
<div style="width:50%; display: none;">
|
2025-08-29 15:46:08 +09:00
|
|
|
<div class="in_table_scroll_wrap _table2" style="height:680px;width:99.4%;">
|
|
|
|
|
<table class="plm_table" id="headtr">
|
|
|
|
|
<colgroup>
|
|
|
|
|
<col width="20px" />
|
|
|
|
|
<c:choose>
|
|
|
|
|
<c:when test="${!empty resultList}">
|
|
|
|
|
<c:forEach var="item" items="${resultList}" varStatus="status">
|
|
|
|
|
<c:if test="${status.index eq '0'}">
|
|
|
|
|
<c:forEach var="i" begin="1" end="${item.MAX_LEVEL}">
|
|
|
|
|
<col width="20px" />
|
|
|
|
|
</c:forEach>
|
|
|
|
|
</c:if>
|
|
|
|
|
</c:forEach>
|
|
|
|
|
</c:when>
|
|
|
|
|
</c:choose>
|
|
|
|
|
<col width="150px" /> <!-- 품번 -->
|
|
|
|
|
<col width="150px" /> <!-- 품명 -->
|
|
|
|
|
<col width="30px" /> <!-- Qty -->
|
|
|
|
|
<col width="80px" /> <!-- Material -->
|
|
|
|
|
<col width="100px" /> <!-- SPEC. -->
|
|
|
|
|
<col width="100px" /> <!-- 후처리 -->
|
|
|
|
|
<col width="100px" /> <!-- MAKER. -->
|
|
|
|
|
<col width="75px" /> <!-- REVISION -->
|
|
|
|
|
<col width="80px" /> <!-- EO No -->
|
|
|
|
|
<col width="80px" /> <!-- EO Date -->
|
|
|
|
|
<col width="80px" /> <!-- 부품 유향 -->
|
|
|
|
|
<col width="80px" /> <!-- REMARK -->
|
|
|
|
|
</colgroup>
|
|
|
|
|
<thead>
|
|
|
|
|
<tr class="plm_thead">
|
|
|
|
|
<td></td>
|
|
|
|
|
<c:choose>
|
|
|
|
|
<c:when test="${!empty resultList}">
|
|
|
|
|
<c:forEach var="item" items="${resultList}" varStatus="status">
|
|
|
|
|
<c:if test="${status.index eq '0'}">
|
|
|
|
|
<c:forEach var="i" begin="1" end="${item.MAX_LEVEL}">
|
|
|
|
|
<td>${i}</td>
|
|
|
|
|
</c:forEach>
|
|
|
|
|
</c:if>
|
|
|
|
|
</c:forEach>
|
|
|
|
|
</c:when>
|
|
|
|
|
</c:choose>
|
|
|
|
|
<td>품번</td>
|
|
|
|
|
<td>품명 </td>
|
|
|
|
|
<td>수량</td>
|
|
|
|
|
<td>재질</td>
|
|
|
|
|
<td>사양(규격)</td>
|
|
|
|
|
<td>후처리</td>
|
|
|
|
|
<td>MAKER</td>
|
|
|
|
|
<td>Revision</td>
|
|
|
|
|
<td>EO No</td>
|
|
|
|
|
<td>EO Date</td>
|
|
|
|
|
<td>PART구분</td>
|
|
|
|
|
<td>비고</td>
|
|
|
|
|
</tr>
|
|
|
|
|
</thead>
|
|
|
|
|
<c:forEach var="item" items="${resultList}" varStatus="status">
|
|
|
|
|
<tr class="dataTr" data-LEVEL="${item.LEVEL}" data-REAL_LEVEL="${item.LEV}" data-BOM_REPORT_OBJID="${item.BOM_REPORT_OBJID}" data-TOP_OBJID="${item.ROOT_OBJID}"
|
|
|
|
|
data-SUB_TOP_OBJID="${item.SUB_ROOT_OBJID}" data-OBJID="${item.PART_OBJID}${status.index}" style="display:none;">
|
|
|
|
|
<td>
|
|
|
|
|
<c:if test="${item.LEAF eq '0'}">
|
|
|
|
|
<c:if test="${item.LEVEL eq '1'}">
|
|
|
|
|
<img src="/images/btnPlus.png" width="13px" height="13px" class="btnToggle" style="${item.LEVEL eq '1' and item.LEAF eq '0'?'cursor:pointer;':''}" data-BOM_REPORT_OBJID="${item.BOM_REPORT_OBJID}"
|
|
|
|
|
data-OBJID="${item.PART_OBJID}${status.index}" data-REAL_LEVEL="${item.LEV}" data-TOP_OBJID="${item.ROOT_OBJID}" data-SUB_TOP_OBJID="${item.SUB_ROOT_OBJID}">
|
|
|
|
|
</c:if>
|
|
|
|
|
</c:if>
|
|
|
|
|
</td>
|
|
|
|
|
<c:forEach var="i" begin="1" end="${item.MAX_LEVEL}">
|
|
|
|
|
<c:if test="${item.LEVEL eq i}">
|
|
|
|
|
<td title="${item.LEV}">*</td>
|
|
|
|
|
</c:if>
|
|
|
|
|
<c:if test="${item.LEVEL ne i}">
|
|
|
|
|
<td title="${item.LEV}"> </td>
|
|
|
|
|
</c:if>
|
|
|
|
|
</c:forEach>
|
|
|
|
|
<td style="text-align:left !important;" title="${item.PART_NO}">
|
|
|
|
|
<a href="#" class="btnPartDetail" data-PART_OBJID="${item.PART_OBJID}">${item.PART_NO}</a>
|
|
|
|
|
</td>
|
|
|
|
|
<td style="text-align:left !important;" title="${item.PART_NAME}"> ${item.PART_NAME}</td>
|
|
|
|
|
<td title="${item.QTY}" class="align_r">${item.QTY}<%-- <fmt:formatNumber value="${item.QTY}" pattern="#,###" /> --%></td>
|
|
|
|
|
<td title="${item.MATERIAL}" class="align_c">${item.MATERIAL}</td><!-- 재질 -->
|
|
|
|
|
<td title="${item.SPEC}" class="align_l" style="text-align: left; padding-left: 5px;">${item.SPEC}</td><!-- SPEC -->
|
|
|
|
|
<td title="${item.POST_PROCESSING}" class="align_l" style="text-align: left; padding-left: 5px;">${item.POST_PROCESSING}</td><!-- 후처리 -->
|
|
|
|
|
<td title="${item.MAKER}" class="align_l" style="text-align: left; padding-left: 5px;">${item.MAKER}</td><!-- SPEC -->
|
|
|
|
|
<td title="${item.REVISION}" class="align_c" style="text-align: left; padding-left: 5px;">${item.REVISION}</td><!-- REVISION -->
|
|
|
|
|
<td title="${item.EO_NO}" class="align_c" style="text-align: left; padding-left: 5px;">${item.EO_NO}</td><!-- EO_NO -->
|
|
|
|
|
<td title="${item.EO_DATE}" class="align_c" style="text-align: left; padding-left: 5px;">${item.EO_DATE}</td><!-- EO_DATE -->
|
|
|
|
|
<td title="${item.PART_TYPE_TITLE}" class="align_c">${item.PART_TYPE_TITLE}</td><!-- SIZE -->
|
|
|
|
|
<td title="${item.REMARK}" class="align_c">${item.REMARK}</td><!-- REMARK -->
|
|
|
|
|
</tr>
|
|
|
|
|
</c:forEach>
|
|
|
|
|
</table>
|
2025-10-13 19:44:37 +09:00
|
|
|
</div>
|
|
|
|
|
</div>
|
2025-08-29 15:46:08 +09:00
|
|
|
</div>
|
|
|
|
|
<textarea style="width:0px; height:0px; visibility: hidden;" id="unit_cd">${code_map.unit_cd}</textarea><!-- 코드동적설정 -->
|
|
|
|
|
<textarea style="width:0px; height:0px; visibility: hidden;" id="part_type">${code_map.part_type}</textarea><!-- 코드동적설정 -->
|
|
|
|
|
<textarea style="width:0px; height:0px; visibility: hidden;" id="sup_code">${code_map.sup_code}</textarea><!-- 코드동적설정 -->
|
|
|
|
|
</form>
|
|
|
|
|
</body>
|
|
|
|
|
</html>
|