Merge pull request 'V2025112501' (#78) from V2025112501 into main

Reviewed-on: #78
This commit was merged in pull request #78.
This commit is contained in:
2025-11-26 06:36:10 +00:00
12 changed files with 1881 additions and 478 deletions

View File

@@ -152,14 +152,14 @@ $(document).ready(function(){
,{name:"CLIENT_TYPE",index:"CLIENT_TYPE", width: 100, align:"center", hidden: false, sortable:false, editable:true
,edittype:"select"
,formatter:"select"
,editoptions:{
,editoptions:{
value: client_type
,dataInit : function(e){
e.style.width = "92%";
e.style.fontSize = 13;
}
}
}
,dataInit : function(e){
e.style.width = "92%";
e.style.fontSize = 13;
}
}
}
,{name:"BUS_REG_NO",index:"BUS_REG_NO", width: 150, align:"center", hidden: false, sortable:false, editable:true
,editoptions:{dataInit : function(e){e.style.fontSize = 13;}}
}
@@ -513,23 +513,23 @@ function fn_count(){
var clientCd = gridData[i].CLIENT_CD;
if(clientCd && clientCd.trim() !== ""){
// AJAX로 중복 체크
$.ajax({
$.ajax({
url:"/admin/checkDuplicateClientMngList.do",
type:"POST",
type:"POST",
data:{"CLIENT_CD": clientCd},
dataType:"json",
async: false,
success:function(data){
dataType:"json",
async: false,
success:function(data){
if(data.result == "true"){
dupCnt++; // 중복
} else {
nowCnt++; // 신규
}
},
error: function(jqxhr, status, error){
},
error: function(jqxhr, status, error){
nowCnt++; // 에러 시 신규로 간주
}
});
}
});
}
}

View File

@@ -20,7 +20,7 @@ function saveClient(){
alert(result.MESSAGE || result.message);
if(result.RESULTFLAG == "true" || result.resultFlag == "true"){
if(opener && opener.fn_search){
opener.fn_search();
opener.fn_search();
}
self.close();
}

View File

@@ -21,20 +21,20 @@ function saveWarehouse(){
form.modify_dt.value = convertToDBFormat(modifyDt);
}
$.ajax({
$.ajax({
type: "POST",
url: "/admin/saveWarehouseListInfo.do",
data: $(form).serialize(),
dataType: "json",
success: function(result){
success: function(result){
alert(result.message);
if(result.resultFlag == "true"){
opener.fn_search();
self.close();
}
}
});
}
}
}
});
}
}
function convertToDBFormat(dateStr) {
@@ -70,10 +70,10 @@ function convertToDBFormat(dateStr) {
</script>
</head>
<body>
<section id="commonSection" class="admin_option_min">
<div class="admin_title">
<section id="commonSection" class="admin_option_min">
<div class="admin_title">
<h2>창고 등록/수정</h2>
</div>
</div>
<div id="businessPopupFormWrap">
<form name="warehouseForm" id="warehouseForm">
<input type="hidden" name="objid" value="${info.OBJID}">
@@ -87,94 +87,94 @@ function convertToDBFormat(dateStr) {
<tr>
<td class="input_title"><label for=""></label>위치명<label></td>
<td><input type="text" name="location_name" value="${info.LOCATION_NAME}" required></td>
</tr>
</tr>
<tr>
<td class="input_title"><label for=""></label>위치설명<label></td>
<td><input type="text" name="location_description" value="${info.LOCATION_DESCRIPTION}"></td>
</tr>
</tr>
<tr>
<td class="input_title"><label for=""></label>가출고코드<label></td>
<td><input type="text" name="out_code" value="${info.OUT_CODE}"></td>
</tr>
</tr>
<tr>
<td class="input_title"><label for=""></label>가출고거래처명<label></td>
<td><input type="text" name="out_co_name" value="${info.OUT_CO_NAME}"></td>
</tr>
</tr>
<tr>
<td class="input_title"><label for=""></label>적합여부<label></td>
<td>
<td>
<select name="fit_status">
<option value="">선택</option>
<option value="">선택</option>
<option value="Y" ${info.FIT_STATUS eq 'Y' ? 'selected' : ''}>적합</option>
<option value="N" ${info.FIT_STATUS eq 'N' ? 'selected' : ''}>부적합</option>
</select>
</td>
</tr>
</select>
</td>
</tr>
<tr>
<td class="input_title"><label for=""></label>가용재고여부<label></td>
<td>
<td>
<select name="available_status">
<option value="">선택</option>
<option value="">선택</option>
<option value="Y" ${info.AVAILABLE_STATUS eq 'Y' ? 'selected' : ''}>여</option>
<option value="N" ${info.AVAILABLE_STATUS eq 'N' ? 'selected' : ''}>부</option>
</select>
</td>
</tr>
</select>
</td>
</tr>
<tr>
<td class="input_title"><label for=""></label>사용여부<label></td>
<td>
<select name="use_status">
<option value="Y" ${empty info.USE_STATUS or info.USE_STATUS eq 'Y' ? 'selected' : ''}>사용</option>
<option value="N" ${info.USE_STATUS eq 'N' ? 'selected' : ''}>미사용</option>
</select>
</td>
</tr>
</select>
</td>
</tr>
<tr>
<td class="input_title"><label for=""></label>BASELOC_CD<label></td>
<td><input type="text" name="base_loc_cd" value="${info.BASE_LOC_CD}"></td>
</tr>
</tr>
<tr>
<td class="input_title"><label for=""></label>CO_CD<label></td>
<td><input type="text" name="co_cd" value="${info.CO_CD}"></td>
</tr>
</tr>
<tr>
<td class="input_title"><label for=""></label>LOC_NMK<label></td>
<td><input type="text" name="loc_nmk" value="${info.LOC_NMK}"></td>
</tr>
</tr>
<tr>
<td class="input_title"><label for=""></label>INSERT_ID<label></td>
<td><input type="text" name="insert_id" value="${info.INSERT_ID}"></td>
</tr>
</tr>
<tr>
<td class="input_title"><label for=""></label>INSERT_IP<label></td>
<td><input type="text" name="insert_ip" value="${info.INSERT_IP}"></td>
</tr>
</tr>
<tr>
<td class="input_title"><label for=""></label>INSERT_DT<label></td>
<td><input type="text" name="insert_dt" value="${info.INSERT_DT}" placeholder="YYYY-MM-DD HH:MM:SS"></td>
</tr>
</tr>
<tr>
<td class="input_title"><label for=""></label>MODIFY_ID<label></td>
<td><input type="text" name="modify_id" value="${info.MODIFY_ID}"></td>
</tr>
</tr>
<tr>
<td class="input_title"><label for=""></label>MODIFY_IP<label></td>
<td><input type="text" name="modify_ip" value="${info.MODIFY_IP}"></td>
</tr>
</tr>
<tr>
<td class="input_title"><label for=""></label>MODIFY_DT<label></td>
<td><input type="text" name="modify_dt" value="${info.MODIFY_DT}" placeholder="YYYY-MM-DD HH:MM:SS"></td>
</tr>
</tr>
<tr>
<td class="input_title"><label for=""></label>ATTR_NMK<label></td>
<td><input type="text" name="attr_nmk" value="${info.ATTR_NMK}"></td>
</tr>
</table>
</tr>
</table>
</form>
</div>
<div id="adminPopupBtnWrap">
</div>
<div id="adminPopupBtnWrap">
<button type="button" class="btns" onclick="saveWarehouse()">저장</button>
</div>
</section>
</div>
</section>
</body>
</html>

File diff suppressed because it is too large Load Diff

View File

@@ -178,6 +178,8 @@ $("#REQUEST_CD,#PROJECT_NO,#CUSTOMER_NAME,#PRODUCT_NAME,#MECHANICAL_TYPE,#PROJEC
}
}
// ★★★ M-BOM 품목 자동 로드 ★★★
fn_loadMbomParts($(this).val());
}
});
@@ -296,14 +298,35 @@ function fn_getSalesRequestTargetPartList(masterObjId,bomObjId){
});
$("#partListArea").append(appendText);
// 프로젝트번호가 설정되어 있는지 확인하고, 없으면 품번 드롭다운을 채울 수 없음
var projectNo = $("#PROJECT_NO").val();
if(!projectNo || projectNo == "") {
console.warn("프로젝트번호가 선택되지 않아 품번 목록을 불러올 수 없습니다.");
}
$.each(resultData, function(i){
var rowObjId = fnc_checkNull(resultData[i].OBJID);
var PART_OBJID = fnc_checkNull(resultData[i].PART_OBJID);
var PART_NO = fnc_checkNull(resultData[i].PART_NO);
var PART_NAME = fnc_checkNull(resultData[i].PART_NAME);
// 공급업체 제거로 주석처리
// var PARTNER_OBJID = fnc_checkNull(resultData[i].PARTNER_OBJID);
// fnc_getAdminSupCdListAppend("", "PARTNER_OBJID_"+rowObjId, PARTNER_OBJID);
// $("#PARTNER_OBJID_"+rowObjId).val(PARTNER_OBJID);
fn_addBomPart("PART_OBJID_"+rowObjId, PART_OBJID, "PART_NAME_"+rowObjId,"");
// M-BOM에 없는 품번이면 수동으로 추가
if(PART_OBJID != "" && PART_NO != "") {
var selectBox = $("#PART_OBJID_"+rowObjId);
// 이미 옵션이 있는지 확인
if(selectBox.find("option[value='"+PART_OBJID+"']").length == 0) {
selectBox.append("<option value='"+PART_OBJID+"'>"+PART_NO+"</option>");
}
selectBox.val(PART_OBJID);
$("#PART_NAME_"+rowObjId).val(PART_NAME);
}
});
$(".select2").select2();
},
@@ -469,44 +492,122 @@ function fn_Supply_save(){
}
}
// ★★★ 프로젝트 선택 시 M-BOM 품목 자동 로드 ★★★
function fn_loadMbomParts(projectObjId){
if(fnc_checkNull(projectObjId) == "") return;
console.log("M-BOM 품목 로드 시작, PROJECT_OBJID:", projectObjId);
// M-BOM 품목 조회
var paramData = {"sqlId":"salesMng.SalesBomPartListByProjectUnit", "PROJECT_OBJID":projectObjId};
var resultList = fnc_getJsonAllDataListBySqlId(paramData);
console.log("M-BOM 품목 조회 결과:", resultList);
if(resultList && resultList.length > 0){
// 기존 품목 초기화
$("#partListArea").empty();
// M-BOM 품목을 행으로 추가
$.each(resultList, function(i, item){
var rowObjId = fnc_createObjId();
var PART_OBJID = fnc_checkNull(item.PART_OBJID);
var PART_NO = fnc_checkNull(item.PART_NO);
var PART_NAME = fnc_checkNull(item.PART_FULL_NAME) || fnc_checkNull(item.PART_NAME);
var QTY = fnc_checkNull(item.ORDER_QTY) || 1;
var appendText = "";
appendText += "<tr class='dataTr' id='"+rowObjId+"'>";
appendText += " <input type='hidden' name='OBJID' value='"+rowObjId+"' class='TARGET_OBJID'>";
appendText += " <td class='align_c'>";
appendText += " <input type='checkbox' name='chkOBJID"+rowObjId+"' value='"+rowObjId+"' class='chkBox'>";
appendText += " </td>";
appendText += " <td class='align_l'>";
appendText += " <select name='PART_OBJID_"+rowObjId+"' id='PART_OBJID_"+rowObjId+"' reqTitle='품번' type='select' class='select2' style='width: 100%;'>";
appendText += " <option value='"+PART_OBJID+"'>"+PART_NO+"</option>";
appendText += " </select>";
appendText += " </td>";
appendText += " <td class='align_l'>";
appendText += " <input type='text' name='PART_NAME_"+rowObjId+"' id='PART_NAME_"+rowObjId+"' value='"+PART_NAME+"' readonly style='width: 100%;'>";
appendText += " </td>";
appendText += " <td class='align_c'>";
appendText += " <input type='number' name='QTY_"+rowObjId+"' value='"+QTY+"' reqTitle='수량' required style='text-align: center;'>";
appendText += " </td>";
appendText += "</tr>";
$("#partListArea").append(appendText);
// 품번 드롭다운에 M-BOM 전체 품목 옵션 추가
fn_addBomPart("PART_OBJID_"+rowObjId, PART_OBJID, "PART_NAME_"+rowObjId, "");
});
$(".select2").select2();
console.log("M-BOM 품목 " + resultList.length + "건 로드 완료");
} else {
console.log("M-BOM 품목이 없습니다.");
}
}
//계약제품, 업체명으로 BOM에 등록된 부품정보를 자동 추가
function fn_addBomPart(selectboxId,selectedVal,sql_id,sql_supply){
$("#BOM_REPORT_OBJID").val("");
//var type = $("#TYPE").val(); //발주부품
var project_objid = $("#PROJECT_NO").val(); //프로젝트명
var unit_code = $("#UNIT_NAME").val(); //유닛명
//var partner_objid = $("#PARTNER_OBJID").val(); //공급업체
//console.log('type:'+type + ' contract_mgmt_objid:'+contract_mgmt_objid + ' unit_code:'+unit_code + ' partner_objid:'+partner_objid);
$("#"+selectboxId).empty();
$("#"+selectboxId).append("<option value=''>선택</option>");
//프로젝트번호만 있으면 품번 조회 가능 (유닛명은 선택사항)
var resultList = [];
// 1. 프로젝트가 선택되어 있으면 M-BOM 품목 먼저 조회
if(fnc_checkNull(project_objid)!=""){
$("#"+selectboxId).empty();
$("#"+selectboxId).append("<option value=''>선택</option>");
//구매BOM 조회해서 부품정보를 가져온다
var paramData = {"sqlId":"salesMng.SalesBomPartListByProjectUnit", "PROJECT_OBJID":project_objid};
// 유닛명이 있으면 추가
if(fnc_checkNull(unit_code)!=""){
paramData.UNIT_CODE = unit_code;
}
var resultList = fnc_getJsonAllDataListBySqlId(paramData);
resultList = fnc_getJsonAllDataListBySqlId(paramData);
console.log("M-BOM 품목 조회 결과:", resultList.length, "건");
}
// 2. M-BOM 품목이 없으면 전체 PART_MNG에서 조회
if(resultList.length == 0){
console.log("M-BOM 품목이 없어 전체 품목에서 조회합니다.");
var allPartData = {"sqlId":"salesMng.getAllPartMngList"};
resultList = fnc_getJsonAllDataListBySqlId(allPartData);
console.log("전체 품목 조회 결과:", resultList.length, "건");
// 전체 품목 조회 결과 처리
if(0 < resultList.length){
for (var i = 0; i < resultList.length; i++) {
var commonCodeId = resultList[i].PART_OBJID;
var commonCodeId = resultList[i].OBJID;
var commonCodeName = resultList[i].PART_NO;
var partName = resultList[i].PART_NAME;
var supplyObjid = resultList[i].SUPPLY_OBJID;
$("#"+selectboxId).append("<option value='"+commonCodeId+"' data-part_name='"+partName+"' data-supplyObjid='"+supplyObjid+"'>"+commonCodeName+"</option>");
$("#"+selectboxId).append("<option value='"+commonCodeId+"' data-part_name='"+partName+"'>"+commonCodeName+"</option>");
}
$("#"+selectboxId).val(selectedVal);
$("#"+selectboxId).change(function(){
$("#"+sql_id).val($(this).find("option:selected").attr("data-part_name"));
$("#"+sql_supply).val($(this).find("option:selected").attr("data-supplyObjid"));
});
}
} else {
// M-BOM 품목 처리
for (var i = 0; i < resultList.length; i++) {
var commonCodeId = resultList[i].PART_OBJID;
var commonCodeName = resultList[i].PART_NO;
var partName = resultList[i].PART_NAME || resultList[i].PART_FULL_NAME;
var supplyObjid = resultList[i].SUPPLY_OBJID;
$("#"+selectboxId).append("<option value='"+commonCodeId+"' data-part_name='"+partName+"' data-supplyObjid='"+supplyObjid+"'>"+commonCodeName+"</option>");
}
}
// 선택값 설정 및 change 이벤트 바인딩
if(fnc_checkNull(selectedVal) != ""){
$("#"+selectboxId).val(selectedVal);
}
$("#"+selectboxId).off("change").on("change", function(){
$("#"+sql_id).val($(this).find("option:selected").attr("data-part_name"));
if(sql_supply){
$("#"+sql_supply).val($(this).find("option:selected").attr("data-supplyObjid"));
}
});
$("#"+selectboxId).trigger("change");
}

