1382 lines
51 KiB
XML
1382 lines
51 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,
|
|
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: CONTRACT_ITEM_SERIAL에서만 조회 (품목별로 정확하게 매칭)
|
|
(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 CI.PART_OBJID = T.PART_OBJID
|
|
AND CI.STATUS = 'ACTIVE'
|
|
AND UPPER(CIS.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,
|
|
COALESCE(T.CUSTOMER_PROJECT_NAME, (SELECT CM.customer_request FROM CONTRACT_MGMT CM WHERE CM.OBJID = T.CONTRACT_OBJID)) 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 테이블에서 한 번에 가져오기)
|
|
COALESCE(SR.shipping_order_status, '') AS SHIPPING_ORDER_STATUS,
|
|
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(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(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
|
|
<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>
|
|
<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="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>
|
|
<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>
|
|
|
|
<!--
|
|
/**
|
|
* 판매 등록 저장 (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}
|
|
)
|
|
ON CONFLICT (project_no)
|
|
DO UPDATE SET
|
|
shipping_order_status = EXCLUDED.shipping_order_status,
|
|
serial_no = EXCLUDED.serial_no,
|
|
sales_quantity = EXCLUDED.sales_quantity,
|
|
sales_unit_price = EXCLUDED.sales_unit_price,
|
|
sales_supply_price = EXCLUDED.sales_supply_price,
|
|
sales_vat = EXCLUDED.sales_vat,
|
|
sales_total_amount = EXCLUDED.sales_total_amount,
|
|
sales_currency = EXCLUDED.sales_currency,
|
|
sales_exchange_rate = EXCLUDED.sales_exchange_rate,
|
|
shipping_date = EXCLUDED.shipping_date,
|
|
shipping_method = EXCLUDED.shipping_method,
|
|
manager_user_id = EXCLUDED.manager_user_id,
|
|
incoterms = EXCLUDED.incoterms,
|
|
upd_date = NOW(),
|
|
upd_user_id = EXCLUDED.reg_user_id
|
|
</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 정보 (CONTRACT_ITEM_SERIAL에서만 조회, 품목별로 정확하게 매칭)
|
|
(SELECT STRING_AGG(CIS.SERIAL_NO, ',' ORDER BY CIS.SEQ)
|
|
FROM CONTRACT_ITEM CI
|
|
LEFT 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.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,
|
|
COALESCE(T.CUSTOMER_PROJECT_NAME, (SELECT CM.customer_request FROM CONTRACT_MGMT CM WHERE CM.OBJID = T.CONTRACT_OBJID)) 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 테이블에서 가져오기)
|
|
COALESCE(SR.shipping_order_status, '') AS SHIPPING_ORDER_STATUS,
|
|
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), 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
|
|
LEFT JOIN CONTRACT_MGMT CM ON CM.OBJID::VARCHAR = T.CONTRACT_OBJID
|
|
WHERE T.PROJECT_NO = #{orderNo}
|
|
</select>
|
|
|
|
</mapper>
|
|
|