Project

General

Profile

TR_REQ_GOOD_BYCONTRACT.txt

Luc Tran Van, 03/22/2023 10:36 AM

 
1
ALTER PROC dbo.TR_REQ_GOOD_BYCONTRACT
2
	@p_REF_ID VARCHAR(150)
3
	AS
4
	BEGIN
5
	DECLARE @l_LST_REF_ID TABLE (
6
			[REF_ID] VARCHAR(15))
7
		--LAY THONG TIN SO SERI
8
		--INSERT INTO @l_LSTSERI SELECT ROW_NUMBER() OVER (ORDER BY VALUE), VALUE FROM WSISPLIT(@l_ASSET_SERIAL_NO,',')
9
	INSERT INTO @l_LST_REF_ID SELECT VALUE FROM WSISPLIT(@p_REF_ID,',')
10
	DECLARE @PYC_MS_ID VARCHAR(15)
11
	IF(EXISTS(SELECT * FROM TR_CONTRACT WHERE (CONTRACT_ID =@p_REF_ID OR CONTRACT_ID IN (SELECT * FROM @l_LST_REF_ID))))
12
	BEGIN
13
		SET @PYC_MS_ID = (SELECT REQ_DOC_ID FROM TR_CONTRACT WHERE CONTRACT_ID =@p_REF_ID)
14
		--- BAT DAU LAY DU LIEU
15
			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,CMB.BRANCH_CODE, CMB.BRANCH_NAME, CMD.DEP_CODE, CMD.DEP_NAME,
16
			ISNULL(PLDT.QUANTITY,0) AS QUANTITY,
17
			ISNULL(DT.QUANTITY_EXE,0) AS QUANTITY_EXE,
18
			ISNULL(DT.QUANTITY_ETM,0) AS QUANTITY_ETM,
19
			ISNULL(DT.QUANTITY,0)-	ISNULL(DT.QUANTITY_EXE,0) AS QUANTITY_REMAIN,
20
			ISNULL(DT.QUANTITY,0)-ISNULL(DT.QUANTITY_ETM,0) AS QUANTITY_REMAIN_ETM, 
21
			--ISNULL( PLDT.AMT_APP,0)+  ISNULL( DT.AMT_RECEIVE_TF,0) AS AMT_APP,
22
			ISNULL( PLDT.AMT_APP,0) AS AMT_APP,
23
			ISNULL( X.AMT_EXE,0) AS AMT_EXE,
24
			ISNULL( DT.AMT_ETM,0) AS AMT_ETM,
25
			--ISNULL(DT.AMT_APP,0) + ISNULL( DT.AMT_RECEIVE_TF,0)- ISNULL( DT.AMT_TF,0)- ISNULL(DT.AMT_EXE,0) AS AMT_REMAIN, 
26
			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,
27
			ISNULL(PLDT.AMT_APP,0) - ISNULL(X.AMT_EXE,0) AS AMT_REMAIN,  @p_REF_ID AS REF_ID
28
			--FROM
29
			--(
30
			--	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 
31
			--	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
			FROM
47
			(
48
				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
49
				INNER JOIN PL_REQUEST_DOC_DT B ON A.PL_REQDT_ID = B.REQDT_ID
50
				WHERE A.REQ_DOC_ID =@PYC_MS_ID
51
				GROUP BY A.REQ_DOC_ID, B.TRADE_ID, B.PLAN_ID, B.GOODS_ID
52
			) PLDT
53
			LEFT JOIN
54
			(
55
				SELECT A.TRADE_ID, SUM(A.AMT_EXE) AS AMT_EXE FROM TR_REQ_PAY_BUDGET A
56
				LEFT JOIN TR_REQ_PAYMENT B ON A.REQ_PAY_ID = B.REQ_PAY_ID
57
				--LEFT JOIN TR_REQ_PAY_SCHEDULE C ON B.REQ_PAY_ID = C.REQ_PAY_ID
58
				WHERE B.AUTH_STATUS_KT='A' 
59
				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))
60
				GROUP BY TRADE_ID
61
			)
62
			X ON PLDT.TRADE_ID = X.TRADE_ID
63
			INNER JOIN PL_TRADEDETAIL DT ON DT.TRADE_ID=PLDT.TRADE_ID
64
			INNER JOIN PL_MASTER PM ON DT.PLAN_ID= PM.PLAN_ID
