품의서관리 결재, mbom리스트 버전, 작성자 등 추가

This commit is contained in:
2025-11-28 13:43:05 +09:00
parent f2e39a73c2
commit 5c72cda6e6
6 changed files with 147 additions and 60 deletions

View File

@@ -15,10 +15,22 @@ var helpViewArr = new Array();
var refArr = new Array();
var refViewArr = new Array();
// URL 파라미터에서 값 가져오기 (한글 인코딩 처리)
function getUrlParameter(name) {
var urlParams = new URLSearchParams(window.location.search);
return urlParams.get(name) || '';
}
$(function(){
var callbackFnc = "${param.callbackFnc}";
// URL에서 approvalTitle 파라미터 가져와서 설정 (한글 인코딩 문제 해결)
var approvalTitleFromUrl = getUrlParameter('approvalTitle');
if(approvalTitleFromUrl) {
$("#approvalTitle").val(approvalTitleFromUrl);
}
//창 닫기
$('#btn_close').click(function(){
self.close();

View File

@@ -86,19 +86,20 @@ function _fnc_datepick(){
// 그리드 컬럼 정의
var columns = [
{title:'OBJID', field:'OBJID', visible: false},
{title:'CONTRACT_OBJID', field:'CONTRACT_OBJID', visible: false},
{title:'BOM_REPORT_OBJID', field:'BOM_REPORT_OBJID', visible: false},
{title:'MBOM_HEADER_OBJID', field:'MBOM_HEADER_OBJID', visible: false},
{title:'PURCHASE_LIST_OBJID', field:'PURCHASE_LIST_OBJID', visible: false},
{title:'OBJID', field:'OBJID', visible: false,frozen: true,},
{title:'CONTRACT_OBJID', field:'CONTRACT_OBJID', visible: false,frozen: true,},
{title:'BOM_REPORT_OBJID', field:'BOM_REPORT_OBJID', visible: false,frozen: true,},
{title:'MBOM_HEADER_OBJID', field:'MBOM_HEADER_OBJID', visible: false,frozen: true,},
{title:'PURCHASE_LIST_OBJID', field:'PURCHASE_LIST_OBJID', visible: false,frozen: true,},
// 1. 체크박스
{
headerHozAlign: 'center',
hozAlign: 'center',
width: 40,
width: 30,
title: '<input type="checkbox" id="checkAll">',
field: 'CHK',
frozen: true,
formatter: function(cell, formatterParams, onRendered) {
return '<input type="checkbox" class="rowCheck" data-objid="' + cell.getRow().getData().OBJID + '">';
},
@@ -109,9 +110,16 @@ var columns = [
{
headerHozAlign: 'center',
hozAlign: 'left',
width: 130,
width: 120,
title: '프로젝트번호',
field: 'PROJECT_NO'
field: 'PROJECT_NO',
frozen: true,
formatter: fnc_createGridAnchorTag,
cellClick: function(e, cell){
var orderNo = cell.getData().PROJECT_NO;
// 프로젝트 번호 클릭 시: 결재 정보 조회 모드 (saleNo에 "detail" 전달)
fn_openSaleRegPopup(orderNo, "detail");
}
},
// 3. 주문유형
@@ -145,7 +153,7 @@ var columns = [
{
headerHozAlign: 'center',
hozAlign: 'center',
width: 90,
width: 80,
title: '접수일',
field: 'RECEIPT_DATE'
},
@@ -181,7 +189,7 @@ var columns = [
{
headerHozAlign: 'center',
hozAlign: 'left',
// width: 150,
width: 150,
title: '품명',
field: 'PART_NAME'
},
@@ -239,13 +247,40 @@ var columns = [
}
},
// 16. 작성자 (M-BOM 작성자)
{
headerHozAlign: 'center',
hozAlign: 'center',
width: 90,
title: '작성자',
field: 'MBOM_EDITOR'
},
// 16. 최종저장일 (M-BOM 작성일)
{
headerHozAlign: 'center',
hozAlign: 'center',
width: 100,
title: '최종저장일',
width: 90,
title: '저장일',
field: 'MBOM_REGDATE'
},
// 17. 버전 (M-BOM 버전)
{
headerHozAlign: 'center',
hozAlign: 'center',
width: 70,
title: '버전',
field: 'MBOM_VERSION'
},
// 18. 구매리스트 생성일
{
headerHozAlign: 'center',
hozAlign: 'center',
width: 130,
title: '구매리스트 생성일',
field: 'PURCHASE_LIST_DATE'
}
];
@@ -399,6 +434,14 @@ function fn_openBomCopyPopupWindow(objId) {
}
}
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);
}
// 할당 정보 확인 후 M-BOM 팝업 열기
function fn_checkAssignmentAndOpenMbom(projectObjId) {
// 먼저 해당 프로젝트의 M-BOM이 실제로 존재하는지 확인

View File

@@ -100,7 +100,7 @@ var pageSize = 20;
$(document).ready(function(){
initEbomTable();
fn_searchEbom();
//fn_searchEbom();
// 조회 버튼 클릭 이벤트
$("#btnSearch").click(function(){

View File

@@ -85,28 +85,31 @@ $(document).ready(function(){
// 결재상신
$("#btnApproval").click(function(){
var selectedRowIds = _tabulGrid.getSelectedData();
if(selectedRowIds.length < 1){
Swal.fire("결재상신할 행을 선택해주십시오.");
return false;
}
if(selectedRowIds.length > 1){
Swal.fire("결재상신은 한 건씩만 가능합니다.");
return false;
}
var objId = fnc_checkNull(selectedRowIds[0].OBJID);
var status = fnc_checkNull(selectedRowIds[0].STATUS);
if(status != 'create' && status != 'reject'){
Swal.fire("미결재 또는 반려 상태만 결재상신 가능합니다.");
return false;
}
var title = encodeURIComponent("품의서 결재");
window.open("/approval/registApproval.do?targetType=PROPOSAL&targetObjId="+objId+"&approvalTitle="+title+"&callbackFnc=fn_search","registApproval","width=700,height=700");
});
var selectedData = _tabulGrid.getSelectedData();
if(selectedData.length<1){
Swal.fire("결재상신할 행을 선택해주십시오.");
return false;
}else if(selectedData.length>1){
Swal.fire("한번에 한개의 결재만 가능합니다.");
return false;
}else{
var targetStatus = fnc_checkNull(selectedData[0].STATUS_TITLE);
var status = fnc_checkNull(selectedData[0].STATUS);
if(targetStatus == "결재완료" || targetStatus == "결재중" || status == "cancel"){
Swal.fire("작성중/결재반려인 상태만 결재상신 가능합니다.");
return false;
}else{
if(confirm("결재상신 하시겠습니까?")){
var objId = fnc_checkNull(selectedData[0].OBJID);
//var title = encodeURIComponent(fnc_checkNull(selectedData[0].CONTRACT_NO));
var title = encodeURIComponent("품의서 결재");
window.open("/approval/registApproval.do?targetType=PROPOSAL&targetObjId="+objId+"&approvalTitle="+title,"registApproval","width=700,height=700");
}
}
}
});
// 발주서생성
$("#btnCreatePO").click(function(){
@@ -126,17 +129,6 @@ $(document).ready(function(){
Swal.fire("발주서 생성 기능은 준비 중입니다.");
});
// 초기화
$("#btnReset").click(function(){
$("#form1")[0].reset();
$('.select2').val('').trigger('change');
});
// 엑셀 다운로드
$("#btnExcel").click(function(){
fn_excelExport($("#mainGrid"), "품의서관리");
});
fn_search();
_fnc_datepick();
});
@@ -158,14 +150,12 @@ var columns = [
{headerHozAlign:'center', hozAlign:'left', title:"품번", field:"PART_NO", widthGrow:1.5},
{headerHozAlign:'center', hozAlign:'left', title:"품명", field:"PART_NAME", widthGrow:1.8},
{headerHozAlign:'center', hozAlign:'center', title:"결재상태", field:"STATUS_TITLE", widthGrow:1.0,
formatter: function(cell){
var value = cell.getValue();
var color = '';
if(value == '결재완료') color = '#28a745';
else if(value == '결재중') color = '#007bff';
else if(value == '반려') color = '#dc3545';
else color = '#6c757d';
return '<span style="color:' + color + '; font-weight:bold;">' + fnc_checkNull(value) + '</span>';
formatter:fnc_createGridAnchorTag,
cellClick:function(e, cell){
var statusTitle = fnc_checkNull(cell.getData().STATUS_TITLE);
if(statusTitle == "결재중" || statusTitle == "결재완료" || statusTitle == "반려"){
fnc_approvalDetail(cell.getData().APPROVAL_OBJID, cell.getData().ROUTE_OBJID);
}
}
},
{headerHozAlign:'center', hozAlign:'center', title:"작성일", field:"REGDATE_TITLE", widthGrow:1.0}
@@ -182,6 +172,16 @@ function fn_openProposalFormPopUp(objId){
window.open(url, "proposalFormPopUp", "width=1200,height=700,scrollbars=yes,resizable=yes");
}
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
});
}
}
</script>
</head>
<body>
@@ -198,8 +198,6 @@ function fn_openProposalFormPopUp(objId){
<input type="button" value="조회" class="plm_btns" id="btnSearch">
<input type="button" value="결재상신" class="plm_btns" id="btnApproval" style="background:#17a2b8; color:white;">
<input type="button" value="발주서생성" class="plm_btns" id="btnCreatePO" style="background:#28a745; color:white;">
<%-- <input type="button" value="초기화" class="plm_btns" id="btnReset">
<input type="button" value="엑셀 다운로드" class="plm_btns" id="btnExcel"> --%>
</div>
</div>
<div id="plmSearchZon">

View File

@@ -2963,6 +2963,18 @@
LIMIT 1
)
LIMIT 1) AS PURCHASE_LIST_OBJID,
-- 구매리스트 생성일
(SELECT TO_CHAR(SRM.REGDATE, 'YYYY-MM-DD')
FROM SALES_REQUEST_MASTER SRM
WHERE SRM.MBOM_HEADER_OBJID = (
SELECT MH.OBJID::VARCHAR
FROM MBOM_HEADER MH
WHERE MH.PROJECT_OBJID = PM.OBJID::VARCHAR
AND MH.STATUS = 'Y'
ORDER BY MH.REGDATE DESC
LIMIT 1
)
LIMIT 1) AS PURCHASE_LIST_DATE,
-- M-BOM 상태: 새 MBOM_HEADER 테이블에서 조회
COALESCE(
(SELECT
@@ -2993,7 +3005,29 @@
WHERE MH.PROJECT_OBJID = PM.OBJID::VARCHAR
AND MH.STATUS = 'Y'
ORDER BY COALESCE(MH.EDIT_DATE, MH.REGDATE) DESC
LIMIT 1) AS MBOM_REGDATE
LIMIT 1) AS MBOM_REGDATE,
-- M-BOM 작성자: 새 MBOM_HEADER 테이블에서 조회
(SELECT USER_NAME(COALESCE(MH.EDITER, MH.WRITER))
FROM MBOM_HEADER MH
WHERE MH.PROJECT_OBJID = PM.OBJID::VARCHAR
AND MH.STATUS = 'Y'
ORDER BY COALESCE(MH.EDITER, MH.WRITER) DESC
LIMIT 1) AS MBOM_EDITOR,
-- M-BOM 히스토리 카운트 (버전, 0이면 NULL)
NULLIF(
(
SELECT COUNT(1)::INTEGER
FROM MBOM_HISTORY MHI
WHERE MHI.MBOM_HEADER_OBJID = (
SELECT MH.OBJID::VARCHAR
FROM MBOM_HEADER MH
WHERE MH.PROJECT_OBJID = PM.OBJID::VARCHAR
AND MH.STATUS = 'Y'
ORDER BY MH.REGDATE DESC
LIMIT 1
)
), 0
) AS MBOM_VERSION
FROM
PROJECT_MGMT PM
LEFT JOIN CONTRACT_MGMT CM ON PM.CONTRACT_OBJID = CM.OBJID

View File

@@ -3615,9 +3615,9 @@ ORDER BY V.PATH2
SRM.STATUS,
CASE
WHEN A.APPR_STATUS IS NOT NULL THEN A.APPR_STATUS
WHEN SRM.STATUS = 'create' THEN '미결재'
WHEN SRM.STATUS = 'approvalComplete' THEN '결재완료'
WHEN SRM.STATUS = 'reject' THEN '반려'
WHEN SRM.STATUS = 'create' THEN '작성중'
-- WHEN SRM.STATUS = 'approvalComplete' THEN '결재완료'
-- WHEN SRM.STATUS = 'reject' THEN '반려'
ELSE ''
END AS STATUS_TITLE,
SRM.WRITER,