Project

General

Profile

2.0 TR REQ GOOD BYCONTRACT - LẦN 2.txt

Luc Tran Van, 11/03/2022 02:17 PM

 
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
	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