65
			INNER JOIN CM_GOODS CG ON PLDT.GOODS_ID = CG.GD_ID
66
			LEFT JOIN CM_BRANCH CMB ON PM.BRANCH_ID = CMB.BRANCH_ID
67
			LEFT JOIN CM_DEPARTMENT CMD ON PM.DEPT_ID = CMD.DEP_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,CMB.BRANCH_CODE, CMB.BRANCH_NAME, CMD.DEP_CODE, CMD.DEP_NAME,
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
			LEFT JOIN CM_BRANCH CMB ON PM.BRANCH_ID = CMB.BRANCH_ID
149
			LEFT JOIN CM_DEPARTMENT CMD ON PM.DEPT_ID = CMD.DEP_ID
150
			WHERE PLDT.REQ_DOC_ID =@PYC_MS_ID 
151
	END
152
	ELSE IF(EXISTS(SELECT * FROM PL_REQUEST_DOC WHERE REQ_ID =@p_REF_ID ))
153
	BEGIN
154
		--SET @PYC_MS_ID = (SELECT REQ_DOC_ID FROM TR_PO_MASTER WHERE PO_ID =@p_REF_ID)
155
		-- BAT DAU LAY DU LIEU
156
		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,CMB.BRANCH_CODE, CMB.BRANCH_NAME, CMD.DEP_CODE, CMD.DEP_NAME,
157
			SUM(ISNULL(PL_DT.QUANTITY,0)) AS QUANTITY,
158
			SUM(ISNULL(DT.QUANTITY_EXE,0)) AS QUANTITY_EXE,
159
			SUM(ISNULL(DT.QUANTITY_ETM,0)) AS QUANTITY_ETM,
160
			SUM(ISNULL(DT.QUANTITY,0)-	ISNULL(DT.QUANTITY_EXE,0)) AS QUANTITY_REMAIN,
161
			SUM(ISNULL(DT.QUANTITY,0)-ISNULL(DT.QUANTITY_ETM,0)) AS QUANTITY_REMAIN_ETM, 
162
			SUM(ISNULL( PL_DT.TOTAL_AMT,0)) AS AMT_APP,
163
			SUM(ISNULL( X.AMT_EXE,0))/ISNULL(COUNT(*),1) AS AMT_EXE,
164
			SUM(ISNULL( DT.AMT_ETM,0)) AS AMT_ETM,
165
			--ISNULL(DT.AMT_APP,0) + ISNULL( DT.AMT_RECEIVE_TF,0)- ISNULL( DT.AMT_TF,0)- ISNULL(DT.AMT_EXE,0) AS AMT_REMAIN, 
166
			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,
167
			--ISNULL(PLDT.AMT_APP,0) - ISNULL(X.AMT_EXE,0) AS AMT_REMAIN
168
			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
169
			FROM
170
			PL_REQUEST_DOC_DT PL_DT
171
			LEFT JOIN
172
			(
173
				SELECT A.TRADE_ID, SUM(A.AMT_EXE) AS AMT_EXE FROM TR_REQ_PAY_BUDGET A
174
				LEFT JOIN TR_REQ_PAYMENT B ON A.REQ_PAY_ID = B.REQ_PAY_ID
175
				WHERE B.AUTH_STATUS_KT='A'
176
				AND A.REQ_PAY_ID IN (SELECT REQ_PAY_ID FROM TR_REQ_PAY_SERVICE WHERE EMP_ID =@p_REF_ID)
177
				GROUP BY TRADE_ID
178
			)
179
			X ON PL_DT.TRADE_ID = X.TRADE_ID
180
			INNER  JOIN PL_TRADEDETAIL DT ON DT.TRADE_ID=PL_DT.TRADE_ID
181
			INNER JOIN PL_MASTER PM ON DT.PLAN_ID= PM.PLAN_ID
182
			INNER JOIN CM_GOODS CG ON PL_DT.GOODS_ID = CG.GD_ID
183
			LEFT JOIN CM_BRANCH CMB ON PM.BRANCH_ID = CMB.BRANCH_ID
184
			LEFT JOIN CM_DEPARTMENT CMD ON PM.DEPT_ID = CMD.DEP_ID
185
			--
186
			WHERE PL_DT.REQ_ID =@p_REF_ID
187
			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,CMB.BRANCH_CODE, CMB.BRANCH_NAME, CMD.DEP_CODE, CMD.DEP_NAME
188
	END
189
	
190
END