Merge branch 'V2025112501'
This commit is contained in:
@@ -963,6 +963,9 @@ VALUES
|
||||
SRM.REQUEST_CD,
|
||||
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = SRM.REQUEST_CD) AS REQUEST_CD_NAME,
|
||||
|
||||
-- 구매요청서 작성 여부 (SALES_REQUEST_PART에 데이터가 있으면 'Y')
|
||||
(SELECT CASE WHEN COUNT(*) > 0 THEN 'Y' ELSE 'N' END FROM SALES_REQUEST_PART WHERE SALES_REQUEST_MASTER_OBJID = SRM.OBJID) AS HAS_PURCHASE_REQUEST,
|
||||
|
||||
-- 추가된 컬럼들
|
||||
SRM.PURCHASE_TYPE,
|
||||
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = SRM.PURCHASE_TYPE) AS PURCHASE_TYPE_NAME,
|
||||
@@ -1155,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>
|
||||
|
||||
@@ -3272,5 +3283,220 @@ ORDER BY V.PATH2
|
||||
WRITER = #{EDITER}
|
||||
WHERE OBJID::VARCHAR = #{OBJID}
|
||||
</update>
|
||||
|
||||
<!-- M-BOM에서 구매리스트 생성 시 해당 프로젝트로 이미 생성된 구매요청서가 있는지 확인 -->
|
||||
<select id="getSalesRequestMasterByProjectNo" parameterType="map" resultType="map">
|
||||
SELECT
|
||||
OBJID,
|
||||
REQUEST_MNG_NO,
|
||||
PROJECT_NO,
|
||||
STATUS
|
||||
FROM
|
||||
SALES_REQUEST_MASTER
|
||||
WHERE
|
||||
PROJECT_NO = #{PROJECT_NO}
|
||||
ORDER BY REGDATE DESC
|
||||
LIMIT 1
|
||||
</select>
|
||||
|
||||
<!-- 다음 요청번호 생성 (R + YYYYMMDD + - + 3자리 순번) -->
|
||||
<select id="getNextRequestMngNo" resultType="string">
|
||||
SELECT 'R'||TO_CHAR(NOW(),'YYYYMMDD')||'-'||LPAD((COALESCE(MAX(SUBSTR(REQUEST_MNG_NO,11,13)),'0')::INTEGER+1)::TEXT,3,'0')
|
||||
FROM SALES_REQUEST_MASTER
|
||||
</select>
|
||||
|
||||
<!-- M-BOM에서 구매리스트 생성 - SALES_REQUEST_MASTER만 생성 (SALES_REQUEST_PART는 생성 안 함) -->
|
||||
<insert id="insertSalesRequestMasterFromMBom" parameterType="map">
|
||||
INSERT INTO SALES_REQUEST_MASTER (
|
||||
OBJID,
|
||||
REQUEST_MNG_NO,
|
||||
PROJECT_NO,
|
||||
REQUEST_USER_ID,
|
||||
STATUS,
|
||||
WRITER,
|
||||
REGDATE
|
||||
) VALUES (
|
||||
#{OBJID},
|
||||
#{REQUEST_MNG_NO},
|
||||
#{PROJECT_NO},
|
||||
#{REQUEST_USER_ID},
|
||||
#{STATUS},
|
||||
#{WRITER},
|
||||
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>
|
||||
@@ -11,6 +11,12 @@
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
<title><%=Constants.SYSTEM_NAME%></title>
|
||||
<script type="text/javascript" src="/js/tabulator/tabulator_custom.js"></script>
|
||||
<style>
|
||||
/* 체크박스 컬럼 오른쪽에 얇은 구분선 추가 (데이터 행만) */
|
||||
.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell[tabulator-field="CHK"] {
|
||||
border-right: 1px solid #ddd !important;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<script type="text/javascript">
|
||||
@@ -478,10 +484,13 @@ function fn_openPurchaseListPopup() {
|
||||
// 체크된 행 가져오기
|
||||
var checkedRows = [];
|
||||
$('.rowCheck:checked').each(function() {
|
||||
var objid = $(this).data('objid');
|
||||
if(_tabulGrid && _tabulGrid.getRow) {
|
||||
var rowData = _tabulGrid.getRow(objid).getData();
|
||||
checkedRows.push(rowData);
|
||||
// 체크박스가 있는 행(tr)에서 Tabulator row 찾기
|
||||
var row = $(this).closest('.tabulator-row');
|
||||
if(row.length > 0 && _tabulGrid) {
|
||||
var rowComponent = _tabulGrid.getRow(row[0]);
|
||||
if(rowComponent) {
|
||||
checkedRows.push(rowComponent.getData());
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
@@ -503,12 +512,43 @@ function fn_openPurchaseListPopup() {
|
||||
return;
|
||||
}
|
||||
|
||||
// 선택된 프로젝트의 OBJID
|
||||
var projectObjId = checkedRows[0].OBJID;
|
||||
// 선택된 프로젝트 정보
|
||||
var selectedRow = checkedRows[0];
|
||||
var projectObjId = selectedRow.OBJID;
|
||||
var projectNo = selectedRow.PROJECT_NO;
|
||||
|
||||
// 구매리스트 팝업 열기
|
||||
var url = "/salesMng/purchaseListFormPopUp.do?SALES_REQUEST_MASTER_OBJID=" + projectObjId;
|
||||
window.open(url, "purchaseListPopup", "width=1400,height=800,scrollbars=yes,resizable=yes");
|
||||
// 구매요청서 마스터 생성 후 팝업 열기
|
||||
$.ajax({
|
||||
url: "/salesMng/createPurchaseListFromMBom.do",
|
||||
method: "POST",
|
||||
data: {
|
||||
PROJECT_MGMT_OBJID: projectObjId,
|
||||
PROJECT_NO: projectNo
|
||||
},
|
||||
dataType: "json",
|
||||
success: function(result) {
|
||||
if(result.resultFlag === "S") {
|
||||
var salesRequestMasterObjid = result.SALES_REQUEST_MASTER_OBJID;
|
||||
// 구매리스트 팝업 열기
|
||||
var url = "/salesMng/purchaseListFormPopUp.do?SALES_REQUEST_MASTER_OBJID=" + salesRequestMasterObjid
|
||||
+ "&PROJECT_MGMT_OBJID=" + projectObjId;
|
||||
window.open(url, "purchaseListPopup", "width=1400,height=800,scrollbars=yes,resizable=yes");
|
||||
} else {
|
||||
Swal.fire({
|
||||
title: '오류',
|
||||
text: result.message || '구매리스트 생성 중 오류가 발생했습니다.',
|
||||
icon: 'error'
|
||||
});
|
||||
}
|
||||
},
|
||||
error: function(xhr, status, error) {
|
||||
Swal.fire({
|
||||
title: '오류',
|
||||
text: '서버 통신 중 오류가 발생했습니다.',
|
||||
icon: 'error'
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
||||
|
||||
|
||||
232
WebContent/WEB-INF/view/salesMng/proposalMngList.jsp
Normal file
232
WebContent/WEB-INF/view/salesMng/proposalMngList.jsp
Normal file
@@ -0,0 +1,232 @@
|
||||
<%@ 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;
|
||||
}
|
||||
/* frozen 컬럼 오른쪽 굵은 선 제거 (헤더) */
|
||||
.tabulator .tabulator-header .tabulator-frozen-left {
|
||||
border-right: none !important;
|
||||
}
|
||||
/* frozen 컬럼 기본 두꺼운 테두리 제거 */
|
||||
.tabulator .tabulator-frozen-left {
|
||||
border-right: none !important;
|
||||
}
|
||||
/* 체크박스 컬럼 오른쪽에 얇은 구분선 추가 (데이터 행만) */
|
||||
.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.tabulator-frozen-left {
|
||||
border-right: 1px solid #ddd !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>
|
||||
|
||||
@@ -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"){
|
||||
|
||||
@@ -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}
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
height: 18px !important;
|
||||
}
|
||||
.select2-container .select2-selection--multiple .select2-selection__rendered {
|
||||
overflow: auto !important;
|
||||
/* overflow: auto !important; */
|
||||
}
|
||||
</style>
|
||||
<script>
|
||||
@@ -223,8 +223,10 @@ var columns = [
|
||||
,{headerHozAlign : 'center', hozAlign : 'left' , title : "품명", field :"PART_NAME" , widthGrow:1.8 }
|
||||
,{headerHozAlign : 'center', hozAlign : 'center', title : "구매요청서", field :"REQUEST_MNG_NO" , widthGrow:1.1,
|
||||
formatter: function(cell, formatterParams, onRendered){
|
||||
var objid = fnc_checkNull(cell.getData().OBJID);
|
||||
var iconClass = (objid != '' && objid != null) ? 'file_icon' : 'file_empty_icon';
|
||||
// 구매요청서 작성 여부: PART_NO가 있으면 품목이 저장된 것 (구매요청서 작성됨)
|
||||
var data = cell.getData();
|
||||
var partNo = fnc_checkNull(data.PART_NO);
|
||||
var iconClass = (partNo != '' && partNo != null) ? 'file_icon' : 'file_empty_icon';
|
||||
return '<a href="#" class="File ' + iconClass + '" style="width:20px; height:20px; display:inline-block;"></a>';
|
||||
},
|
||||
cellClick : function(e, cell) {
|
||||
@@ -490,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;">
|
||||
@@ -499,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">
|
||||
@@ -510,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>
|
||||
|
||||
@@ -553,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>
|
||||
|
||||
@@ -963,6 +963,9 @@ VALUES
|
||||
SRM.REQUEST_CD,
|
||||
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = SRM.REQUEST_CD) AS REQUEST_CD_NAME,
|
||||
|
||||
-- 구매요청서 작성 여부 (SALES_REQUEST_PART에 데이터가 있으면 'Y')
|
||||
(SELECT CASE WHEN COUNT(*) > 0 THEN 'Y' ELSE 'N' END FROM SALES_REQUEST_PART WHERE SALES_REQUEST_MASTER_OBJID = SRM.OBJID) AS HAS_PURCHASE_REQUEST,
|
||||
|
||||
-- 추가된 컬럼들
|
||||
SRM.PURCHASE_TYPE,
|
||||
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = SRM.PURCHASE_TYPE) AS PURCHASE_TYPE_NAME,
|
||||
@@ -1155,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>
|
||||
|
||||
@@ -3272,5 +3283,220 @@ ORDER BY V.PATH2
|
||||
WRITER = #{EDITER}
|
||||
WHERE OBJID::VARCHAR = #{OBJID}
|
||||
</update>
|
||||
|
||||
<!-- M-BOM에서 구매리스트 생성 시 해당 프로젝트로 이미 생성된 구매요청서가 있는지 확인 -->
|
||||
<select id="getSalesRequestMasterByProjectNo" parameterType="map" resultType="map">
|
||||
SELECT
|
||||
OBJID,
|
||||
REQUEST_MNG_NO,
|
||||
PROJECT_NO,
|
||||
STATUS
|
||||
FROM
|
||||
SALES_REQUEST_MASTER
|
||||
WHERE
|
||||
PROJECT_NO = #{PROJECT_NO}
|
||||
ORDER BY REGDATE DESC
|
||||
LIMIT 1
|
||||
</select>
|
||||
|
||||
<!-- 다음 요청번호 생성 (R + YYYYMMDD + - + 3자리 순번) -->
|
||||
<select id="getNextRequestMngNo" resultType="string">
|
||||
SELECT 'R'||TO_CHAR(NOW(),'YYYYMMDD')||'-'||LPAD((COALESCE(MAX(SUBSTR(REQUEST_MNG_NO,11,13)),'0')::INTEGER+1)::TEXT,3,'0')
|
||||
FROM SALES_REQUEST_MASTER
|
||||
</select>
|
||||
|
||||
<!-- M-BOM에서 구매리스트 생성 - SALES_REQUEST_MASTER만 생성 (SALES_REQUEST_PART는 생성 안 함) -->
|
||||
<insert id="insertSalesRequestMasterFromMBom" parameterType="map">
|
||||
INSERT INTO SALES_REQUEST_MASTER (
|
||||
OBJID,
|
||||
REQUEST_MNG_NO,
|
||||
PROJECT_NO,
|
||||
REQUEST_USER_ID,
|
||||
STATUS,
|
||||
WRITER,
|
||||
REGDATE
|
||||
) VALUES (
|
||||
#{OBJID},
|
||||
#{REQUEST_MNG_NO},
|
||||
#{PROJECT_NO},
|
||||
#{REQUEST_USER_ID},
|
||||
#{STATUS},
|
||||
#{WRITER},
|
||||
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>
|
||||
@@ -1202,4 +1202,102 @@ public class SalesMngController {
|
||||
}
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
/**
|
||||
* M-BOM에서 구매리스트 생성 (SALES_REQUEST_MASTER 생성)
|
||||
* @param request
|
||||
* @param paramMap
|
||||
* @return
|
||||
*/
|
||||
@ResponseBody
|
||||
@RequestMapping("/salesMng/createPurchaseListFromMBom.do")
|
||||
public Map createPurchaseListFromMBom(HttpServletRequest request, @RequestParam Map<String, Object> paramMap){
|
||||
Map resultMap = new HashMap();
|
||||
try{
|
||||
resultMap = salesMngService.createPurchaseListFromMBom(request, paramMap);
|
||||
}catch(Exception e){
|
||||
e.printStackTrace();
|
||||
resultMap.put("resultFlag", "F");
|
||||
resultMap.put("message", "구매리스트 생성 중 오류가 발생했습니다: " + e.getMessage());
|
||||
}
|
||||
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";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1849,4 +1849,74 @@ public class SalesMngService {
|
||||
|
||||
return resultList;
|
||||
}
|
||||
|
||||
/**
|
||||
* M-BOM에서 구매리스트 생성 (SALES_REQUEST_MASTER만 생성, SALES_REQUEST_PART는 생성 안 함)
|
||||
* @param request
|
||||
* @param paramMap
|
||||
* @return
|
||||
* @throws Exception
|
||||
*/
|
||||
public Map createPurchaseListFromMBom(HttpServletRequest request, Map<String, Object> paramMap) throws Exception {
|
||||
Map resultMap = new HashMap();
|
||||
SqlSession sqlSession = null;
|
||||
|
||||
try {
|
||||
sqlSession = SqlMapConfig.getInstance().getSqlSession(false);
|
||||
|
||||
String projectMgmtObjid = CommonUtils.checkNull(paramMap.get("PROJECT_MGMT_OBJID"));
|
||||
String projectNo = CommonUtils.checkNull(paramMap.get("PROJECT_NO"));
|
||||
|
||||
// 로그인 사용자 정보
|
||||
HttpSession session = request.getSession();
|
||||
PersonBean personBean = (PersonBean) session.getAttribute(Constants.PERSON_BEAN);
|
||||
String userId = personBean.getUserId();
|
||||
|
||||
// 이미 해당 프로젝트로 생성된 구매요청서가 있는지 확인
|
||||
Map checkParam = new HashMap();
|
||||
checkParam.put("PROJECT_NO", projectMgmtObjid);
|
||||
Map existingMaster = sqlSession.selectOne("salesMng.getSalesRequestMasterByProjectNo", checkParam);
|
||||
|
||||
String salesRequestMasterObjid;
|
||||
|
||||
if(existingMaster != null && existingMaster.get("OBJID") != null) {
|
||||
// 이미 있으면 기존 것 사용
|
||||
salesRequestMasterObjid = CommonUtils.checkNull(existingMaster.get("OBJID"));
|
||||
System.out.println("기존 구매요청서 마스터 사용: " + salesRequestMasterObjid);
|
||||
} else {
|
||||
// 없으면 새로 생성
|
||||
salesRequestMasterObjid = String.valueOf(CommonUtils.createObjId());
|
||||
|
||||
// 요청번호 생성 (기존 로직과 동일)
|
||||
String requestMngNo = (String) sqlSession.selectOne("salesMng.getNextRequestMngNo");
|
||||
|
||||
Map insertParam = new HashMap();
|
||||
insertParam.put("OBJID", salesRequestMasterObjid);
|
||||
insertParam.put("PROJECT_NO", projectMgmtObjid); // PROJECT_MGMT.OBJID 저장
|
||||
insertParam.put("REQUEST_MNG_NO", requestMngNo);
|
||||
insertParam.put("WRITER", userId);
|
||||
insertParam.put("REQUEST_USER_ID", userId);
|
||||
insertParam.put("STATUS", "create");
|
||||
|
||||
sqlSession.insert("salesMng.insertSalesRequestMasterFromMBom", insertParam);
|
||||
sqlSession.commit();
|
||||
|
||||
System.out.println("새 구매요청서 마스터 생성: " + salesRequestMasterObjid + ", 요청번호: " + requestMngNo);
|
||||
}
|
||||
|
||||
resultMap.put("resultFlag", "S");
|
||||
resultMap.put("SALES_REQUEST_MASTER_OBJID", salesRequestMasterObjid);
|
||||
resultMap.put("message", "구매리스트가 생성되었습니다.");
|
||||
|
||||
} catch(Exception e) {
|
||||
if(sqlSession != null) sqlSession.rollback();
|
||||
e.printStackTrace();
|
||||
resultMap.put("resultFlag", "F");
|
||||
resultMap.put("message", "구매리스트 생성 중 오류가 발생했습니다: " + e.getMessage());
|
||||
} finally {
|
||||
if(sqlSession != null) sqlSession.close();
|
||||
}
|
||||
|
||||
return resultMap;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user