Project

General

Profile

2.4 TR REQUEST GOOD BYCONTRACT.txt

Luc Tran Van, 11/29/2022 11:13 AM

 
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) OR REF_ID IN (SELECT CONTRACT_ID FROM TR_CONTRACT WHERE REQ_DOC_ID =@PYC_MS_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

    
113
		SET @PYC_MS_ID = (SELECT REQ_DOC_ID FROM TR_PO_MASTER WHERE PO_ID =@p_REF_ID)
114
		--- BAT DAU LAY DU LIEU
115
			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,
116
			ISNULL(PLDT.QUANTITY,0) AS QUANTITY,
117
			ISNULL(DT.QUANTITY_EXE,0) AS QUANTITY_EXE,
118
			ISNULL(DT.QUANTITY_ETM,0) AS QUANTITY_ETM,
119
			ISNULL(DT.QUANTITY,0)-	ISNULL(DT.QUANTITY_EXE,0) AS QUANTITY_REMAIN,
120
			ISNULL(DT.QUANTITY,0)-ISNULL(DT.QUANTITY_ETM,0) AS QUANTITY_REMAIN_ETM, 
121
			--ISNULL( PLDT.AMT_APP,0)+  ISNULL( DT.AMT_RECEIVE_TF,0) AS AMT_APP,
122
			ISNULL( PLDT.AMT_APP,0) AS AMT_APP,
123
			ISNULL( X.AMT_EXE,0) AS AMT_EXE,
124
			ISNULL( DT.AMT_ETM,0) AS AMT_ETM,
125
			--ISNULL(DT.AMT_APP,0) + ISNULL( DT.AMT_RECEIVE_TF,0)- ISNULL( DT.AMT_TF,0)- ISNULL(DT.AMT_EXE,0) AS AMT_REMAIN, 
126
			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,
127
			ISNULL(PLDT.AMT_APP,0) - ISNULL(X.AMT_EXE,0) AS AMT_REMAIN,  @p_REF_ID AS REF_ID
128
			FROM
129
			(
130
				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
131
				INNER JOIN PL_REQUEST_DOC_DT B ON A.PL_REQDT_ID = B.REQDT_ID
132
				WHERE A.REQ_DOC_ID =@PYC_MS_ID
133
				GROUP BY A.REQ_DOC_ID, B.TRADE_ID, B.PLAN_ID, B.GOODS_ID
134
			) PLDT
135
			LEFT JOIN
136
			(
137
				SELECT A.TRADE_ID, SUM(A.AMT_EXE) AS AMT_EXE FROM TR_REQ_PAY_BUDGET A
138
				LEFT JOIN TR_REQ_PAYMENT B ON A.REQ_PAY_ID = B.REQ_PAY_ID
139
				--LEFT JOIN TR_REQ_PAY_SCHEDULE C ON B.REQ_PAY_ID = C.REQ_PAY_ID
140
				WHERE B.AUTH_STATUS_KT='A' 
141
				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) OR REF_ID IN (SELECT PO_ID FROM TR_PO_MASTER WHERE REQ_DOC_ID =@PYC_MS_ID))
142
				GROUP BY TRADE_ID
143
			)
144
			X ON PLDT.TRADE_ID = X.TRADE_ID
145
			INNER JOIN PL_TRADEDETAIL DT ON DT.TRADE_ID=PLDT.TRADE_ID
146
			INNER JOIN PL_MASTER PM ON DT.PLAN_ID= PM.PLAN_ID
147
			INNER JOIN CM_GOODS CG ON PLDT.GOODS_ID = CG.GD_ID
148
			WHERE PLDT.REQ_DOC_ID =@PYC_MS_ID 
149
	END
150
	ELSE IF(EXISTS(SELECT * FROM PL_REQUEST_DOC WHERE REQ_ID =@p_REF_ID ))
151
	BEGIN
152
		--SET @PYC_MS_ID = (SELECT REQ_DOC_ID FROM TR_PO_MASTER WHERE PO_ID =@p_REF_ID)
153
		-- BAT DAU LAY DU LIEU
154
		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,
155
			SUM(ISNULL(PL_DT.QUANTITY,0)) AS QUANTITY,
156
			SUM(ISNULL(DT.QUANTITY_EXE,0)) AS QUANTITY_EXE,
157
			SUM(ISNULL(DT.QUANTITY_ETM,0)) AS QUANTITY_ETM,
158
			SUM(ISNULL(DT.QUANTITY,0)-	ISNULL(DT.QUANTITY_EXE,0)) AS QUANTITY_REMAIN,
159
			SUM(ISNULL(DT.QUANTITY,0)-ISNULL(DT.QUANTITY_ETM,0)) AS QUANTITY_REMAIN_ETM, 
160
			SUM(ISNULL( PL_DT.TOTAL_AMT,0)) AS AMT_APP,
161
			SUM(ISNULL( X.AMT_EXE,0))/ISNULL(COUNT(*),1) AS AMT_EXE,
162
			SUM(ISNULL( DT.AMT_ETM,0)) AS AMT_ETM,
163
			--ISNULL(DT.AMT_APP,0) + ISNULL( DT.AMT_RECEIVE_TF,0)- ISNULL( DT.AMT_TF,0)- ISNULL(DT.AMT_EXE,0) AS AMT_REMAIN, 
164
			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,
165
			--ISNULL(PLDT.AMT_APP,0) - ISNULL(X.AMT_EXE,0) AS AMT_REMAIN
166
			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
167
			FROM
168
			PL_REQUEST_DOC_DT PL_DT
169
			LEFT JOIN
170
			(
171
				SELECT A.TRADE_ID, SUM(A.AMT_EXE) AS AMT_EXE FROM TR_REQ_PAY_BUDGET A
172
				LEFT JOIN TR_REQ_PAYMENT B ON A.REQ_PAY_ID = B.REQ_PAY_ID
173
				WHERE B.AUTH_STATUS_KT='A'
174
				AND A.REQ_PAY_ID IN (SELECT REQ_PAY_ID FROM TR_REQ_PAY_SERVICE WHERE EMP_ID =@p_REF_ID)
175
				GROUP BY TRADE_ID
176
			)
177
			X ON PL_DT.TRADE_ID = X.TRADE_ID
178
			INNER  JOIN PL_TRADEDETAIL DT ON DT.TRADE_ID=PL_DT.TRADE_ID
179
			INNER JOIN PL_MASTER PM ON DT.PLAN_ID= PM.PLAN_ID
180
			INNER JOIN CM_GOODS CG ON PL_DT.GOODS_ID = CG.GD_ID
181
			--
182
			WHERE PL_DT.REQ_ID =@p_REF_ID
183
			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
184
	END
185
	
186
END
187