715 lines
24 KiB
Plaintext
715 lines
24 KiB
Plaintext
<%@ 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.jsp" %>
|
|
<c:set var="now" value="<%=new java.util.Date() %>"/>
|
|
<c:set var="sysYear"><fmt:formatDate value="${now}" pattern="yyyy" /></c:set>
|
|
<%
|
|
// DB에서 메뉴명 조회 (공통 유틸 사용)
|
|
String menuObjId = request.getParameter("menuObjId");
|
|
String menuName = CommonUtils.getMenuName(menuObjId, "구매관리_구매요청서작성");
|
|
%>
|
|
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
|
<title><%=Constants.SYSTEM_NAME%></title>
|
|
<style>
|
|
.pmsPopupForm tr:last-child td {
|
|
border-bottom: none;
|
|
}
|
|
.select2-selection__choice {
|
|
font-size: 11px;
|
|
background-color: #fff !important;
|
|
border: none !important;
|
|
margin-right: 0px !important;
|
|
}
|
|
.select2-selection__choice__remove {
|
|
display: contents !important;
|
|
}
|
|
.select2-container .select2-selection--multiple {
|
|
min-height: 20px !important;
|
|
}
|
|
.select2-container--default .select2-selection--multiple .select2-selection__choice {
|
|
margin-top: 3.5px !important;
|
|
}
|
|
.select2-selection__rendered {
|
|
height: 18px !important;
|
|
}
|
|
.select2-container .select2-selection--multiple .select2-selection__rendered {
|
|
/* overflow: auto !important; */
|
|
}
|
|
</style>
|
|
<script>
|
|
$(document).ready(function(){
|
|
$('.select2').select2();
|
|
|
|
// 품번/품명 Select2 AJAX 초기화
|
|
initPartSelect2Ajax("#SEARCH_PART_NO", "#SEARCH_PART_NAME", "#SEARCH_PART_OBJID");
|
|
|
|
$("input[type=text]").keyup(function(e){
|
|
if(e.keyCode == 13){
|
|
$("#btnSearch").trigger("click");
|
|
}
|
|
});
|
|
|
|
$("#btnSearch").click(function(){
|
|
fn_search();
|
|
});
|
|
|
|
$("#btnRelease").click(function(){
|
|
var targetObj = $("input[name=REQUEST_OBJID]:checked");
|
|
|
|
if(0 < targetObj.length){
|
|
fn_releaseSalesRequest();
|
|
}else{
|
|
Swal.fire("선택된 내용이 없습니다.");
|
|
}
|
|
});
|
|
|
|
//접수
|
|
$("#btnRec").click(function(){
|
|
var selectedRowIds = _tabulGrid.getSelectedData();
|
|
if(selectedRowIds.length<1){
|
|
Swal.fire("접수할 행을 선택해주십시오.");
|
|
return false;
|
|
}
|
|
|
|
var targetStatus = fnc_checkNull(selectedRowIds[0].STATUS_TITLE);
|
|
if(targetStatus != "결재완료"){
|
|
Swal.fire("결재완료일 경우 접수가능합니다.");
|
|
return false;
|
|
}
|
|
|
|
let partIds = selectedRowIds.map(function(o,i){
|
|
return fnc_checkNull(selectedRowIds[i].OBJID);
|
|
});
|
|
|
|
$.ajax({
|
|
url:"/salesMng/receiptSalesRequestInfo.do"
|
|
,type:"POST"
|
|
,data: "partIds="+partIds.join(",")
|
|
,dataType:"json"
|
|
,async:false
|
|
,success:function(data){
|
|
Swal.fire(data.message);
|
|
fn_search();
|
|
self.close();
|
|
}
|
|
,error: function(jqxhr, status, error){
|
|
}
|
|
});
|
|
});
|
|
|
|
$("#btnExcel").click(function(){
|
|
fn_excelExport($("#mainGrid"),"BOM_REPORT_역전개");
|
|
});
|
|
|
|
// 구매요청서 작성 버튼 - 활성화됨
|
|
$("#btnOrderReg").click(function(){
|
|
fn_openSalesRequestFormPopUp("");
|
|
});
|
|
|
|
// 품의서 생성
|
|
$("#btnReg").click(function(){
|
|
fn_createProposal();
|
|
});
|
|
|
|
$("#btnOrderBOMReg").click(function(){
|
|
fn_salesRequestTargetBOMListPopUp();
|
|
});
|
|
|
|
$("#btnDelete").click(function(){
|
|
fn_delete();
|
|
});
|
|
|
|
$("#btnApproval").click(function(){
|
|
var checkedObj = $("input[name=REQUEST_OBJID]:checked");
|
|
var title = "";
|
|
if(1 < checkedObj){
|
|
Swal.fire("한번에 한개의 결재만 가능합니다.");
|
|
return false;
|
|
}else{
|
|
var targetStatus = checkedObj.attr("data-STATUS");
|
|
var objId = checkedObj.val();
|
|
|
|
var targeType = "SALES_REQUEST";
|
|
|
|
if(targetStatus == "create" || targetStatus == "reception" || targetStatus == "reject"){
|
|
window.open("/approval/registApproval.do?targetType="+targeType+"&targetObjId="+objId+"&approvalTitle="+title+"&callbackFnc=fn_search","registApproval","width=700,height=700");
|
|
}else{
|
|
Swal.fire("이미 결재완료 또는 결재중 상태입니다.");
|
|
return false;
|
|
}
|
|
}
|
|
});
|
|
|
|
$(".btnApprovalDetail").click(function(){
|
|
var approvalObjId = $(this).attr("data-APPROVAL_OBJID");
|
|
var routeObjId = $(this).attr("data-ROUTE_OBJID");
|
|
var params = "?approvalObjId="+approvalObjId;
|
|
params += "&routeObjId="+routeObjId;
|
|
//Swal.fire("params : "+params);
|
|
window.open("/approval/approvalDetail.do"+params,"approvalDetailPopup","width=650 height=400 menubar=no status=no");
|
|
});
|
|
|
|
fnc_getAjaxProductMgmtList("SEARCH_PRODUCT_CODE", "", "", "${param.SEARCH_PRODUCT_CODE}");
|
|
|
|
fn_search();
|
|
//날짜
|
|
_fnc_datepick();
|
|
});
|
|
|
|
var columns = [
|
|
{title:'OBJID' , field:'OBJID' ,visible: false},
|
|
{title:'SPC_OBJID' , field:'SPC_OBJID' ,visible: false},
|
|
{title:'PURCHASE_ORDER_MASTER_OBJID', field:'PURCHASE_ORDER_MASTER_OBJID' ,visible: false},
|
|
{title:'APPROVAL_OBJID' , field:'APPROVAL_OBJID' ,visible:false},
|
|
{title:'ROUTE_OBJID' , field:'ROUTE_OBJID' ,visible:false},
|
|
{title:'MBOM_HEADER_OBJID' , field:'MBOM_HEADER_OBJID' ,visible:false},
|
|
{title:'DOC_TYPE' , field:'DOC_TYPE' ,visible:false},
|
|
{title:'HAS_PURCHASE_REQUEST' , field:'HAS_PURCHASE_REQUEST' ,visible:false}
|
|
|
|
,{headerHozAlign : 'center', hozAlign : 'center', title : "요청번호", field :"REQUEST_MNG_NO" , widthGrow:1.3
|
|
// formatter: fnc_createGridAnchorTag,
|
|
// cellClick : function(e, cell) {
|
|
// fn_openSalesRequestPopUp(cell.getData().OBJID);
|
|
// }
|
|
}
|
|
,{headerHozAlign : 'center', hozAlign : 'center', title : "구매유형", field :"PURCHASE_TYPE_NAME" , widthGrow:1.1 }
|
|
,{headerHozAlign : 'center', hozAlign : 'left' , title : "프로젝트번호", field :"PROJECT_NUMBER" , widthGrow:1.4,
|
|
formatter: fnc_createGridAnchorTag,
|
|
cellClick: function(e, cell){
|
|
var orderNo = fnc_checkNull(cell.getData().PROJECT_NUMBER);
|
|
// 프로젝트 번호가 없으면 팝업 열지 않음
|
|
if(orderNo == '' || orderNo == null) {
|
|
return;
|
|
}
|
|
// 프로젝트 번호 클릭 시: 결재 정보 조회 모드 (saleNo에 "detail" 전달)
|
|
fn_openSaleRegPopup(orderNo, "detail");
|
|
}
|
|
}
|
|
,{headerHozAlign : 'center', hozAlign : 'center', title : "주문유형", field :"ORDER_TYPE_NAME" , widthGrow:1.1 }
|
|
,{headerHozAlign : 'center', hozAlign : 'center', title : "제품구분", field :"PRODUCT_NAME_FULL" , widthGrow:1.1}
|
|
,{headerHozAlign : 'center', hozAlign : 'left' , title : "고객사", field :"CUSTOMER_NAME" , widthGrow:1.5 }
|
|
,{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 :"HAS_PURCHASE_REQUEST" , widthGrow:1.1,
|
|
formatter:fnc_subInfoValueFormatter,
|
|
cellClick : function(e, cell) {
|
|
var data = cell.getData();
|
|
fn_openSalesRequestFormPopUp(data.OBJID);
|
|
}
|
|
}
|
|
,{headerHozAlign : 'center', hozAlign : 'center', title : "요청인", field :"REQUEST_USER_NAME" , widthGrow:1.1,
|
|
// 요청인: 구매요청서 작성 시에만 표시
|
|
formatter: function(cell, formatterParams, onRendered){
|
|
var data = cell.getData();
|
|
var hasPurchaseRequest = fnc_checkNull(data.HAS_PURCHASE_REQUEST);
|
|
if(hasPurchaseRequest == 'Y') {
|
|
return fnc_checkNull(data.REQUEST_USER_NAME);
|
|
}
|
|
return '-';
|
|
}
|
|
}
|
|
,{headerHozAlign : 'center', hozAlign : 'center', title : "입고요청일", field :"DELIVERY_REQUEST_DATE" , widthGrow:1.1,
|
|
// 입고요청일: 구매요청서 작성 시에만 표시
|
|
formatter: function(cell, formatterParams, onRendered){
|
|
var data = cell.getData();
|
|
var hasPurchaseRequest = fnc_checkNull(data.HAS_PURCHASE_REQUEST);
|
|
if(hasPurchaseRequest == 'Y') {
|
|
return fnc_checkNull(data.DELIVERY_REQUEST_DATE);
|
|
}
|
|
return '-';
|
|
}
|
|
}
|
|
,{headerHozAlign : 'center', hozAlign : 'center', title : "작성일", field :"REGDATE_TITLE" , widthGrow:1.1 }
|
|
,{headerHozAlign : 'center', hozAlign : 'center', title : "상태", field :"STATUS_TITLE" , widthGrow:1.1 }
|
|
];
|
|
|
|
//var grid;
|
|
function fn_search(){
|
|
var selectedValues = $("#project_no").val();
|
|
|
|
$('<input>').attr({
|
|
type: 'hidden',
|
|
name: 'project_nos',
|
|
value: selectedValues
|
|
}).appendTo('#form1');
|
|
|
|
// 구매요청서 작성 페이지용 API 호출
|
|
_tabulGrid = fnc_tabul_search(_tabul_layout_fitColumns, _tabulGrid, "/salesMng/purchaseRequestRegGridList.do", columns, true);
|
|
}
|
|
|
|
function fn_delete(){
|
|
var selectedObj = $("input[name=REQUEST_OBJID]:checked");
|
|
|
|
if(0 < selectedObj.length){
|
|
if(confirm("선택된 정보를 삭제하시겠습니까?")){
|
|
|
|
$.ajax({
|
|
url:"/salesMng/deleteSalesRequestMng.do",
|
|
type:"POST",
|
|
data:$("#form1").serialize(),
|
|
dataType:"json",
|
|
success:function(data){
|
|
Swal.fire(data.msg);
|
|
fn_search();
|
|
},
|
|
error: function(jqxhr, status, error){
|
|
}
|
|
});
|
|
}
|
|
}else{
|
|
Swal.fire("선택된 정보가 없습니다.");
|
|
return false;
|
|
}
|
|
}
|
|
|
|
//구매의뢰서(BOM) 작성 시 사용
|
|
function fn_salesRequestTargetBOMListPopUp(){
|
|
var url = "/salesMng/salesRequestTargetBOMList.do";
|
|
|
|
window.open(url,"salesRequestTargetBOMListPopUp","width=1300,height=550");
|
|
}
|
|
|
|
//구매의뢰 요청 팝업 (요청번호 클릭 시 - 구매리스트 화면)
|
|
function fn_openSalesRequestPopUp(objId){
|
|
// 그리드에서 선택된 행의 MBOM_HEADER_OBJID 가져오기
|
|
var selectedRow = _tabulGrid.searchRows("OBJID", "=", objId);
|
|
var mbomHeaderObjid = '';
|
|
if(selectedRow && selectedRow.length > 0) {
|
|
mbomHeaderObjid = fnc_checkNull(selectedRow[0].getData().MBOM_HEADER_OBJID);
|
|
}
|
|
|
|
var url = "/salesMng/purchaseListFormPopUp.do?SALES_REQUEST_MASTER_OBJID="+objId;
|
|
if(mbomHeaderObjid) {
|
|
url += "&MBOM_HEADER_OBJID=" + mbomHeaderObjid;
|
|
}
|
|
window.open(url,"purchaseListPopUp","width=1400,height=800,scrollbars=yes,resizable=yes");
|
|
}
|
|
|
|
// 구매요청서 작성 팝업 (구매요청서 파일 아이콘 클릭 시)
|
|
// DOC_TYPE 파라미터 추가하여 새 페이지에서 생성된 데이터임을 표시
|
|
function fn_openSalesRequestFormPopUp(objId){
|
|
var url = "/salesMng/salesRequestFormPopUp.do?SALES_REQUEST_MASTER_OBJID="+objId+"&DOC_TYPE=PURCHASE_REG";
|
|
window.open(url,"salesRequestFormPopUp","width=1100,height=630");
|
|
}
|
|
|
|
function fn_releaseSalesRequest(){
|
|
var checkArr = new Array();
|
|
var ngCnt = 0;
|
|
$("input[name=REQUEST_OBJID]:checked").each(function(){
|
|
var objId = $(this).val();
|
|
var status = $(this).attr("data-STATUS");
|
|
|
|
if("create" != status){
|
|
ngCnt++;
|
|
}
|
|
|
|
checkArr.push(objId);
|
|
});
|
|
|
|
if(0 < ngCnt){
|
|
Swal.fire("이미 제출된 정보입니다.\n대상을 확인하시기 바랍니다.");
|
|
return false;
|
|
}else{
|
|
if(confirm("선택된 정보를 구매당당자에게 제출 하시겠습니까?")){
|
|
$.ajax({
|
|
type : "POST",
|
|
url : "/salesMng/releaseSalesRequest.do",
|
|
data: {"checkArr":checkArr.join(),"status":"release"},
|
|
dataType:"json",
|
|
success:function(data){
|
|
Swal.fire(data.msg);
|
|
if(data.result){
|
|
fn_search();
|
|
}
|
|
}
|
|
,error: function(jqxhr, status, error){
|
|
}
|
|
});
|
|
}
|
|
}
|
|
}
|
|
|
|
//양산제품에 해당하는 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_approvalDetail(approvalObjId,routeObjId){
|
|
var params = "?approvalObjId="+approvalObjId;
|
|
params += "&routeObjId="+routeObjId;
|
|
window.open("/approval/approvalDetail.do"+params,"approvalDetailPopup","width=650 height=400 menubar=no status=no");
|
|
}
|
|
|
|
function fn_excelExport(pGridObj,pFileName){
|
|
var mya = pGridObj.getDataIDs();
|
|
var data = pGridObj.getRowData(mya[0]);
|
|
var colNames=new Array();
|
|
var ii=0;
|
|
for (var d in data){ colNames[ii++] = d; }
|
|
|
|
//컬럼 헤더 가져오기
|
|
var columnHeader = pGridObj.jqGrid('getGridParam','colNames') + '';
|
|
var arrHeader = columnHeader.split(',');
|
|
var html="<table border=1><tr>";
|
|
for ( var y = 0; y < arrHeader.length; y++ ) {
|
|
var hName = arrHeader[y];
|
|
if("PART_OBJID" == hName || "EO_OBJID" == hName){
|
|
continue;
|
|
}
|
|
|
|
html = html + "<td><b>" + arrHeader[y] + "</b></td>";
|
|
}
|
|
|
|
|
|
html = html + "</tr>";
|
|
|
|
//값 불러오기
|
|
for(var i=0;i< mya.length;i++) {
|
|
var datac= pGridObj.getRowData(mya[i]);
|
|
html = html +"<tr>";
|
|
for(var j=0; j< colNames.length;j++){
|
|
if("PART_OBJID" == colNames[j] || "EO_OBJID" == colNames[j]){
|
|
continue;
|
|
}
|
|
html=html + '<td>' + datac[colNames[j]]+"</td>";
|
|
}
|
|
html = html+"</tr>";
|
|
}
|
|
|
|
|
|
html=html+"</table>"; // end of line at the end
|
|
document.EXCEL_.csvBuffer.value = html;
|
|
document.EXCEL_.fileName.value = pFileName;
|
|
document.EXCEL_.target='_new';
|
|
document.EXCEL_.submit();
|
|
}
|
|
|
|
function fn_str_openPopup(bom_report_objid, product_code, product_mgmt_spec, upg_no, search_partNo, search_partName){
|
|
var param = "actionType=search"
|
|
+"&bom_report_objid=" + bom_report_objid
|
|
+"&product_code=" + product_code
|
|
+"&product_mgmt_spec=" + product_mgmt_spec
|
|
+"&upg_no=" + upg_no
|
|
+"&search_partNo=" + search_partNo
|
|
+"&search_partName=" + search_partName
|
|
;
|
|
window.open("/partmgmt/structureAscendingListPopup.do?"+param, "_strListPopup", "width=1200, height=800, toolbar=no, status=no, menubar=no, location=no, scrollbars=yes, resizable=yes");
|
|
}
|
|
|
|
//구매 BOM 팝업
|
|
function fn_salesMngBOMOpenPopUp(bom_report_objid){
|
|
var param = "actionType=search"
|
|
+"&bom_report_objid=" + bom_report_objid
|
|
;
|
|
window.open("/salesMng/salesMngBOMListPopUp.do?"+param, "_strListPopup", "width=1200, height=800, toolbar=no, status=no, menubar=no, location=no, scrollbars=yes, resizable=yes");
|
|
}
|
|
|
|
function fn_salesMngBOMOpenPopUp(bom_report_objid){
|
|
var param = "actionType=search"
|
|
+"&bom_report_objid=" + bom_report_objid
|
|
;
|
|
window.open("/salesMng/salesRequestDetailPopUp.do?"+param, "_strListPopup", "width=1200, height=800, toolbar=no, status=no, menubar=no, location=no, scrollbars=yes, resizable=yes");
|
|
}
|
|
|
|
function fn_openSaleRegPopup(orderNo, saleNo){
|
|
var popup_width = 1000;
|
|
var popup_height = 550;
|
|
// 한글 프로젝트 번호 인코딩 처리
|
|
var url = "/salesMgmt/salesRegForm.do?orderNo=" + encodeURIComponent(orderNo) + "&saleNo=" + (saleNo ? encodeURIComponent(saleNo) : "");
|
|
fn_centerPopup(popup_width, popup_height, url);
|
|
}
|
|
|
|
function _fnc_datepick(){
|
|
var $dateinput = $("input.date_icon");
|
|
for(var i=0; i<$dateinput.length; i++){
|
|
$dateinput.eq(i).attr("size","10");
|
|
$dateinput.eq(i).datepicker({
|
|
changeMonth:true,
|
|
changeYear:true
|
|
});
|
|
}
|
|
}
|
|
|
|
//품의서 생성
|
|
function fn_formPopUp(objId,sales_request_objid){
|
|
var popup_width = 1260;
|
|
var popup_height = 1050;
|
|
|
|
//var hiddenForm = document.hiddenForm;
|
|
var target = "purchaseOrderFormPopup_salesRequest";
|
|
var url = "/purchaseOrder/purchaseOrderFormPopup_new.do?ObjId="+objId+"&sales_request_objid="+sales_request_objid;
|
|
fn_centerPopup(popup_width, popup_height, url, target);
|
|
|
|
/* hiddenForm.PURCHASE_ORDER_MASTER_OBJID.value = objId;
|
|
hiddenForm.action = url;
|
|
hiddenForm.target = target;
|
|
hiddenForm.submit(); */
|
|
}
|
|
|
|
/**
|
|
* 품의서 생성 함수
|
|
* - 선택된 구매요청서에서 단가가 입력된 품목만 필터링
|
|
* - 이미 품의서가 생성된 품목은 제외
|
|
* - 하나의 품의서로 생성
|
|
*/
|
|
function fn_createProposal() {
|
|
// 1. 선택된 행 확인
|
|
var selectedRows = _tabulGrid.getSelectedData();
|
|
|
|
if(selectedRows.length == 0) {
|
|
Swal.fire({
|
|
title: '알림',
|
|
text: '품의서를 생성할 구매요청서를 선택해주세요.',
|
|
icon: 'info'
|
|
});
|
|
return;
|
|
}
|
|
|
|
if(selectedRows.length > 1) {
|
|
Swal.fire({
|
|
title: '알림',
|
|
text: '한 번에 하나의 구매요청서만 선택해주세요.',
|
|
icon: 'info'
|
|
});
|
|
return;
|
|
}
|
|
|
|
var selectedRow = selectedRows[0];
|
|
var salesRequestObjid = fnc_checkNull(selectedRow.OBJID);
|
|
|
|
// 2. 구매요청서의 품목 중 단가가 입력되고 품의서 미생성된 품목 조회
|
|
$.ajax({
|
|
url: "/salesMng/getProposalTargetParts.do",
|
|
type: "POST",
|
|
data: {
|
|
SALES_REQUEST_MASTER_OBJID: salesRequestObjid
|
|
},
|
|
dataType: "json",
|
|
success: function(response) {
|
|
if(response.resultFlag === "S") {
|
|
var targetParts = response.data;
|
|
var excludedParts = response.excludedParts || []; // 공급업체 미입력 품목
|
|
|
|
// 3. 대상 품목 확인
|
|
if(!targetParts || targetParts.length == 0) {
|
|
Swal.fire({
|
|
title: '알림',
|
|
text: '품의서를 생성할 품목이 없습니다.\n(단가와 공급업체가 모두 입력되고 품의서가 생성되지 않은 품목만 대상)',
|
|
icon: 'info'
|
|
});
|
|
return;
|
|
}
|
|
|
|
// 4. 품의서 생성 확인
|
|
var partCount = targetParts.length;
|
|
var partListHtml = targetParts.map(function(part) {
|
|
return '- ' + fnc_checkNull(part.PART_NO) + ' / ' + fnc_checkNull(part.PART_NAME);
|
|
}).join('<br/>');
|
|
|
|
// 공급업체 미입력으로 제외된 품목이 있는 경우 알림 추가
|
|
var excludedHtml = '';
|
|
if(excludedParts && excludedParts.length > 0) {
|
|
var excludedListHtml = excludedParts.map(function(part) {
|
|
return '- ' + fnc_checkNull(part.PART_NO) + ' / ' + fnc_checkNull(part.PART_NAME);
|
|
}).join('<br/>');
|
|
|
|
excludedHtml = '<div style="margin-top:15px; padding:10px; background-color:#fff3cd; border:1px solid #ffc107; border-radius:4px;">' +
|
|
'<p style="color:#856404; font-weight:bold; margin-bottom:5px;">⚠️ 공급업체 미입력으로 제외된 품목 (' + excludedParts.length + '건)</p>' +
|
|
'<div style="max-height:100px; overflow-y:auto; font-size:11px; color:#856404;">' +
|
|
excludedListHtml +
|
|
'</div>' +
|
|
'</div>';
|
|
}
|
|
|
|
Swal.fire({
|
|
title: '품의서 생성',
|
|
html: '<div style="text-align:left;">' +
|
|
'<p>총 <strong>' + partCount + '건</strong>의 품목으로 품의서를 생성합니다.</p>' +
|
|
'<div style="max-height:150px; overflow-y:auto; border:1px solid #ddd; padding:10px; margin-top:10px; font-size:12px;">' +
|
|
partListHtml +
|
|
'</div>' +
|
|
excludedHtml +
|
|
'</div>',
|
|
icon: 'question',
|
|
showCancelButton: true,
|
|
confirmButtonText: '생성',
|
|
cancelButtonText: '취소'
|
|
}).then((result) => {
|
|
if (result.isConfirmed) {
|
|
fn_executeCreateProposal(salesRequestObjid, targetParts);
|
|
}
|
|
});
|
|
} else {
|
|
// 실패 시에도 공급업체 미입력 품목 정보 표시
|
|
var excludedParts = response.excludedParts || [];
|
|
var excludedHtml = '';
|
|
|
|
if(excludedParts && excludedParts.length > 0) {
|
|
var excludedListHtml = excludedParts.map(function(part) {
|
|
return '- ' + fnc_checkNull(part.PART_NO) + ' / ' + fnc_checkNull(part.PART_NAME);
|
|
}).join('<br/>');
|
|
|
|
excludedHtml = '<br/><br/><div style="text-align:left; padding:10px; background-color:#fff3cd; border:1px solid #ffc107; border-radius:4px;">' +
|
|
'<p style="color:#856404; font-weight:bold; margin-bottom:5px;">⚠️ 공급업체 미입력 품목 (' + excludedParts.length + '건)</p>' +
|
|
'<div style="max-height:150px; overflow-y:auto; font-size:11px; color:#856404;">' +
|
|
excludedListHtml +
|
|
'</div>' +
|
|
'</div>';
|
|
}
|
|
|
|
Swal.fire({
|
|
title: '알림',
|
|
html: (response.message || '품목 조회 중 오류가 발생했습니다.') + excludedHtml,
|
|
icon: 'info'
|
|
});
|
|
}
|
|
},
|
|
error: function(xhr, status, error) {
|
|
Swal.fire({
|
|
title: '오류',
|
|
text: '서버 통신 중 오류가 발생했습니다.22',
|
|
icon: 'error'
|
|
});
|
|
}
|
|
});
|
|
}
|
|
|
|
/**
|
|
* 품의서 생성 실행
|
|
*/
|
|
function fn_executeCreateProposal(salesRequestObjid, targetParts) {
|
|
$.ajax({
|
|
url: "/salesMng/createProposalFromPurchaseList.do",
|
|
type: "POST",
|
|
data: {
|
|
SALES_REQUEST_MASTER_OBJID: salesRequestObjid,
|
|
TARGET_PARTS: JSON.stringify(targetParts)
|
|
},
|
|
dataType: "json",
|
|
success: function(response) {
|
|
if(response.resultFlag === "S") {
|
|
Swal.fire({
|
|
title: '생성 완료',
|
|
text: '품의서가 생성되었습니다.\n품의서 관리에서 확인하세요.',
|
|
icon: 'success'
|
|
}).then(() => {
|
|
fn_search(); // 목록 새로고침
|
|
});
|
|
} else {
|
|
Swal.fire({
|
|
title: '오류',
|
|
text: response.message || '품의서 생성 중 오류가 발생했습니다.',
|
|
icon: 'error'
|
|
});
|
|
}
|
|
},
|
|
error: function(xhr, status, error) {
|
|
Swal.fire({
|
|
title: '오류',
|
|
text: '서버 통신 중 오류가 발생했습니다.',
|
|
icon: 'error'
|
|
});
|
|
}
|
|
});
|
|
}
|
|
</script>
|
|
</head>
|
|
<body class="backcolor">
|
|
<form name="hiddenForm" id="hiddenForm" method="post">
|
|
<input type="hidden" name="OBJID" id="OBJID">
|
|
</form>
|
|
<form name="form1" id="form1" action="" method="post">
|
|
<input type="hidden" name="actionType" id="actionType" value="" />
|
|
<div class="min_part_enroll">
|
|
<div class="content-box">
|
|
<div class="content-box-s">
|
|
<div class="plm_menu_name_gdnsi">
|
|
<h2>
|
|
<span><%=menuName%></span>
|
|
</h2>
|
|
<div class="btnArea">
|
|
<input type="button" value="조회" class="plm_btns" id="btnSearch">
|
|
<input type="button" value="구매요청서작성" class="plm_btns" id="btnOrderReg">
|
|
<input type="button" value="품의서생성" class="plm_btns" id="btnReg">
|
|
</div>
|
|
</div>
|
|
<div id="plmSearchZon">
|
|
<table>
|
|
<tbody>
|
|
<tr>
|
|
<%-- 품번 활성화 --%>
|
|
<td class="align_r">
|
|
<label for="" class="">품번</label>
|
|
</td>
|
|
<td>
|
|
<select name="SEARCH_PART_NO" id="SEARCH_PART_NO" class="select2-part" style="width:200px;">
|
|
<option value="">품번 선택</option>
|
|
</select>
|
|
<input type="hidden" name="SEARCH_PART_OBJID" id="SEARCH_PART_OBJID" value="">
|
|
</td>
|
|
<%-- 품명 활성화 --%>
|
|
<td class="align_r">
|
|
<label for="" class="">품명</label>
|
|
</td>
|
|
<td>
|
|
<select name="SEARCH_PART_NAME" id="SEARCH_PART_NAME" class="select2-part" style="width:200px;">
|
|
<option value="">품명 선택</option>
|
|
</select>
|
|
</td>
|
|
<%-- 작성일 활성화 --%>
|
|
<td class="align_r"><label>작성일</label></td>
|
|
<td>
|
|
<input type="text" name="regdate_start" id="regdate_start" style="width:120px;" autocomplete="off" value="${param.regdate_start}" class="date_icon">~
|
|
<input type="text" name="regdate_end" id="regdate_end" style="width:120px;" autocomplete="off" value="${param.regdate_end}" class="date_icon">
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
|
|
<%@include file= "/WEB-INF/view/common/common_gridArea.jsp" %>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</form>
|
|
</body>
|
|
<style>
|
|
.container::-webkit-scrollbar-thumb {background: linear-gradient(to bottom, #f5d78e, #f5d78e) !important;}
|
|
.container::-webkit-scrollbar-track {background-color: white !important;}
|
|
.container::-webkit-scrollbar-button { display: none !important;}
|
|
</style>
|
|
</html>
|