1897 lines
71 KiB
XML
1897 lines
71 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 - sales_registration LEFT JOIN으로 최적화 */
|
|
SELECT
|
|
T.OBJID,
|
|
T.PROJECT_NO,
|
|
T.CONTRACT_OBJID,
|
|
T.SALES_DEADLINE_DATE,
|
|
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건" 형식)
|
|
(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 AND UPPER(CIS.STATUS) = 'ACTIVE'
|
|
WHERE CI.CONTRACT_OBJID = T.CONTRACT_OBJID
|
|
AND CI.PART_OBJID = T.PART_OBJID
|
|
AND CI.STATUS = 'ACTIVE'
|
|
AND CIS.SERIAL_NO IS NOT NULL) AS SERIAL_NO,
|
|
COALESCE(T.QUANTITY::numeric, 0) AS ORDER_QUANTITY,
|
|
-- 요청납기: CONTRACT_ITEM 우선, 없으면 PROJECT_MGMT, 없으면 CONTRACT_MGMT
|
|
COALESCE(
|
|
(SELECT CI.DUE_DATE
|
|
FROM CONTRACT_ITEM CI
|
|
WHERE CI.CONTRACT_OBJID = T.CONTRACT_OBJID
|
|
AND CI.PART_OBJID = T.PART_OBJID
|
|
AND CI.STATUS = 'ACTIVE'),
|
|
T.DUE_DATE,
|
|
(SELECT CM.due_date FROM CONTRACT_MGMT CM WHERE CM.OBJID = T.CONTRACT_OBJID)
|
|
) AS REQUEST_DATE,
|
|
-- 고객요청사항: CONTRACT_ITEM에서만 가져옴 (견적관리와 완전히 동일)
|
|
(SELECT CI.CUSTOMER_REQUEST
|
|
FROM CONTRACT_ITEM CI
|
|
WHERE CI.CONTRACT_OBJID = T.CONTRACT_OBJID
|
|
AND CI.PART_OBJID = T.PART_OBJID
|
|
AND CI.STATUS = 'ACTIVE') AS CUSTOMER_REQUEST,
|
|
CODE_NAME(T.CONTRACT_RESULT) AS ORDER_STATUS,
|
|
(SELECT CM.PO_NO FROM CONTRACT_MGMT CM WHERE CM.OBJID = T.CONTRACT_OBJID) AS PO_NO,
|
|
COALESCE(T.CONTRACT_DATE, (SELECT CM.order_date FROM CONTRACT_MGMT CM WHERE CM.OBJID = T.CONTRACT_OBJID)) AS ORDER_DATE,
|
|
CASE WHEN EXISTS(
|
|
SELECT 1 FROM ATTACH_FILE_INFO
|
|
WHERE TARGET_OBJID = T.CONTRACT_OBJID
|
|
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,
|
|
-- 판매 관련 필드들 (sales_registration 테이블에서 한 번에 가져오기)
|
|
COALESCE(SR.shipping_order_status, '') AS SHIPPING_ORDER_STATUS,
|
|
-- 판매수량: 모든 분할 출하의 합계
|
|
COALESCE(
|
|
(SELECT SUM(sales_quantity)
|
|
FROM sales_registration
|
|
WHERE project_no LIKE T.PROJECT_NO || '%'),
|
|
0
|
|
) AS SALES_QUANTITY,
|
|
COALESCE(SR.sales_unit_price, 0) AS SALES_UNIT_PRICE,
|
|
COALESCE(SR.sales_supply_price, 0) AS SALES_SUPPLY_PRICE,
|
|
COALESCE(SR.sales_vat, 0) AS SALES_VAT,
|
|
COALESCE(SR.sales_total_amount, 0) AS SALES_TOTAL_AMOUNT,
|
|
COALESCE(SR.sales_total_amount, 0) AS SALES_TOTAL_AMOUNT_KRW,
|
|
-- 잔량 계산: 수주수량 - shipment_log의 split_quantity 합계
|
|
COALESCE(T.QUANTITY::numeric, 0) - COALESCE(
|
|
(SELECT SUM(COALESCE(split_quantity, 0))
|
|
FROM shipment_log
|
|
WHERE target_objid = T.PROJECT_NO),
|
|
0
|
|
) AS REMAINING_QUANTITY,
|
|
-- 잔량원화총액 계산: (수주수량 - shipment_log 합계) * 판매단가
|
|
(COALESCE(T.QUANTITY::numeric, 0) - COALESCE(
|
|
(SELECT SUM(COALESCE(split_quantity, 0))
|
|
FROM shipment_log
|
|
WHERE target_objid = T.PROJECT_NO),
|
|
0
|
|
)) * COALESCE(SR.sales_unit_price, 0) AS REMAINING_AMOUNT_KRW,
|
|
COALESCE(SR.sales_currency, T.CONTRACT_CURRENCY) AS SALES_CURRENCY,
|
|
CODE_NAME(COALESCE(SR.sales_currency, T.CONTRACT_CURRENCY)) AS SALES_CURRENCY_NAME,
|
|
COALESCE(SR.sales_exchange_rate, T.CONTRACT_PRICE_CURRENCY::numeric, 0) AS SALES_EXCHANGE_RATE,
|
|
COALESCE(TO_CHAR(SR.shipping_date, 'YYYY-MM-DD'), '') AS SHIPPING_DATE,
|
|
-- 출하일 (분할출하 포함): 엑셀 다운로드용
|
|
COALESCE(
|
|
(SELECT
|
|
CASE
|
|
WHEN COUNT(DISTINCT shipping_date) = 0 THEN ''
|
|
WHEN COUNT(DISTINCT shipping_date) = 1 THEN TO_CHAR(MIN(shipping_date), 'YYYY-MM-DD')
|
|
ELSE TO_CHAR(MIN(shipping_date), 'YYYY-MM-DD') || '외' || (COUNT(DISTINCT shipping_date) - 1)::TEXT
|
|
END
|
|
FROM shipment_log
|
|
WHERE target_objid = T.OBJID::VARCHAR
|
|
AND shipping_date IS NOT NULL
|
|
AND UPPER(COALESCE(shipping_status, '')) != 'CANCELLED'),
|
|
COALESCE(TO_CHAR(SR.shipping_date, 'YYYY-MM-DD'), '')
|
|
) AS SHIPPING_DATE_WITH_COUNT,
|
|
COALESCE(SR.shipping_method, '') AS SHIPPING_METHOD,
|
|
COALESCE(
|
|
(SELECT USER_NAME FROM USER_INFO WHERE USER_ID = SR.manager_user_id),
|
|
(SELECT USER_NAME FROM USER_INFO WHERE USER_ID = T.PM_USER_ID)
|
|
) AS MANAGER,
|
|
COALESCE(SR.incoterms, '') AS INCOTERMS,
|
|
T.SALES_STATUS,
|
|
T.OBJID::VARCHAR AS SALE_NO,
|
|
'ORIGINAL' AS RECORD_TYPE,
|
|
'' AS SPLIT_LOG_ID
|
|
FROM PROJECT_MGMT AS T
|
|
LEFT JOIN sales_registration SR ON T.PROJECT_NO = SR.project_no
|
|
WHERE 1 = 1
|
|
AND T.PROJECT_NO IS NOT NULL
|
|
AND T.PROJECT_NO != ''
|
|
<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="customer_objid != null and customer_objid != ''">
|
|
AND T.CUSTOMER_OBJID = #{customer_objid}
|
|
</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>
|
|
<!-- 품번/품명 검색: PART_NO 또는 PART_NAME으로 검색 (한글 포함) -->
|
|
<if test="(search_partNo != null and search_partNo != '') or (search_partName != null and search_partName != '')">
|
|
AND (
|
|
<if test="search_partNo != null and search_partNo != ''">
|
|
T.PART_NO = #{search_partNo}
|
|
</if>
|
|
<if test="(search_partNo != null and search_partNo != '') and (search_partName != null and search_partName != '')">
|
|
OR
|
|
</if>
|
|
<if test="search_partName != null and search_partName != ''">
|
|
T.PART_NAME = #{search_partName}
|
|
</if>
|
|
)
|
|
</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 CI.PART_OBJID = T.PART_OBJID
|
|
AND CI.STATUS = 'ACTIVE'
|
|
AND UPPER(CIS.SERIAL_NO) LIKE UPPER(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 EXISTS (
|
|
SELECT 1 FROM CONTRACT_MGMT CM
|
|
WHERE CM.OBJID = T.CONTRACT_OBJID
|
|
AND UPPER(CM.PO_NO) LIKE UPPER(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 EXISTS (
|
|
SELECT 1 FROM CONTRACT_MGMT CM
|
|
WHERE CM.OBJID = T.CONTRACT_OBJID
|
|
AND TO_DATE(CM.ORDER_DATE, 'YYYY-MM-DD') <![CDATA[>=]]> TO_DATE(#{orderDateFrom}, 'YYYY-MM-DD')
|
|
)
|
|
</if>
|
|
<if test="orderDateTo != null and orderDateTo != ''">
|
|
AND EXISTS (
|
|
SELECT 1 FROM CONTRACT_MGMT CM
|
|
WHERE CM.OBJID = T.CONTRACT_OBJID
|
|
AND TO_DATE(CM.ORDER_DATE, 'YYYY-MM-DD') <![CDATA[<=]]> TO_DATE(#{orderDateTo}, 'YYYY-MM-DD')
|
|
)
|
|
</if>
|
|
<if test="shippingStatus != null and shippingStatus != ''">
|
|
AND SR.shipping_order_status = #{shippingStatus}
|
|
</if>
|
|
<if test="shippingDateFrom != null and shippingDateFrom != ''">
|
|
AND SR.shipping_date IS NOT NULL
|
|
AND TO_DATE(TO_CHAR(SR.shipping_date, 'YYYY-MM-DD'), 'YYYY-MM-DD') <![CDATA[>=]]> TO_DATE(#{shippingDateFrom}, 'YYYY-MM-DD')
|
|
</if>
|
|
<if test="shippingDateTo != null and shippingDateTo != ''">
|
|
AND SR.shipping_date IS NOT NULL
|
|
AND TO_DATE(TO_CHAR(SR.shipping_date, 'YYYY-MM-DD'), 'YYYY-MM-DD') <![CDATA[<=]]> TO_DATE(#{shippingDateTo}, 'YYYY-MM-DD')
|
|
</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>
|
|
<if test="salesStatus != null and salesStatus != ''">
|
|
<choose>
|
|
<when test="salesStatus == 'NOT_CLOSED'">
|
|
AND (T.SALES_STATUS IS NULL OR T.SALES_STATUS = '' OR T.SALES_STATUS != '완료')
|
|
</when>
|
|
<otherwise>
|
|
AND T.SALES_STATUS = #{salesStatus}
|
|
</otherwise>
|
|
</choose>
|
|
</if>
|
|
<!-- 매출마감 기간 검색 -->
|
|
<if test="salesDeadlineFrom != null and salesDeadlineFrom != ''">
|
|
AND T.SALES_DEADLINE_DATE IS NOT NULL
|
|
AND TO_DATE(T.SALES_DEADLINE_DATE, 'YYYY-MM-DD') <![CDATA[>=]]> TO_DATE(#{salesDeadlineFrom}, 'YYYY-MM-DD')
|
|
</if>
|
|
<if test="salesDeadlineTo != null and salesDeadlineTo != ''">
|
|
AND T.SALES_DEADLINE_DATE IS NOT NULL
|
|
AND TO_DATE(T.SALES_DEADLINE_DATE, 'YYYY-MM-DD') <![CDATA[<=]]> TO_DATE(#{salesDeadlineTo}, 'YYYY-MM-DD')
|
|
</if>
|
|
-- 등록일 기준 최신순 정렬 (프로젝트 번호는 보조 정렬)
|
|
ORDER BY T.REGDATE DESC, T.PROJECT_NO DESC
|
|
</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
|
|
AND T.PROJECT_NO IS NOT NULL
|
|
AND T.PROJECT_NO != ''
|
|
<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="customer_objid != null and customer_objid != ''">
|
|
AND T.CUSTOMER_OBJID = #{customer_objid}
|
|
</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>
|
|
<!-- 품번/품명 검색: PART_NO 또는 PART_NAME으로 검색 (한글 포함) -->
|
|
<if test="(search_partNo != null and search_partNo != '') or (search_partName != null and search_partName != '')">
|
|
AND (
|
|
<if test="search_partNo != null and search_partNo != ''">
|
|
T.PART_NO = #{search_partNo}
|
|
</if>
|
|
<if test="(search_partNo != null and search_partNo != '') and (search_partName != null and search_partName != '')">
|
|
OR
|
|
</if>
|
|
<if test="search_partName != null and search_partName != ''">
|
|
T.PART_NAME = #{search_partName}
|
|
</if>
|
|
)
|
|
</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 CI.PART_OBJID = T.PART_OBJID
|
|
AND CI.STATUS = 'ACTIVE'
|
|
AND UPPER(CIS.SERIAL_NO) LIKE UPPER(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 EXISTS (
|
|
SELECT 1 FROM CONTRACT_MGMT CM
|
|
WHERE CM.OBJID = T.CONTRACT_OBJID
|
|
AND UPPER(CM.PO_NO) LIKE UPPER(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 EXISTS (
|
|
SELECT 1 FROM CONTRACT_MGMT CM
|
|
WHERE CM.OBJID = T.CONTRACT_OBJID
|
|
AND TO_DATE(CM.ORDER_DATE, 'YYYY-MM-DD') <![CDATA[>=]]> TO_DATE(#{orderDateFrom}, 'YYYY-MM-DD')
|
|
)
|
|
</if>
|
|
<if test="orderDateTo != null and orderDateTo != ''">
|
|
AND EXISTS (
|
|
SELECT 1 FROM CONTRACT_MGMT CM
|
|
WHERE CM.OBJID = T.CONTRACT_OBJID
|
|
AND TO_DATE(CM.ORDER_DATE, 'YYYY-MM-DD') <![CDATA[<=]]> TO_DATE(#{orderDateTo}, 'YYYY-MM-DD')
|
|
)
|
|
</if>
|
|
<if test="shippingStatus != null and shippingStatus != ''">
|
|
AND EXISTS (
|
|
SELECT 1 FROM sales_registration SR
|
|
WHERE T.PROJECT_NO = SR.project_no
|
|
AND SR.shipping_order_status = #{shippingStatus}
|
|
)
|
|
</if>
|
|
<if test="shippingDateFrom != null and shippingDateFrom != ''">
|
|
AND EXISTS (
|
|
SELECT 1 FROM sales_registration SR
|
|
WHERE T.PROJECT_NO = SR.project_no
|
|
AND SR.shipping_date IS NOT NULL
|
|
AND TO_DATE(TO_CHAR(SR.shipping_date, 'YYYY-MM-DD'), 'YYYY-MM-DD') <![CDATA[>=]]> TO_DATE(#{shippingDateFrom}, 'YYYY-MM-DD')
|
|
)
|
|
</if>
|
|
<if test="shippingDateTo != null and shippingDateTo != ''">
|
|
AND EXISTS (
|
|
SELECT 1 FROM sales_registration SR
|
|
WHERE T.PROJECT_NO = SR.project_no
|
|
AND SR.shipping_date IS NOT NULL
|
|
AND TO_DATE(TO_CHAR(SR.shipping_date, 'YYYY-MM-DD'), 'YYYY-MM-DD') <![CDATA[<=]]> TO_DATE(#{shippingDateTo}, 'YYYY-MM-DD')
|
|
)
|
|
</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>
|
|
<if test="salesStatus != null and salesStatus != ''">
|
|
<choose>
|
|
<when test="salesStatus == 'NOT_CLOSED'">
|
|
AND (T.SALES_STATUS IS NULL OR T.SALES_STATUS = '' OR T.SALES_STATUS != '완료')
|
|
</when>
|
|
<otherwise>
|
|
AND T.SALES_STATUS = #{salesStatus}
|
|
</otherwise>
|
|
</choose>
|
|
</if>
|
|
<!-- 매출마감 기간 검색 -->
|
|
<if test="salesDeadlineFrom != null and salesDeadlineFrom != ''">
|
|
AND T.SALES_DEADLINE_DATE IS NOT NULL
|
|
AND TO_DATE(T.SALES_DEADLINE_DATE, 'YYYY-MM-DD') <![CDATA[>=]]> TO_DATE(#{salesDeadlineFrom}, 'YYYY-MM-DD')
|
|
</if>
|
|
<if test="salesDeadlineTo != null and salesDeadlineTo != ''">
|
|
AND T.SALES_DEADLINE_DATE IS NOT NULL
|
|
AND TO_DATE(T.SALES_DEADLINE_DATE, 'YYYY-MM-DD') <![CDATA[<=]]> TO_DATE(#{salesDeadlineTo}, 'YYYY-MM-DD')
|
|
</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>
|
|
|
|
<!--
|
|
/**
|
|
* 판매 등록 저장 (sales_registration 테이블 사용)
|
|
* INSERT 또는 UPDATE (ON CONFLICT로 중복 방지)
|
|
* @since 2025.10.22
|
|
* @author johngreen
|
|
* @version 1.1
|
|
**/
|
|
-->
|
|
<insert id="insertSaleRegistration" parameterType="map">
|
|
/* salesNcollectMgmt.insertSaleRegistration - sales_registration에 판매 데이터 저장 */
|
|
INSERT INTO sales_registration (
|
|
project_no,
|
|
shipping_order_status,
|
|
serial_no,
|
|
sales_quantity,
|
|
sales_unit_price,
|
|
sales_supply_price,
|
|
sales_vat,
|
|
sales_total_amount,
|
|
sales_currency,
|
|
sales_exchange_rate,
|
|
shipping_date,
|
|
shipping_method,
|
|
manager_user_id,
|
|
incoterms,
|
|
reg_user_id
|
|
) VALUES (
|
|
#{orderNo},
|
|
<choose>
|
|
<when test="shippingOrderStatus != null and shippingOrderStatus != ''">
|
|
#{shippingOrderStatus},
|
|
</when>
|
|
<otherwise>
|
|
'',
|
|
</otherwise>
|
|
</choose>
|
|
#{serialNo},
|
|
#{salesQuantity}::integer,
|
|
#{salesUnitPrice}::numeric,
|
|
#{salesSupplyPrice}::numeric,
|
|
#{salesVat}::numeric,
|
|
#{salesTotalAmount}::numeric,
|
|
#{salesCurrency},
|
|
#{salesExchangeRate}::numeric,
|
|
<choose>
|
|
<when test="shippingDate != null and shippingDate != ''">
|
|
TO_DATE(#{shippingDate}, 'YYYY-MM-DD'),
|
|
</when>
|
|
<otherwise>
|
|
NULL,
|
|
</otherwise>
|
|
</choose>
|
|
#{shippingMethod},
|
|
#{manager},
|
|
#{incoterms},
|
|
#{cretEmpNo}
|
|
)
|
|
</insert>
|
|
|
|
<!--
|
|
/**
|
|
* 판매 정보 조회 - 판매등록 팝업에서 사용
|
|
* PROJECT_NO 또는 SALE_NO로 조회
|
|
* @since 2025.10.22
|
|
* @author johngreen
|
|
* @version 1.0
|
|
**/
|
|
-->
|
|
<select id="getSaleInfo" parameterType="map" resultType="map">
|
|
/* salesNcollectMgmt.getSaleInfo - 판매등록 팝업용 프로젝트 정보 조회 (sales_registration 테이블 사용) */
|
|
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건" 형식)
|
|
(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 AND UPPER(CIS.STATUS) = 'ACTIVE'
|
|
WHERE CI.CONTRACT_OBJID = T.CONTRACT_OBJID
|
|
AND CI.PART_OBJID = T.PART_OBJID
|
|
AND CI.STATUS = 'ACTIVE'
|
|
AND CIS.SERIAL_NO IS NOT NULL) AS SERIAL_NO,
|
|
COALESCE(T.QUANTITY::numeric, 0) AS ORDER_QUANTITY,
|
|
-- 요청납기: CONTRACT_ITEM 우선, 없으면 PROJECT_MGMT, 없으면 CONTRACT_MGMT
|
|
COALESCE(
|
|
(SELECT CI.DUE_DATE
|
|
FROM CONTRACT_ITEM CI
|
|
WHERE CI.CONTRACT_OBJID = T.CONTRACT_OBJID
|
|
AND CI.PART_OBJID = T.PART_OBJID
|
|
AND CI.STATUS = 'ACTIVE'),
|
|
T.DUE_DATE,
|
|
(SELECT CM.due_date FROM CONTRACT_MGMT CM WHERE CM.OBJID = T.CONTRACT_OBJID)
|
|
) AS REQUEST_DATE,
|
|
-- 고객요청사항: CONTRACT_ITEM에서만 가져옴 (견적관리와 완전히 동일)
|
|
(SELECT CI.CUSTOMER_REQUEST
|
|
FROM CONTRACT_ITEM CI
|
|
WHERE CI.CONTRACT_OBJID = T.CONTRACT_OBJID
|
|
AND CI.PART_OBJID = T.PART_OBJID
|
|
AND CI.STATUS = 'ACTIVE') AS CUSTOMER_REQUEST,
|
|
CODE_NAME(T.CONTRACT_RESULT) AS ORDER_STATUS,
|
|
T.PO_NO,
|
|
COALESCE(T.CONTRACT_DATE, (SELECT CM.order_date FROM CONTRACT_MGMT CM WHERE CM.OBJID = T.CONTRACT_OBJID)) AS ORDER_DATE,
|
|
CASE WHEN EXISTS(
|
|
SELECT 1 FROM ATTACH_FILE_INFO
|
|
WHERE TARGET_OBJID = T.CONTRACT_OBJID
|
|
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,
|
|
-- 판매 관련 필드들 (sales_registration 테이블에서 가져오기)
|
|
SR.sale_no AS SALE_NO,
|
|
COALESCE(SR.shipping_order_status, '') AS SHIPPING_ORDER_STATUS,
|
|
|
|
-- 주문수량 (PROJECT_MGMT에서 가져오기) - 잔량 계산용
|
|
COALESCE(T.QUANTITY::NUMERIC, 0) AS ORDER_QUANTITY,
|
|
|
|
-- 판매수량 (sales_registration에서 가져오기) - 이미 판매한 수량
|
|
COALESCE(SR.sales_quantity, 0) AS SALES_QUANTITY,
|
|
COALESCE(SR.sales_unit_price, 0) AS SALES_UNIT_PRICE,
|
|
COALESCE(SR.sales_supply_price, 0) AS SALES_SUPPLY_PRICE,
|
|
COALESCE(SR.sales_vat, 0) AS SALES_VAT,
|
|
COALESCE(SR.sales_total_amount, 0) AS SALES_TOTAL_AMOUNT,
|
|
COALESCE(SR.sales_total_amount, 0) AS SALES_TOTAL_AMOUNT_KRW,
|
|
COALESCE(NULLIF(SR.sales_currency, ''), CM.CONTRACT_CURRENCY) AS SALES_CURRENCY,
|
|
CODE_NAME(COALESCE(NULLIF(SR.sales_currency, ''), CM.CONTRACT_CURRENCY)) AS SALES_CURRENCY_NAME,
|
|
COALESCE(NULLIF(SR.sales_exchange_rate, 0), NULLIF(CM.EXCHANGE_RATE, '')::numeric, 0) AS SALES_EXCHANGE_RATE,
|
|
COALESCE(TO_CHAR(SR.shipping_date, 'YYYY-MM-DD'), '') AS SHIPPING_DATE,
|
|
COALESCE(SR.shipping_method, '') AS SHIPPING_METHOD,
|
|
COALESCE(SR.manager_user_id, T.PM_USER_ID) AS MANAGER,
|
|
COALESCE(SR.incoterms, '') AS INCOTERMS
|
|
FROM PROJECT_MGMT AS T
|
|
LEFT JOIN sales_registration SR ON T.PROJECT_NO = SR.project_no
|
|
<if test="saleNo != null and saleNo != ''">
|
|
AND SR.sale_no = #{saleNo}::integer
|
|
</if>
|
|
LEFT JOIN CONTRACT_MGMT CM ON CM.OBJID::VARCHAR = T.CONTRACT_OBJID
|
|
WHERE T.PROJECT_NO = #{orderNo}
|
|
</select>
|
|
|
|
<!--
|
|
/**
|
|
* 주문서 관리에서 수주 데이터 조회 (판매등록용)
|
|
* CONTRACT_ITEM 테이블에서 수주 정보를 가져와 판매등록 폼에 자동 채우기
|
|
* @since 2025.11.10
|
|
* @author assistant
|
|
* @version 1.0
|
|
**/
|
|
-->
|
|
<select id="getOrderDataForSale" parameterType="map" resultType="map">
|
|
/* salesNcollectMgmt.getOrderDataForSale - 주문서 관리에서 판매등록용 수주 데이터 조회 */
|
|
SELECT
|
|
-- 기본 정보
|
|
CM.CONTRACT_NO AS ORDER_NO,
|
|
CM.OBJID AS CONTRACT_OBJID,
|
|
|
|
-- 수주 금액 정보 (CONTRACT_ITEM 테이블에서 합산) - VARCHAR 타입이므로 NUMERIC으로 캐스팅
|
|
COALESCE(SUM(CI.ORDER_QUANTITY::NUMERIC), 0) AS SALES_QUANTITY,
|
|
COALESCE(ROUND(AVG(CI.ORDER_UNIT_PRICE::NUMERIC), 2), 0) AS SALES_UNIT_PRICE,
|
|
COALESCE(SUM(CI.ORDER_SUPPLY_PRICE::NUMERIC), 0) AS SALES_SUPPLY_PRICE,
|
|
COALESCE(SUM(CI.ORDER_VAT::NUMERIC), 0) AS SALES_VAT,
|
|
COALESCE(SUM(CI.ORDER_TOTAL_AMOUNT::NUMERIC), 0) AS SALES_TOTAL_AMOUNT,
|
|
|
|
-- 환종 정보
|
|
CM.CONTRACT_CURRENCY AS SALES_CURRENCY,
|
|
CODE_NAME(CM.CONTRACT_CURRENCY) AS SALES_CURRENCY_NAME,
|
|
COALESCE(CM.EXCHANGE_RATE::NUMERIC, 0) AS SALES_EXCHANGE_RATE,
|
|
|
|
-- 수주 날짜 - VARCHAR 타입이므로 그대로 사용
|
|
CM.ORDER_DATE AS SHIPPING_DATE,
|
|
|
|
-- 담당자
|
|
CM.PM_USER_ID AS MANAGER
|
|
|
|
FROM CONTRACT_MGMT CM
|
|
LEFT JOIN CONTRACT_ITEM CI ON CM.OBJID::VARCHAR = CI.CONTRACT_OBJID AND UPPER(CI.STATUS) = 'ACTIVE'
|
|
WHERE CM.OBJID = #{contractObjId}::NUMERIC
|
|
GROUP BY
|
|
CM.CONTRACT_NO,
|
|
CM.OBJID,
|
|
CM.CONTRACT_CURRENCY,
|
|
CM.EXCHANGE_RATE,
|
|
CM.ORDER_DATE,
|
|
CM.PM_USER_ID
|
|
</select>
|
|
|
|
<!--
|
|
/**
|
|
* orderNo(PROJECT_NO)로 수주 데이터 조회 (판매등록용)
|
|
* PROJECT_MGMT에서 CONTRACT_OBJID를 찾아서 수주 데이터 조회
|
|
* @since 2025.11.10
|
|
* @author assistant
|
|
* @version 1.0
|
|
**/
|
|
-->
|
|
<select id="getOrderDataByOrderNo" parameterType="map" resultType="map">
|
|
/* salesNcollectMgmt.getOrderDataByOrderNo - orderNo로 판매등록용 수주 데이터 조회 */
|
|
SELECT
|
|
-- 기본 정보
|
|
CM.CONTRACT_NO AS ORDER_NO,
|
|
CM.OBJID AS CONTRACT_OBJID,
|
|
|
|
-- 수주 수량 정보 (PROJECT_MGMT에서 직접 가져오기)
|
|
COALESCE(PM.QUANTITY::NUMERIC, 0) AS SALES_QUANTITY,
|
|
|
|
-- 수주 금액 정보 (CONTRACT_ITEM 테이블에서 합산) - VARCHAR 타입이므로 NULLIF로 빈 문자열 제거 후 NUMERIC 캐스팅
|
|
COALESCE(ROUND(AVG(NULLIF(CI.ORDER_UNIT_PRICE, '')::NUMERIC), 2), 0) AS SALES_UNIT_PRICE,
|
|
COALESCE(SUM(NULLIF(CI.ORDER_SUPPLY_PRICE, '')::NUMERIC), 0) AS SALES_SUPPLY_PRICE,
|
|
COALESCE(SUM(NULLIF(CI.ORDER_VAT, '')::NUMERIC), 0) AS SALES_VAT,
|
|
COALESCE(SUM(NULLIF(CI.ORDER_TOTAL_AMOUNT, '')::NUMERIC), 0) AS SALES_TOTAL_AMOUNT,
|
|
|
|
-- 환종 정보
|
|
CM.CONTRACT_CURRENCY AS SALES_CURRENCY,
|
|
CODE_NAME(CM.CONTRACT_CURRENCY) AS SALES_CURRENCY_NAME,
|
|
COALESCE(NULLIF(CM.EXCHANGE_RATE, '')::NUMERIC, 0) AS SALES_EXCHANGE_RATE,
|
|
|
|
-- 수주 날짜 - VARCHAR 타입이므로 그대로 사용
|
|
CM.ORDER_DATE AS SHIPPING_DATE,
|
|
|
|
-- 담당자
|
|
CM.PM_USER_ID AS MANAGER
|
|
|
|
FROM PROJECT_MGMT PM
|
|
INNER JOIN CONTRACT_MGMT CM ON PM.CONTRACT_OBJID = CM.OBJID
|
|
LEFT JOIN CONTRACT_ITEM CI ON CM.OBJID::VARCHAR = CI.CONTRACT_OBJID AND UPPER(CI.STATUS) = 'ACTIVE'
|
|
WHERE PM.PROJECT_NO = #{orderNo}
|
|
GROUP BY
|
|
CM.CONTRACT_NO,
|
|
CM.OBJID,
|
|
CM.CONTRACT_CURRENCY,
|
|
CM.EXCHANGE_RATE,
|
|
CM.ORDER_DATE,
|
|
CM.PM_USER_ID,
|
|
PM.QUANTITY
|
|
</select>
|
|
|
|
<!--
|
|
/**
|
|
* 매출마감 처리
|
|
* @since 2025.11.10
|
|
* @author system
|
|
* @version 1.0
|
|
**/
|
|
-->
|
|
<update id="salesDeadlineConfirm" parameterType="map">
|
|
/* salesNcollectMgmt.salesDeadlineConfirm - PROJECT_MGMT의 SALES_STATUS를 '완료'로 업데이트 및 매출마감일 저장 */
|
|
UPDATE PROJECT_MGMT
|
|
SET
|
|
SALES_STATUS = '완료',
|
|
SALES_DEADLINE_DATE = #{deadlineDate}
|
|
WHERE OBJID::VARCHAR = #{OBJID}
|
|
</update>
|
|
|
|
<!-- 모든 분할 출하의 총 판매 수량 조회 -->
|
|
<select id="getTotalSalesQuantity" parameterType="map" resultType="map">
|
|
/* salesNcollectMgmt.getTotalSalesQuantity - project_no로 시작하는 모든 레코드의 판매 수량 합계 */
|
|
SELECT COALESCE(SUM(
|
|
CASE
|
|
WHEN sales_quantity IS NULL THEN 0
|
|
WHEN TRIM(CAST(sales_quantity AS TEXT)) = '' THEN 0
|
|
ELSE CAST(sales_quantity AS NUMERIC)
|
|
END
|
|
), 0) as total
|
|
FROM sales_registration
|
|
WHERE project_no LIKE #{orderNo} || '%'
|
|
</select>
|
|
|
|
<!-- shipment_log에서 총 출하 수량 조회 -->
|
|
<select id="getTotalShippedQuantity" parameterType="map" resultType="int">
|
|
/* salesNcollectMgmt.getTotalShippedQuantity - shipment_log의 split_quantity 합계 */
|
|
SELECT COALESCE(SUM(split_quantity), 0)
|
|
FROM shipment_log
|
|
WHERE target_objid = #{projectNo}
|
|
</select>
|
|
|
|
<!-- 프로젝트 기본 정보 조회 (CONTRACT_OBJID 포함) -->
|
|
<select id="getProjectInfo" parameterType="map" resultType="map">
|
|
/* salesNcollectMgmt.getProjectInfo - PROJECT_MGMT의 CONTRACT_OBJID 조회 (최신 1개) */
|
|
SELECT CONTRACT_OBJID
|
|
FROM PROJECT_MGMT
|
|
WHERE PROJECT_NO = #{orderNo}
|
|
ORDER BY REGDATE DESC
|
|
LIMIT 1
|
|
</select>
|
|
|
|
<!-- sales_registration 개수 조회 (분할 출하 순번용) -->
|
|
<select id="getSaleRegistrationCount" parameterType="map" resultType="map">
|
|
/* salesNcollectMgmt.getSaleRegistrationCount - project_no로 시작하는 레코드 개수 */
|
|
SELECT COUNT(*) as count
|
|
FROM sales_registration
|
|
WHERE project_no LIKE #{orderNo} || '%'
|
|
</select>
|
|
|
|
<!-- sales_registration DELETE (기존 데이터 삭제) -->
|
|
<delete id="deleteSaleRegistration" parameterType="map">
|
|
/* salesNcollectMgmt.deleteSaleRegistration - sales_registration 삭제 */
|
|
DELETE FROM sales_registration
|
|
WHERE project_no = #{orderNo}
|
|
</delete>
|
|
|
|
<!-- sales_registration UPDATE (기존 데이터 수정) -->
|
|
<update id="updateSaleRegistration" parameterType="map">
|
|
/* salesNcollectMgmt.updateSaleRegistration - sales_registration 업데이트 */
|
|
UPDATE sales_registration
|
|
SET
|
|
shipping_order_status = <choose>
|
|
<when test="shippingOrderStatus != null and shippingOrderStatus != ''">
|
|
#{shippingOrderStatus},
|
|
</when>
|
|
<otherwise>
|
|
'',
|
|
</otherwise>
|
|
</choose>
|
|
serial_no = #{serialNo},
|
|
sales_quantity = #{salesQuantity}::integer,
|
|
sales_unit_price = #{salesUnitPrice}::numeric,
|
|
sales_supply_price = #{salesSupplyPrice}::numeric,
|
|
sales_vat = #{salesVat}::numeric,
|
|
sales_total_amount = #{salesTotalAmount}::numeric,
|
|
sales_currency = #{salesCurrency},
|
|
sales_exchange_rate = #{salesExchangeRate}::numeric,
|
|
shipping_date = <choose>
|
|
<when test="shippingDate != null and shippingDate != ''">
|
|
TO_DATE(#{shippingDate}, 'YYYY-MM-DD'),
|
|
</when>
|
|
<otherwise>
|
|
NULL,
|
|
</otherwise>
|
|
</choose>
|
|
shipping_method = #{shippingMethod},
|
|
manager_user_id = #{manager},
|
|
incoterms = #{incoterms},
|
|
upd_date = NOW(),
|
|
upd_user_id = #{cretEmpNo}
|
|
WHERE project_no = #{orderNo}
|
|
</update>
|
|
|
|
<!-- ========================================
|
|
분할 출하 관련 쿼리 (shipment_log 테이블 활용)
|
|
======================================== -->
|
|
|
|
<!-- shipment_log의 split_quantity 합산 조회 -->
|
|
<select id="getShipmentLogTotal" parameterType="map" resultType="map">
|
|
/* salesNcollectMgmt.getShipmentLogTotal - shipment_log의 split_quantity 합산 */
|
|
SELECT COALESCE(SUM(split_quantity), 0) as total
|
|
FROM shipment_log SL
|
|
INNER JOIN project_mgmt PM ON SL.target_objid = PM.OBJID::VARCHAR
|
|
WHERE PM.PROJECT_NO = #{orderNo}
|
|
</select>
|
|
|
|
<!-- shipment_log에 분할 출하 기록 저장 -->
|
|
<insert id="insertShipmentLog" parameterType="map">
|
|
/* salesNcollectMgmt.insertShipmentLog - 분할 출하 기록 저장 */
|
|
INSERT INTO shipment_log (
|
|
target_objid, log_type, log_message, split_quantity, original_quantity,
|
|
remaining_quantity, shipping_status, shipping_date, shipping_method,
|
|
sales_unit_price, sales_supply_price, sales_vat, sales_total_amount,
|
|
sales_currency, sales_exchange_rate, manager_user_id, incoterms,
|
|
serial_no, parent_sale_no, reg_user_id
|
|
) VALUES (
|
|
#{targetObjid}, 'SPLIT_SHIPMENT', '분할 출하',
|
|
#{salesQuantity}::integer, #{originalQuantity}::integer, #{remainingQuantity}::integer,
|
|
#{shippingOrderStatus},
|
|
<choose>
|
|
<when test="shippingDate != null and shippingDate != ''">
|
|
TO_DATE(#{shippingDate}, 'YYYY-MM-DD'),
|
|
</when>
|
|
<otherwise>NULL,</otherwise>
|
|
</choose>
|
|
#{shippingMethod}, #{salesUnitPrice}::numeric, #{salesSupplyPrice}::numeric,
|
|
#{salesVat}::numeric, #{salesTotalAmount}::numeric, #{salesCurrency},
|
|
#{salesExchangeRate}::numeric, #{managerUserId}, #{incoterms}, #{serialNo},
|
|
#{parentSaleNo}::integer, #{cretEmpNo}
|
|
)
|
|
</insert>
|
|
|
|
<!-- sales_registration의 수량을 shipment_log 합계로 업데이트 -->
|
|
<update id="updateSalesQuantityFromShipmentLog" parameterType="map">
|
|
/* salesNcollectMgmt.updateSalesQuantityFromShipmentLog - shipment_log 합계로 sales_quantity 업데이트 */
|
|
UPDATE sales_registration
|
|
SET sales_quantity = (
|
|
SELECT COALESCE(SUM(split_quantity), 0)
|
|
FROM shipment_log
|
|
WHERE target_objid = #{projectNo}
|
|
),
|
|
sales_supply_price = (
|
|
SELECT COALESCE(SUM(sales_supply_price), 0)
|
|
FROM shipment_log
|
|
WHERE target_objid = #{projectNo}
|
|
),
|
|
sales_vat = (
|
|
SELECT COALESCE(SUM(sales_vat), 0)
|
|
FROM shipment_log
|
|
WHERE target_objid = #{projectNo}
|
|
),
|
|
sales_total_amount = (
|
|
SELECT COALESCE(SUM(sales_total_amount), 0)
|
|
FROM shipment_log
|
|
WHERE target_objid = #{projectNo}
|
|
)
|
|
WHERE sale_no = #{saleNo}
|
|
</update>
|
|
|
|
<!-- PROJECT_MGMT의 OBJID 조회 (shipment_log의 target_objid로 사용) -->
|
|
<select id="getProjectObjid" parameterType="map" resultType="map">
|
|
/* salesNcollectMgmt.getProjectObjid - PROJECT_MGMT의 OBJID 조회 */
|
|
SELECT OBJID FROM PROJECT_MGMT WHERE PROJECT_NO = #{orderNo}
|
|
</select>
|
|
|
|
<!-- 출하일 상세 내역 조회 (모든 분할 출하 포함) -->
|
|
<select id="getShippingDetailList" parameterType="map" resultType="map">
|
|
/* salesNcollectMgmt.getShippingDetailList - shipment_log에서 모든 분할 출하 조회 */
|
|
SELECT
|
|
COALESCE(TO_CHAR(SL.shipping_date, 'YYYY-MM-DD'), '미등록') AS shipping_date,
|
|
COALESCE(SL.split_quantity, 0) AS shipping_quantity,
|
|
COALESCE(SL.shipping_status, '미등록') AS shipping_order_status,
|
|
COALESCE(SL.serial_no, '-') AS serial_no,
|
|
SL.target_objid AS project_no,
|
|
'분할 출하 ' || SL.log_id AS source,
|
|
TO_CHAR(SL.reg_date, 'YYYY-MM-DD HH24:MI:SS') AS reg_date
|
|
FROM shipment_log SL
|
|
WHERE SL.target_objid = #{projectNo}
|
|
ORDER BY SL.shipping_date DESC, SL.log_id DESC
|
|
</select>
|
|
|
|
<!-- 거래명세서 - 고객 정보 조회 -->
|
|
<select id="getCustomerInfoByProjectNo" parameterType="map" resultType="map">
|
|
/* salesNcollectMgmt.getCustomerInfoByProjectNo - 프로젝트 번호로 고객 정보 조회 */
|
|
SELECT
|
|
SM.SUPPLY_NAME AS CUSTOMER_NAME,
|
|
SM.BUSINESS_NO AS CUSTOMER_REG_NO,
|
|
SM.ADDRESS AS CUSTOMER_ADDRESS,
|
|
SM.BUSINESS_TYPE AS CUSTOMER_BUSINESS,
|
|
SM.BUSINESS_ITEM AS CUSTOMER_TYPE,
|
|
SM.TEL_NO AS CUSTOMER_CONTACT
|
|
FROM PROJECT_MGMT PM
|
|
INNER JOIN SUPPLY_MNG SM ON PM.CUSTOMER_OBJID::NUMERIC = SM.OBJID
|
|
WHERE PM.PROJECT_NO = #{projectNo}
|
|
</select>
|
|
|
|
<!-- 거래명세서 - 품목 정보 조회 -->
|
|
<select id="getTransactionStatementItem" parameterType="map" resultType="map">
|
|
/* salesNcollectMgmt.getTransactionStatementItem - 프로젝트 번호로 품목 정보 조회 */
|
|
SELECT
|
|
PM.PART_NAME AS productName,
|
|
PM.PART_NO AS spec,
|
|
COALESCE(SR.sales_quantity, PM.QUANTITY) AS quantity,
|
|
COALESCE(SR.sales_unit_price, 0) AS unitPrice,
|
|
COALESCE(SR.sales_supply_price, 0) AS supplyPrice,
|
|
COALESCE(SR.sales_vat, 0) AS vat
|
|
FROM PROJECT_MGMT PM
|
|
LEFT JOIN sales_registration SR ON PM.PROJECT_NO = SR.project_no
|
|
WHERE PM.PROJECT_NO = #{projectNo}
|
|
</select>
|
|
|
|
<!-- 거래명세서 저장 - NSWOS100_TBL 테이블 사용 -->
|
|
<insert id="saveTransactionStatement" parameterType="map">
|
|
/* salesNcollectMgmt.saveTransactionStatement - 거래명세서 저장 */
|
|
INSERT INTO NSWOS100_TBL (
|
|
SuVndCd /* 업체코드 */
|
|
,IssueDt /* 작성일자 */
|
|
,IssueNo /* 거래명세서번호 */
|
|
,IsNo /* 순번 */
|
|
,ProdCd /* 기종코드 */
|
|
,OdOrderNo /* 발주번호 */
|
|
,ImItemId /* 품번 */
|
|
,RmDueDt /* 납기일자 */
|
|
,RmOrderQty /* 발주수량 */
|
|
,RmRcptQty /* 입고처리수량 */
|
|
,RmRemQty /* 잔량 */
|
|
,IsDt /* 납기일자 */
|
|
,IsQty /* 납품수량 */
|
|
,IsPrice /* 납품단가 */
|
|
,IsAmount /* 납품금액 */
|
|
) VALUES (
|
|
#{suVndCd} /* 업체코드 */
|
|
,#{issueDt} /* 작성일자 */
|
|
,#{issueNo}::integer /* 거래명세서번호 */
|
|
,#{isNo}::integer /* 순번 */
|
|
,COALESCE(#{prodCd}, '') /* 기종코드 */
|
|
,COALESCE(#{odOrderNo}, '') /* 발주번호 */
|
|
,COALESCE(#{imItemId}, '') /* 품번 */
|
|
,COALESCE(#{rmDueDt}, '') /* 납기일자 */
|
|
,COALESCE(#{rmOrderQty}, 0)::integer /* 발주수량 */
|
|
,COALESCE(#{rmRcptQty}, 0)::integer /* 입고처리수량 */
|
|
,COALESCE(#{rmRemQty}, 0)::integer /* 잔량 */
|
|
,COALESCE(#{isDt}, '') /* 납기일자 */
|
|
,COALESCE(#{isQty}, 0)::integer /* 납품수량 */
|
|
,COALESCE(#{isPrice}, 0)::numeric /* 납품단가 */
|
|
,COALESCE(#{isAmount}, 0)::numeric /* 납품금액 */
|
|
) ON CONFLICT (SuVndCd, IssueDt, IssueNo, IsNo) DO
|
|
UPDATE SET
|
|
ProdCd = COALESCE(#{prodCd}, '')
|
|
,OdOrderNo = COALESCE(#{odOrderNo}, '')
|
|
,ImItemId = COALESCE(#{imItemId}, '')
|
|
,RmDueDt = COALESCE(#{rmDueDt}, '')
|
|
,RmOrderQty = COALESCE(#{rmOrderQty}, 0)::integer
|
|
,RmRcptQty = COALESCE(#{rmRcptQty}, 0)::integer
|
|
,RmRemQty = COALESCE(#{rmRemQty}, 0)::integer
|
|
,IsDt = COALESCE(#{isDt}, '')
|
|
,IsQty = COALESCE(#{isQty}, 0)::integer
|
|
,IsPrice = COALESCE(#{isPrice}, 0)::numeric
|
|
,IsAmount = COALESCE(#{isAmount}, 0)::numeric
|
|
</insert>
|
|
|
|
<!-- 거래명세서 번호 생성 -->
|
|
<select id="getNextTransactionStatementNo" parameterType="map" resultType="int">
|
|
/* salesNcollectMgmt.getNextTransactionStatementNo - 거래명세서 번호 생성 */
|
|
SELECT COALESCE(MAX(IssueNo), 0) + 1 AS nextNo
|
|
FROM NSWOS100_TBL
|
|
WHERE SuVndCd = #{suVndCd}
|
|
AND IssueDt = #{issueDt}
|
|
</select>
|
|
|
|
</mapper>
|
|
|