Files
wace_plm/WebContent/WEB-INF/classes/com/pms/salesmgmt/mapper/salesNcollectMgmt.xml
2025-10-22 17:22:02 +09:00

1545 lines
54 KiB
XML

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--
/**
* 매출및수금관리
* @since 2021.11.04
* @author kim
* @version 1.0
*
* << 개정 이력 >>
*
* 수정일 수정자 수정내용
* **************** ********************** ********************************************************
* 2021.11.04 민상익 최초작성
**/
-->
<mapper namespace="salesNcollectMgmt">
<!--
/**
* 매출 목록 조회
* @since 2021.11.04
* @author min
* @version 1.0
*
* << 개정 이력 >>
*
* 수정일 수정자 수정내용
* **************** ********************** ********************************************************
* 2021.11.04 민상익 최초작성
**/
-->
<select id="getSalesList" parameterType="map" resultType="map">
/* salesNcollectMgmt.getSalesList */
SELECT *
FROM (
SELECT ROW_NUMBER() OVER (ORDER BY A.SaleNo) AS RNUM
, A.SaleNo /* 매출번호 */
, A.AcntUnit /* 사업부 */
, A.PubYyyyMm /* 매출년월 */
, A.PubSer /* 일련번호 */
, A.OrderNo /* 계약번호 */
, A.WrtYmd /* 매출일자 */
, A.SupplyQty /* 매출수량 */
, A.SupplyPrice /* 매출단가 */
, A.SupplyAmt /* 매출공급가 */
, A.SupplyVat /* 매출부가세 */
, (A.SupplyAmt+A.SupplyVat) AS totSupplyAmt /* 합계 */
, A.NoWonSymbol /* 외화단위 */
, A.NoWonPrice /* 외화매출단가 */
, A.NoWonExChange /* 외화환율 */
, A.NoWonAmt /* 외화매출액 */
, A.NoWonAmtPAL /* */
, A.TaxType /* 과세유형 */
, (SELECT CdNm FROM SWSA050A_TBL WHERE MAjorCd = 'DB' AND MinorCd = A.TaxType) AS TaxTypeNm /* 과세유형명 */
, A.Remark /* 비고 */
, A.ReSolutionNo /* 자동결의서 */
, A.SelfReSolutionNo /* 일반결의번호 */
, A.WorkingPerson /* 등록자 */
, (SELECT NameHan FROM SWHD010A_TBL WHERE EmpNo = A.WorkingPerson) AS WorkingPersonNm /* 등록자명 */
, A.WorkingDate /* 동록일자 */
, A.CRET_DATE /* 생성일시 */
, A.CretEmpNo /* 생성자 */
, A.EDIT_DATE /* 수정일시 */
, A.EditEmpNo /* 수정자 */
, A.CustCd /* 고객코드 */
, B.GoodsCd /* 제품코드 */
, (SELECT GoodsNm FROM SWSB110a_Tbl WHERE GoodsCd = B.GoodsCd) AS GoodsNm /* 제품코드 명 */
, C.C_Class /* 제품그룹 */
, CASE WHEN C.c_class IS NOT NULL then
CONCAT(
(SELECT ltrim(rtrim(DTL_NM)) from SWSA999A_TBL where COMM_CD = 'S110' AND SUBSTRING(DTL_CD,1,1) = SUBSTRING(C.c_class,1,1)),
'-',
(SELECT ltrim(rtrim(DTL_NM)) from SWSA999A_TBL where COMM_CD = 'S120' AND SUBSTRING(DTL_CD,1,3) = SUBSTRING(C.c_class,1,3)),
'-',
(SELECT ltrim(rtrim(DTL_NM)) from SWSA999A_TBL where COMM_CD = 'S130' AND DTL_CD = C.c_class )
)
ELSE '' END AS c_classNm /* 제품그룹명 */
, D.custNm /* 고객명 */
, D.taxNo1 /* 사업자번호 */
, D.DeptCd /* 매출부서 */
, (SELECT dept_name FROM DEPT_INFO WHERE dept_code = D.deptCd) AS DeptNm /* 매출부서 명 */
, D.SalesMan /* 매출자 */
, (SELECT user_name FROM USER_INFO WHERE user_id = D.salesMan) AS SalesManNm /* 매출자 명 */
FROM SWSD010A_TBL A
INNER JOIN SWSC110A_TBL B ON
A.orderNo = B.orderNo /* 계약번호 */
INNER JOIN SWSB110A_TBL C ON
B.goodsCd = C.goodsCd /* 제품코드 */
INNER JOIN SWSB210A_TBL D ON
A.custCd = D.custCd /* 고객코드 */
WHERE 1 = 1
AND A.OrderNo = #{orderNo}
) T
WHERE 1=1
<if test="PAGE_END != null and PAGE_END != ''">
<![CDATA[ AND RNUM <= #{PAGE_END}::integer ]]>
</if>
<if test="PAGE_START != null and PAGE_START != ''">
<![CDATA[ AND RNUM >= #{PAGE_START}::integer ]]>
</if>
</select>
<!--
/**
* 매출관리 로우카운트 조회
* @since 2021.11.04
* @author min
* @version 1.0
*
* << 개정 이력 >>
*
* 수정일 수정자 수정내용
* **************** ********************** ********************************************************
* 2021.11.04 민상익 최초작성
**/
-->
<select id="getSalesListCnt" parameterType="map" resultType="map">
/* salesNcollectMgmt.getSalesListCnt */
SELECT CEIL(TOTAL_CNT/#{COUNT_PER_PAGE})::numeric::integer AS MAX_PAGE_SIZE
, TOTAL_CNT::integer
FROM (
SELECT COUNT(1)::float TOTAL_CNT
FROM (
SELECT A.*
FROM SWSD010A_TBL A
INNER JOIN SWSC110A_TBL B ON
A.orderNo = B.orderNo /* 계약번호 */
INNER JOIN SWSB110A_TBL C ON
B.goodsCd = C.goodsCd /* 제품코드 */
INNER JOIN SWSB210A_TBL D ON
A.custCd = D.custCd /* 고객코드 */
WHERE 1 = 1
AND A.OrderNo = #{orderNo}
) T
) T
</select>
<!--
/**
* 매출관리 조회
* @since 2021.11.04
* @author min
* @version 1.0
*
* << 개정 이력 >>
*
* 수정일 수정자 수정내용
* **************** ********************** ********************************************************
* 2021.11.04 민상익 최초작성
**/
-->
<select id="getSalesMgmt" parameterType="map" resultType="map">
/* salesNcollectMgmt.getSalesMgmt */
SELECT A.*
, B.GoodsCd /* 제품코드 */
, (SELECT GoodsNm FROM SWSB110a_Tbl WHERE GoodsCd = B.GoodsCd) AS GoodsNm /* 제품코드 명 */
, C.C_Class /* 제품그룹 */
, CASE WHEN C.c_class IS NOT NULL then
CONCAT(
(SELECT ltrim(rtrim(DTL_NM)) from SWSA999A_TBL where COMM_CD = 'S110' AND SUBSTRING(DTL_CD,1,1) = SUBSTRING(C.c_class,1,1)),
'-',
(SELECT ltrim(rtrim(DTL_NM)) from SWSA999A_TBL where COMM_CD = 'S120' AND SUBSTRING(DTL_CD,1,3) = SUBSTRING(C.c_class,1,3)),
'-',
(SELECT ltrim(rtrim(DTL_NM)) from SWSA999A_TBL where COMM_CD = 'S130' AND DTL_CD = C.c_class )
)
ELSE '' END AS c_classNm /* 제품그룹명 */
, D.custNm /* 고객명 */
, D.taxNo1 /* 사업자번호 */
, D.DeptCd /* 매출부서 */
, (SELECT dept_name FROM DEPT_INFO WHERE dept_code = D.deptCd) AS DeptNm /* 매출부서 명 */
, D.SalesMan /* 매출자 */
, (SELECT user_name FROM USER_INFO WHERE user_id = D.salesMan) AS SalesManNm /* 매출자 명 */
FROM SWSD010A_TBL A
INNER JOIN SWSC110A_TBL B ON
A.orderNo = B.orderNo /* 계약번호 */
INNER JOIN SWSB110A_TBL C ON
B.goodsCd = C.goodsCd /* 제품코드 */
INNER JOIN SWSB210A_TBL D ON
A.custCd = D.custCd /* 고객코드 */
WHERE A.SaleNo = #{saleNo} /* 매출번호 */
</select>
<!--
/**
* 주어진 계약번호의 전체 매출수량 조회
* @since 2021.11.05
* @author min
* @version 1.0
*
* << 개정 이력 >>
*
* 수정일 수정자 수정내용
* **************** ********************** ********************************************************
* 2021.11.05 민상익 최초작성
**/
-->
<select id="getSalesMgmtTotalSupplyQty" parameterType="map" resultType="int">
/* salesNcollectMgmt.getSalesMgmtTotalSupplyQty */
SELECT COALESCE(SUM(supplyQty), 0) AS totalSupplyQty
FROM SWSD010A_TBL
WHERE orderNo = #{orderNo} /* 계약번호 */
AND saleNo <![CDATA[ <> ]]> #{saleNo} /* 매출번호 */
</select>
<!--
/**
* 매출 번호 부여를 위한 일련번호 채번
* @since 2021.11.05
* @author min
* @version 1.0
*
* << 개정 이력 >>
*
* 수정일 수정자 수정내용
* **************** ********************** ********************************************************
* 2021.11.05 민상익 최초작성
**/
-->
<select id="getSalesMgmtSalseNo" parameterType="map" resultType="int">
/* salesNcollectMgmt.getSalesMgmtSalseNo */
SELECT COALESCE(MAX(pubSer)::INTEGER, 0) + 1
FROM SWSD010A_TBL
WHERE AcntUnit = #{acntUnit}
AND PubYyyyMm = #{pubYyyyMm}
</select>
<!--
/**
* 주어진 계약번호에 맞는 결제예정정보의 미등록된 매출정보의 시작 일련번호 조회
* @since 2021.11.05
* @author min
* @version 1.0
*
* << 개정 이력 >>
*
* 수정일 수정자 수정내용
* **************** ********************** ********************************************************
* 2021.11.05 민상익 최초작성
**/
-->
<select id="getSalesMgmtAccountSerial" parameterType="map" resultType="int">
/* salesNcollectMgmt.getSalesMgmtAccountSerial */
SELECT COALESCE(MIN(serial)::INTEGER, 0) AS fromSerial
FROM SWSC111A_TBL
WHERE orderNo = #{orderNo}
AND saleDate IS NULL
AND saleNo IS NULL
</select>
<!--
/**
* 매출관리 저장
* @since 2021.11.05
* @author min
* @version 1.0
*
* << 개정 이력 >>
*
* 수정일 수정자 수정내용
* **************** ********************** ********************************************************
* 2021.11.05 민상익 최초작성
**/
-->
<update id="inserSalesMgmt" parameterType="map">
/* salesNcollectMgmt.inserSalesMgmt */
INSERT INTO SWSD010A_TBL (
SaleNo /* 매출번호 */
,AcntUnit /* 사업부 */
,PubYyyyMm /* 매출년월 */
,PubSer /* 일련번호 */
,OrderNo /* 계약번호 */
,WrtYmd /* 매출일자 */
,CustCd /* 고객코드 */
,DeptCd /* 매출부서 */
,SalesMan /* 매출자 */
,SupplyQty /* 매출수량 */
,SupplyPrice /* 매출단가 */
,SupplyAmt /* 매출공급가 */
,SupplyVat /* 매출부가세 */
,NoWonSymbol /* 외화단위 */
,NoWonPrice /* 외화매출단가 */
,NoWonExChange /* 외화환율 */
,NoWonAmt /* 외화매출액 */
,NoWonAmtPAL /* */
,TaxType /* 과세유형 */
,Remark /* 비고 */
,ReSolutionNo /* 자동결의서 */
,SelfReSolutionNo /* 일반결의번호 */
,WorkingPerson /* 등록자 */
,WorkingDate /* 동록일자 */
,CRET_DATE /* 생성일시 */
,CretEmpNo /* 생성자 */
,EDIT_DATE /* 수정일시 */
,EditEmpNo /* 수정자 */
) VALUES (
#{saleNo} /* 매출번호 */
,#{acntUnit} /* 사업부 */
,#{pubYyyyMm} /* 매출년월 */
,#{pubSer} /* 일련번호 */
,#{orderNo} /* 계약번호 */
,#{wrtYmd} /* 매출일자 */
,#{custCd} /* 고객코드 */
,(SELECT DeptCd FROM SWSB210A_TBL WHERE custCd = #{custCd}) /* 매출부서 */
,(SELECT Salesman FROM SWSB210A_TBL WHERE custCd = #{custCd}) /* 매출자 */
,#{supplyQty}::integer /* 매출수량 */
,#{supplyPrice}::numeric /* 매출단가 */
,#{supplyAmt}::numeric /* 매출공급가 */
,#{supplyVat}::numeric /* 매출부가세 */
,#{noWonSymbol} /* 외화단위 */
,#{noWonPrice}::numeric /* 외화매출단가 */
,#{noWonExChange}::numeric /* 외화환율 */
,#{noWonAmt}::numeric /* 외화매출액 */
,#{noWonAmtPAL}::numeric /* */
,#{taxType} /* 과세유형 */
,#{remark} /* 비고 */
,#{reSolutionNo} /* 자동결의서 */
,#{selfReSolutionNo} /* 일반결의번호 */
,#{workingPerson} /* 등록자 */
,#{workingDate} /* 동록일자 */
,now() /* 생성일시 */
,#{cretEmpNo} /* 생성자 */
, now() /* 수정일시 */
,#{cretEmpNo} /* 수정자 */
) ON
CONFLICT (SaleNo) DO
UPDATE SET
AcntUnit = #{acntUnit} /* 사업부 */
,PubYyyyMm = #{pubYyyyMm} /* 매출년월 */
,OrderNo = #{orderNo} /* 계약번호 */
,WrtYmd = #{wrtYmd} /* 매출일자 */
,CustCd = #{custCd} /* 고객코드 */
,DeptCd = (SELECT DeptCd FROM SWSB210A_TBL WHERE custCd = #{custCd}) /* 매출부서 */
,SalesMan = (SELECT Salesman FROM SWSB210A_TBL WHERE custCd = #{custCd}) /* 매출자 */
,SupplyQty = #{supplyQty}::integer /* 매출수량 */
,SupplyPrice = #{supplyPrice}::numeric /* 매출단가 */
,SupplyAmt = #{supplyAmt}::numeric /* 매출공급가 */
,SupplyVat = #{supplyVat}::numeric /* 매출부가세 */
,NoWonSymbol = #{noWonSymbol} /* 외화단위 */
,NoWonPrice = #{noWonPrice}::numeric /* 외화매출단가 */
,NoWonExChange = #{noWonExChange}::numeric /* 외화환율 */
,NoWonAmt = #{noWonAmt}::numeric /* 외화매출액 */
,NoWonAmtPAL = #{noWonAmtPAL}::numeric /* */
,TaxType = #{taxType} /* 과세유형 */
,Remark = #{remark} /* 비고 */
,ReSolutionNo = #{reSolutionNo} /* 자동결의서 */
,SelfReSolutionNo = #{selfReSolutionNo} /* 일반결의번호 */
,WorkingPerson = #{workingPerson} /* 등록자 */
,WorkingDate = #{workingDate} /* 동록일자 */
,CRET_DATE = #{cRET_DATE} /* 생성일시 */
,CretEmpNo = #{cretEmpNo} /* 생성자 */
,EDIT_DATE = now() /* 수정일시 */
,EditEmpNo = #{cretEmpNo} /* 수정자 */
</update>
<!--
/**
* 매출관리 삭제
* @since 2021.11.05
* @author min
* @version 1.0
*
* << 개정 이력 >>
*
* 수정일 수정자 수정내용
* **************** ********************** ********************************************************
* 2021.11.05 민상익 최초작성
**/
-->
<delete id="deleteSalesMgmt" parameterType="map">
/* salesNcollectMgmt.deleteSalseMgmt */
DELETE FROM SWSD010A_TBL
WHERE SaleNo = #{saleNo} /* 매출번호 */
</delete>
<!--
/**
* 매출관리 저장 후 계약관리 UPDATE
* @since 2021.11.06
* @author min
* @version 1.0
* **기존 데이타 업데이트 시 계속 더하는 것은 문제 있을듯**
* << 개정 이력 >>
*
* 수정일 수정자 수정내용
* **************** ********************** ********************************************************
* 2021.11.05 민상익 최초작성
-->
<update id="afterSaveUpdateContract" parameterType="map">
/* salesNcollectMgmt.afterSaveUpdateContract */
UPDATE SWSC110A_TBL SET
SupplyQty = COALESCE(SupplyQty, 0) + #{salesSupplyQty}::integer
,SupplyAmt = COALESCE(SupplyAmt, 0) + #{salesSupplyAmt}::numeric
WHERE OrderNo = #{orderNo}
</update>
<!--
/**
* 매출관리 저장 후 납기예정정보 테이블 UPDATE
* @since 2021.11.06
* @author min
* @version 1.0
* ** Serial값이 매출 정보에는 없으므로 조건절에 못 넣고 있음
AND Serial > :P_Toserial AND Serial <= :P_FromSerial
* << 개정 이력 >>
*
* 수정일 수정자 수정내용
* **************** ********************** ********************************************************
* 2021.11.05 민상익 최초작성
-->
<update id="afterSaveUpdateAccount" parameterType="map">
/* salesNcollectMgmt.afterSaveUpdateAccount */
UPDATE SWSC111A_TBL SET
SaleDate = #{wrtYmd}
,SaleNo = #{saleNo}
WHERE OrderNo = #{orderNo}
AND serial:: INTEGER <![CDATA[ >= ]]> #{fromSerial} AND serial:: INTEGER <![CDATA[ <= ]]> #{toSerial}
</update>
<!--
/**
* 매출관리 삭제 후 계약관리 UPDATE
* @since 2021.11.06
* @author min
* @version 1.0
* **기존 데이타 업데이트 시 계속 더하는 것은 문제 있을듯**
* << 개정 이력 >>
*
* 수정일 수정자 수정내용
* **************** ********************** ********************************************************
* 2021.11.05 민상익 최초작성
-->
<update id="afterDeleteUpdateContract" parameterType="map">
/* salesNcollectMgmt.afterDeleteUpdateContract */
UPDATE SWSC110A_TBL SET
SupplyQty = #{salesSupplyQty}::integer
,SupplyAmt = #{salesSupplyAmt}::numeric
WHERE OrderNo = #{orderNo}
</update>
<!--
********************************************************************************************************************************
********************************************************************************************************************************
수금관리 시작
********************************************************************************************************************************
********************************************************************************************************************************
-->
<!--
/**
* 수금 목록 조회
* @since 2021.11.04
* @author min
* @version 1.0
*
* << 개정 이력 >>
*
* 수정일 수정자 수정내용
* **************** ********************** ********************************************************
* 2021.11.04 민상익 최초작성
현재 사용하지 않음
**/
-->
<select id="getCollectList" parameterType="map" resultType="map">
/* salesNcollectMgmt.getCollectList */
SELECT *
FROM (
SELECT ROW_NUMBER() OVER (ORDER BY RcptNo) AS RNUM
,RcptNo /* 수금번호 */
,AcntUnit /* 사업부 */
,RcptYmd /* 수금년월 */
,Ser /* 일련번호 */
,OrderNo /* 계약번호 */
,AccountType /* 계정과목 */
,(SELECT CdNm FROM SWSA050A_TBL WHERE MajorCd = 'AK' AND MinorCd = A.AccountType) AS AccountTypeNm /* 계정과목 명 */
,FundsType /* 자금구분 */
,(SELECT CdNm FROM SWSA050A_TBL WHERE MajorCd = 'AM' AND MinorCd = A.FundsType) AS FundsTypeNm /* 자금구분 명 */
,AoType /* 자금유형 */
, (SELECT CdNm FROM SWSA050A_TBL WHERE MajorCd = 'AO' AND MinorCd = A.AoType) AS AoTypeNm /* 자금유형 명 */
,BillType /* 어음구분 */
, (SELECT CdNm FROM SWSA050A_TBL WHERE MajorCd = 'BC' AND MinorCd = A.BillType) AS BillTypeNm /* 어음구분 명 */
,RcptAmt /* 수금금액 */
,NoWonSymbol /* 외화단위 */
,NoWonExChange /* 외화환율 */
,NoWonAmt /* 외화금액 */
,NoWonAmtPAL /* */
,Mgtno /* 어음번호 */
,ClearYmd /* 만기일 */
,PubNm /* 발행자명 */
,BankCd /* 은행코드 */
,PubBankNm /* 은행명 */
,BillAmt /* 어음액면가 */
,ReSolutionNo /* 결의번호 */
,SelfReSolutionNo /* */
,TermId /* */
,Remark /* 비고 */
,CRET_DATE /* 생성일시 */
,CretEmpNo /* 생성자 */
,EDIT_DATE /* 수정일시 */
,EditEmpNo /* 수정자 */
FROM SWSE010A_TBL A
WHERE 1 = 1
AND OrderNo = #{orderNo}
) T
WHERE 1=1
<if test="PAGE_END != null and PAGE_END != ''">
<![CDATA[ AND RNUM <= #{PAGE_END}::integer ]]>
</if>
<if test="PAGE_START != null and PAGE_START != ''">
<![CDATA[ AND RNUM >= #{PAGE_START}::integer ]]>
</if>
</select>
<!--
/**
* 수금관리 로우카운트 조회
* @since 2021.11.04
* @author min
* @version 1.0
*
* << 개정 이력 >>
*
* 수정일 수정자 수정내용
* **************** ********************** ********************************************************
* 2021.11.04 민상익 최초작성
현재 사용하지 않음
**/
-->
<select id="getCollectListCnt" parameterType="map" resultType="map">
/* salesNcollectMgmt.getCollectListCnt */
SELECT CEIL(TOTAL_CNT/#{COUNT_PER_PAGE})::numeric::integer AS MAX_PAGE_SIZE
, TOTAL_CNT::integer
FROM (
SELECT COUNT(1)::float TOTAL_CNT
FROM (
SELECT *
FROM SWSE010A_TBL
WHERE 1 = 1
AND OrderNo = #{orderNo}
) T
) T
</select>
<!--
/**
* 수금관리 조회
* @since 2021.11.04
* @author min
* @version 1.0
*
* << 개정 이력 >>
*
* 수정일 수정자 수정내용
* **************** ********************** ********************************************************
* 2021.11.04 민상익 최초작성
**/
-->
<select id="getCollectMgmt" parameterType="map" resultType="map">
/* salesNcollectMgmt.getCollectMgmt */
SELECT A.*
FROM SWSE010A_TBL A
WHERE A.RcptNo = #{rcptNo} /* 수금번호 */
</select>
<!--
/**
* 수금 번호 부여를 위한 일련번호 채번
* @since 2021.11.05
* @author min
* @version 1.0
*
* << 개정 이력 >>
*
* 수정일 수정자 수정내용
* **************** ********************** ********************************************************
* 2021.11.06 민상익 최초작성
**/
-->
<select id="getcollectMgmtRcpNo" parameterType="map" resultType="int">
/* salesNcollectMgmt.getcollectMgmtRcpNo */
SELECT COALESCE(MAX(ser)::INTEGER, 0) + 1
FROM SWSE010A_TBL
WHERE AcntUnit = #{acntUnit}
AND RcptYmd = #{rcptYmd}
</select>
<!--
/**
* 매출관리 저장
* @since 2021.11.05
* @author min
* @version 1.0
*
* << 개정 이력 >>
*
* 수정일 수정자 수정내용
* **************** ********************** ********************************************************
* 2021.11.05 민상익 최초작성
**/
-->
<update id="inserCollectMgmt" parameterType="map">
/* salesNcollectMgmt.inserCollectMgmt */
INSERT INTO SWSE010A_TBL (
RcptNo /* 수금번호 */
,AcntUnit /* 사업부 */
,RcptYmd /* 수금일자 */
,Ser /* 일련번호 */
,OrderNo /* 계약번호 */
,custCd /* 고객코드 */
,salesMan /* 수금자 */
,rcptDept /* 수금부서 */
,AccountType /* 계정과목 */
,FundsType /* 자금구분 */
,AoType /* 자금유형 */
,BillType /* 어음구분 */
,RcptAmt /* 수금금액 */
,NoWonSymbol /* 외화단위 */
,NoWonExChange /* 외화환율 */
,NoWonAmt /* 외화금액 */
,NoWonAmtPAL /* */
,Mgtno /* 어음번호 */
,ClearYmd /* 만기일 */
,PubNm /* 발행자명 */
,BankCd /* 은행코드 */
,PubBankNm /* 은행명 */
,BillAmt /* 어음액면가 */
,ReSolutionNo /* 결의번호 */
,SelfReSolutionNo /* */
,TermId /* */
,Remark /* 비고 */
,CRET_DATE /* 생성일시 */
,CretEmpNo /* 생성자 */
,EDIT_DATE /* 수정일시 */
,EditEmpNo /* 수정자 */
) VALUES (
#{rcptNo} /* 수금번호 */
,#{acntUnit} /* 사업부 */
,#{rcptYmd} /* 수금일자 */
,#{ser} /* 일련번호 */
,#{orderNo} /* 계약번호 */
,#{custCd} /* 고객코드 */
,(SELECT Salesman FROM SWSB210A_TBL WHERE custCd = #{custCd}) /* 수금자 */
,(SELECT DeptCd FROM SWSB210A_TBL WHERE custCd = #{custCd}) /* 수금부서 */
,#{accountType} /* 계정과목 */
,#{fundsType} /* 자금구분 */
,#{aoType} /* 자금유형 */
,#{billType} /* 어음구분 */
,#{rcptAmt}::numeric /* 수금금액 */
,#{noWonSymbol} /* 외화단위 */
,#{noWonExChange}::numeric /* 외화환율 */
,#{noWonAmt}::numeric /*외화금액 */
,#{noWonAmtPAL}::numeric /* */
,#{mgtno} /* 어음번호 */
,#{clearYmd} /* 만기일 */
,#{pubNm} /* 발행자명 */
,#{bankCd} /* 은행코드 */
,#{pubBankNm} /* 은행명 */
,#{billAmt}::numeric /* 어음액면가 */
,#{reSolutionNo} /* 결의번호 */
,#{selfReSolutionNo} /* */
,#{termId} /* */
,#{remark} /* 비고 */
,now() /* 생성일시 */
,#{cretEmpNo} /* 생성자 */
,now() /* 수정일시 */
,#{cretEmpNo} /* 수정자 */
) ON
CONFLICT (RcptNo) DO
UPDATE SET
AcntUnit = #{acntUnit} /* 사업부 */
,RcptYmd = #{rcptYmd} /* 수금일자 */
,OrderNo = #{orderNo} /* 계약번호 */
,custCd = #{custCd} /* 고객코드 */
,salesMan = (SELECT Salesman FROM SWSB210A_TBL WHERE custCd = #{custCd}) /* 수금자 */
,rcptDept = (SELECT DeptCd FROM SWSB210A_TBL WHERE custCd = #{custCd}) /* 수금부서 */
,AccountType = #{accountType} /* 계정과목 */
,FundsType = #{fundsType} /* 자금구분 */
,AoType = #{aoType} /* 자금유형 */
,BillType = #{billType} /* 어음구분 */
,RcptAmt = #{rcptAmt}::numeric /* 수금금액 */
,NoWonSymbol = #{noWonSymbol} /* 외화단위 */
,NoWonExChange = #{noWonExChange}::numeric /* 외화환율 */
,NoWonAmt = #{noWonAmt}::numeric /* 외화금액 */
,NoWonAmtPAL = #{noWonAmtPAL}::numeric /* */
,Mgtno = #{mgtno} /* 어음번호 */
,ClearYmd = #{clearYmd} /* 만기일 */
,PubNm = #{pubNm} /* 발행자명 */
,BankCd = #{bankCd} /* 은행코드 */
,PubBankNm = #{pubBankNm} /* 은행명 */
,BillAmt = #{billAmt}::numeric /* 어음액면가 */
,ReSolutionNo = #{reSolutionNo} /* 결의번호 */
,SelfReSolutionNo = #{selfReSolutionNo} /* */
,TermId = #{termId} /* */
,Remark = #{remark} /* 비고 */
,EDIT_DATE = now() /* 수정일시 */
,EditEmpNo = #{cretEmpNo} /* 수정자 */
</update>
<!--
/**
* 수금관리 삭제
* @since 2021.11.05
* @author min
* @version 1.0
*
* << 개정 이력 >>
*
* 수정일 수정자 수정내용
* **************** ********************** ********************************************************
* 2021.11.05 민상익 최초작성
**/
-->
<delete id="deleteCollectMgmt" parameterType="map">
/* salesNcollectMgmt.deleteCollectMgmt */
DELETE FROM SWSE010A_TBL
WHERE RcptNo = #{rcptNo} /* 수금번호 */
</delete>
<!--
/**
* 수금관리 저장 후 계약관리 UPDATE
* @since 2021.11.06
* @author min
* @version 1.0
* << 개정 이력 >>
*
* 수정일 수정자 수정내용
* **************** ********************** ********************************************************
* 2021.11.05 민상익 최초작성
-->
<update id="afterCollectUpdateContract" parameterType="map">
/* salesNcollectMgmt.afterCollectUpdateContract */
UPDATE SWSC110A_TBL SET
rcptAmt = COALESCE(rcptAmt, 0) + #{collectRcptAmt}::numeric
WHERE OrderNo = #{orderNo}
</update>
<!--
/**
* 수금관리 삭제 후 계약관리 UPDATE
* @since 2021.11.06
* @author min
* @version 1.0
* << 개정 이력 >>
*
* 수정일 수정자 수정내용
* **************** ********************** ********************************************************
* 2021.11.05 민상익 최초작성
-->
<update id="afterDeleteCollectUpdateContract" parameterType="map">
/* salesNcollectMgmt.afterDeleteCollectUpdateContract */
UPDATE SWSC110A_TBL SET
rcptAmt = #{collectRcptAmt}::numeric
WHERE OrderNo = #{orderNo}
</update>
<!--
/**
* 결제예정 저장
* @since 2021.10.01
* @author kim
* @version 1.0
*
* << 개정 이력 >>
*
* 수정일 수정자 수정내용
* **************** ********************** ********************************************************
* 2021.10.01 김효일 최초작성
**/
-->
<update id="afterCollectInsertAccount" parameterType="map">
/* salesNcollectMgmt.afterCollectInsertAccount */
INSERT INTO SWSC112A_TBL (
orderNo /* 계약번호 */
,serial /* 일련번호 */
,typeNo /* 구분 */
,contactDate /* 지불일자 */
,accountType /* 결제계정 */
,aoType /* 자금유형 */
,contactAmt /* 결제금액 */
,fundsType /* 지불계정 */
,remark /* 비고 */
,cret_date /* 생성일시 */
,cretEmpNo /* 생성자 */
,edit_date /* 수정일시 */
,editEmpNo /* 수정자 */
) VALUES (
#{orderNo} /* 계약번호 */
,#{ser} /* 일련번호 */
,#{typeNo} /* 구분 */
,#{rcptYmd} /* 수금일자 */
,#{accountType} /* 계정과목 */
,#{aoType} /* 자금유형 */
,#{rcptAmt}::numeric/* 수금금액 */
,#{fundsType} /* 자금구분 */
,#{remark} /* 비고 */
,now() /* 생성일시 */
,#{cretEmpNo} /* 생성자 */
,now() /* 수정일시 */
,#{cretEmpNo} /* 수정자 */
) ON
CONFLICT (orderNo, serial, typeNo) DO /* 계악번호, 일련번호, 구분 */
UPDATE SET
contactDate = #{rcptYmd} /* 지불일자 */
,accountType = #{accountType} /* 결제계정 */
,aoType = #{aoType} /* 자금유형 */
,contactAmt = #{rcptAmt}::numeric /* 결제금액 */
,fundsType = #{fundsType} /* 지불계정 */
,remark = #{remark} /* 비고 */
,edit_date = now() /* 수정일시 */
,editEmpNo = #{cretEmpNo} /* 수정자 */
</update>
<!-- 매출관리 그리드 목록 - project_mgmt 테이블 기반 조회 (S/N, 유무상 포함) -->
<select id="getSalesMgmtGridList" parameterType="map" resultType="map">
/* salesNcollectMgmt.getSalesMgmtGridList - project_mgmt 테이블 기반 조회 (S/N, 유무상 포함) */
SELECT
T.PROJECT_NO,
CODE_NAME(T.CATEGORY_CD) AS ORDER_TYPE,
CODE_NAME(T.PRODUCT) AS PRODUCT_TYPE,
CODE_NAME(T.AREA_CD) AS NATION,
TO_CHAR(T.REGDATE, 'YYYY-MM-DD') AS RECEIPT_DATE,
(SELECT SUPPLY_NAME FROM SUPPLY_MNG WHERE OBJID = T.CUSTOMER_OBJID::NUMERIC) AS CUSTOMER,
(SELECT
CASE
WHEN CM.PAID_TYPE = 'paid' THEN '유상'
WHEN CM.PAID_TYPE = 'free' THEN '무상'
ELSE CM.PAID_TYPE
END
FROM CONTRACT_MGMT CM WHERE CM.OBJID = T.CONTRACT_OBJID) AS PAYMENT_TYPE,
T.PART_NO AS PRODUCT_NO,
T.PART_NAME AS PRODUCT_NAME,
COALESCE(
(SELECT
CASE
WHEN COUNT(*) = 0 THEN ''
WHEN COUNT(*) = 1 THEN MIN(CIS.SERIAL_NO)
ELSE MIN(CIS.SERIAL_NO) || ' 외 ' || (COUNT(*) - 1)::TEXT || '건'
END
FROM CONTRACT_ITEM CI
LEFT JOIN CONTRACT_ITEM_SERIAL CIS ON CI.OBJID = CIS.ITEM_OBJID
WHERE CI.CONTRACT_OBJID = T.CONTRACT_OBJID
AND UPPER(CIS.STATUS) = 'ACTIVE'
), ''
) AS SERIAL_NO,
COALESCE(T.QUANTITY::numeric, 0) AS ORDER_QUANTITY,
T.DUE_DATE AS REQUEST_DATE,
T.CUSTOMER_PROJECT_NAME AS CUSTOMER_REQUEST,
CODE_NAME(T.CONTRACT_RESULT) AS ORDER_STATUS,
T.PO_NO,
T.CONTRACT_DATE AS ORDER_DATE,
CASE WHEN EXISTS(
SELECT 1 FROM ATTACH_FILE_INFO
WHERE TARGET_OBJID = T.OBJID::VARCHAR
AND DOC_TYPE='ORDER_DOC'
AND UPPER(STATUS) = 'ACTIVE'
) THEN 'Y' ELSE 'N' END AS ORDER_ATTACH,
(SELECT CM.PRODUCTION_STATUS FROM CONTRACT_MGMT CM WHERE CM.OBJID = T.CONTRACT_OBJID) AS PRODUCTION_STATUS,
COALESCE((
SELECT SL.SHIPPING_STATUS
FROM SHIPMENT_LOG SL
WHERE SL.TARGET_OBJID = T.PROJECT_NO
AND SL.LOG_TYPE = 'SALES_REGISTRATION'
ORDER BY SL.REG_DATE DESC
LIMIT 1
), '') AS SHIPPING_ORDER_STATUS,
COALESCE((
SELECT SL.SPLIT_QUANTITY
FROM SHIPMENT_LOG SL
WHERE SL.TARGET_OBJID = T.PROJECT_NO
AND SL.LOG_TYPE = 'SALES_REGISTRATION'
ORDER BY SL.REG_DATE DESC
LIMIT 1
), 0) AS SALES_QUANTITY,
COALESCE((
SELECT SL.SALES_UNIT_PRICE
FROM SHIPMENT_LOG SL
WHERE SL.TARGET_OBJID = T.PROJECT_NO
AND SL.LOG_TYPE = 'SALES_REGISTRATION'
ORDER BY SL.REG_DATE DESC
LIMIT 1
), 0) AS SALES_UNIT_PRICE,
COALESCE((
SELECT SL.SALES_SUPPLY_PRICE
FROM SHIPMENT_LOG SL
WHERE SL.TARGET_OBJID = T.PROJECT_NO
AND SL.LOG_TYPE = 'SALES_REGISTRATION'
ORDER BY SL.REG_DATE DESC
LIMIT 1
), 0) AS SALES_SUPPLY_PRICE,
COALESCE((
SELECT SL.SALES_VAT
FROM SHIPMENT_LOG SL
WHERE SL.TARGET_OBJID = T.PROJECT_NO
AND SL.LOG_TYPE = 'SALES_REGISTRATION'
ORDER BY SL.REG_DATE DESC
LIMIT 1
), 0) AS SALES_VAT,
COALESCE((
SELECT SL.SALES_TOTAL_AMOUNT
FROM SHIPMENT_LOG SL
WHERE SL.TARGET_OBJID = T.PROJECT_NO
AND SL.LOG_TYPE = 'SALES_REGISTRATION'
ORDER BY SL.REG_DATE DESC
LIMIT 1
), 0) AS SALES_TOTAL_AMOUNT,
COALESCE((
SELECT SL.SALES_TOTAL_AMOUNT
FROM SHIPMENT_LOG SL
WHERE SL.TARGET_OBJID = T.PROJECT_NO
AND SL.LOG_TYPE = 'SALES_REGISTRATION'
ORDER BY SL.REG_DATE DESC
LIMIT 1
), 0) AS SALES_TOTAL_AMOUNT_KRW,
COALESCE((
SELECT SL.SALES_CURRENCY
FROM SHIPMENT_LOG SL
WHERE SL.TARGET_OBJID = T.PROJECT_NO
AND SL.LOG_TYPE = 'SALES_REGISTRATION'
ORDER BY SL.REG_DATE DESC
LIMIT 1
), T.CONTRACT_CURRENCY) AS SALES_CURRENCY,
COALESCE((
SELECT SL.SALES_EXCHANGE_RATE
FROM SHIPMENT_LOG SL
WHERE SL.TARGET_OBJID = T.PROJECT_NO
AND SL.LOG_TYPE = 'SALES_REGISTRATION'
ORDER BY SL.REG_DATE DESC
LIMIT 1
), T.CONTRACT_PRICE_CURRENCY::numeric, 0) AS SALES_EXCHANGE_RATE,
COALESCE((
SELECT TO_CHAR(SL.SHIPPING_DATE, 'YYYY-MM-DD')
FROM SHIPMENT_LOG SL
WHERE SL.TARGET_OBJID = T.PROJECT_NO
AND SL.LOG_TYPE = 'SALES_REGISTRATION'
ORDER BY SL.REG_DATE DESC
LIMIT 1
), '') AS SHIPPING_DATE,
COALESCE((
SELECT SL.SHIPPING_METHOD
FROM SHIPMENT_LOG SL
WHERE SL.TARGET_OBJID = T.PROJECT_NO
AND SL.LOG_TYPE = 'SALES_REGISTRATION'
ORDER BY SL.REG_DATE DESC
LIMIT 1
), '') AS SHIPPING_METHOD,
COALESCE((
SELECT U.USER_NAME
FROM SHIPMENT_LOG SL
LEFT JOIN USER_INFO U ON U.USER_ID = SL.MANAGER_USER_ID
WHERE SL.TARGET_OBJID = T.PROJECT_NO
AND SL.LOG_TYPE = 'SALES_REGISTRATION'
ORDER BY SL.REG_DATE DESC
LIMIT 1
), (SELECT USER_NAME FROM USER_INFO WHERE USER_ID = T.PM_USER_ID)) AS MANAGER,
COALESCE((
SELECT SL.INCOTERMS
FROM SHIPMENT_LOG SL
WHERE SL.TARGET_OBJID = T.PROJECT_NO
AND SL.LOG_TYPE = 'SALES_REGISTRATION'
ORDER BY SL.REG_DATE DESC
LIMIT 1
), '') AS INCOTERMS,
'N' AS SALES_STATUS,
T.OBJID::VARCHAR AS SALE_NO,
'ORIGINAL' AS RECORD_TYPE,
'' AS SPLIT_LOG_ID
FROM PROJECT_MGMT AS T
WHERE 1 = 1
<if test="orderType != null and orderType != ''">
AND T.CATEGORY_CD = #{orderType}
</if>
<if test="productType != null and productType != ''">
AND T.PRODUCT = #{productType}
</if>
<if test="nation != null and nation != ''">
AND T.AREA_CD = #{nation}
</if>
<if test="customer != null and customer != ''">
AND EXISTS (
SELECT 1 FROM SUPPLY_MNG
WHERE OBJID = T.CUSTOMER_OBJID::NUMERIC
AND SUPPLY_NAME LIKE CONCAT('%', #{customer}, '%')
)
</if>
<if test="paymentType != null and paymentType != ''">
AND EXISTS (
SELECT 1 FROM CONTRACT_MGMT CM
WHERE CM.OBJID = T.CONTRACT_OBJID
AND (
(#{paymentType} = 'N' AND CM.PAID_TYPE = 'paid') OR
(#{paymentType} = 'Y' AND CM.PAID_TYPE = 'free')
)
)
</if>
<if test="productNo != null and productNo != ''">
AND T.PART_NO LIKE CONCAT('%', #{productNo}, '%')
</if>
<if test="productName != null and productName != ''">
AND T.PART_NAME LIKE CONCAT('%', #{productName}, '%')
</if>
<if test="serialNo != null and serialNo != ''">
AND EXISTS (
SELECT 1 FROM CONTRACT_ITEM CI
JOIN CONTRACT_ITEM_SERIAL CIS ON CI.OBJID = CIS.ITEM_OBJID
WHERE CI.CONTRACT_OBJID = T.CONTRACT_OBJID
AND CIS.SERIAL_NO LIKE CONCAT('%', #{serialNo}, '%')
AND UPPER(CIS.STATUS) = 'ACTIVE'
)
</if>
<if test="orderStatus != null and orderStatus != ''">
AND T.CONTRACT_RESULT = #{orderStatus}
</if>
<if test="poNo != null and poNo != ''">
AND T.PO_NO LIKE CONCAT('%', #{poNo}, '%')
</if>
<if test="requestDateFrom != null and requestDateFrom != ''">
AND T.DUE_DATE <![CDATA[>=]]> #{requestDateFrom}
</if>
<if test="requestDateTo != null and requestDateTo != ''">
AND T.DUE_DATE <![CDATA[<=]]> #{requestDateTo}
</if>
<if test="orderDateFrom != null and orderDateFrom != ''">
AND T.CONTRACT_DATE <![CDATA[>=]]> #{orderDateFrom}
</if>
<if test="orderDateTo != null and orderDateTo != ''">
AND T.CONTRACT_DATE <![CDATA[<=]]> #{orderDateTo}
</if>
<if test="shippingStatus != null and shippingStatus != ''">
/* SALES_STATUS 필드 없음 - 검색 조건 무시 */
</if>
<if test="shippingDateFrom != null and shippingDateFrom != ''">
/* SHIPPING_DATE 필드 없음 - 검색 조건 무시 */
</if>
<if test="shippingDateTo != null and shippingDateTo != ''">
/* SHIPPING_DATE 필드 없음 - 검색 조건 무시 */
</if>
<if test="shippingMethod != null and shippingMethod != ''">
/* SHIPPING_METHOD 필드 없음 - 검색 조건 무시 */
</if>
<if test="manager != null and manager != ''">
AND T.PM_USER_ID = #{manager}
</if>
<if test="incoterms != null and incoterms != ''">
/* INCOTERMS 필드 없음 - 검색 조건 무시 */
</if>
ORDER BY T.REGDATE DESC
LIMIT #{COUNT_PER_PAGE} OFFSET #{PAGE_START}
</select>
<!-- 매출관리 그리드 목록 개수 - project_mgmt 테이블 기반 -->
<select id="getSalesMgmtGridListCount" parameterType="map" resultType="map">
/* salesNcollectMgmt.getSalesMgmtGridListCount - project_mgmt 테이블 기반 */
SELECT
CEIL(COUNT(1)::float / #{COUNT_PER_PAGE}::float)::numeric::integer AS MAX_PAGE_SIZE,
COUNT(1)::integer AS TOTAL_CNT
FROM PROJECT_MGMT AS T
WHERE 1 = 1
<if test="orderType != null and orderType != ''">
AND T.CATEGORY_CD = #{orderType}
</if>
<if test="productType != null and productType != ''">
AND T.PRODUCT = #{productType}
</if>
<if test="nation != null and nation != ''">
AND T.AREA_CD = #{nation}
</if>
<if test="customer != null and customer != ''">
AND EXISTS (
SELECT 1 FROM SUPPLY_MNG
WHERE OBJID = T.CUSTOMER_OBJID::NUMERIC
AND SUPPLY_NAME LIKE CONCAT('%', #{customer}, '%')
)
</if>
<if test="paymentType != null and paymentType != ''">
AND EXISTS (
SELECT 1 FROM CONTRACT_MGMT CM
WHERE CM.OBJID = T.CONTRACT_OBJID
AND (
(#{paymentType} = 'N' AND CM.PAID_TYPE = 'paid') OR
(#{paymentType} = 'Y' AND CM.PAID_TYPE = 'free')
)
)
</if>
<if test="productNo != null and productNo != ''">
AND T.PART_NO LIKE CONCAT('%', #{productNo}, '%')
</if>
<if test="productName != null and productName != ''">
AND T.PART_NAME LIKE CONCAT('%', #{productName}, '%')
</if>
<if test="serialNo != null and serialNo != ''">
AND EXISTS (
SELECT 1 FROM CONTRACT_ITEM CI
JOIN CONTRACT_ITEM_SERIAL CIS ON CI.OBJID = CIS.ITEM_OBJID
WHERE CI.CONTRACT_OBJID = T.CONTRACT_OBJID
AND CIS.SERIAL_NO LIKE CONCAT('%', #{serialNo}, '%')
AND UPPER(CIS.STATUS) = 'ACTIVE'
)
</if>
<if test="orderStatus != null and orderStatus != ''">
AND T.CONTRACT_RESULT = #{orderStatus}
</if>
<if test="poNo != null and poNo != ''">
AND T.PO_NO LIKE CONCAT('%', #{poNo}, '%')
</if>
<if test="requestDateFrom != null and requestDateFrom != ''">
AND T.DUE_DATE <![CDATA[>=]]> #{requestDateFrom}
</if>
<if test="requestDateTo != null and requestDateTo != ''">
AND T.DUE_DATE <![CDATA[<=]]> #{requestDateTo}
</if>
<if test="orderDateFrom != null and orderDateFrom != ''">
AND T.CONTRACT_DATE <![CDATA[>=]]> #{orderDateFrom}
</if>
<if test="orderDateTo != null and orderDateTo != ''">
AND T.CONTRACT_DATE <![CDATA[<=]]> #{orderDateTo}
</if>
<if test="shippingStatus != null and shippingStatus != ''">
/* SALES_STATUS 필드 없음 - 검색 조건 무시 */
</if>
<if test="shippingDateFrom != null and shippingDateFrom != ''">
/* SHIPPING_DATE 필드 없음 - 검색 조건 무시 */
</if>
<if test="shippingDateTo != null and shippingDateTo != ''">
/* SHIPPING_DATE 필드 없음 - 검색 조건 무시 */
</if>
<if test="shippingMethod != null and shippingMethod != ''">
/* SHIPPING_METHOD 필드 없음 - 검색 조건 무시 */
</if>
<if test="manager != null and manager != ''">
AND T.PM_USER_ID = #{manager}
</if>
<if test="incoterms != null and incoterms != ''">
/* INCOTERMS 필드 없음 - 검색 조건 무시 */
</if>
</select>
<!-- 매출관리 합계 조회 (Total 공급가액, 부가세, 총액) -->
<select id="getSalesMgmtTotals" parameterType="map" resultType="map">
/* salesNcollectMgmt.getSalesMgmtTotals */
SELECT
COALESCE(SUM(COALESCE(A.order_supply_price, '0')::numeric), 0)::numeric AS TOTAL_SUPPLY_PRICE, /* Total 공급가액 */
COALESCE(SUM(COALESCE(A.order_vat, '0')::numeric), 0)::numeric AS TOTAL_VAT, /* Total 부가세 */
COALESCE(SUM(COALESCE(A.order_total_amount, '0')::numeric), 0)::numeric AS TOTAL_AMOUNT /* Total 총액 */
FROM contract_mgmt A
LEFT JOIN supply_mng SUP ON SUP.objid::varchar = A.customer_objid
WHERE 1 = 1
<if test="orderType != null and orderType != ''">
AND A.category_cd = #{orderType}
</if>
<if test="productType != null and productType != ''">
AND A.product = #{productType}
</if>
<if test="nation != null and nation != ''">
AND A.area_cd = #{nation}
</if>
<if test="customer != null and customer != ''">
AND SUP.supply_name LIKE CONCAT('%', #{customer}, '%')
</if>
<if test="paymentType != null and paymentType != ''">
AND A.paid_type = #{paymentType}
</if>
<if test="productNo != null and productNo != ''">
AND A.part_no LIKE CONCAT('%', #{productNo}, '%')
</if>
<if test="productName != null and productName != ''">
AND A.part_name LIKE CONCAT('%', #{productName}, '%')
</if>
<if test="serialNo != null and serialNo != ''">
AND A.serial_no LIKE CONCAT('%', #{serialNo}, '%')
</if>
<if test="orderStatus != null and orderStatus != ''">
AND A.status_cd = #{orderStatus}
</if>
<if test="poNo != null and poNo != ''">
AND A.po_no LIKE CONCAT('%', #{poNo}, '%')
</if>
<if test="requestDateFrom != null and requestDateFrom != ''">
AND A.req_del_date <![CDATA[>=]]> #{requestDateFrom}
</if>
<if test="requestDateTo != null and requestDateTo != ''">
AND A.req_del_date <![CDATA[<=]]> #{requestDateTo}
</if>
<if test="orderDateFrom != null and orderDateFrom != ''">
AND A.order_date <![CDATA[>=]]> #{orderDateFrom}
</if>
<if test="orderDateTo != null and orderDateTo != ''">
AND A.order_date <![CDATA[<=]]> #{orderDateTo}
</if>
<if test="shippingStatus != null and shippingStatus != ''">
/* shippingStatus 필드가 contract_mgmt에 없어서 주석 처리 */
</if>
<if test="shippingDateFrom != null and shippingDateFrom != ''">
/* shippingDate 조인 안됨 */
</if>
<if test="shippingDateTo != null and shippingDateTo != ''">
/* shippingDate 조인 안됨 */
</if>
<if test="shippingMethod != null and shippingMethod != ''">
/* shippingMethod 필드가 contract_mgmt에 없어서 주석 처리 */
</if>
<if test="manager != null and manager != ''">
AND A.pm_user_id = #{manager}
</if>
<if test="incoterms != null and incoterms != ''">
/* incoterms 필드가 contract_mgmt에 없어서 주석 처리 */
</if>
</select>
<!--
/**
* 분할출하 - 원본 데이터 조회
* @since 2025.10.20
* @author system
* @version 1.0
**/
-->
<select id="getContractByObjid" parameterType="map" resultType="map">
/* salesNcollectMgmt.getContractByObjid */
SELECT
*
FROM contract_mgmt
WHERE objid = #{objid}
</select>
<!--
/**
* 분할출하 로그 저장 (로그 기반 방식)
* @since 2025.10.20
* @author system
* @version 1.0
**/
-->
<insert id="insertSplitShipmentLog" parameterType="map">
/* salesNcollectMgmt.insertSplitShipmentLog */
INSERT INTO shipment_log (
target_objid,
log_type,
log_message,
split_quantity,
original_quantity,
shipping_status,
sales_unit_price,
sales_supply_price,
sales_vat,
sales_total_amount,
sales_currency,
sales_exchange_rate,
serial_no,
shipping_date,
shipping_method,
manager_user_id,
incoterms,
remark,
is_split_record,
reg_date,
reg_user_id
) VALUES (
#{objid},
#{logType},
#{logMessage},
#{splitQuantity}::integer,
#{originalQuantity}::integer,
'PENDING',
#{salesUnitPrice}::numeric,
#{salesSupplyPrice}::numeric,
#{salesVat}::numeric,
#{salesTotalAmount}::numeric,
#{salesCurrency},
#{salesExchangeRate}::numeric,
#{serialNo},
<choose>
<when test="shippingDate != null and shippingDate != ''">
TO_DATE(#{shippingDate}, 'YYYY-MM-DD'),
</when>
<otherwise>
NULL,
</otherwise>
</choose>
#{shippingMethod},
#{managerUserId},
#{incoterms},
#{remark},
true,
NOW(),
#{userId}
)
</insert>
<!--
/**
* 판매 등록 저장 (shipment_log 테이블 사용)
* @since 2025.10.22
* @author johngreen
* @version 1.0
**/
-->
<insert id="insertSaleRegistration" parameterType="map">
/* salesNcollectMgmt.insertSaleRegistration - shipment_log에 판매 데이터 저장 */
INSERT INTO shipment_log (
target_objid,
log_type,
log_message,
split_quantity,
shipping_status,
sales_unit_price,
sales_supply_price,
sales_vat,
sales_total_amount,
sales_currency,
sales_exchange_rate,
serial_no,
shipping_date,
shipping_method,
manager_user_id,
incoterms,
is_split_record,
reg_date,
reg_user_id
) VALUES (
#{orderNo},
'SALES_REGISTRATION',
'판매 등록',
#{salesQuantity}::integer,
<choose>
<when test="shippingOrderStatus != null and shippingOrderStatus != ''">
#{shippingOrderStatus},
</when>
<otherwise>
'',
</otherwise>
</choose>
#{salesUnitPrice}::numeric,
#{salesSupplyPrice}::numeric,
#{salesVat}::numeric,
#{salesTotalAmount}::numeric,
#{salesCurrency},
#{salesExchangeRate}::numeric,
#{serialNo},
<choose>
<when test="shippingDate != null and shippingDate != ''">
TO_DATE(#{shippingDate}, 'YYYY-MM-DD'),
</when>
<otherwise>
NULL,
</otherwise>
</choose>
#{shippingMethod},
#{manager},
#{incoterms},
false,
NOW(),
#{cretEmpNo}
)
</insert>
<!--
/**
* 판매 정보 조회 - 판매등록 팝업에서 사용
* PROJECT_NO 또는 SALE_NO로 조회
* @since 2025.10.22
* @author johngreen
* @version 1.0
**/
-->
<select id="getSaleInfo" parameterType="map" resultType="map">
/* salesNcollectMgmt.getSaleInfo - 판매등록 팝업용 프로젝트 정보 조회 (리스트와 동일한 구조) */
SELECT
T.PROJECT_NO,
CODE_NAME(T.CATEGORY_CD) AS ORDER_TYPE,
CODE_NAME(T.PRODUCT) AS PRODUCT_TYPE,
CODE_NAME(T.AREA_CD) AS NATION,
TO_CHAR(T.REGDATE, 'YYYY-MM-DD') AS RECEIPT_DATE,
(SELECT SUPPLY_NAME FROM SUPPLY_MNG WHERE OBJID = T.CUSTOMER_OBJID::NUMERIC) AS CUSTOMER,
(SELECT
CASE
WHEN CM.PAID_TYPE = 'paid' THEN '유상'
WHEN CM.PAID_TYPE = 'free' THEN '무상'
ELSE CM.PAID_TYPE
END
FROM CONTRACT_MGMT CM WHERE CM.OBJID = T.CONTRACT_OBJID) AS PAYMENT_TYPE,
T.PART_NO AS PRODUCT_NO,
T.PART_NAME AS PRODUCT_NAME,
-- S/N 정보 (리스트와 동일: "첫번째 S/N 외 N건")
COALESCE(
(SELECT
CASE
WHEN COUNT(*) = 0 THEN ''
WHEN COUNT(*) = 1 THEN MIN(CIS.SERIAL_NO)
ELSE MIN(CIS.SERIAL_NO) || ' 외 ' || (COUNT(*) - 1)::TEXT || '건'
END
FROM CONTRACT_ITEM CI
LEFT JOIN CONTRACT_ITEM_SERIAL CIS ON CI.OBJID = CIS.ITEM_OBJID
WHERE CI.CONTRACT_OBJID = T.CONTRACT_OBJID
AND UPPER(CIS.STATUS) = 'ACTIVE'
), ''
) AS SERIAL_NO,
-- S/N 전체 목록 JSON 형식으로
COALESCE(
(SELECT
JSON_AGG(
JSON_BUILD_OBJECT(
'id', sn_data.row_num,
'value', sn_data.serial_no
)
)::TEXT
FROM (
SELECT
ROW_NUMBER() OVER (ORDER BY CIS.SERIAL_NO) AS row_num,
CIS.SERIAL_NO AS serial_no
FROM CONTRACT_ITEM CI
LEFT JOIN CONTRACT_ITEM_SERIAL CIS ON CI.OBJID = CIS.ITEM_OBJID
WHERE CI.CONTRACT_OBJID = T.CONTRACT_OBJID
AND UPPER(CIS.STATUS) = 'ACTIVE'
AND CIS.SERIAL_NO IS NOT NULL
) AS sn_data
), '[]'
) AS SERIAL_NO_LIST,
COALESCE(T.QUANTITY::numeric, 0) AS ORDER_QUANTITY,
T.DUE_DATE AS REQUEST_DATE,
T.CUSTOMER_PROJECT_NAME AS CUSTOMER_REQUEST,
CODE_NAME(T.CONTRACT_RESULT) AS ORDER_STATUS,
T.PO_NO,
T.CONTRACT_DATE AS ORDER_DATE,
CASE WHEN EXISTS(
SELECT 1 FROM ATTACH_FILE_INFO
WHERE TARGET_OBJID = T.OBJID::VARCHAR
AND DOC_TYPE='ORDER_DOC'
AND UPPER(STATUS) = 'ACTIVE'
) THEN 'Y' ELSE 'N' END AS ORDER_ATTACH,
(SELECT CM.PRODUCTION_STATUS FROM CONTRACT_MGMT CM WHERE CM.OBJID = T.CONTRACT_OBJID) AS PRODUCTION_STATUS,
-- 판매 관련 필드들 (shipment_log에서 가져오기)
COALESCE((
SELECT SL.SHIPPING_STATUS
FROM SHIPMENT_LOG SL
WHERE SL.TARGET_OBJID = T.PROJECT_NO
AND SL.LOG_TYPE = 'SALES_REGISTRATION'
ORDER BY SL.REG_DATE DESC
LIMIT 1
), '') AS SHIPPING_ORDER_STATUS,
COALESCE((
SELECT SL.SPLIT_QUANTITY
FROM SHIPMENT_LOG SL
WHERE SL.TARGET_OBJID = T.PROJECT_NO
AND SL.LOG_TYPE = 'SALES_REGISTRATION'
ORDER BY SL.REG_DATE DESC
LIMIT 1
), 0) AS SALES_QUANTITY,
COALESCE((
SELECT SL.SALES_UNIT_PRICE
FROM SHIPMENT_LOG SL
WHERE SL.TARGET_OBJID = T.PROJECT_NO
AND SL.LOG_TYPE = 'SALES_REGISTRATION'
ORDER BY SL.REG_DATE DESC
LIMIT 1
), 0) AS SALES_UNIT_PRICE,
COALESCE((
SELECT SL.SALES_SUPPLY_PRICE
FROM SHIPMENT_LOG SL
WHERE SL.TARGET_OBJID = T.PROJECT_NO
AND SL.LOG_TYPE = 'SALES_REGISTRATION'
ORDER BY SL.REG_DATE DESC
LIMIT 1
), 0) AS SALES_SUPPLY_PRICE,
COALESCE((
SELECT SL.SALES_VAT
FROM SHIPMENT_LOG SL
WHERE SL.TARGET_OBJID = T.PROJECT_NO
AND SL.LOG_TYPE = 'SALES_REGISTRATION'
ORDER BY SL.REG_DATE DESC
LIMIT 1
), 0) AS SALES_VAT,
COALESCE((
SELECT SL.SALES_TOTAL_AMOUNT
FROM SHIPMENT_LOG SL
WHERE SL.TARGET_OBJID = T.PROJECT_NO
AND SL.LOG_TYPE = 'SALES_REGISTRATION'
ORDER BY SL.REG_DATE DESC
LIMIT 1
), 0) AS SALES_TOTAL_AMOUNT,
COALESCE((
SELECT SL.SALES_TOTAL_AMOUNT
FROM SHIPMENT_LOG SL
WHERE SL.TARGET_OBJID = T.PROJECT_NO
AND SL.LOG_TYPE = 'SALES_REGISTRATION'
ORDER BY SL.REG_DATE DESC
LIMIT 1
), 0) AS SALES_TOTAL_AMOUNT_KRW,
COALESCE((
SELECT SL.SALES_CURRENCY
FROM SHIPMENT_LOG SL
WHERE SL.TARGET_OBJID = T.PROJECT_NO
AND SL.LOG_TYPE = 'SALES_REGISTRATION'
ORDER BY SL.REG_DATE DESC
LIMIT 1
), T.CONTRACT_CURRENCY) AS SALES_CURRENCY,
COALESCE((
SELECT SL.SALES_EXCHANGE_RATE
FROM SHIPMENT_LOG SL
WHERE SL.TARGET_OBJID = T.PROJECT_NO
AND SL.LOG_TYPE = 'SALES_REGISTRATION'
ORDER BY SL.REG_DATE DESC
LIMIT 1
), T.CONTRACT_PRICE_CURRENCY::numeric, 0) AS SALES_EXCHANGE_RATE,
COALESCE((
SELECT TO_CHAR(SL.SHIPPING_DATE, 'YYYY-MM-DD')
FROM SHIPMENT_LOG SL
WHERE SL.TARGET_OBJID = T.PROJECT_NO
AND SL.LOG_TYPE = 'SALES_REGISTRATION'
ORDER BY SL.REG_DATE DESC
LIMIT 1
), '') AS SHIPPING_DATE,
COALESCE((
SELECT SL.SHIPPING_METHOD
FROM SHIPMENT_LOG SL
WHERE SL.TARGET_OBJID = T.PROJECT_NO
AND SL.LOG_TYPE = 'SALES_REGISTRATION'
ORDER BY SL.REG_DATE DESC
LIMIT 1
), '') AS SHIPPING_METHOD,
COALESCE((
SELECT SL.MANAGER_USER_ID
FROM SHIPMENT_LOG SL
WHERE SL.TARGET_OBJID = T.PROJECT_NO
AND SL.LOG_TYPE = 'SALES_REGISTRATION'
ORDER BY SL.REG_DATE DESC
LIMIT 1
), T.PM_USER_ID) AS MANAGER,
COALESCE((
SELECT SL.INCOTERMS
FROM SHIPMENT_LOG SL
WHERE SL.TARGET_OBJID = T.PROJECT_NO
AND SL.LOG_TYPE = 'SALES_REGISTRATION'
ORDER BY SL.REG_DATE DESC
LIMIT 1
), '') AS INCOTERMS
FROM PROJECT_MGMT AS T
WHERE T.PROJECT_NO = #{orderNo}
</select>
</mapper>