품의서 관리 초안
This commit is contained in:
@@ -3325,5 +3325,178 @@ ORDER BY V.PATH2
|
||||
NOW()
|
||||
)
|
||||
</insert>
|
||||
|
||||
<!-- ==================== 품의서 관리 ==================== -->
|
||||
|
||||
<!-- 품의서 목록 조회 -->
|
||||
<select id="getProposalMngGridList" parameterType="map" resultType="map">
|
||||
SELECT
|
||||
SRM.OBJID,
|
||||
SRM.REQUEST_MNG_NO AS PROPOSAL_NO,
|
||||
-- 발주서 No
|
||||
(SELECT STRING_AGG(PURCHASE_ORDER_NO, ', ') FROM PURCHASE_ORDER_MASTER WHERE SALES_REQUEST_OBJID = SRM.OBJID) AS PURCHASE_ORDER_NO,
|
||||
SRM.PROJECT_NO,
|
||||
(SELECT PROJECT_NO FROM PROJECT_MGMT PM WHERE PM.OBJID = SRM.PROJECT_NO) AS PROJECT_NUMBER,
|
||||
SRM.PURCHASE_TYPE,
|
||||
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = SRM.PURCHASE_TYPE) AS PURCHASE_TYPE_NAME,
|
||||
SRM.ORDER_TYPE,
|
||||
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = SRM.ORDER_TYPE) AS ORDER_TYPE_NAME,
|
||||
SRM.PRODUCT_NAME,
|
||||
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = SRM.PRODUCT_NAME) AS PRODUCT_NAME_TITLE,
|
||||
-- 품번/품명 ("외 N건" 형태로 표시)
|
||||
(
|
||||
SELECT
|
||||
CASE
|
||||
WHEN COUNT(*) > 1 THEN
|
||||
(SELECT PM.PART_NO FROM PART_MNG PM WHERE PM.OBJID::VARCHAR = (SELECT PART_OBJID FROM SALES_REQUEST_PART WHERE SALES_REQUEST_MASTER_OBJID = SRM.OBJID ORDER BY REGDATE LIMIT 1)) || ' 외 ' || (COUNT(*) - 1) || '건'
|
||||
ELSE
|
||||
(SELECT PM.PART_NO FROM PART_MNG PM WHERE PM.OBJID::VARCHAR = (SELECT PART_OBJID FROM SALES_REQUEST_PART WHERE SALES_REQUEST_MASTER_OBJID = SRM.OBJID ORDER BY REGDATE LIMIT 1))
|
||||
END
|
||||
FROM SALES_REQUEST_PART
|
||||
WHERE SALES_REQUEST_MASTER_OBJID = SRM.OBJID
|
||||
) AS PART_NO,
|
||||
(
|
||||
SELECT
|
||||
CASE
|
||||
WHEN COUNT(*) > 1 THEN
|
||||
(SELECT PM.PART_NAME FROM PART_MNG PM WHERE PM.OBJID::VARCHAR = (SELECT PART_OBJID FROM SALES_REQUEST_PART WHERE SALES_REQUEST_MASTER_OBJID = SRM.OBJID ORDER BY REGDATE LIMIT 1)) || ' 외 ' || (COUNT(*) - 1) || '건'
|
||||
ELSE
|
||||
(SELECT PM.PART_NAME FROM PART_MNG PM WHERE PM.OBJID::VARCHAR = (SELECT PART_OBJID FROM SALES_REQUEST_PART WHERE SALES_REQUEST_MASTER_OBJID = SRM.OBJID ORDER BY REGDATE LIMIT 1))
|
||||
END
|
||||
FROM SALES_REQUEST_PART
|
||||
WHERE SALES_REQUEST_MASTER_OBJID = SRM.OBJID
|
||||
) AS PART_NAME,
|
||||
-- 공급업체 (첫번째 공급업체 + 외 N건)
|
||||
(
|
||||
SELECT
|
||||
CASE
|
||||
WHEN COUNT(DISTINCT POM.PARTNER_OBJID) > 1 THEN
|
||||
(SELECT SUPPLY_NAME FROM ADMIN_SUPPLY_MNG WHERE OBJID = (SELECT PARTNER_OBJID FROM PURCHASE_ORDER_MASTER WHERE SALES_REQUEST_OBJID = SRM.OBJID ORDER BY REGDATE LIMIT 1)::NUMERIC) || ' 외 ' || (COUNT(DISTINCT POM.PARTNER_OBJID) - 1) || '건'
|
||||
ELSE
|
||||
(SELECT SUPPLY_NAME FROM ADMIN_SUPPLY_MNG WHERE OBJID = (SELECT PARTNER_OBJID FROM PURCHASE_ORDER_MASTER WHERE SALES_REQUEST_OBJID = SRM.OBJID ORDER BY REGDATE LIMIT 1)::NUMERIC)
|
||||
END
|
||||
FROM PURCHASE_ORDER_MASTER POM
|
||||
WHERE POM.SALES_REQUEST_OBJID = SRM.OBJID
|
||||
) AS SUPPLIER_NAME,
|
||||
-- 총액
|
||||
(SELECT SUM(COALESCE(TOTAL_PRICE, 0)) FROM PURCHASE_ORDER_MASTER WHERE SALES_REQUEST_OBJID = SRM.OBJID) AS TOTAL_AMOUNT,
|
||||
-- 메일발송 여부
|
||||
(SELECT CASE WHEN COUNT(*) > 0 THEN 'Y' ELSE 'N' END FROM PURCHASE_ORDER_MASTER WHERE SALES_REQUEST_OBJID = SRM.OBJID AND MAIL_SENT = 'Y') AS MAIL_SENT,
|
||||
-- 발주일
|
||||
(SELECT TO_CHAR(MAX(ORDER_DATE), 'YYYY-MM-DD') FROM PURCHASE_ORDER_MASTER WHERE SALES_REQUEST_OBJID = SRM.OBJID) AS ORDER_DATE,
|
||||
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 '반려'
|
||||
ELSE ''
|
||||
END AS STATUS_TITLE,
|
||||
SRM.WRITER,
|
||||
(SELECT DEPT_NAME||' '||USER_NAME FROM USER_INFO WHERE USER_ID = SRM.WRITER) AS WRITER_NAME,
|
||||
SRM.REGDATE,
|
||||
TO_CHAR(SRM.REGDATE,'YYYY-MM-DD') AS REGDATE_TITLE,
|
||||
A.APPROVAL_OBJID,
|
||||
A.ROUTE_OBJID
|
||||
FROM
|
||||
SALES_REQUEST_MASTER SRM
|
||||
LEFT OUTER JOIN (
|
||||
SELECT
|
||||
B.OBJID AS ROUTE_OBJID,
|
||||
CASE B.STATUS
|
||||
WHEN 'inProcess' THEN '결재중'
|
||||
WHEN 'complete' THEN '결재완료'
|
||||
WHEN 'reject' THEN '반려'
|
||||
ELSE ''
|
||||
END APPR_STATUS,
|
||||
A.OBJID AS APPROVAL_OBJID,
|
||||
A.TARGET_OBJID,
|
||||
B.ROUTE_SEQ
|
||||
FROM
|
||||
APPROVAL A,
|
||||
(
|
||||
SELECT
|
||||
T1.*
|
||||
FROM
|
||||
(
|
||||
SELECT
|
||||
TARGET_OBJID,
|
||||
MAX(T.ROUTE_SEQ) AS ROUTE_SEQ
|
||||
FROM
|
||||
ROUTE T
|
||||
GROUP BY
|
||||
T.TARGET_OBJID
|
||||
) T,
|
||||
ROUTE T1
|
||||
WHERE
|
||||
T.TARGET_OBJID = T1.TARGET_OBJID
|
||||
AND T.ROUTE_SEQ = T1.ROUTE_SEQ
|
||||
) B
|
||||
WHERE A.OBJID = B.APPROVAL_OBJID
|
||||
AND TARGET_TYPE IN ('PROPOSAL', 'SALES_REQUEST')
|
||||
) A ON SRM.OBJID::VARCHAR = A.TARGET_OBJID::VARCHAR
|
||||
WHERE 1=1
|
||||
AND SRM.STATUS IN ('create', 'approvalRequest', 'approvalComplete', 'reject')
|
||||
|
||||
<if test="SEARCH_PROPOSAL_NO != null and !''.equals(SEARCH_PROPOSAL_NO)">
|
||||
AND SRM.REQUEST_MNG_NO LIKE '%${SEARCH_PROPOSAL_NO}%'
|
||||
</if>
|
||||
|
||||
<if test="SEARCH_PROJECT_NO != null and !''.equals(SEARCH_PROJECT_NO)">
|
||||
AND (SELECT PROJECT_NO FROM PROJECT_MGMT PM WHERE PM.OBJID = SRM.PROJECT_NO) LIKE '%${SEARCH_PROJECT_NO}%'
|
||||
</if>
|
||||
|
||||
<if test="SEARCH_STATUS != null and !''.equals(SEARCH_STATUS)">
|
||||
AND SRM.STATUS = #{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>
|
||||
|
||||
<!-- 품의서 상세 조회 -->
|
||||
<select id="getProposalInfo" parameterType="map" resultType="map">
|
||||
SELECT
|
||||
SRM.OBJID,
|
||||
SRM.REQUEST_MNG_NO AS PROPOSAL_NO,
|
||||
SRM.PROJECT_NO,
|
||||
(SELECT PROJECT_NO FROM PROJECT_MGMT PM WHERE PM.OBJID = SRM.PROJECT_NO) AS PROJECT_NUMBER,
|
||||
(SELECT PROJECT_NAME FROM PROJECT_MGMT PM WHERE PM.OBJID = SRM.PROJECT_NO) AS PROJECT_NAME,
|
||||
SRM.PURCHASE_TYPE,
|
||||
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = SRM.PURCHASE_TYPE) AS PURCHASE_TYPE_NAME,
|
||||
SRM.ORDER_TYPE,
|
||||
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = SRM.ORDER_TYPE) AS ORDER_TYPE_NAME,
|
||||
SRM.PRODUCT_NAME,
|
||||
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = SRM.PRODUCT_NAME) AS PRODUCT_NAME_TITLE,
|
||||
SRM.AREA_CD,
|
||||
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = SRM.AREA_CD) AS AREA_CD_NAME,
|
||||
SRM.CUSTOMER_OBJID,
|
||||
(SELECT SUPPLY_NAME FROM SUPPLY_MNG WHERE OBJID::VARCHAR = SRM.CUSTOMER_OBJID) AS CUSTOMER_NAME,
|
||||
SRM.PAID_TYPE,
|
||||
(CASE WHEN SRM.PAID_TYPE = 'paid' THEN '유상' WHEN SRM.PAID_TYPE = 'free' THEN '무상' ELSE SRM.PAID_TYPE END) AS PAID_TYPE_NAME,
|
||||
SRM.STATUS,
|
||||
CASE SRM.STATUS
|
||||
WHEN 'create' THEN '미결재'
|
||||
WHEN 'approvalRequest' THEN '결재중'
|
||||
WHEN 'approvalComplete' THEN '결재완료'
|
||||
WHEN 'reject' THEN '반려'
|
||||
ELSE ''
|
||||
END AS STATUS_TITLE,
|
||||
SRM.WRITER,
|
||||
(SELECT DEPT_NAME||' '||USER_NAME FROM USER_INFO WHERE USER_ID = SRM.WRITER) AS WRITER_NAME,
|
||||
SRM.REGDATE,
|
||||
TO_CHAR(SRM.REGDATE,'YYYY-MM-DD') AS REGDATE_TITLE,
|
||||
SRM.REMARK
|
||||
FROM
|
||||
SALES_REQUEST_MASTER SRM
|
||||
WHERE
|
||||
SRM.OBJID = #{PROPOSAL_OBJID}
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
220
WebContent/WEB-INF/view/salesMng/proposalMngList.jsp
Normal file
220
WebContent/WEB-INF/view/salesMng/proposalMngList.jsp
Normal file
@@ -0,0 +1,220 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
|
||||
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
|
||||
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
|
||||
<%@ 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>
|
||||
<!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;
|
||||
}
|
||||
</style>
|
||||
<script>
|
||||
var _tabulGrid;
|
||||
|
||||
$(document).ready(function(){
|
||||
$('.select2').select2();
|
||||
|
||||
$("input[type=text]").keyup(function(e){
|
||||
if(e.keyCode == 13){
|
||||
$("#btnSearch").trigger("click");
|
||||
}
|
||||
});
|
||||
|
||||
// 조회
|
||||
$("#btnSearch").click(function(){
|
||||
fn_search();
|
||||
});
|
||||
|
||||
// 결재상신
|
||||
$("#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");
|
||||
});
|
||||
|
||||
// 발주서생성
|
||||
$("#btnCreatePO").click(function(){
|
||||
var selectedRowIds = _tabulGrid.getSelectedData();
|
||||
if(selectedRowIds.length < 1){
|
||||
Swal.fire("발주서를 생성할 행을 선택해주십시오.");
|
||||
return false;
|
||||
}
|
||||
|
||||
var status = fnc_checkNull(selectedRowIds[0].STATUS);
|
||||
if(status != 'approvalComplete'){
|
||||
Swal.fire("결재완료 상태만 발주서 생성이 가능합니다.");
|
||||
return false;
|
||||
}
|
||||
|
||||
// TODO: 발주서 생성 로직 구현
|
||||
Swal.fire("발주서 생성 기능은 준비 중입니다.");
|
||||
});
|
||||
|
||||
// 초기화
|
||||
$("#btnReset").click(function(){
|
||||
$("#form1")[0].reset();
|
||||
$('.select2').val('').trigger('change');
|
||||
});
|
||||
|
||||
// 엑셀 다운로드
|
||||
$("#btnExcel").click(function(){
|
||||
fn_excelExport($("#mainGrid"), "품의서관리");
|
||||
});
|
||||
|
||||
fn_search();
|
||||
_fnc_datepick();
|
||||
});
|
||||
|
||||
// 그리드 컬럼 정의
|
||||
var columns = [
|
||||
{title:'OBJID', field:'OBJID', visible: false},
|
||||
{title:'STATUS', field:'STATUS', visible: false},
|
||||
{headerHozAlign:'center', hozAlign:'left', title:"품의서 No", field:"PROPOSAL_NO", widthGrow:1.2, frozen:true,
|
||||
cellClick: function(e, cell){
|
||||
var objId = cell.getData().OBJID;
|
||||
fn_openProposalFormPopUp(objId);
|
||||
},
|
||||
formatter: function(cell){
|
||||
return '<a href="#" style="color:#0066cc; text-decoration:underline;">' + fnc_checkNull(cell.getValue()) + '</a>';
|
||||
}
|
||||
},
|
||||
{headerHozAlign:'center', hozAlign:'left', title:"프로젝트번호", field:"PROJECT_NUMBER", widthGrow:1.3},
|
||||
{headerHozAlign:'center', hozAlign:'center', title:"구매유형", field:"PURCHASE_TYPE_NAME", widthGrow:1.0},
|
||||
{headerHozAlign:'center', hozAlign:'center', title:"주문유형", field:"ORDER_TYPE_NAME", widthGrow:1.0},
|
||||
{headerHozAlign:'center', hozAlign:'center', title:"제품구분", field:"PRODUCT_NAME_TITLE", widthGrow:1.0},
|
||||
{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>';
|
||||
}
|
||||
},
|
||||
{headerHozAlign:'center', hozAlign:'center', title:"작성일", field:"REGDATE_TITLE", widthGrow:1.0}
|
||||
];
|
||||
|
||||
// 검색
|
||||
function fn_search(){
|
||||
_tabulGrid = fnc_tabul_search(_tabul_layout_fitColumns, _tabulGrid, "/salesMng/proposalMngGridList.do", columns, true);
|
||||
}
|
||||
|
||||
// 품의서 상세 팝업
|
||||
function fn_openProposalFormPopUp(objId){
|
||||
var url = "/salesMng/proposalFormPopUp.do?PROPOSAL_OBJID=" + fnc_checkNull(objId);
|
||||
window.open(url, "proposalFormPopUp", "width=1200,height=700,scrollbars=yes,resizable=yes");
|
||||
}
|
||||
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<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>구매관리_품의서관리</span>
|
||||
</h2>
|
||||
<div class="btnArea">
|
||||
<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">
|
||||
<table>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="align_r"><label>품의서 No</label></td>
|
||||
<td>
|
||||
<input type="text" name="SEARCH_PROPOSAL_NO" id="SEARCH_PROPOSAL_NO" style="width:150px;" value="${param.SEARCH_PROPOSAL_NO}"/>
|
||||
</td>
|
||||
<td class="align_r"><label>프로젝트번호</label></td>
|
||||
<td>
|
||||
<input type="text" name="SEARCH_PROJECT_NO" id="SEARCH_PROJECT_NO" style="width:150px;" value="${param.SEARCH_PROJECT_NO}"/>
|
||||
</td>
|
||||
<td class="align_r"><label>결재상태</label></td>
|
||||
<td>
|
||||
<select name="SEARCH_STATUS" id="SEARCH_STATUS" class="select2" style="width:130px;">
|
||||
<option value="">전체</option>
|
||||
<option value="create">미결재</option>
|
||||
<option value="inProcess">결재중</option>
|
||||
<option value="approvalComplete">결재완료</option>
|
||||
<option value="reject">반려</option>
|
||||
</select>
|
||||
</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>
|
||||
</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>
|
||||
|
||||
@@ -3325,5 +3325,178 @@ ORDER BY V.PATH2
|
||||
NOW()
|
||||
)
|
||||
</insert>
|
||||
|
||||
<!-- ==================== 품의서 관리 ==================== -->
|
||||
|
||||
<!-- 품의서 목록 조회 -->
|
||||
<select id="getProposalMngGridList" parameterType="map" resultType="map">
|
||||
SELECT
|
||||
SRM.OBJID,
|
||||
SRM.REQUEST_MNG_NO AS PROPOSAL_NO,
|
||||
-- 발주서 No
|
||||
(SELECT STRING_AGG(PURCHASE_ORDER_NO, ', ') FROM PURCHASE_ORDER_MASTER WHERE SALES_REQUEST_OBJID = SRM.OBJID) AS PURCHASE_ORDER_NO,
|
||||
SRM.PROJECT_NO,
|
||||
(SELECT PROJECT_NO FROM PROJECT_MGMT PM WHERE PM.OBJID = SRM.PROJECT_NO) AS PROJECT_NUMBER,
|
||||
SRM.PURCHASE_TYPE,
|
||||
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = SRM.PURCHASE_TYPE) AS PURCHASE_TYPE_NAME,
|
||||
SRM.ORDER_TYPE,
|
||||
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = SRM.ORDER_TYPE) AS ORDER_TYPE_NAME,
|
||||
SRM.PRODUCT_NAME,
|
||||
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = SRM.PRODUCT_NAME) AS PRODUCT_NAME_TITLE,
|
||||
-- 품번/품명 ("외 N건" 형태로 표시)
|
||||
(
|
||||
SELECT
|
||||
CASE
|
||||
WHEN COUNT(*) > 1 THEN
|
||||
(SELECT PM.PART_NO FROM PART_MNG PM WHERE PM.OBJID::VARCHAR = (SELECT PART_OBJID FROM SALES_REQUEST_PART WHERE SALES_REQUEST_MASTER_OBJID = SRM.OBJID ORDER BY REGDATE LIMIT 1)) || ' 외 ' || (COUNT(*) - 1) || '건'
|
||||
ELSE
|
||||
(SELECT PM.PART_NO FROM PART_MNG PM WHERE PM.OBJID::VARCHAR = (SELECT PART_OBJID FROM SALES_REQUEST_PART WHERE SALES_REQUEST_MASTER_OBJID = SRM.OBJID ORDER BY REGDATE LIMIT 1))
|
||||
END
|
||||
FROM SALES_REQUEST_PART
|
||||
WHERE SALES_REQUEST_MASTER_OBJID = SRM.OBJID
|
||||
) AS PART_NO,
|
||||
(
|
||||
SELECT
|
||||
CASE
|
||||
WHEN COUNT(*) > 1 THEN
|
||||
(SELECT PM.PART_NAME FROM PART_MNG PM WHERE PM.OBJID::VARCHAR = (SELECT PART_OBJID FROM SALES_REQUEST_PART WHERE SALES_REQUEST_MASTER_OBJID = SRM.OBJID ORDER BY REGDATE LIMIT 1)) || ' 외 ' || (COUNT(*) - 1) || '건'
|
||||
ELSE
|
||||
(SELECT PM.PART_NAME FROM PART_MNG PM WHERE PM.OBJID::VARCHAR = (SELECT PART_OBJID FROM SALES_REQUEST_PART WHERE SALES_REQUEST_MASTER_OBJID = SRM.OBJID ORDER BY REGDATE LIMIT 1))
|
||||
END
|
||||
FROM SALES_REQUEST_PART
|
||||
WHERE SALES_REQUEST_MASTER_OBJID = SRM.OBJID
|
||||
) AS PART_NAME,
|
||||
-- 공급업체 (첫번째 공급업체 + 외 N건)
|
||||
(
|
||||
SELECT
|
||||
CASE
|
||||
WHEN COUNT(DISTINCT POM.PARTNER_OBJID) > 1 THEN
|
||||
(SELECT SUPPLY_NAME FROM ADMIN_SUPPLY_MNG WHERE OBJID = (SELECT PARTNER_OBJID FROM PURCHASE_ORDER_MASTER WHERE SALES_REQUEST_OBJID = SRM.OBJID ORDER BY REGDATE LIMIT 1)::NUMERIC) || ' 외 ' || (COUNT(DISTINCT POM.PARTNER_OBJID) - 1) || '건'
|
||||
ELSE
|
||||
(SELECT SUPPLY_NAME FROM ADMIN_SUPPLY_MNG WHERE OBJID = (SELECT PARTNER_OBJID FROM PURCHASE_ORDER_MASTER WHERE SALES_REQUEST_OBJID = SRM.OBJID ORDER BY REGDATE LIMIT 1)::NUMERIC)
|
||||
END
|
||||
FROM PURCHASE_ORDER_MASTER POM
|
||||
WHERE POM.SALES_REQUEST_OBJID = SRM.OBJID
|
||||
) AS SUPPLIER_NAME,
|
||||
-- 총액
|
||||
(SELECT SUM(COALESCE(TOTAL_PRICE, 0)) FROM PURCHASE_ORDER_MASTER WHERE SALES_REQUEST_OBJID = SRM.OBJID) AS TOTAL_AMOUNT,
|
||||
-- 메일발송 여부
|
||||
(SELECT CASE WHEN COUNT(*) > 0 THEN 'Y' ELSE 'N' END FROM PURCHASE_ORDER_MASTER WHERE SALES_REQUEST_OBJID = SRM.OBJID AND MAIL_SENT = 'Y') AS MAIL_SENT,
|
||||
-- 발주일
|
||||
(SELECT TO_CHAR(MAX(ORDER_DATE), 'YYYY-MM-DD') FROM PURCHASE_ORDER_MASTER WHERE SALES_REQUEST_OBJID = SRM.OBJID) AS ORDER_DATE,
|
||||
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 '반려'
|
||||
ELSE ''
|
||||
END AS STATUS_TITLE,
|
||||
SRM.WRITER,
|
||||
(SELECT DEPT_NAME||' '||USER_NAME FROM USER_INFO WHERE USER_ID = SRM.WRITER) AS WRITER_NAME,
|
||||
SRM.REGDATE,
|
||||
TO_CHAR(SRM.REGDATE,'YYYY-MM-DD') AS REGDATE_TITLE,
|
||||
A.APPROVAL_OBJID,
|
||||
A.ROUTE_OBJID
|
||||
FROM
|
||||
SALES_REQUEST_MASTER SRM
|
||||
LEFT OUTER JOIN (
|
||||
SELECT
|
||||
B.OBJID AS ROUTE_OBJID,
|
||||
CASE B.STATUS
|
||||
WHEN 'inProcess' THEN '결재중'
|
||||
WHEN 'complete' THEN '결재완료'
|
||||
WHEN 'reject' THEN '반려'
|
||||
ELSE ''
|
||||
END APPR_STATUS,
|
||||
A.OBJID AS APPROVAL_OBJID,
|
||||
A.TARGET_OBJID,
|
||||
B.ROUTE_SEQ
|
||||
FROM
|
||||
APPROVAL A,
|
||||
(
|
||||
SELECT
|
||||
T1.*
|
||||
FROM
|
||||
(
|
||||
SELECT
|
||||
TARGET_OBJID,
|
||||
MAX(T.ROUTE_SEQ) AS ROUTE_SEQ
|
||||
FROM
|
||||
ROUTE T
|
||||
GROUP BY
|
||||
T.TARGET_OBJID
|
||||
) T,
|
||||
ROUTE T1
|
||||
WHERE
|
||||
T.TARGET_OBJID = T1.TARGET_OBJID
|
||||
AND T.ROUTE_SEQ = T1.ROUTE_SEQ
|
||||
) B
|
||||
WHERE A.OBJID = B.APPROVAL_OBJID
|
||||
AND TARGET_TYPE IN ('PROPOSAL', 'SALES_REQUEST')
|
||||
) A ON SRM.OBJID::VARCHAR = A.TARGET_OBJID::VARCHAR
|
||||
WHERE 1=1
|
||||
AND SRM.STATUS IN ('create', 'approvalRequest', 'approvalComplete', 'reject')
|
||||
|
||||
<if test="SEARCH_PROPOSAL_NO != null and !''.equals(SEARCH_PROPOSAL_NO)">
|
||||
AND SRM.REQUEST_MNG_NO LIKE '%${SEARCH_PROPOSAL_NO}%'
|
||||
</if>
|
||||
|
||||
<if test="SEARCH_PROJECT_NO != null and !''.equals(SEARCH_PROJECT_NO)">
|
||||
AND (SELECT PROJECT_NO FROM PROJECT_MGMT PM WHERE PM.OBJID = SRM.PROJECT_NO) LIKE '%${SEARCH_PROJECT_NO}%'
|
||||
</if>
|
||||
|
||||
<if test="SEARCH_STATUS != null and !''.equals(SEARCH_STATUS)">
|
||||
AND SRM.STATUS = #{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>
|
||||
|
||||
<!-- 품의서 상세 조회 -->
|
||||
<select id="getProposalInfo" parameterType="map" resultType="map">
|
||||
SELECT
|
||||
SRM.OBJID,
|
||||
SRM.REQUEST_MNG_NO AS PROPOSAL_NO,
|
||||
SRM.PROJECT_NO,
|
||||
(SELECT PROJECT_NO FROM PROJECT_MGMT PM WHERE PM.OBJID = SRM.PROJECT_NO) AS PROJECT_NUMBER,
|
||||
(SELECT PROJECT_NAME FROM PROJECT_MGMT PM WHERE PM.OBJID = SRM.PROJECT_NO) AS PROJECT_NAME,
|
||||
SRM.PURCHASE_TYPE,
|
||||
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = SRM.PURCHASE_TYPE) AS PURCHASE_TYPE_NAME,
|
||||
SRM.ORDER_TYPE,
|
||||
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = SRM.ORDER_TYPE) AS ORDER_TYPE_NAME,
|
||||
SRM.PRODUCT_NAME,
|
||||
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = SRM.PRODUCT_NAME) AS PRODUCT_NAME_TITLE,
|
||||
SRM.AREA_CD,
|
||||
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = SRM.AREA_CD) AS AREA_CD_NAME,
|
||||
SRM.CUSTOMER_OBJID,
|
||||
(SELECT SUPPLY_NAME FROM SUPPLY_MNG WHERE OBJID::VARCHAR = SRM.CUSTOMER_OBJID) AS CUSTOMER_NAME,
|
||||
SRM.PAID_TYPE,
|
||||
(CASE WHEN SRM.PAID_TYPE = 'paid' THEN '유상' WHEN SRM.PAID_TYPE = 'free' THEN '무상' ELSE SRM.PAID_TYPE END) AS PAID_TYPE_NAME,
|
||||
SRM.STATUS,
|
||||
CASE SRM.STATUS
|
||||
WHEN 'create' THEN '미결재'
|
||||
WHEN 'approvalRequest' THEN '결재중'
|
||||
WHEN 'approvalComplete' THEN '결재완료'
|
||||
WHEN 'reject' THEN '반려'
|
||||
ELSE ''
|
||||
END AS STATUS_TITLE,
|
||||
SRM.WRITER,
|
||||
(SELECT DEPT_NAME||' '||USER_NAME FROM USER_INFO WHERE USER_ID = SRM.WRITER) AS WRITER_NAME,
|
||||
SRM.REGDATE,
|
||||
TO_CHAR(SRM.REGDATE,'YYYY-MM-DD') AS REGDATE_TITLE,
|
||||
SRM.REMARK
|
||||
FROM
|
||||
SALES_REQUEST_MASTER SRM
|
||||
WHERE
|
||||
SRM.OBJID = #{PROPOSAL_OBJID}
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
@@ -1222,4 +1222,82 @@ public class SalesMngController {
|
||||
}
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
// ==================== 품의서 관리 ====================
|
||||
|
||||
/**
|
||||
* 품의서 관리 - 목록 화면
|
||||
* @param request
|
||||
* @param paramMap
|
||||
* @return
|
||||
*/
|
||||
@RequestMapping("/salesMng/proposalMngList.do")
|
||||
public String proposalMngList(HttpServletRequest request, @RequestParam Map paramMap){
|
||||
String returnUrl = "/salesMng/proposalMngList";
|
||||
Map code_map = new HashMap();
|
||||
|
||||
try {
|
||||
// 구매유형
|
||||
code_map.put("purchase_type", commonService.bizMakeOptionList("0001821", (String)paramMap.get("purchase_type"), "common.getCodeselect"));
|
||||
// 주문유형
|
||||
code_map.put("order_type", commonService.bizMakeOptionList("0001822", (String)paramMap.get("order_type"), "common.getCodeselect"));
|
||||
// 제품구분
|
||||
code_map.put("product_name", commonService.bizMakeOptionList("0000016", (String)paramMap.get("product_name"), "common.getCodeselect"));
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
request.setAttribute("code_map", code_map);
|
||||
return returnUrl;
|
||||
}
|
||||
|
||||
/**
|
||||
* 품의서 관리 - 목록 조회 (페이징)
|
||||
* @param request
|
||||
* @param paramMap
|
||||
* @return
|
||||
*/
|
||||
@ResponseBody
|
||||
@RequestMapping("/salesMng/proposalMngGridList.do")
|
||||
public Map getProposalMngGridList(HttpServletRequest request, @RequestParam Map<String, Object> paramMap){
|
||||
commonService.selectListPagingNew("salesMng.getProposalMngGridList", request, paramMap);
|
||||
return paramMap;
|
||||
}
|
||||
|
||||
/**
|
||||
* 품의서 상세 팝업
|
||||
* @param request
|
||||
* @param paramMap
|
||||
* @return
|
||||
*/
|
||||
@RequestMapping("/salesMng/proposalFormPopUp.do")
|
||||
public String proposalFormPopUp(HttpServletRequest request, @RequestParam Map<String, Object> paramMap){
|
||||
Map resultMap = new HashMap();
|
||||
Map code_map = new HashMap();
|
||||
|
||||
try {
|
||||
String proposalObjId = CommonUtils.checkNull(paramMap.get("PROPOSAL_OBJID"));
|
||||
|
||||
if(!"".equals(proposalObjId)){
|
||||
resultMap = commonService.selectOne("salesMng.getProposalInfo", request, paramMap);
|
||||
} else {
|
||||
resultMap.put("OBJID", CommonUtils.createObjId());
|
||||
resultMap.put("STATUS", "create");
|
||||
}
|
||||
|
||||
// 구매유형
|
||||
code_map.put("purchase_type", commonService.bizMakeOptionList("0001821", (String)resultMap.get("PURCHASE_TYPE"), "common.getCodeselect"));
|
||||
// 주문유형
|
||||
code_map.put("order_type", commonService.bizMakeOptionList("0001822", (String)resultMap.get("ORDER_TYPE"), "common.getCodeselect"));
|
||||
// 제품구분
|
||||
code_map.put("product_name", commonService.bizMakeOptionList("0000016", (String)resultMap.get("PRODUCT_NAME"), "common.getCodeselect"));
|
||||
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
request.setAttribute("resultMap", resultMap);
|
||||
request.setAttribute("code_map", code_map);
|
||||
return "/salesMng/proposalFormPopUp";
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user