Files
wace_plm/WebContent/WEB-INF/view/salesMng/salesRequestFormPopUp.jsp

879 lines
32 KiB
Plaintext
Raw Normal View History

<%@ 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.*" %>
2025-11-24 18:37:52 +09:00
<%@include file= "/init_new.jsp" %>
<%
Map info = (HashMap)(request.getAttribute("resultMap"));
boolean isModify = true;
if(info!=null &&
( CommonUtils.checkNull(info.get("STATUS_TITLE")).equals( "결재중" )
||CommonUtils.checkNull(info.get("STATUS_TITLE")).equals( "결재완료" )
||CommonUtils.checkNull(info.get("STATUS_TITLE")).equals( "접수" )
2026-01-15 18:32:59 +09:00
||CommonUtils.checkNull(info.get("STATUS")).equals( "confirmed" )
)
){
isModify = false; //수정불가
}
String actType = (String)request.getAttribute("actType");
%>
<%
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>
var grid;
$(function(){
$("._table1").scroll(function () {
$("._table2").scrollLeft($("._table1").scrollLeft());
});
$("._table2").scroll(function () {
$("._table1").scrollLeft($("._table2").scrollLeft());
});
if(fnc_isNotEmpty("${resultMap.WRITER}") && "${resultMap.WRITER}" != "${connectUserId}"){
$("#btnReg").hide();
$("#btnAppr").hide();
}
// 전체 체크 기능
$("#allCheck").click(function() {
if ($("#allCheck").prop("checked")) {
$("input[type=checkbox]").prop("checked", true);
} else {
$("input[type=checkbox]").prop("checked", false);
}
});
$("#btnReg").click(function(){
// 물품구매요청서를 저장한다.
if(fnc_validate("form1")){
if(0 < $("#partListArea tr").length){
var zeroQty = false;
$("input[name*=QTY]").each(function(){
if ($(this).val() == 0){
Swal.fire('수량이 0 입니다.');
zeroQty = true;
return;
}
});
if (!zeroQty) {
fn_save();
}
}else{
Swal.fire('저장할 품목이 존재 하지 않습니다.');
return;
}
}
});
$("#btnAddRow").click(function(){
//물품구매요청서 행을 추가한다
fn_AddRow();
});
$("#btnDeleteRow").click(function(){
//물품구매요청서 행을 삭제한다
fn_deleteRow();
});
2026-01-15 18:32:59 +09:00
// 확정 버튼 클릭
$("#btnConfirm").click(function(){
fn_confirm();
});
$("#btnAppr").click(function(){ //결재상신
if(fnc_valitate("form1")){
var objId = "${resultMap.OBJID}";
/* if(""==grid.getRowData()){
Swal.fire('저장할 품목이 존재 하지 않습니다');
return;
} */
//var title = encodeURIComponent($("#TITLE").val());
var title = encodeURIComponent("발주서 상신");
window.open("/approval/registApproval.do?targetType=SALES_REQUEST&targetObjId="+objId+"&approvalTitle="+title+"&callbackFnc=fn_callbackFnc","registApproval","width=700,height=700");
}
});
//상신된 결재라인 가져오기
fn_getApprLine();
2025-11-25 12:02:52 +09:00
fnc_getAjaxProductMgmtList("PRODUCT_CODE", "", "", "${resultMap.PRODUCT_CODE}");
fnc_getUserList2("SALES_MNG_USER_ID", "${resultMap.SALES_MNG_USER_ID}");
fnc_getCodeListAppend("0000259","REQUEST_STATUS","${resultMap.REQUEST_STATUS}");
2025-11-25 12:02:52 +09:00
// 유닛 관련 주석처리
// fn_UnitCodeList("${resultMap.PROJECT_NO}", "UNIT_NAME", "${resultMap.UNIT_NAME}","");
fnc_datepick();
$(".select2").select2();
2025-11-25 12:02:52 +09:00
fn_getSalesRequestTargetPartList("${resultMap.OBJID}","${param.bom_report_objid}");
$("#ORDER_NUMBER").change(function(){
var orderQty = fnc_checkNull($(this).val());
if("" != orderQty && 0 < orderQty){
$(".TARGET_OBJID").each(function(i){
var targetObjId = $(this).val();
var orgQty = fnc_checkNull($("#ORG_QTY_"+targetObjId).val());
if(null != orgQty && "" != orgQty){
$("#QTY_"+targetObjId).val(orgQty * orderQty);
}
});
}
});
<% if(isModify){ %>
//수정가능
2025-11-27 14:52:51 +09:00
$("#REQUEST_CD,#PROJECT_NO,#CUSTOMER_NAME,#PRODUCT_NAME,#MECHANICAL_TYPE,#PROJECT_NAME,#SETUP,#RELEASE_DATE,#REQUEST_REASONS,#REQUEST_USER_ID,#DELIVERY_REQUEST_DATE,#PURCHASE_TYPE,#ORDER_TYPE,#AREA_CD,#CUSTOMER_OBJID,#PAID_TYPE").prop("disabled","");
2025-11-25 12:02:52 +09:00
//프로젝트명 변경시 정보 셋팅 (유닛명 제거)
$("#PROJECT_NO").change(function(){
2025-11-25 12:02:52 +09:00
$("#CUSTOMER_NAME, #PRODUCT_NAME, #MECHANICAL_TYPE, #PROJECT_NAME, #SETUP, #RELEASE_DATE").val("");
$("#partListArea").empty(); // 기존 품번 목록 초기화
if($(this).val()!=""){
//프로젝트번호로 지정된 정보를 가져온다
var list = fnc_getJsonAllDataListBySqlId({"sqlId":"salesMng.purchaseOrderAdminSupplyInfo", "PROJECT_NO":$(this).val()});
if(fnc_checkNull( list )!=""){
var row = list[0];
2025-11-25 12:02:52 +09:00
// console.log("프로젝트 정보:", row); // 디버깅용
2025-11-25 12:02:52 +09:00
// 기존 필드 (읽기전용 텍스트)
$("#CUSTOMER_NAME" ).val( row["CUSTOMER_NAME" ] );
$("#MECHANICAL_TYPE" ).val( row["MECHANICAL_TYPE" ] );
$("#PROJECT_NAME" ).val( row["PROJECT_NAME" ] );
$("#SETUP" ).val( row["SETUP" ] );
$("#RELEASE" ).val( row["RELEASE_DATE" ] );
2025-11-25 12:02:52 +09:00
// 프로젝트관리 진행관리 데이터 자동 채우기 (드롭다운)
// 제품구분 (PRODUCT from PROJECT_MGMT) - 드롭다운
if(fnc_checkNull(row["PRODUCT"]) != ""){
$("#PRODUCT_NAME").val(row["PRODUCT"]).trigger("change");
// console.log("제품구분 설정:", row["PRODUCT"]);
2025-11-25 12:02:52 +09:00
}
// 국내/해외 (AREA_CD from PROJECT_MGMT)
if(fnc_checkNull(row["AREA_CD"]) != ""){
$("#AREA_CD").val(row["AREA_CD"]).trigger("change");
// console.log("국내/해외 설정:", row["AREA_CD"]);
2025-11-25 12:02:52 +09:00
}
// 고객사 (CUSTOMER_OBJID from PROJECT_MGMT)
if(fnc_checkNull(row["CUSTOMER_OBJID"]) != ""){
$("#CUSTOMER_OBJID").val(row["CUSTOMER_OBJID"]).trigger("change");
// console.log("고객사 설정:", row["CUSTOMER_OBJID"]);
2025-11-25 12:02:52 +09:00
}
// 유/무상 (PAID_TYPE from CONTRACT_MGMT)
if(fnc_checkNull(row["PAID_TYPE"]) != ""){
$("#PAID_TYPE").val(row["PAID_TYPE"]).trigger("change");
// console.log("유/무상 설정:", row["PAID_TYPE"]);
2025-11-25 12:02:52 +09:00
}
2025-11-27 14:52:51 +09:00
// 주문유형 (CATEGORY_CD from CONTRACT_MGMT)
if(fnc_checkNull(row["CATEGORY_CD"]) != ""){
$("#ORDER_TYPE").val(row["CATEGORY_CD"]).trigger("change");
// console.log("주문유형 설정:", row["CATEGORY_CD"]);
}
}
2025-11-25 12:02:52 +09:00
2025-11-26 11:12:42 +09:00
// ★★★ M-BOM 품목 자동 로드 ★★★
fn_loadMbomParts($(this).val());
}
});
$("#REQUEST_USER_ID").val('<%=connectUserId%>');
$(".select2").select2();
<% }else{ %>
2025-11-25 12:02:52 +09:00
$("#REQUEST_USER_ID").val('<%=connectUserId%>');
$(".select2").select2();
$("#btnSupplySave").click(function(){ fn_Supply_save(); }); //공급업체저장
<% } %>
});
</script>
<script>
//상신된 결재라인가져오기
function fn_getApprLine(){
if('${resultMap.OBJID}'!=''){
$.ajax({
url:"/common/getApprovalLine.do",
type:"POST",
data:{"objId":"${resultMap.OBJID}"},
dataType:"json",
async:false,
success:function(data){
$.each(data.RESULT, function(i,o){
if(i==0){
$("#appr"+i).html(o.WRITER +"<br/>"+ o.REGDATE);
}
$("#appr"+(i+1)).html(o.TARGET_USER_NAME +"<br/>"+ (o.PROC_DATE!=undefined?o.PROC_DATE:" "));
});
},
error: function(jqxhr, status, error){
}
});
}
}
function fn_getSalesRequestTargetPartList(masterObjId,bomObjId){
$("#partListArea").empty();
var requestStatus = $("#STATUS").val();
var appendText = "";
$.ajax({
url:"/salesMng/getSalesRequestTargetList.do",
type:"POST",
data:{"SALES_REQUEST_MASTER_OBJID":"${resultMap.OBJID}"},
dataType:"json",
async:false,
success:function(data){
var resultData = data;
$.each(resultData, function(i){
// console.log("resultData["+i+"]:"+resultData[i]);
//var RNUM = fnc_checkNull(resultData[i].RNUM);
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 SPEC = fnc_checkNull(resultData[i].SPEC);
var QTY = fnc_checkNull(resultData[i].QTY);
var PARTNER_OBJID = fnc_checkNull(resultData[i].PARTNER_OBJID);
//var DELIVERY_REQUEST_DATE = fnc_checkNull(resultData[i].DELIVERY_REQUEST_DATE);
//var REMARK = fnc_checkNull(resultData[i].REMARK);
var SALES_REQUEST_MASTER_OBJID = fnc_checkNull(resultData[i].SALES_REQUEST_MASTER_OBJID);
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' value='RNUM'>";
//appendText += " <input type='text' name='RNUM_"+rowObjId+"' value='"+RNUM+"'>";
//appendText += " </td>";
2025-11-25 12:02:52 +09:00
//appendText += " <td class='input_title'><label>품번</label></td>";
appendText += " <td class='align_l' colspan=''>";
if(requestStatus == 'approvalComplete' || requestStatus == 'reception'){
appendText += " <input type='text' name='PART_NO_"+rowObjId+"' id='PART_NO_"+rowObjId+"' value='"+PART_NO+"' readonly style='width: 100%;'>";
}else{
appendText += " <select name='PART_OBJID_"+rowObjId+"' id='PART_OBJID_"+rowObjId+"' reqTitle='품번' type='select' class='select2' style='width: 100%;'>";
appendText += " </select>";
2025-11-25 12:02:52 +09:00
}
appendText += " </td>";
//appendText += " <td class='input_title'><label>품명</label></td>";
appendText += " <td class='align_l' colspan=''>";
appendText += " <input type='text' name='PART_NAME_"+rowObjId+"' value='"+PART_NAME+"' readonly style='width: 100%;'>";
appendText += " </td>";
//appendText += " <td class='align_l'>";
2025-11-25 12:02:52 +09:00
//appendText += " <input type='text' name='SPEC_"+rowObjId+"' value='"+SPEC+"'>";
//appendText += " </td>";
2025-11-25 12:02:52 +09:00
//appendText += " <td class='input_title'><label>수량</label></td>";
appendText += " <td class='align_c' type='number'>";
appendText += " <input type='number' name='QTY_"+rowObjId+"' value='"+QTY+"' reqTitle='수량' required style='text-align: center;'>";
appendText += " </td>";
2026-01-15 18:32:59 +09:00
// 공급업체
appendText += " <td class='align_l'>";
appendText += " <select name='PARTNER_OBJID_"+rowObjId+"' id='PARTNER_OBJID_"+rowObjId+"' type='select' class='select2' style='width:100%;'>";
appendText += " </select>";
appendText += " </td>";
// 단가
var PARTNER_PRICE = fnc_checkNull(resultData[i].PARTNER_PRICE);
appendText += " <td class='align_r'>";
appendText += " <input type='text' name='PARTNER_PRICE_"+rowObjId+"' id='PARTNER_PRICE_"+rowObjId+"' value='"+PARTNER_PRICE+"' style='text-align: right; width:100%;'>";
appendText += " </td>";
2025-11-25 12:02:52 +09:00
appendText += " </tr>";
//fnc_getSupplyCodeListAppend("PARTNER_OBJID_"+rowObjId, PARTNER_OBJID);
//fn_addBomPart("PART_OBJID_"+rowObjId, PART_NO);
});
$("#partListArea").append(appendText);
2025-11-26 11:12:42 +09:00
// 프로젝트번호가 설정되어 있는지 확인하고, 없으면 품번 드롭다운을 채울 수 없음
var projectNo = $("#PROJECT_NO").val();
if(!projectNo || projectNo == "") {
console.warn("프로젝트번호가 선택되지 않아 품번 목록을 불러올 수 없습니다.");
}
2025-11-25 12:02:52 +09:00
$.each(resultData, function(i){
var rowObjId = fnc_checkNull(resultData[i].OBJID);
var PART_OBJID = fnc_checkNull(resultData[i].PART_OBJID);
2025-11-26 11:12:42 +09:00
var PART_NO = fnc_checkNull(resultData[i].PART_NO);
var PART_NAME = fnc_checkNull(resultData[i].PART_NAME);
2026-01-15 18:32:59 +09:00
// 공급업체 셋팅
var PARTNER_OBJID = fnc_checkNull(resultData[i].PARTNER_OBJID);
fnc_getAdminSupCdListAppend("", "PARTNER_OBJID_"+rowObjId, PARTNER_OBJID);
2025-11-26 11:12:42 +09:00
2025-11-25 12:02:52 +09:00
fn_addBomPart("PART_OBJID_"+rowObjId, PART_OBJID, "PART_NAME_"+rowObjId,"");
2025-11-26 11:12:42 +09:00
// 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);
}
2025-11-25 12:02:52 +09:00
});
$(".select2").select2();
},
error: function(jqxhr, status, error){
}
});
//$("#partListArea").append(appendText);
}
/* 물품구매요청서 Row 추가 */
function fn_AddRow(){
2025-11-25 12:02:52 +09:00
// 유닛명 체크 제거 - 필수 아님
// if($("#UNIT_NAME").val() == '' || $("#UNIT_NAME").val() == null){
// Swal.fire("유닛명을 먼저 선택해주세요");
// return false;
// }
var rowObjId = fnc_createObjId();
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' value='RNUM'>";
//appendText += " <input type='text' name='RNUM_"+rowObjId+"'>";
//appendText += " </td>";
//appendText += " <td class='input_title'><label>품번</label></td>";
appendText += " <td class='align_l' value='PART_OBJID' title='PART_OBJID' colspan=''>";
2025-11-25 12:02:52 +09:00
appendText += " <select name='PART_OBJID_"+rowObjId+"' id='PART_OBJID_"+rowObjId+"' reqTitle='품번' type='select' class='select2' style='width: 100%;'>";
appendText += " </select>";
appendText += " </td>";
//appendText += " <td class='input_title'><label>품명</label></td>";
2025-11-25 12:02:52 +09:00
appendText += " <td class='align_l' value='PART_NAME' title='PART_NAME' colspan=''>";
appendText += " <input type='text' name='PART_NAME_"+rowObjId+"' id='PART_NAME_"+rowObjId+"' readonly style='width: 100%;'>";
appendText += " </td>";
//appendText += " <td class='align_l' value='SPEC' title='UNIT_TITLE'>";
//appendText += " <input type='text' name='SPEC_"+rowObjId+"'>";
//appendText += " </td>";
2026-01-15 18:32:59 +09:00
//appendText += " <td class='input_title'><label>수량</label></td>";
appendText += " <td class='align_c' value='QTY' type='number' readonly>";
appendText += " <input type='number' name='QTY_"+rowObjId+"' reqTitle='수량' required style='text-align: center;'>";
appendText += " </td>";
// 공급업체
appendText += " <td class='align_l' value='PARTNER_OBJID'>";
appendText += " <select name='PARTNER_OBJID_"+rowObjId+"' id='PARTNER_OBJID_"+rowObjId+"' type='select' class='select2' style='width:100%;'>";
appendText += " </select>";
appendText += " </td>";
// 단가
appendText += " <td class='align_r' value='PARTNER_PRICE'>";
appendText += " <input type='text' name='PARTNER_PRICE_"+rowObjId+"' id='PARTNER_PRICE_"+rowObjId+"' style='text-align: right; width:100%;'>";
appendText += " </td>";
appendText += " </tr>";
if(0 < $("#partListArea tr:first").lenght || typeof $("#partListArea tr:first").lenght != "undefined") {
$("#partListArea tr:first").before(appendText);
}else{
$("#partListArea").append(appendText);
}
// 공급업체 셋팅
fnc_getAdminSupCdListAppend("", "PARTNER_OBJID_"+rowObjId, "");
fn_addBomPart("PART_OBJID_"+rowObjId, "", "PART_NAME_"+rowObjId, "");
2025-11-25 12:02:52 +09:00
fnc_datepick();
$(".select2").select2();
}
/* Row 삭제 */
function fn_deleteRow(){
$(".chkBox:checked").length;
if(0 < $(".chkBox:checked").length){
if(confirm("선택된 내용을 삭제하시겠습니까?")){
$(".chkBox:checked").each(function(i){
var targetOBJID = $(this).val();
$("#"+targetOBJID).remove();
});
}
}else{
Swal.fire("선택된 내용이 없습니다.");
return false;
}
}
<!--
//결재정보를 가져온다.
function fn_getApprovalLine(){
var scheduleList = new Array();
<c:forEach items="${approvalList}" var="approvalItem">
var seq = "${approvalItem.SEQ}";
var targetUserName = "${approvalItem.TARGET_USER_NAME}";
var procDate = "${approvalItem.PROC_DATE}";
if(1 == seq){
$("#reviewerName").append(targetUserName);
$("#reviewerDate").append(procDate);
}
if(2 == seq){
$("#confirmName").append(targetUserName);
$("#confirmDate").append(procDate);
}
</c:forEach>
}
-->
// 물품구매요청서 내용을 저장한다.
function fn_save(){
var formData = $("#form1").serialize();
if(confirm("저장하시겠습니까?")){
$.ajax({
type: "POST",
url: "/salesMng/saveSalesRequestInfo.do",
data: $("#form1").serialize(),
dataType:"json",
success:function(data){
//Swal.fire(data.msg);
alert(data.msg);
if(typeof opener.fn_search =="function"){ opener.fn_search() };
self.close();
if(data.result){
opener.fn_search();
self.close();
}
},
error: function(jqxhr, status, error){
}
});
}
}
//공급업체 내용을 저장한다.
function fn_Supply_save(){
var formData = $("#form1").serialize();
if(confirm("저장하시겠습니까?")){
$.ajax({
type: "POST",
url: "/salesMng/saveSalesRequestSupplyInfo.do",
data: $("#form1").serialize(),
dataType:"json",
success:function(data){
//Swal.fire(data.msg);
alert(data.msg);
if(data.result){
opener.fn_search();
self.close();
}
},
error: function(jqxhr, status, error){
}
});
}
}
2026-01-15 18:32:59 +09:00
// 구매요청서 확정 처리
function fn_confirm(){
var masterObjId = $("#SALES_REQUEST_MASTER_OBJID").val();
if(fnc_checkNull(masterObjId) == ""){
Swal.fire("먼저 저장해주세요.");
return;
}
// 품목이 있는지 확인
if($("#partListArea tr").length < 1){
Swal.fire("품목이 없습니다. 먼저 품목을 추가하고 저장해주세요.");
return;
}
Swal.fire({
title: '확정',
text: '확정하시겠습니까? 확정 후에는 수정이 불가능합니다.',
icon: 'warning',
showCancelButton: true,
confirmButtonColor: '#5cb85c',
cancelButtonColor: '#d33',
confirmButtonText: '확정',
cancelButtonText: '취소'
}).then((result) => {
if (result.isConfirmed) {
$.ajax({
type: "POST",
url: "/salesMng/confirmSalesRequest.do",
data: { "SALES_REQUEST_MASTER_OBJID": masterObjId },
dataType: "json",
success: function(data){
if(data.result){
Swal.fire({
title: '완료',
text: '확정되었습니다.',
icon: 'success'
}).then(() => {
if(typeof opener.fn_search == "function"){
opener.fn_search();
}
self.close();
});
} else {
Swal.fire('오류', data.msg || '확정 처리 중 오류가 발생했습니다.', 'error');
}
},
error: function(jqxhr, status, error){
Swal.fire('오류', '서버 통신 중 오류가 발생했습니다.', 'error');
}
});
}
});
}
2025-11-26 11:12:42 +09:00
// ★★★ 프로젝트 선택 시 M-BOM 품목 자동 로드 ★★★
function fn_loadMbomParts(projectObjId){
if(fnc_checkNull(projectObjId) == "") return;
// console.log("M-BOM 품목 로드 시작, PROJECT_OBJID:", projectObjId);
2025-11-26 11:12:42 +09:00
// M-BOM 품목 조회
var paramData = {"sqlId":"salesMng.SalesBomPartListByProjectUnit", "PROJECT_OBJID":projectObjId};
var resultList = fnc_getJsonAllDataListBySqlId(paramData);
// console.log("M-BOM 품목 조회 결과:", resultList);
2025-11-26 11:12:42 +09:00
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>";
2026-01-15 18:32:59 +09:00
// 공급업체
appendText += " <td class='align_l'>";
appendText += " <select name='PARTNER_OBJID_"+rowObjId+"' id='PARTNER_OBJID_"+rowObjId+"' type='select' class='select2' style='width:100%;'>";
appendText += " </select>";
appendText += " </td>";
// 단가
appendText += " <td class='align_r'>";
appendText += " <input type='text' name='PARTNER_PRICE_"+rowObjId+"' id='PARTNER_PRICE_"+rowObjId+"' style='text-align: right; width:100%;'>";
appendText += " </td>";
2025-11-26 11:12:42 +09:00
appendText += "</tr>";
$("#partListArea").append(appendText);
// 품번 드롭다운에 M-BOM 전체 품목 옵션 추가
fn_addBomPart("PART_OBJID_"+rowObjId, PART_OBJID, "PART_NAME_"+rowObjId, "");
2026-01-15 18:32:59 +09:00
// 공급업체 셋팅
fnc_getAdminSupCdListAppend("", "PARTNER_OBJID_"+rowObjId, "");
2025-11-26 11:12:42 +09:00
});
$(".select2").select2();
// console.log("M-BOM 품목 " + resultList.length + "건 로드 완료");
2025-11-26 11:12:42 +09:00
} else {
// console.log("M-BOM 품목이 없습니다.");
2025-11-26 11:12:42 +09:00
}
}
//계약제품, 업체명으로 BOM에 등록된 부품정보를 자동 추가
function fn_addBomPart(selectboxId,selectedVal,sql_id,sql_supply){
$("#BOM_REPORT_OBJID").val("");
var project_objid = $("#PROJECT_NO").val(); //프로젝트명
var unit_code = $("#UNIT_NAME").val(); //유닛명
2025-11-26 11:12:42 +09:00
$("#"+selectboxId).empty();
$("#"+selectboxId).append("<option value=''>선택</option>");
var resultList = [];
2025-11-26 11:12:42 +09:00
// 1. 프로젝트가 선택되어 있으면 M-BOM 품목 먼저 조회
2025-11-25 12:02:52 +09:00
if(fnc_checkNull(project_objid)!=""){
var paramData = {"sqlId":"salesMng.SalesBomPartListByProjectUnit", "PROJECT_OBJID":project_objid};
if(fnc_checkNull(unit_code)!=""){
paramData.UNIT_CODE = unit_code;
}
2025-11-26 11:12:42 +09:00
resultList = fnc_getJsonAllDataListBySqlId(paramData);
// console.log("M-BOM 품목 조회 결과:", resultList.length, "건");
2025-11-26 11:12:42 +09:00
}
// 2. M-BOM 품목이 없으면 전체 PART_MNG에서 조회
if(resultList.length == 0){
// console.log("M-BOM 품목이 없어 전체 품목에서 조회합니다.");
2025-11-26 11:12:42 +09:00
var allPartData = {"sqlId":"salesMng.getAllPartMngList"};
resultList = fnc_getJsonAllDataListBySqlId(allPartData);
// console.log("전체 품목 조회 결과:", resultList.length, "건");
2025-11-26 11:12:42 +09:00
// 전체 품목 조회 결과 처리
if(0 < resultList.length){
for (var i = 0; i < resultList.length; i++) {
2025-11-26 11:12:42 +09:00
var commonCodeId = resultList[i].OBJID;
var commonCodeName = resultList[i].PART_NO;
var partName = resultList[i].PART_NAME;
2025-11-26 11:12:42 +09:00
$("#"+selectboxId).append("<option value='"+commonCodeId+"' data-part_name='"+partName+"'>"+commonCodeName+"</option>");
}
2025-11-26 11:12:42 +09:00
}
} 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>");
}
}
2025-11-26 11:12:42 +09:00
// 선택값 설정 및 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");
}
function fn_callbackFnc(){
opener.fn_search();
self.close();
}
</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;}
.required-mark { color: red; font-weight: bold; margin-left: 2px; }
</style>
<body>
<form name="form1" id="form1" action="" method="post">
<input type="hidden" name="SALES_REQUEST_MASTER_OBJID" id="SALES_REQUEST_MASTER_OBJID" value="${resultMap.OBJID}">
<input type="hidden" name="STATUS" id="STATUS" value="${resultMap.STATUS}">
2026-01-15 18:32:59 +09:00
<input type="hidden" name="DOC_TYPE" id="DOC_TYPE" value="${param.DOC_TYPE}">
<input type="hidden" name="TARGET_DRAWING_DOWNLOAD" id="TARGET_DRAWING_DOWNLOAD">
<section>
<div class="plm_menu_name" style="display:flex;">
2025-11-24 18:37:52 +09:00
<h2 style="width:100%;height:80px;text-align:center;margin-top:15px;">
<span style="font-size:30px;">구매요청서 (Purchase Request)</span>
</h2>
</div>
<div id="businessPopupFormWrap" style="z-index:99;">
<table class="pmsPopupForm" style="z-index:99;">
2025-11-24 18:37:52 +09:00
<colgroup>
<col width="10%">
<col width="15%">
<col width="10%">
<col width="15%">
<col width="10%">
<col width="15%">
<col width="10%">
<col width="15%">
</colgroup>
2025-12-04 14:24:34 +09:00
<!-- 1행: 구매유형, 프로젝트번호, 구매유형, 주문유형 -->
2025-11-25 12:02:52 +09:00
<tr>
<td class="input_title"><label for="">구매유형<span class="required-mark">*</span></label></td>
2025-11-25 12:02:52 +09:00
<td>
2025-11-27 14:52:51 +09:00
<select name="PURCHASE_TYPE" id="PURCHASE_TYPE" reqTitle="구매유형" required type="select" class="select2" style="width: 100%;">
2025-11-25 12:02:52 +09:00
<option value="">선택</option> ${code_map.purchase_type}
</select>
</td>
<td class="input_title"><label for="">프로젝트번호</label></td>
<td>
<select name="PROJECT_NO" id="PROJECT_NO" reqTitle="프로젝트번호" type="select" class="select2" style="width: 100%;">
<option value="">선택</option> ${code_map.project_no}
</select>
</td>
2025-12-04 14:24:34 +09:00
<td class="input_title"><label for="">구매유형<span class="required-mark">*</span></label></td>
<td>
<select name="PURCHASE_TYPE2" id="PURCHASE_TYPE2" reqTitle="구매유형" required type="select" class="select2" style="width: 100%;">
<option value="">선택</option> ${code_map.purchase_type}
</select>
</td>
<td class="input_title"><label for="">주문유형<span class="required-mark">*</span></label></td>
2025-11-25 12:02:52 +09:00
<td>
2025-11-27 14:52:51 +09:00
<select name="ORDER_TYPE" id="ORDER_TYPE" reqTitle="주문유형" required type="select" class="select2" style="width: 100%;">
<option value="">선택</option> ${code_map.category_cd}
2025-11-25 12:02:52 +09:00
</select>
</td>
2025-12-04 14:24:34 +09:00
</tr>
<!-- 2행: 제품구분, 국내/해외, 고객사, 유/무상 -->
<tr>
<td class="input_title"><label for="">제품구분<span class="required-mark">*</span></label></td>
2025-11-25 12:02:52 +09:00
<td>
2025-11-27 14:52:51 +09:00
<select name="PRODUCT_NAME" id="PRODUCT_NAME" reqTitle="제품구분" required type="select" class="select2" style="width: 100%;">
2025-11-25 12:02:52 +09:00
<option value="">선택</option> ${code_map.product_name}
</select>
</td>
<td class="input_title"><label for="">국내/해외<span class="required-mark">*</span></label></td>
2025-11-25 12:02:52 +09:00
<td>
2025-11-27 14:52:51 +09:00
<select name="AREA_CD" id="AREA_CD" reqTitle="국내/해외" required type="select" class="select2" style="width: 100%;">
2025-11-25 12:02:52 +09:00
<option value="">선택</option> ${code_map.area_cd}
</select>
</td>
<td class="input_title"><label for="">고객사<span class="required-mark">*</span></label></td>
2025-11-25 12:02:52 +09:00
<td>
2025-11-27 14:52:51 +09:00
<select name="CUSTOMER_OBJID" id="CUSTOMER_OBJID" reqTitle="고객사" required type="select" class="select2" style="width: 100%;">
2025-11-25 12:02:52 +09:00
<option value="">선택</option> ${code_map.customer_objid}
</select>
</td>
<td class="input_title"><label for="">유/무상<span class="required-mark">*</span></label></td>
2025-11-25 12:02:52 +09:00
<td>
2025-11-27 14:52:51 +09:00
<select name="PAID_TYPE" id="PAID_TYPE" reqTitle="유/무상" required type="select" class="select2" style="width: 100%;">
2025-11-25 12:02:52 +09:00
<option value="">선택</option> ${code_map.paid_type}
</select>
</td>
2025-12-04 14:24:34 +09:00
</tr>
<!-- 3행: 입고요청일 -->
<tr>
2025-11-25 12:02:52 +09:00
<td class="input_title"><label for="">입고요청일</label></td>
2025-11-27 14:52:51 +09:00
<td>
2025-12-04 14:24:34 +09:00
<input type="text" class="date_icon" name="DELIVERY_REQUEST_DATE" id="DELIVERY_REQUEST_DATE" reqTitle="입고요청일" value="${resultMap.DELIVERY_REQUEST_DATE}">
2025-11-25 12:02:52 +09:00
<input type="hidden" name="REQUEST_USER_ID" id="REQUEST_USER_ID" value="${resultMap.REQUEST_USER_ID}">
</td>
2025-12-04 14:24:34 +09:00
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
2025-11-25 12:02:52 +09:00
</tr>
</table>
</div>
<div class="btn_wrap">
2025-11-25 12:59:59 +09:00
<% if(isModify){ %>
<div class="plm_btn_wrap" style="padding:0 8 0 8; text-align: right;">
<input type="button" value="행추가" class="plm_btns" id="btnAddRow" name="btnAddRow">
<input type="button" value="행삭제" class="plm_btns" id="btnDeleteRow" name="btnDeleteRow">
<input type="button" value="저장" class="plm_btns" id="btnReg">
2026-01-15 18:32:59 +09:00
<input type="button" value="닫기" class="plm_btns" onclick="window.close();">
<input type="button" value="확정" class="plm_btns" id="btnConfirm" style="background-color:#5cb85c; color:white;">
2025-11-25 12:59:59 +09:00
</div>
2026-01-15 18:32:59 +09:00
<% }else{ %>
<div class="plm_btn_wrap" style="padding:0 8 0 8; text-align: right;">
<input type="button" value="닫기" class="plm_btns" onclick="window.close();">
</div>
<% } %>
</div>
<div id="businessPopupFormWrap" style="z-index:99;">
<table class="pmsPopupForm" style="z-index:99;">
<!-- <tr>
<td class="input_title">
<label for="">구매의뢰 부품</label>
</td>
</tr> -->
<tr>
<td style="border-top:1px solid #ccc;">
2026-01-15 18:32:59 +09:00
<div class="in_table_scroll_wrap _table1" style="height:40px;width:100%;">
<table class="plm_table">
<colgroup>
<col width="30px">
<col width="180px">
<col width="180px">
<col width="80px">
<col width="150px">
<col width="100px">
</colgroup>
<thead>
<tr class="plm_thead">
<td><input type="checkbox" name="allCheck" id="allCheck"></td>
<td>품번</td>
<td>품명</td>
<td>수량</td>
<td>공급업체</td>
<td>단가</td>
</tr>
</thead>
</table>
</div>
<div class="in_table_scroll_wrap _table2" style="height:250px;width:100%;">
<table class="plm_table">
<colgroup>
<col width="30px">
<col width="180px">
<col width="180px">
<col width="80px">
<col width="150px">
<col width="100px">
</colgroup>
<tbody id="partListArea">
</tbody>
</table>
</div>
</td>
</tr>
</table>
2025-11-24 18:37:52 +09:00
<!-- <div class="btn_wrap"> -->
<!-- <%-- <c:if test="${'create' eq resultMap.STATUS}"> --%> -->
<!-- <div class="plm_btn_wrap" style="padding:0 8 0 8; text-align: right;"> -->
<!-- <input type="button" value="수정" class="plm_btns" id="btnAddRow" name="btnAddRow" style="background:#dfeffc"> -->
2025-11-24 18:37:52 +09:00
<!-- <% if(isModify){ %> -->
<!-- <input type="button" value="결재상신" class="plm_btns" id="btnAppr" name="btnAppr" style="background:#dfeffc"> -->
<!-- <input type="button" value="저장" class="plm_btns" id="btnReg" style="background:#dfeffc"> -->
<!-- <% }else{ %> -->
<!-- <input type="button" value="공급업체저장" class="plm_btns" id="btnSupplySave" style="background:#dfeffc"> -->
<!-- <% } %> -->
<!-- <input type="button" value="닫기" class="plm_btns" style="background:#dfeffc" onclick="window.close();" > -->
<!-- </div> -->
<!-- <%-- </c:if> --%> -->
<!-- </div> -->
</div>
</section>
</form>
</body>
</html>