View File

@@ -100,7 +100,7 @@ $(document).ready(function(){
//구매요청서 작성
$("#btnOrderReg").click(function(){
fn_openSalesRequestPopUp("");
fn_openSalesRequestFormPopUp("");
});
//품의서 생성 (TODO: 품의서 생성 기능 구현 필요 - 기존 발주서 작성 기능과 다름)
@@ -221,16 +221,16 @@ var columns = [
,{headerHozAlign : 'center', hozAlign : 'center', title : "유/무상", field :"PAID_TYPE_NAME" , widthGrow:0.9 }
,{headerHozAlign : 'center', hozAlign : 'left', title : "품번", field :"PART_NO" , widthGrow:1.4}
,{headerHozAlign : 'center', hozAlign : 'left' , title : "품명", field :"PART_NAME" , widthGrow:1.8 }
,{headerHozAlign : 'center', hozAlign : 'center', title : "구매요청서", field :"REQUEST_MNG_NO" , widthGrow:1.1,
formatter: function(cell, formatterParams, onRendered){
var objid = fnc_checkNull(cell.getData().OBJID);
var iconClass = (objid != '' && objid != null) ? 'file_icon' : 'file_empty_icon';
return '<a href="#" class="File ' + iconClass + '" style="width:20px; height:20px; display:inline-block;"></a>';
},
cellClick : function(e, cell) {
fn_openSalesRequestPopUp(cell.getData().OBJID);
,{headerHozAlign : 'center', hozAlign : 'center', title : "구매요청서", field :"REQUEST_MNG_NO" , widthGrow:1.1,
formatter: function(cell, formatterParams, onRendered){
var objid = fnc_checkNull(cell.getData().OBJID);
var iconClass = (objid != '' && objid != null) ? 'file_icon' : 'file_empty_icon';
return '<a href="#" class="File ' + iconClass + '" style="width:20px; height:20px; display:inline-block;"></a>';
},
cellClick : function(e, cell) {
fn_openSalesRequestFormPopUp(cell.getData().OBJID);
}
}
}
,{headerHozAlign : 'center', hozAlign : 'center', title : "요청인", field :"REQUEST_USER_NAME" , widthGrow:1.1 }
,{headerHozAlign : 'center', hozAlign : 'center', title : "입고요청일", field :"DELIVERY_REQUEST_DATE" , widthGrow:1.1 }
,{headerHozAlign : 'center', hozAlign : 'center', title : "작성일", field :"REGDATE_TITLE" , widthGrow:1.1 }
@@ -281,17 +281,16 @@ function fn_salesRequestTargetBOMListPopUp(){
window.open(url,"salesRequestTargetBOMListPopUp","width=1300,height=550");
}
//구매의뢰 요청 팝업
//구매의뢰 요청 팝업 (요청번호 클릭 시 - 구매리스트 화면)
function fn_openSalesRequestPopUp(objId){
var url = "";
if("" == objId){
url = "/salesMng/salesRequestFormPopUp.do?SALES_REQUEST_MASTER_OBJID="+objId;
}else{
//url = "/salesMng/salesRequestDetailPopUp.do?SALES_REQUEST_MASTER_OBJID="+objId;
url = "/salesMng/salesRequestFormPopUp.do?SALES_REQUEST_MASTER_OBJID="+objId;
}
window.open(url,"salesRequestPopUp","width=1100,height=630");
var url = "/salesMng/purchaseListFormPopUp.do?SALES_REQUEST_MASTER_OBJID="+objId;
window.open(url,"purchaseListPopUp","width=1400,height=800,scrollbars=yes,resizable=yes");
}
//구매요청서 작성 팝업 (구매요청서 파일 아이콘 클릭 시)
function fn_openSalesRequestFormPopUp(objId){
var url = "/salesMng/salesRequestFormPopUp.do?SALES_REQUEST_MASTER_OBJID="+objId;
window.open(url,"salesRequestFormPopUp","width=1100,height=630");
}
function fn_releaseSalesRequest(){