1
|
|
2
|
ALTER PROC [dbo].[TR_REQ_GOOD_BYCONTRACT]
|
3
|
@p_REF_ID VARCHAR(150)
|
4
|
AS
|
5
|
BEGIN
|
6
|
DECLARE @l_LST_REF_ID TABLE (
|
7
|
[REF_ID] VARCHAR(15))
|
8
|
--LAY THONG TIN SO SERI
|
9
|
--INSERT INTO @l_LSTSERI SELECT ROW_NUMBER() OVER (ORDER BY VALUE), VALUE FROM WSISPLIT(@l_ASSET_SERIAL_NO,',')
|
10
|
INSERT INTO @l_LST_REF_ID SELECT VALUE FROM WSISPLIT(@p_REF_ID,',')
|
11
|
DECLARE @PYC_MS_ID VARCHAR(15)
|
12
|
IF(EXISTS(SELECT * FROM TR_CONTRACT WHERE (CONTRACT_ID =@p_REF_ID OR CONTRACT_ID IN (SELECT * FROM @l_LST_REF_ID))))
|
13
|
BEGIN
|
14
|
SET @PYC_MS_ID = (SELECT REQ_DOC_ID FROM TR_CONTRACT WHERE CONTRACT_ID =@p_REF_ID)
|
15
|
--- BAT DAU LAY DU LIEU
|
16
|
SELECT PM.PLAN_ID,PM.PLAN_CODE,PLDT.TRADE_ID,DT.GOODS_ID,CG.GD_CODE,CG.GD_NAME,PM.BRANCH_ID,PM.DEPT_ID,
|
17
|
ISNULL(PLDT.QUANTITY,0) AS QUANTITY,
|
18
|
ISNULL(DT.QUANTITY_EXE,0) AS QUANTITY_EXE,
|
19
|
ISNULL(DT.QUANTITY_ETM,0) AS QUANTITY_ETM,
|
20
|
ISNULL(DT.QUANTITY,0)- ISNULL(DT.QUANTITY_EXE,0) AS QUANTITY_REMAIN,
|
21
|
ISNULL(DT.QUANTITY,0)-ISNULL(DT.QUANTITY_ETM,0) AS QUANTITY_REMAIN_ETM,
|
22
|
--ISNULL( PLDT.AMT_APP,0)+ ISNULL( DT.AMT_RECEIVE_TF,0) AS AMT_APP,
|
23
|
ISNULL( PLDT.AMT_APP,0) AS AMT_APP,
|
24
|
ISNULL( X.AMT_EXE,0) AS AMT_EXE,
|
25
|
ISNULL( DT.AMT_ETM,0) AS AMT_ETM,
|
26
|
--ISNULL(DT.AMT_APP,0) + ISNULL( DT.AMT_RECEIVE_TF,0)- ISNULL( DT.AMT_TF,0)- ISNULL(DT.AMT_EXE,0) AS AMT_REMAIN,
|
27
|
ISNULL(DT.AMT_APP,0) + ISNULL( DT.AMT_RECEIVE_TF,0)- ISNULL( DT.AMT_TF,0)-ISNULL(DT.AMT_ETM,0) AS AMT_REMAIN_ETM,
|
28
|
ISNULL(PLDT.AMT_APP,0) - ISNULL(X.AMT_EXE,0) AS AMT_REMAIN, @p_REF_ID AS REF_ID
|
29
|
FROM
|
30
|
(
|
31
|
SELECT B.TRADE_ID,B.GOODS_ID,A.REQ_DOC_ID,CT.CONTRACT_ID, SUM(CT.QUANTITY) AS QUANTITY,SUM( CT.QUANTITY * CT.PRICE) AS AMT_APP FROM TR_REQUEST_DOC_DT A
|
32
|
LEFT JOIN PL_REQUEST_DOC_DT B ON A.PL_REQDT_ID=B.REQDT_ID
|
33
|
LEFT JOIN TR_CONTRACT_DT CT ON A.HANGHOA_ID = CT.GOODS_ID
|
34
|
GROUP BY B.TRADE_ID,B.GOODS_ID,A.REQ_DOC_ID,CT.CONTRACT_ID
|
35
|
) PLDT
|
36
|
LEFT JOIN
|
37
|
(
|
38
|
SELECT A.TRADE_ID, SUM(A.AMT_EXE) AS AMT_EXE FROM TR_REQ_PAY_BUDGET A
|
39
|
LEFT JOIN TR_REQ_PAYMENT B ON A.REQ_PAY_ID = B.REQ_PAY_ID
|
40
|
--LEFT JOIN TR_REQ_PAY_SCHEDULE C ON B.REQ_PAY_ID = C.REQ_PAY_ID
|
41
|
WHERE B.AUTH_STATUS_KT='A'
|
42
|
AND A.REQ_PAY_ID IN (SELECT REQ_PAY_ID FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@p_REF_ID)
|
43
|
GROUP BY TRADE_ID
|
44
|
)
|
45
|
X ON PLDT.TRADE_ID = X.TRADE_ID
|
46
|
INNER JOIN PL_TRADEDETAIL DT ON DT.TRADE_ID=PLDT.TRADE_ID
|
47
|
INNER JOIN PL_MASTER PM ON DT.PLAN_ID= PM.PLAN_ID
|
48
|
INNER JOIN CM_GOODS CG ON PLDT.GOODS_ID = CG.GD_ID
|
49
|
WHERE PLDT.REQ_DOC_ID =@PYC_MS_ID AND PLDT.CONTRACT_ID =@p_REF_ID
|
50
|
END
|
51
|
ELSE IF(EXISTS(SELECT * FROM TR_PO_MASTER WHERE PO_ID =@p_REF_ID))
|
52
|
BEGIN
|
53
|
--SET @PYC_MS_ID = (SELECT REQ_DOC_ID FROM TR_PO_MASTER WHERE PO_ID =@p_REF_ID)
|
54
|
-- BAT DAU LAY DU LIEU
|
55
|
SELECT PM.PLAN_ID,PM.PLAN_CODE,PLDT.TRADE_ID,DT.GOODS_ID,CG.GD_CODE,CG.GD_NAME,PM.BRANCH_ID,PM.DEPT_ID,
|
56
|
ISNULL(PLDT.QUANTITY,0) AS QUANTITY,
|
57
|
ISNULL(DT.QUANTITY_EXE,0) AS QUANTITY_EXE,
|
58
|
ISNULL(DT.QUANTITY_ETM,0) AS QUANTITY_ETM,
|
59
|
ISNULL(DT.QUANTITY,0)- ISNULL(DT.QUANTITY_EXE,0) AS QUANTITY_REMAIN,
|
60
|
ISNULL(DT.QUANTITY,0)-ISNULL(DT.QUANTITY_ETM,0) AS QUANTITY_REMAIN_ETM,
|
61
|
--ISNULL( PLDT.AMT_APP,0) + ISNULL( DT.AMT_RECEIVE_TF,0) AS AMT_APP,
|
62
|
ISNULL( PLDT.AMT_APP,0) AS AMT_APP,
|
63
|
ISNULL( X.AMT_EXE,0) AS AMT_EXE,
|
64
|
ISNULL( DT.AMT_ETM,0) AS AMT_ETM,
|
65
|
--ISNULL(DT.AMT_APP,0) + ISNULL( DT.AMT_RECEIVE_TF,0)- ISNULL( DT.AMT_TF,0)- ISNULL(DT.AMT_EXE,0) AS AMT_REMAIN,
|
66
|
ISNULL(DT.AMT_APP,0) + ISNULL( DT.AMT_RECEIVE_TF,0)- ISNULL( DT.AMT_TF,0)-ISNULL(DT.AMT_ETM,0) AS AMT_REMAIN_ETM,
|
67
|
--ISNULL(PLDT.AMT_APP,0) - ISNULL(X.AMT_EXE,0) AS AMT_REMAIN
|
68
|
ISNULL(PLDT.AMT_APP,0) - ISNULL(X.AMT_EXE,0) AS AMT_REMAIN , @p_REF_ID AS REF_ID
|
69
|
FROM
|
70
|
(
|
71
|
SELECT DISTINCT B.TRADE_ID,B.GOODS_ID,A.REQ_DOC_ID,CT.PO_ID, SUM(CT.QUANTITY) AS QUANTITY, SUM( CT.QUANTITY * (CT.PRICE+CT.PRICE_VAT) * ISNULL(RATE,1)) AS AMT_APP
|
72
|
FROM TR_REQUEST_DOC_DT A
|
73
|
LEFT JOIN PL_REQUEST_DOC_DT B ON A.PL_REQDT_ID=B.REQDT_ID
|
74
|
LEFT JOIN TR_PO_DETAIL CT ON A.HANGHOA_ID = CT.GOODS_ID
|
75
|
GROUP BY B.TRADE_ID,B.GOODS_ID,A.REQ_DOC_ID,CT.PO_ID,A.SUP_ID
|
76
|
|
77
|
) PLDT
|
78
|
LEFT JOIN
|
79
|
(
|
80
|
SELECT A.TRADE_ID, SUM(A.AMT_EXE) AS AMT_EXE FROM TR_REQ_PAY_BUDGET A
|
81
|
LEFT JOIN TR_REQ_PAYMENT B ON A.REQ_PAY_ID = B.REQ_PAY_ID
|
82
|
WHERE B.AUTH_STATUS_KT='A'
|
83
|
AND A.REQ_PAY_ID IN (SELECT REQ_PAY_ID FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@p_REF_ID)
|
84
|
GROUP BY TRADE_ID
|
85
|
)
|
86
|
X ON PLDT.TRADE_ID = X.TRADE_ID
|
87
|
INNER JOIN PL_TRADEDETAIL DT ON DT.TRADE_ID=PLDT.TRADE_ID
|
88
|
INNER JOIN PL_MASTER PM ON DT.PLAN_ID= PM.PLAN_ID
|
89
|
INNER JOIN CM_GOODS CG ON PLDT.GOODS_ID = CG.GD_ID
|
90
|
--WHERE PLDT.REQ_DOC_ID =@PYC_MS_ID AND PLDT.PO_ID =@p_REF_ID
|
91
|
WHERE PLDT.REQ_DOC_ID IN(SELECT REQ_DOC_ID FROM TR_PO_MASTER WHERE PO_ID IN (SELECT REF_ID FROM @l_LST_REF_ID)) AND PLDT.PO_ID IN (SELECT REF_ID FROM @l_LST_REF_ID)
|
92
|
END
|
93
|
ELSE IF(EXISTS(SELECT * FROM PL_REQUEST_DOC WHERE REQ_ID =@p_REF_ID ))
|
94
|
BEGIN
|
95
|
--SET @PYC_MS_ID = (SELECT REQ_DOC_ID FROM TR_PO_MASTER WHERE PO_ID =@p_REF_ID)
|
96
|
-- BAT DAU LAY DU LIEU
|
97
|
SELECT PM.PLAN_ID,PM.PLAN_CODE,PL_DT.TRADE_ID,DT.GOODS_ID,CG.GD_CODE,CG.GD_NAME,PM.BRANCH_ID,PM.DEPT_ID,
|
98
|
SUM(ISNULL(PL_DT.QUANTITY,0)) AS QUANTITY,
|
99
|
SUM(ISNULL(DT.QUANTITY_EXE,0)) AS QUANTITY_EXE,
|
100
|
SUM(ISNULL(DT.QUANTITY_ETM,0)) AS QUANTITY_ETM,
|
101
|
SUM(ISNULL(DT.QUANTITY,0)- ISNULL(DT.QUANTITY_EXE,0)) AS QUANTITY_REMAIN,
|
102
|
SUM(ISNULL(DT.QUANTITY,0)-ISNULL(DT.QUANTITY_ETM,0)) AS QUANTITY_REMAIN_ETM,
|
103
|
SUM(ISNULL( PL_DT.TOTAL_AMT,0)) AS AMT_APP,
|
104
|
SUM(ISNULL( X.AMT_EXE,0))/ISNULL(COUNT(*),1) AS AMT_EXE,
|
105
|
SUM(ISNULL( DT.AMT_ETM,0)) AS AMT_ETM,
|
106
|
--ISNULL(DT.AMT_APP,0) + ISNULL( DT.AMT_RECEIVE_TF,0)- ISNULL( DT.AMT_TF,0)- ISNULL(DT.AMT_EXE,0) AS AMT_REMAIN,
|
107
|
SUM(ISNULL(DT.AMT_APP,0) + ISNULL( DT.AMT_RECEIVE_TF,0)- ISNULL( DT.AMT_TF,0)-ISNULL(DT.AMT_ETM,0)) AS AMT_REMAIN_ETM,
|
108
|
--ISNULL(PLDT.AMT_APP,0) - ISNULL(X.AMT_EXE,0) AS AMT_REMAIN
|
109
|
SUM(ISNULL(PL_DT.TOTAL_AMT,0)) - SUM(ISNULL(X.AMT_EXE,0))/ISNULL(COUNT(*),1) AS AMT_REMAIN , @p_REF_ID AS REF_ID
|
110
|
FROM
|
111
|
PL_REQUEST_DOC_DT PL_DT
|
112
|
LEFT JOIN
|
113
|
(
|
114
|
SELECT A.TRADE_ID, SUM(A.AMT_EXE) AS AMT_EXE FROM TR_REQ_PAY_BUDGET A
|
115
|
LEFT JOIN TR_REQ_PAYMENT B ON A.REQ_PAY_ID = B.REQ_PAY_ID
|
116
|
WHERE B.AUTH_STATUS_KT='A'
|
117
|
AND A.REQ_PAY_ID IN (SELECT REQ_PAY_ID FROM TR_REQ_PAY_SERVICE WHERE EMP_ID =@p_REF_ID)
|
118
|
GROUP BY TRADE_ID
|
119
|
)
|
120
|
X ON PL_DT.TRADE_ID = X.TRADE_ID
|
121
|
INNER JOIN PL_TRADEDETAIL DT ON DT.TRADE_ID=PL_DT.TRADE_ID
|
122
|
INNER JOIN PL_MASTER PM ON DT.PLAN_ID= PM.PLAN_ID
|
123
|
INNER JOIN CM_GOODS CG ON PL_DT.GOODS_ID = CG.GD_ID
|
124
|
--
|
125
|
WHERE PL_DT.REQ_ID =@p_REF_ID
|
126
|
GROUP BY PM.PLAN_ID,PM.PLAN_CODE,PL_DT.TRADE_ID,DT.GOODS_ID,CG.GD_CODE,CG.GD_NAME,PM.BRANCH_ID,PM.DEPT_ID
|
127
|
END
|
128
|
|
129
|
END
|
130
|
|