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