구매관리의 구매요청서관리와 m-bom 관리의 검색필터 검증완료

This commit is contained in:
leeheejin
2025-11-26 16:49:34 +09:00
parent 1ed810a0f8
commit da7877ac69
5 changed files with 112 additions and 78 deletions

View File

@@ -1158,32 +1158,40 @@ VALUES
AND TO_DATE(RECEIPT_DATE,'YYYY-MM-DD') <![CDATA[ <= ]]> TO_DATE(#{receipt_date_end}, 'YYYY-MM-DD')
</if>
<!-- <if test="SEARCH_PART_NO != null and !''.equals(SEARCH_PART_NO)">
AND OBJID IN (
<if test="SEARCH_PART_NO != null and !''.equals(SEARCH_PART_NO)">
AND SRM.OBJID IN (
SELECT
SRP.SALES_REQUEST_MASTER_OBJID
FROM
SALES_REQUEST_PART SRP
LEFT OUTER JOIN PART_MNG PM
ON SRP.PART_OBJID::VARCHAR = PM.OBJID::VARCHAR
WHERE PART_NO LIKE'%${SEARCH_PART_NO}%'
WHERE PM.PART_NO LIKE '%${SEARCH_PART_NO}%'
)
</if>
<if test="SEARCH_PART_NAME != null and !''.equals(SEARCH_PART_NAME)">
AND OBJID IN (
AND SRM.OBJID IN (
SELECT
SRP.SALES_REQUEST_MASTER_OBJID
FROM
SALES_REQUEST_PART SRP
LEFT OUTER JOIN PART_MNG PM
ON SRP.PART_OBJID::VARCHAR = PM.OBJID::VARCHAR
WHERE PART_NAME LIKE'%${SEARCH_PART_NAME}%'
WHERE PM.PART_NAME LIKE '%${SEARCH_PART_NAME}%'
)
</if> -->
</if>
<if test="SEARCH_STATUS != null and !''.equals(SEARCH_STATUS)">
<![CDATA[ AND 0 < POSITION(STATUS || ',' IN #{SEARCH_STATUS}||',') ]]>
</if>
<if test="regdate_start != null and !''.equals(regdate_start)">
AND SRM.REGDATE::DATE <![CDATA[ >= ]]> #{regdate_start}::DATE
</if>
<if test="regdate_end != null and !''.equals(regdate_end)">
AND SRM.REGDATE::DATE <![CDATA[ <= ]]> #{regdate_end}::DATE
</if>
ORDER BY SRM.REGDATE desc
</select>

View File

@@ -91,15 +91,15 @@ var bomReportObjid = "${resolvedBomReportObjid}";
var mbomHeaderObjid = "${resolvedMbomHeaderObjid}"; // MBOM_HEADER.OBJID (M-BOM 관리 화면에서 사용하는 ID)
var vendorList = []; // 공급업체 목록
// 디버그: resultMap 내용 확인
console.log("=== JSP resultMap 디버그 ===");
console.log("resultMap.PROJECT_MGMT_OBJID:", "${resultMap.PROJECT_MGMT_OBJID}");
console.log("resultMap.BOM_REPORT_OBJID:", "${resultMap.BOM_REPORT_OBJID}");
console.log("resultMap.MBOM_HEADER_OBJID:", "${resultMap.MBOM_HEADER_OBJID}");
console.log("resultMap.PROJECT_NO:", "${resultMap.PROJECT_NO}");
console.log("resolvedProjectId:", projectMgmtObjid);
console.log("resolvedBomReportObjid:", bomReportObjid);
console.log("resolvedMbomHeaderObjid:", mbomHeaderObjid);
// 디버그: resultMap 내용 확인 (주석처리)
// console.log("=== JSP resultMap 디버그 ===");
// console.log("resultMap.PROJECT_MGMT_OBJID:", "${resultMap.PROJECT_MGMT_OBJID}");
// console.log("resultMap.BOM_REPORT_OBJID:", "${resultMap.BOM_REPORT_OBJID}");
// console.log("resultMap.MBOM_HEADER_OBJID:", "${resultMap.MBOM_HEADER_OBJID}");
// console.log("resultMap.PROJECT_NO:", "${resultMap.PROJECT_NO}");
// console.log("resolvedProjectId:", projectMgmtObjid);
// console.log("resolvedBomReportObjid:", bomReportObjid);
// console.log("resolvedMbomHeaderObjid:", mbomHeaderObjid);
function logDebug(){
if(window.console && typeof window.console.log === "function"){
console.log.apply(console, arguments);
@@ -131,7 +131,7 @@ function fn_loadVendorList(callback) {
},
dataType: 'json',
success: function(data) {
console.log("공급업체 목록 응답:", data);
// console.log("공급업체 목록 응답:", data);
if(data && data.RESULTLIST) {
vendorList = {}; // 객체 형태로 변경
vendorList[''] = '선택'; // 빈 값
@@ -142,7 +142,7 @@ function fn_loadVendorList(callback) {
vendorList[objid] = name;
}
});
console.log("vendorList 생성 완료:", Object.keys(vendorList).length + "개");
// console.log("vendorList 생성 완료:", Object.keys(vendorList).length + "개");
}
if(callback) callback();
},
@@ -608,14 +608,14 @@ function fn_loadPurchaseList(mergeMode) {
// M-BOM에서 구매리스트 생성
function fn_loadFromMBom(callback) {
console.log("=== fn_loadFromMBom 호출 ===");
console.log("PROJECT_MGMT_OBJID:", projectMgmtObjid);
console.log("BOM_REPORT_OBJID:", bomReportObjid);
console.log("MBOM_HEADER_OBJID:", mbomHeaderObjid);
// console.log("=== fn_loadFromMBom 호출 ===");
// console.log("PROJECT_MGMT_OBJID:", projectMgmtObjid);
// console.log("BOM_REPORT_OBJID:", bomReportObjid);
// console.log("MBOM_HEADER_OBJID:", mbomHeaderObjid);
// MBOM_HEADER_OBJID가 있으면 우선 사용 (M-BOM 관리 화면과 동일한 방식)
var mbomObjIdToUse = mbomHeaderObjid || projectMgmtObjid;
console.log("사용할 MBOM OBJID:", mbomObjIdToUse);
// console.log("사용할 MBOM OBJID:", mbomObjIdToUse);
$.ajax({
url: "/salesMng/getMBomForPurchaseList.do",
@@ -626,24 +626,24 @@ function fn_loadFromMBom(callback) {
},
dataType: 'json',
success: function(data) {
console.log("=== M-BOM AJAX 응답 ===");
console.log("전체 응답:", JSON.stringify(data));
console.log("data.list:", data ? data.list : "data가 null");
console.log("list 길이:", (data && data.list) ? data.list.length : 0);
if(data && data.list && data.list.length > 0) {
console.log("첫번째 항목 전체 키:", Object.keys(data.list[0]));
console.log("첫번째 항목 PM_HEAT_RAW:", data.list[0].PM_HEAT_RAW);
console.log("첫번째 항목 PM_METHOD_RAW:", data.list[0].PM_METHOD_RAW);
console.log("첫번째 항목 PM_SURFACE_RAW:", data.list[0].PM_SURFACE_RAW);
console.log("첫번째 항목 HEAT_TREATMENT_HARDNESS:", data.list[0].HEAT_TREATMENT_HARDNESS);
}
// console.log("=== M-BOM AJAX 응답 ===");
// console.log("전체 응답:", JSON.stringify(data));
// console.log("data.list:", data ? data.list : "data가 null");
// console.log("list 길이:", (data && data.list) ? data.list.length : 0);
// if(data && data.list && data.list.length > 0) {
// console.log("첫번째 항목 전체 키:", Object.keys(data.list[0]));
// console.log("첫번째 항목 PM_HEAT_RAW:", data.list[0].PM_HEAT_RAW);
// console.log("첫번째 항목 PM_METHOD_RAW:", data.list[0].PM_METHOD_RAW);
// console.log("첫번째 항목 PM_SURFACE_RAW:", data.list[0].PM_SURFACE_RAW);
// console.log("첫번째 항목 HEAT_TREATMENT_HARDNESS:", data.list[0].HEAT_TREATMENT_HARDNESS);
// }
var list = (data && data.list) ? data.list : [];
if(list.length > 0) {
console.log("M-BOM 데이터 " + list.length + "건 로드됨");
// console.log("M-BOM 데이터 " + list.length + "건 로드됨");
_tabulGrid.setData(list);
} else {
console.log("M-BOM 데이터 없음!");
// console.log("M-BOM 데이터 없음!");
// 알림 제거 - 머지 모드에서는 알림 안 띄움
}
if(typeof callback === "function"){

View File

@@ -143,7 +143,7 @@ $("#REQUEST_CD,#PROJECT_NO,#CUSTOMER_NAME,#PRODUCT_NAME,#MECHANICAL_TYPE,#PROJEC
if(fnc_checkNull( list )!=""){
var row = list[0];
console.log("프로젝트 정보:", row); // 디버깅용
// console.log("프로젝트 정보:", row); // 디버깅용
// 기존 필드 (읽기전용 텍스트)
$("#CUSTOMER_NAME" ).val( row["CUSTOMER_NAME" ] );
@@ -156,25 +156,25 @@ $("#REQUEST_CD,#PROJECT_NO,#CUSTOMER_NAME,#PRODUCT_NAME,#MECHANICAL_TYPE,#PROJEC
// 제품구분 (PRODUCT from PROJECT_MGMT) - 드롭다운
if(fnc_checkNull(row["PRODUCT"]) != ""){
$("#PRODUCT_NAME").val(row["PRODUCT"]).trigger("change");
console.log("제품구분 설정:", row["PRODUCT"]);
// console.log("제품구분 설정:", row["PRODUCT"]);
}
// 국내/해외 (AREA_CD from PROJECT_MGMT)
if(fnc_checkNull(row["AREA_CD"]) != ""){
$("#AREA_CD").val(row["AREA_CD"]).trigger("change");
console.log("국내/해외 설정:", row["AREA_CD"]);
// console.log("국내/해외 설정:", row["AREA_CD"]);
}
// 고객사 (CUSTOMER_OBJID from PROJECT_MGMT)
if(fnc_checkNull(row["CUSTOMER_OBJID"]) != ""){
$("#CUSTOMER_OBJID").val(row["CUSTOMER_OBJID"]).trigger("change");
console.log("고객사 설정:", row["CUSTOMER_OBJID"]);
// console.log("고객사 설정:", row["CUSTOMER_OBJID"]);
}
// 유/무상 (PAID_TYPE from CONTRACT_MGMT)
if(fnc_checkNull(row["PAID_TYPE"]) != ""){
$("#PAID_TYPE").val(row["PAID_TYPE"]).trigger("change");
console.log("유/무상 설정:", row["PAID_TYPE"]);
// console.log("유/무상 설정:", row["PAID_TYPE"]);
}
}
@@ -235,7 +235,7 @@ function fn_getSalesRequestTargetPartList(masterObjId,bomObjId){
var resultData = data;
$.each(resultData, function(i){
console.log("resultData["+i+"]:"+resultData[i]);
// console.log("resultData["+i+"]:"+resultData[i]);
//var RNUM = fnc_checkNull(resultData[i].RNUM);
var rowObjId = fnc_checkNull(resultData[i].OBJID);
@@ -496,13 +496,13 @@ function fn_Supply_save(){
function fn_loadMbomParts(projectObjId){
if(fnc_checkNull(projectObjId) == "") return;
console.log("M-BOM 품목 로드 시작, PROJECT_OBJID:", projectObjId);
// 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);
// console.log("M-BOM 품목 조회 결과:", resultList);
if(resultList && resultList.length > 0){
// 기존 품목 초기화
@@ -542,9 +542,9 @@ function fn_loadMbomParts(projectObjId){
});
$(".select2").select2();
console.log("M-BOM 품목 " + resultList.length + "건 로드 완료");
// console.log("M-BOM 품목 " + resultList.length + "건 로드 완료");
} else {
console.log("M-BOM 품목이 없습니다.");
// console.log("M-BOM 품목이 없습니다.");
}
}
@@ -567,15 +567,15 @@ function fn_addBomPart(selectboxId,selectedVal,sql_id,sql_supply){
paramData.UNIT_CODE = unit_code;
}
resultList = fnc_getJsonAllDataListBySqlId(paramData);
console.log("M-BOM 품목 조회 결과:", resultList.length, "건");
// console.log("M-BOM 품목 조회 결과:", resultList.length, "건");
}
// 2. M-BOM 품목이 없으면 전체 PART_MNG에서 조회
if(resultList.length == 0){
console.log("M-BOM 품목이 없어 전체 품목에서 조회합니다.");
// console.log("M-BOM 품목이 없어 전체 품목에서 조회합니다.");
var allPartData = {"sqlId":"salesMng.getAllPartMngList"};
resultList = fnc_getJsonAllDataListBySqlId(allPartData);
console.log("전체 품목 조회 결과:", resultList.length, "건");
// console.log("전체 품목 조회 결과:", resultList.length, "건");
// 전체 품목 조회 결과 처리
if(0 < resultList.length){
@@ -621,6 +621,7 @@ function fn_callbackFnc(){
.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;}
.required-mark { color: red; font-weight: bold; margin-left: 2px; }
</style>
<body>
<form name="form1" id="form1" action="" method="post">
@@ -648,7 +649,7 @@ function fn_callbackFnc(){
</colgroup>
<tr>
<td class="input_title"><label for="">구매유형</label></td>
<td class="input_title"><label for="">구매유형<span class="required-mark">*</span></label></td>
<td>
<select name="PURCHASE_TYPE" id="PURCHASE_TYPE" reqTitle="구매유형" type="select" class="select2" style="width: 100%;">
<option value="">선택</option> ${code_map.purchase_type}
@@ -660,13 +661,13 @@ function fn_callbackFnc(){
<option value="">선택</option> ${code_map.project_no}
</select>
</td>
<td class="input_title"><label for="">구매유형</label></td>
<td class="input_title"><label for="">제품구분<span class="required-mark">*</span></label></td>
<td>
<select name="PURCHASE_TYPE2" id="PURCHASE_TYPE2" reqTitle="구매유형" type="select" class="select2" style="width: 100%;">
<select name="PURCHASE_TYPE2" id="PURCHASE_TYPE2" reqTitle="제품구분" type="select" class="select2" style="width: 100%;">
<option value="">선택</option> ${code_map.purchase_type}
</select>
</td>
<td class="input_title"><label for="">주문유형</label></td>
<td class="input_title"><label for="">주문유형<span class="required-mark">*</span></label></td>
<td>
<select name="ORDER_TYPE" id="ORDER_TYPE" reqTitle="주문유형" type="select" class="select2" style="width: 100%;">
<option value="">선택</option> ${code_map.order_type}
@@ -674,26 +675,26 @@ function fn_callbackFnc(){
</td>
</tr>
<tr>
<td class="input_title"><label for="">제품구분</label></td>
<td class="input_title"><label for="">제품구분<span class="required-mark">*</span></label></td>
<td>
<select name="PRODUCT_NAME" id="PRODUCT_NAME" reqTitle="제품구분" type="select" class="select2" style="width: 100%;">
<option value="">선택</option> ${code_map.product_name}
</select>
</td>
<td class="input_title"><label for="">국내/해외</label></td>
<td class="input_title"><label for="">국내/해외<span class="required-mark">*</span></label></td>
<td>
<select name="AREA_CD" id="AREA_CD" reqTitle="국내/해외" type="select" class="select2" style="width: 100%;">
<option value="">선택</option> ${code_map.area_cd}
</select>
</td>
<td class="input_title"><label for="">고객사</label></td>
<td class="input_title"><label for="">고객사<span class="required-mark">*</span></label></td>
<td>
<!-- <input type="text" name="CUSTOMER_NAME" id="CUSTOMER_NAME" value="${resultMap.CUSTOMER_NAME}" readonly> -->
<select name="CUSTOMER_OBJID" id="CUSTOMER_OBJID" reqTitle="고객사" type="select" class="select2" style="width: 100%;">
<option value="">선택</option> ${code_map.customer_objid}
</select>
</td>
<td class="input_title"><label for="">유/무상</label></td>
<td class="input_title"><label for="">유/무상<span class="required-mark">*</span></label></td>
<td>
<select name="PAID_TYPE" id="PAID_TYPE" reqTitle="유/무상" type="select" class="select2" style="width: 100%;">
<option value="">선택</option> ${code_map.paid_type}

View File

@@ -33,7 +33,7 @@
height: 18px !important;
}
.select2-container .select2-selection--multiple .select2-selection__rendered {
overflow: auto !important;
/* overflow: auto !important; */
}
</style>
<script>
@@ -492,6 +492,7 @@ function fn_formPopUp(objId,sales_request_objid){
<table>
<tbody>
<tr>
<%-- 년도 주석처리
<td><label for="Year">년도</label></td>
<td>
<select name="Year" id="Year" class="select2" autocomplete="off" style="width:110px;">
@@ -501,10 +502,12 @@ function fn_formPopUp(objId,sales_request_objid){
</c:forEach>
</select>
</td>
<%-- <td><label for="">프로젝트번호</label></td>
<td><select name="contract_objid" id="contract_objid" class="select2" autocomplete="off" style="width:120px;"><option value="">선택</option>${code_map.contract_objid}</select></td> --%>
--%>
<%-- <td><label for="">프로젝트번호</label></td>
<td><select name="contract_objid" id="contract_objid" class="select2" autocomplete="off" style="width:120px;"><option value="">선택</option>${code_map.contract_objid}</select></td> --%>
<%-- 프로젝트번호 주석처리
<td><label for="project_no">프로젝트번호</label></td>
<td>
<select name="project_no" id="project_no" style="width:300px;" class="select2" autocomplete="off" multiple="multiple">
@@ -512,41 +515,48 @@ function fn_formPopUp(objId,sales_request_objid){
${code_map.contract_objid}
</select>
</td>
--%>
<%-- 요청구분 주석처리
<td><label for="">요청구분</label></td>
<td><select name="request_cd" id="request_cd" class="select2" autocomplete="off" style="width:120px;"><option value="">선택</option>${code_map.request_cd}</select></td>
<td><select name="request_cd" id="request_cd" class="select2" autocomplete="off" style="width:120px;"><option value="">선택</option>${code_map.request_cd}</select></td>
--%>
<!-- <td><label for="">기종(모델)명</label></td>
<td>
<select name="SEARCH_PRODUCT_CODE" id="SEARCH_PRODUCT_CODE" style="" class="select2" autocomplete="off"></select>
</td> -->
<%-- <td class="align_r">
<label for="" class="">Part No</label>
</td>
<td>
<input type="text" name="SEARCH_PART_NO" id="SEARCH_PART_NO" value="${param.SEARCH_PART_NO}"/>
</td>
<%-- 품번 활성화 --%>
<td class="align_r">
<label for="" class="">Part Name</label>
<label for="" class="">품번</label>
</td>
<td>
<input type="text" name="SEARCH_PART_NAME" id="SEARCH_PART_NAME" value="${param.SEARCH_PART_NAME}" placeholder="ex) HEX. BOLT"/>
</td> --%>
<input type="text" name="SEARCH_PART_NO" id="SEARCH_PART_NO" value="${param.SEARCH_PART_NO}" style="width:150px;"/>
</td>
<%-- 품명 활성화 --%>
<td class="align_r">
<label for="" class="">품명</label>
</td>
<td>
<input type="text" name="SEARCH_PART_NAME" id="SEARCH_PART_NAME" value="${param.SEARCH_PART_NAME}" style="width:150px;"/>
</td>
<%-- 상태 주석처리
<td class="align_r">
<label for="" class="">상태</label>
</td>
<td>
<select name="status" id="status" class="select2" autocomplete="off" style="width:130px">
<option value="">선택</option>
<%-- ${code_map.appr_status} --%>
<option value="create">미접수</option>
<option value="reception">접수</option>
<option value="orderComplete">발주완료</option>
</select>
</td>
--%>
<%-- <td><select name="act_status" id="act_status" class="select2" autocomplete="off" style="width:120px;"><option value="">선택</option>${code_map.act_status}</select></td> --%>
<%-- 접수자 주석처리
<td><label for="">접수자</label></td>
<td><select name="receipt_writer" id="receipt_writer" class="select2" autocomplete="off" style="width:120px;"><option value="">선택</option>${code_map.receipt_writer}</select></td>
@@ -555,6 +565,13 @@ function fn_formPopUp(objId,sales_request_objid){
<input type="text" name="receipt_date_start" id="receipt_date_start" style="width:90px;" autocomplete="off" value="${param.confirm_date_start}" class="date_icon">~
<input type="text" name="receipt_date_end" id="receipt_date_end" style="width:90px;" autocomplete="off" value="${param.confirm_date_end }" class="date_icon">
</td>
--%>
<%-- 작성일 활성화 --%>
<td class="align_r"><label>작성일</label></td>
<td>
<input type="text" name="regdate_start" id="regdate_start" style="width:90px;" autocomplete="off" value="${param.regdate_start}" class="date_icon">~
<input type="text" name="regdate_end" id="regdate_end" style="width:90px;" autocomplete="off" value="${param.regdate_end}" class="date_icon">
</td>
</tr>
</tbody>
</table>

View File

@@ -1158,32 +1158,40 @@ VALUES
AND TO_DATE(RECEIPT_DATE,'YYYY-MM-DD') <![CDATA[ <= ]]> TO_DATE(#{receipt_date_end}, 'YYYY-MM-DD')
</if>
<!-- <if test="SEARCH_PART_NO != null and !''.equals(SEARCH_PART_NO)">
AND OBJID IN (
<if test="SEARCH_PART_NO != null and !''.equals(SEARCH_PART_NO)">
AND SRM.OBJID IN (
SELECT
SRP.SALES_REQUEST_MASTER_OBJID
FROM
SALES_REQUEST_PART SRP
LEFT OUTER JOIN PART_MNG PM
ON SRP.PART_OBJID::VARCHAR = PM.OBJID::VARCHAR
WHERE PART_NO LIKE'%${SEARCH_PART_NO}%'
WHERE PM.PART_NO LIKE '%${SEARCH_PART_NO}%'
)
</if>
<if test="SEARCH_PART_NAME != null and !''.equals(SEARCH_PART_NAME)">
AND OBJID IN (
AND SRM.OBJID IN (
SELECT
SRP.SALES_REQUEST_MASTER_OBJID
FROM
SALES_REQUEST_PART SRP
LEFT OUTER JOIN PART_MNG PM
ON SRP.PART_OBJID::VARCHAR = PM.OBJID::VARCHAR
WHERE PART_NAME LIKE'%${SEARCH_PART_NAME}%'
WHERE PM.PART_NAME LIKE '%${SEARCH_PART_NAME}%'
)
</if> -->
</if>
<if test="SEARCH_STATUS != null and !''.equals(SEARCH_STATUS)">
<![CDATA[ AND 0 < POSITION(STATUS || ',' IN #{SEARCH_STATUS}||',') ]]>
</if>
<if test="regdate_start != null and !''.equals(regdate_start)">
AND SRM.REGDATE::DATE <![CDATA[ >= ]]> #{regdate_start}::DATE
</if>
<if test="regdate_end != null and !''.equals(regdate_end)">
AND SRM.REGDATE::DATE <![CDATA[ <= ]]> #{regdate_end}::DATE
</if>
ORDER BY SRM.REGDATE desc
</select>