Project

General

Profile

2808 DAO TAO 02.txt

Luc Tran Van, 07/28/2020 09:14 AM

 
1
ALTER PROCEDURE [dbo].[TR_REQ_ADVANCE_PAYMENT_Appr]
2
--Luanlt 2019/17/10 - Sửa params
3
@p_REQ_PAY_ID	varchar(15)= NULL,
4
@p_CHECKER_ID	varchar(15)	= NULL,
5
@p_AUTH_STATUS varchar(15) = NULL,
6
@p_COST_ID VARCHAR(15) = NULL
7
AS
8
BEGIN TRANSACTION
9
		DECLARE @BRANCH_CREATE VARCHAR(15), @p_DEP_ID VARCHAR(15) 
10
		SET @BRANCH_CREATE =(SELECT BRANCH_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
11
		IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID =@BRANCH_CREATE)<>'HS')
12
		BEGIN
13
			SET @p_DEP_ID =(SELECT TOP 1 DEP_ID FROM CM_DEPARTMENT WHERE LEFT(DEP_CODE,5) IN (SELECT TOP 1 LEFT(DVDM_CODE,5) FROM CM_DVDM WHERE DVDM_ID =@p_COST_ID))
14
		END
15
		ELSE
16
		BEGIN
17
			SET @p_DEP_ID =(SELECT DEP_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID=@p_REQ_PAY_ID)
18
		END
19
		IF EXISTS (SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE MAKER_ID =@p_CHECKER_ID AND REQ_PAY_ID =@p_REQ_PAY_ID)
20
		BEGIN
21
			ROLLBACK TRANSACTION
22
			SELECT '-1' as Result, ''  REQ_PAY_ID, N'Người phê duyệt phiếu phải khác với người tạo phiếu! Bạn không được phép duyệt đối tượng này' ErrorDesc
23
			RETURN '-1'
24
		END
25
		-- KIEM TRA NEU DANG TRA VE THI PHAI CHO CAP NHAT LAI THONG TIN MOI DUOC PHEP DUYET
26
		IF EXISTS (SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS ='R' AND REQ_PAY_ID =@p_REQ_PAY_ID)
27
		BEGIN
28
			ROLLBACK TRANSACTION
29
			SELECT '-1' as Result, '' REQ_PAY_ID, N'Phiếu đề nghị tạm ứng đang được trả về bộ phận yêu cầu. Vui lòng cập nhật lại thông tin trước khi duyệt' ErrorDesc
30
			RETURN '-1'
31
		END
32
		-- KIEM TRA NEU DANG TRA VE THI PHAI CHO CAP NHAT LAI THONG TIN MOI DUOC PHEP DUYET
33
		IF EXISTS (SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS_KT ='R' AND REQ_PAY_ID =@p_REQ_PAY_ID)
34
		BEGIN
35
			ROLLBACK TRANSACTION
36
			SELECT '-1' as Result, '' REQ_PAY_ID, N'Phiếu đề nghị tạm ứng đang được trả về bộ phận yêu cầu. Vui lòng cập nhật lại thông tin trước khi duyệt' ErrorDesc
37
			RETURN '-1'
38
		END
39
		-- KIEM TRA NEU DANG TRA VE THI PHAI CHO CAP NHAT LAI THONG TIN MOI DUOC PHEP DUYET
40
		IF EXISTS (SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS_KT ='A' AND REQ_PAY_ID =@p_REQ_PAY_ID)
41
		BEGIN
42
			ROLLBACK TRANSACTION
43
			SELECT '-1' as Result, '' REQ_PAY_ID, N'Phiếu đề nghị tạm ứng đã được KSV phê duyệt trước đó' ErrorDesc
44
			RETURN '-1'
45
		END
46
		--CAP NHAT CODE TRONG QUA TRINH TEST UAT
47
		IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND REQ_TYPE='I'))
48
		BEGIN
49
			DECLARE @ROLE_ID VARCHAR(200), @BRANCH_TYPE VARCHAR(15), @TOTAL_ADVANCE DECIMAL(18,0), @TOTAL_PAYBACK DECIMAL(18,0), @BRANCH_ID VARCHAR(15),
50
			@DEP_ID VARCHAR(15), @COSTCENTER_ID VARCHAR(15)= NULL, @BRANCH_RQ VARCHAR(15) = NULL,@DEP_ID_RQ VARCHAR(15), @BRANCH_LOGIN VARCHAR(15),@LIMIT_ONE_OF DECIMAL(18,2)
51
			DECLARE @LIMIT_AMT DECIMAL(18,0), @REQ_AMT DECIMAL(18,2) =0, @TONG_PGD DECIMAL(18,0), @TONG_PGD_HOAN DECIMAL(18,0)
52
			SET @REQ_AMT = (SELECT REQ_AMT *ISNULL(RATE,1) FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
53
			SET @ROLE_ID = (SELECT ROLENAME FROM TL_USER WHERE TLNANME=@p_CHECKER_ID)
54
			SET @BRANCH_ID = (SELECT TLSUBBRID FROM TL_USER WHERE TLNANME =@p_CHECKER_ID)
55
			SET @BRANCH_RQ =(SELECT BRANCH_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
56
			SET @DEP_ID_RQ =(SELECT DEP_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
57
			SET @BRANCH_TYPE = (SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID =@BRANCH_RQ)
58
			DECLARE @tmp table(BRANCH_ID varchar(15))
59
			INSERT into @tmp  SELECT BRANCH_ID  FROM [dbo].[CM_BRANCH_GETCHILDID](@BRANCH_ID)
60
			DECLARE @tmp_CN table(BRANCH_ID varchar(15))
61
			IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID =@BRANCH_RQ)='CN')
62
			BEGIN
63
				INSERT into @tmp_CN  SELECT BRANCH_ID  FROM [dbo].[CM_BRANCH_GETCHILDID](@BRANCH_RQ)
64
			END
65
			ELSE IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID =@BRANCH_RQ)='PGD')
66
			BEGIN
67
				DECLARE @FATHER_ID VARCHAR(15) = NULL
68
				SET @FATHER_ID =(SELECT FATHER_ID FROM CM_BRANCH WHERE BRANCH_ID =@BRANCH_RQ)
69
				INSERT into @tmp_CN  SELECT BRANCH_ID  FROM [dbo].[CM_BRANCH_GETCHILDID](@FATHER_ID)
70
			END
71
			--DECLARE @DEP_ID_LG VARCHAR(15) = NULL	
72
			--SET @DEP_ID_LG =(SELECT SECUR_CODE FROM TL_USER WHERE TLNANME=@p_CHECKER_ID)
73
			DECLARE @TMP_DVDM TABLE(DVDM_ID VARCHAR(15))
74
			INSERT INTO @TMP_DVDM
75
			SELECT A.DVDM_ID--, A.COST_CODE, A.COST_NAME, B.DEP_ID --, C.DEP_CODE, C.DEP_NAME
76
			FROM PL_COSTCENTER A
77
			LEFT JOIN PL_COSTCENTER_DT B ON A.COST_ID = B.COST_ID
78
			WHERE B.DEP_ID = @DEP_ID_RQ
79
			GROUP BY A.DVDM_ID
80
			-- KHAI BAO BRANCH CUA USER DUYET
81
			SET @BRANCH_LOGIN = (SELECT TLSUBBRID FROM TL_USER WHERE TLNANME =@p_CHECKER_ID)
82
			IF(NOT EXISTS(SELECT * FROM PL_REQUEST_PROCESS WHERE ROLE_USER=@ROLE_ID AND REQ_ID = @p_REQ_PAY_ID))
83
			BEGIN
84
					ROLLBACK TRANSACTION
85
					SELECT '-1' as Result, ''  REQ_PAY_ID, N'Bạn không có quyền phê duyệt phiếu tạm ứng nội bộ. Vui lòng chọn giao dịch khác để duyệt' ErrorDesc
86
					RETURN '-1'
87
			END
88
			IF(EXISTS(SELECT * FROM PL_REQUEST_PROCESS WHERE ROLE_USER=@ROLE_ID AND REQ_ID = @p_REQ_PAY_ID AND BRANCH_ID= @BRANCH_ID AND STATUS ='P'))
89
			BEGIN
90
					ROLLBACK TRANSACTION
91
					SELECT '-1' as Result, ''  REQ_PAY_ID, N'Bạn đã thực hiện xác nhận phiếu tạm ứng trước đó' ErrorDesc
92
					RETURN '-1'
93
			END
94
			-- KIEM TRA AUTH_STATUS TRUYEN XUONG LA GI, A: DUYET, C: CONFIRM  
95
			IF(@p_AUTH_STATUS='U') -- KIEM TRA HAN MUC CON LAI CUA USER VA THONG BAO CHO NGUOI DUYET
96
			BEGIN
97
			-- BAT DAU DUYET THEO NGAN SACH			
98
			--- LAY HAN MUC CUA USER
99
			SET @LIMIT_AMT =(SELECT LIMIT_VALUE FROM TL_SYSROLE_LIMIT WHERE ROLE_ID=@ROLE_ID AND  LIMIT_TYPE='ADV_PAY' AND BRANCH_ID =@BRANCH_LOGIN)
100

    
101
			print @LIMIT_AMT
102
			--
103
			SET @LIMIT_ONE_OF =(SELECT LIMIT_PERCENT FROM TL_SYSROLE_LIMIT WHERE ROLE_ID=@ROLE_ID AND  LIMIT_TYPE='ADV_PAY' AND BRANCH_ID =@BRANCH_LOGIN)
104
			-- NEU LA HOI SO THI LAY TONG SO TIEN TAM UNG CUA CAC PHONG BAN CHUNG VOI KHOI CUA PHIEU DANG DUOC DUYET
105
			SET @TONG_PGD =(SELECT SUM(REQ_AMT*ISNULL(RATE,1)) FROM TR_REQ_ADVANCE_PAYMENT WHERE BRANCH_ID = @BRANCH_RQ
106
					 AND REQ_TYPE ='I' AND AUTH_STATUS ='A') + @REQ_AMT
107
			SET @TONG_PGD_HOAN =(
108
						SELECT (SUM(B.AMT_USE) - SUM(B.AMT_ADD) + SUM (B.AMT_REVERT))
109
						FROM TR_REQ_PAYMENT_DT B
110
						INNER JOIN TR_REQ_PAYMENT A ON B.PAY_ID = A.REQ_PAY_ID
111
						INNER JOIN TR_REQ_ADVANCE_PAYMENT C ON C.REQ_PAY_ID = B.PAY_ADV_ID
112
						WHERE A.BRANCH_ID = @BRANCH_RQ
113
						AND A.AUTH_STATUS_KT ='A' AND C.REQ_TYPE='I') 
114
				IF(@BRANCH_TYPE='HS')
115
				BEGIN
116
					SET @TOTAL_ADVANCE =ISNULL((SELECT SUM(REQ_AMT*ISNULL(RATE,1)) FROM TR_REQ_ADVANCE_PAYMENT WHERE
117
					 DEP_ID IN
118
					 (SELECT A.DEP_ID FROM PL_COSTCENTER_DT A
119
						LEFT JOIN PL_COSTCENTER B ON A.COST_ID = B.COST_ID
120
						WHERE B.DVDM_ID IN (SELECT DVDM_ID FROM @TMP_DVDM) AND A.BRANCH_ID =@BRANCH_RQ)
121
					 AND REQ_TYPE ='I' AND AUTH_STATUS ='A'),0)
122
					SET @TOTAL_PAYBACK =
123
					ISNULL(
124
					(
125
						SELECT (SUM(B.AMT_USE) - SUM(B.AMT_ADD) + SUM (B.AMT_REVERT))
126
						FROM TR_REQ_PAYMENT_DT B
127
						INNER JOIN TR_REQ_PAYMENT A ON B.PAY_ID = A.REQ_PAY_ID
128
						INNER JOIN TR_REQ_ADVANCE_PAYMENT C ON C.REQ_PAY_ID = B.PAY_ADV_ID
129
						WHERE A.DEP_ID IN 
130
						(SELECT A.DEP_ID FROM PL_COSTCENTER_DT A
131
						LEFT JOIN PL_COSTCENTER B ON A.COST_ID = B.COST_ID
132
						WHERE B.DVDM_ID IN (SELECT DVDM_ID FROM @TMP_DVDM) AND A.BRANCH_ID =@BRANCH_ID)
133
						AND A.AUTH_STATUS_KT ='A' AND C.REQ_TYPE='I'
134
					),0)
135
				END
136
			
137
				-- NEU PHIEU DUOC TAO KHAC VOI HOI SO THI TIEN HANH TINH TONG SO TIEN TAM UNG CUA CN VA PHONG GIAO DICH TRUC THUOC
138
				ELSE IF(@BRANCH_TYPE <>'HS')
139
				BEGIN
140
					SET @TOTAL_ADVANCE =(SELECT SUM(REQ_AMT*ISNULL(RATE,1)) FROM TR_REQ_ADVANCE_PAYMENT WHERE BRANCH_ID IN (SELECT BRANCH_ID FROM @tmp_CN)
141
					 AND REQ_TYPE ='I' AND AUTH_STATUS='A')
142
					SET @TOTAL_PAYBACK =
143
					(
144
						SELECT (SUM(B.AMT_USE) - SUM(B.AMT_ADD) + SUM (B.AMT_REVERT))
145
						FROM TR_REQ_PAYMENT_DT B
146
						INNER JOIN TR_REQ_PAYMENT A ON B.PAY_ID = A.REQ_PAY_ID
147
						INNER JOIN TR_REQ_ADVANCE_PAYMENT C ON C.REQ_PAY_ID = B.PAY_ADV_ID
148
						WHERE A.BRANCH_ID IN 
149
						(SELECT BRANCH_ID FROM @tmp_CN)
150
						AND A.AUTH_STATUS_KT ='A' AND C.REQ_TYPE='I'
151
					)
152
				END
153
				DECLARE @LIMIT_REMAIN DECIMAL(18,0)
154
				SET @LIMIT_REMAIN =ISNULL(@TOTAL_ADVANCE,0) - ISNULL(@TOTAL_PAYBACK,0)
155
				print @LIMIT_REMAIN
156
				IF(@LIMIT_AMT <(SELECT REQ_AMT * ISNULL(RATE,1) FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID) + @LIMIT_REMAIN)
157
				BEGIN
158
					ROLLBACK TRANSACTION
159
					SELECT '-2' as Result, @p_REQ_PAY_ID  REQ_PAY_ID,
160
					N'Tổng hạn mức phê duyệt là: '+ FORMAT(@LIMIT_AMT,'#,#', 'vi-VN') + CHAR(10)+
161
					N'Hạn mức trên một lần phê duyệt là: '+ FORMAT(@LIMIT_ONE_OF,'#,#', 'vi-VN') 
162
					+ CHAR(10) + CHAR(13)+
163
					N'Số dư tạm ứng lũy kế của đơn vị tính tới thời điểm này là : '+ FORMAT(@LIMIT_REMAIN +@REQ_AMT ,'#,#', 'vi-VN') 
164
					+ CHAR(10) +
165
					N'Số tiền tạm ứng đã vượt mức phê duyệt là: '+ FORMAT((@LIMIT_REMAIN +@REQ_AMT) -@LIMIT_AMT,'#,#', 'vi-VN') 
166
					+ CHAR(10) +
167
					N'Bạn muốn chuyển giao dịch lên cấp cao hơn để duyệt hay tiếp tục chờ duyệt' ErrorDesc
168
					RETURN '-2'
169
				END
170
				--- NEU DU HAN MUC THI THONG BAO DE NGUOI DUYET CAN NHAC CO NEN DUYET PHIEU HAY KHONG
171
				IF(@LIMIT_AMT >=(SELECT REQ_AMT * ISNULL(RATE,1) FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID) +@LIMIT_REMAIN)
172
				BEGIN
173
					IF(@REQ_AMT >@LIMIT_ONE_OF)
174
					BEGIN
175
						ROLLBACK TRANSACTION
176
						SELECT '-2' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, 
177
						N'Tổng hạn mức phê duyệt là: '+ FORMAT(@LIMIT_AMT,'#,#', 'vi-VN') 
178
						+ CHAR(10)+
179
						N'Hạn mức trên một lần phê duyệt là: '+ FORMAT(@LIMIT_ONE_OF,'#,#', 'vi-VN') 
180
						+ CHAR(10) + CHAR(13) +
181
						N'Số dư tạm ứng lũy kế của đơn vị tính tới thời điểm này là : '+ FORMAT(@LIMIT_REMAIN +@REQ_AMT ,'#,#', 'vi-VN') 
182
						+ CHAR(10) + 
183
						N'Số tiền tạm ứng đã vượt mức so với số tiền của một lần phê duyệt là: '+ FORMAT(@LIMIT_ONE_OF,'#,#', 'vi-VN') 
184
						+ CHAR(10) + 
185
						N'Bạn muốn chuyển giao dịch lên cấp cao hơn để duyệt hay tiếp tục chờ duyệt' ErrorDesc
186
						RETURN '-2'
187
					END
188
					ELSE
189
					BEGIN
190
						-- KIEM TRA NEU LA PGD THI CANH BAO
191
						IF(@BRANCH_TYPE ='HS')
192
						BEGIN
193
							ROLLBACK TRANSACTION
194
						SELECT '-4' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, 
195
						N'Tổng hạn mức phê duyệt của bạn là: '+FORMAT(@LIMIT_AMT,'#,#', 'vi-VN')
196
						+ CHAR(10) + CHAR(13) +  
197
						N'Hạn mức trên một lần phê duyệt là: '+ FORMAT(@LIMIT_ONE_OF,'#,#', 'vi-VN') 
198
						+ CHAR(10) + 
199
						N'Số dư tạm ứng lũy kế của đơn vị tính tới thời điểm này là : '+ FORMAT(@LIMIT_REMAIN+@REQ_AMT,'#,#', 'vi-VN')
200
						+ CHAR(10) + 
201
						N'Bạn có muốn tiếp tục duyệt hay không' ErrorDesc
202
						RETURN '-4'
203
						END
204
						ELSE IF(@BRANCH_TYPE ='CN')
205
						BEGIN
206
							IF(ISNULL(@TONG_PGD,0) -ISNULL(@TONG_PGD_HOAN,0) > 40000000)
207
							BEGIN
208
								ROLLBACK TRANSACTION
209
								SELECT '-4' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, 
210
								N'Tổng hạn mức phê duyệt của bạn là: '+FORMAT(@LIMIT_AMT,'#,#', 'vi-VN')
211
								+ CHAR(10) + 
212
								N'Hạn mức trên một lần phê duyệt là: '+ FORMAT(@LIMIT_ONE_OF,'#,#', 'vi-VN') 
213
								+ CHAR(10) + CHAR(13) +
214
								N'Số dư tạm ứng lũy kế của đơn vị tính tới thời điểm này là : '+ FORMAT(@LIMIT_REMAIN+@REQ_AMT,'#,#', 'vi-VN')
215
								+ CHAR(10) +
216
								N'Số tiền tạm ứng đang vượt quá số tổng hạn mức tạm ứng của 1 CN: '+ FORMAT(40000000,'#,#', 'vi-VN') +N'. Số tiền vượt là: '+ FORMAT(ISNULL(@TONG_PGD,0) -ISNULL(@TONG_PGD_HOAN,0)-40000000,'#,#', 'vi-VN')
217
								+ CHAR(10) + 
218
								N'Bạn có muốn tiếp tục duyệt hay không' ErrorDesc
219
								RETURN '-4'
220
							END
221
							ELSE
222
							BEGIN
223
								ROLLBACK TRANSACTION
224
								SELECT '-4' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, 
225
								N'Tổng hạn mức phê duyệt của bạn là: '+FORMAT(@LIMIT_AMT,'#,#', 'vi-VN')
226
								+ CHAR(10) +
227
								N'Hạn mức trên một lần phê duyệt là: '+ FORMAT(@LIMIT_ONE_OF,'#,#', 'vi-VN') 
228
								+ CHAR(10) + CHAR(13) +
229
								N'Số dư tạm ứng lũy kế của đơn vị tính tới thời điểm này là : '+ FORMAT(@LIMIT_REMAIN+@REQ_AMT,'#,#', 'vi-VN')
230
								+ CHAR(10) + 
231
								N'Bạn có muốn tiếp tục duyệt hay không' ErrorDesc
232
								RETURN '-4'
233
							END
234
						END
235
						ELSE IF(@BRANCH_TYPE ='PGD')
236
						BEGIN
237
							IF(ISNULL(@TONG_PGD,0) -ISNULL(@TONG_PGD_HOAN,0) > 10000000)
238
							BEGIN
239
								ROLLBACK TRANSACTION
240
								SELECT '-4' as Result, @p_REQ_PAY_ID  REQ_PAY_ID,
241
								N'Tổng hạn mức phê duyệt của bạn là: '+FORMAT(@LIMIT_AMT,'#,#', 'vi-VN')+ CHAR(10) +
242
								N'Hạn mức trên một lần phê duyệt là: '+ FORMAT(@LIMIT_ONE_OF,'#,#', 'vi-VN') 
243
								+ CHAR(10) + CHAR(13) + 
244
								N'Số dư tạm ứng lũy kế của đơn vị tính tới thời điểm này là : '+ FORMAT(@LIMIT_REMAIN+@REQ_AMT,'#,#', 'vi-VN')
245
								+ CHAR(10) + 
246
								N'Số tiền tạm ứng đang vượt quá số tổng hạn mức tạm ứng của 1 PGD: '+ FORMAT(10000000,'#,#', 'vi-VN') +N'. Số tiền vượt là: '+ FORMAT(ISNULL(@TONG_PGD,0) -ISNULL(@TONG_PGD_HOAN,0)-10000000,'#,#', 'vi-VN')
247
								+ CHAR(10) + 
248
								N'Bạn có muốn tiếp tục duyệt hay không' ErrorDesc
249
								RETURN '-4'
250
							END
251
							ELSE
252
							BEGIN
253
								ROLLBACK TRANSACTION
254
								SELECT '-4' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, 
255
								N'Tổng hạn mức phê duyệt của bạn là: '+FORMAT(@LIMIT_AMT,'#,#', 'vi-VN')
256
								+ CHAR(10) + 
257
								N'Hạn mức trên một lần phê duyệt là: '+ FORMAT(@LIMIT_ONE_OF,'#,#', 'vi-VN') 
258
								+ CHAR(10) + CHAR(13) +
259
								N'Số dư tạm ứng lũy kế của đơn vị tính tới thời điểm này là : '+ FORMAT(@LIMIT_REMAIN+@REQ_AMT,'#,#', 'vi-VN')
260
								+ CHAR(10) + 
261
								N'Bạn có muốn tiếp tục duyệt hay không' ErrorDesc
262
								RETURN '-4'
263
							END
264
						END
265
					END
266
				END
267
			-- NEU THOA MAN CAC DIEU KIEN SE TIEN HANH DUYET
268
			END -- END DU HAN MUC DUYET
269
			ELSE IF(@p_AUTH_STATUS='A')
270
			BEGIN
271
				UPDATE TR_REQ_ADVANCE_PAYMENT
272
				SET    AUTH_STATUS='A', CHECKER_ID = @p_CHECKER_ID, APPROVE_DT =  GETDATE(), AUTH_STATUS_KT='U'
273
				WHERE  REQ_PAY_ID = @p_REQ_PAY_ID
274
				--- CAP NHAT LAI TINH TRANG TRONG REQUEST_PROCESS
275
				DECLARE @PROCESS_CURR VARCHAR(5)
276
				SET @PROCESS_CURR =(SELECT PROCESS_ID FROM PL_REQUEST_PROCESS WHERE REQ_ID = @p_REQ_PAY_ID AND ROLE_USER =@ROLE_ID)
277
				INSERT INTO PL_PROCESS VALUES (@p_REQ_PAY_ID,@PROCESS_CURR,@p_CHECKER_ID, GETDATE(),(SELECT ROLE_DESC + N' duyệt' FROM TL_SYSROLE WHERE ROLE_ID = @ROLE_ID),N'Các cấp phê duyệt theo hạn mức')
278
				--- CAP NHAT PROCESS CUA PHIEU DE NGHI TAM UNG LA DA DUYET
279
				UPDATE TR_REQ_ADVANCE_PAYMENT SET PROCESS=@PROCESS_CURR WHERE REQ_PAY_ID=@p_REQ_PAY_ID
280
				--
281
				UPDATE PL_REQUEST_PROCESS SET STATUS ='A', NOTES = (SELECT ROLE_DESC + N' duyệt' FROM TL_SYSROLE WHERE ROLE_ID = @ROLE_ID) WHERE  ROLE_USER =@ROLE_ID AND REQ_ID = @p_REQ_PAY_ID
282
			
283
			END
284
			ELSE -- NEW KHONG DU HAN MUC THI BAT DAU XAC NHAN VA DUYET THEO HAN MUC
285
			BEGIN
286
				DECLARE @t_REQ_AMT DECIMAL(18,0) = (SELECT REQ_AMT FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID=@p_REQ_PAY_ID)
287
				--- NEU GIAM DOC KHOI VAN CHUA DU HAN MUC THI GIAM DOC KHOI XAC NHAN VÀ TIEP TUC BUOC TIEP THEO LA PHO TONG GIAM DOC
288
				DECLARE @MAX_STEP INT, @NEXT_ROLE VARCHAR(20), @MESSAGE NVARCHAR(100), @PROCESS_ID_NEXT VARCHAR(5), @PROCESS_PARENT VARCHAR(5),
289
				@BRANCH_ID_PROC VARCHAR(15), @NEX_ROLE_STEP VARCHAR(25), @CURRENT_PROCESS VARCHAR(15)
290
				SET @CURRENT_PROCESS =(SELECT PROCESS_ID FROM PL_REQUEST_PROCESS WHERE REQ_ID = @p_REQ_PAY_ID AND ROLE_USER=@ROLE_ID)
291
				SET @NEX_ROLE_STEP = (SELECT ROLE_USER FROM PL_REQUEST_PROCESS WHERE PARENT_PROCESS_ID =@CURRENT_PROCESS AND REQ_ID = @p_REQ_PAY_ID )
292
				--SET @MAX_STEP = CONVERT(INT,(SELECT MAX(PROCESS_ID) FROM TR_REQUEST_PROCESS WHERE REQ_ID =@p_REQ_PAY_ID))
293
				SET @PROCESS_ID_NEXT = CONVERT(VARCHAR(5),@CURRENT_PROCESS+1)
294
				--SET @PROCESS_PARENT = CONVERT(VARCHAR(5),@MAX_STEP)
295
				DECLARE @TMP_ROLE TABLE (ROLE_ID VARCHAR(15), BRANCH_ID VARCHAR(15), LIMIT_VALUE DECIMAL(18,0),LIMIT_TYPE VARCHAR(15))
296
				IF EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06908%' AND DEP_ID =@p_DEP_ID)
297
					BEGIN
298
						INSERT INTO @TMP_ROLE  SELECT A.ROLE_ID, A.BRANCH_ID,A.LIMIT_VALUE,A.LIMIT_TYPE FROM TL_SYSROLE_LIMIT A WHERE A.LIMIT_TYPE='ADV_PAY'AND BRANCH_ID ='DV0001' AND A.ROLE_ID <>'GDK'
299
					END
300
					ELSE IF EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06910%' AND DEP_ID =@p_DEP_ID)
301
					BEGIN
302
						INSERT INTO @TMP_ROLE  SELECT A.ROLE_ID, A.BRANCH_ID,A.LIMIT_VALUE,A.LIMIT_TYPE FROM TL_SYSROLE_LIMIT A WHERE A.LIMIT_TYPE='ADV_PAY'AND BRANCH_ID ='DV0001' AND A.ROLE_ID <>'GDK'
303
					END
304
					ELSE IF (EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06900%' AND DEP_ID =@p_DEP_ID) OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06901%' AND DEP_ID =@p_DEP_ID)
305
					OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06902%' AND DEP_ID =@p_DEP_ID) OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06903%' AND DEP_ID =@p_DEP_ID) 
306
					OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06904%' AND DEP_ID =@p_DEP_ID) OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06920%' AND DEP_ID =@p_DEP_ID))
307
					BEGIN
308
						INSERT INTO @TMP_ROLE  SELECT A.ROLE_ID, A.BRANCH_ID,A.LIMIT_VALUE,A.LIMIT_TYPE FROM TL_SYSROLE_LIMIT A WHERE A.LIMIT_TYPE='ADV_PAY'AND BRANCH_ID ='DV0001' AND A.ROLE_ID NOT IN ('GDK','PTGD')
309
					END
310
					ELSE IF (EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06907%' AND DEP_ID =@p_DEP_ID) OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06909%' AND DEP_ID =@p_DEP_ID)
311
					OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06911%' AND DEP_ID =@p_DEP_ID) OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06921%' AND DEP_ID =@p_DEP_ID) 
312
					OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06922%' AND DEP_ID =@p_DEP_ID))
313
					BEGIN
314
						INSERT INTO @TMP_ROLE  SELECT A.ROLE_ID, A.BRANCH_ID,A.LIMIT_VALUE,A.LIMIT_TYPE FROM TL_SYSROLE_LIMIT A WHERE A.LIMIT_TYPE='ADV_PAY'AND BRANCH_ID ='DV0001' AND A.ROLE_ID <>'PTGD'
315
					END
316
					ELSE
317
					BEGIN
318
						INSERT INTO @TMP_ROLE  SELECT A.ROLE_ID, A.BRANCH_ID,A.LIMIT_VALUE,A.LIMIT_TYPE FROM TL_SYSROLE_LIMIT A WHERE A.LIMIT_TYPE='ADV_PAY'AND BRANCH_ID ='DV0001'
319
					END
320
				SET @BRANCH_ID_PROC= (SELECT BRANCH_ID FROM TL_SYSROLE_LIMIT WHERE ROLE_ID=@NEXT_ROLE AND LIMIT_TYPE='ADV_PAY')
321
				IF(NOT EXISTS(SELECT * FROM PL_REQUEST_PROCESS WHERE ROLE_USER=@NEX_ROLE_STEP AND REQ_ID= @p_REQ_PAY_ID))
322
				BEGIN
323
					SET @NEXT_ROLE =(SELECT TOP 1 ROLE_ID FROM @TMP_ROLE WHERE LIMIT_VALUE >@t_REQ_AMT 
324
					AND ROLE_ID NOT IN (SELECT ROLE_USER FROM PL_REQUEST_PROCESS WHERE REQ_ID = @p_REQ_PAY_ID) AND LIMIT_TYPE ='ADV_PAY')
325

    
326
					SET @BRANCH_ID_PROC= (SELECT BRANCH_ID FROM TL_SYSROLE_LIMIT WHERE ROLE_ID=@NEXT_ROLE AND LIMIT_TYPE='ADV_PAY')
327
					SET @MESSAGE = (SELECT N'Đợi '+ ROLE_DESC + N' phê duyệt' FROM TL_SYSROLE WHERE ROLE_ID = @NEXT_ROLE)
328
					INSERT INTO PL_REQUEST_PROCESS (REQ_ID,PROCESS_ID,STATUS,ROLE_USER,BRANCH_ID,CHECKER_ID,APPROVE_DT,PARENT_PROCESS_ID,IS_LEAF, COST_ID, DVDM_ID, NOTES)  
329
					VALUES (@p_REQ_PAY_ID,@PROCESS_ID_NEXT,'C',@NEXT_ROLE,@BRANCH_ID_PROC,@NEXT_ROLE,GETDATE(),@PROCESS_PARENT,'Y',NULL,@p_COST_ID,@MESSAGE)
330
					INSERT INTO PL_PROCESS VALUES (@p_REQ_PAY_ID,@CURRENT_PROCESS,@p_CHECKER_ID, GETDATE(),(SELECT ROLE_DESC + N' xác nhận' FROM TL_SYSROLE WHERE ROLE_ID = @ROLE_ID),N'Các cấp phê duyệt theo hạn mức')
331
				END
332
				ELSE
333
				BEGIN
334
					SET @NEXT_ROLE =@NEX_ROLE_STEP
335
					UPDATE PL_REQUEST_PROCESS SET STATUS='C',DVDM_ID=@p_COST_ID WHERE ROLE_USER =@NEXT_ROLE AND REQ_ID = @p_REQ_PAY_ID	
336
					INSERT INTO PL_PROCESS VALUES (@p_REQ_PAY_ID,@CURRENT_PROCESS,@p_CHECKER_ID, GETDATE(),(SELECT ROLE_DESC + N' xác nhận' FROM TL_SYSROLE WHERE ROLE_ID = @ROLE_ID),N'Các cấp phê duyệt theo hạn mức')
337
				END
338
				--				
339
				IF @@Error <> 0 GOTO ABORT
340
					-- UPDATE STATUS CUA STEP HIEN TAI
341
				UPDATE PL_REQUEST_PROCESS SET STATUS='P',IS_LEAF ='N', NOTES = (SELECT ROLE_DESC + N' xác nhận' FROM TL_SYSROLE WHERE ROLE_ID = @ROLE_ID) WHERE ROLE_USER =@ROLE_ID AND REQ_ID = @p_REQ_PAY_ID		
342
				--INSERT VAO TR_PROCESS		
343
				UPDATE TR_REQ_ADVANCE_PAYMENT SET PROCESS =@CURRENT_PROCESS , AUTH_STATUS='U',DVDM_ID = @p_COST_ID WHERE REQ_PAY_ID =@p_REQ_PAY_ID	
344
				--- 
345
				UPDATE PL_REQUEST_PROCESS SET DVDM_ID= @p_COST_ID WHERE REQ_ID =@p_REQ_PAY_ID AND ROLE_USER <>@ROLE_ID
346
		  END
347
		END	
348
		ELSE
349
		BEGIN
350
			--- NEU LA TAM UNG NHA CUNG CAP THI CHECK XEM KI TAM UNG DO DA HOAN THANH HAY CHUA, NEU DA HOAN THANH THI KHONG CHO DUYET
351
			DECLARE @PAY_ID VARCHAR(15), @SUM_OF_PAY_ID DECIMAL(18,2), @SUM_ADVANCE DECIMAL(18,2),
352
			@AMOUNT DECIMAL(18,2),@AMT_PAY_DO DECIMAL(18,2),@SCH_ID VARCHAR(15),@AMT_ADVANCE DECIMAL(18,0)
353
			DECLARE CUR_SH CURSOR FOR SELECT A.PAY_ID,A.AMT_PAY, A.AMT_PAY_DO,A.SCHEDULE_ID,A.AMT_ADVANCE FROM TR_REQ_PAY_SCHEDULE A WHERE A.REQ_PAY_ID= @p_REQ_PAY_ID
354
			OPEN CUR_SH
355
			FETCH NEXT FROM CUR_SH INTO @PAY_ID,@AMOUNT,@AMT_PAY_DO,@SCH_ID,@AMT_ADVANCE
356
			WHILE @@FETCH_STATUS =0
357
			BEGIN
358
				SET @SUM_OF_PAY_ID =(SELECT SUM(AMT_PAY_DO) FROM TR_REQ_PAY_SCHEDULE WHERE PAY_ID =@PAY_ID AND AUTH_STATUS_KT='A')
359
				SET @SUM_ADVANCE =(SELECT SUM(AMT_ADVANCE) FROM TR_REQ_PAY_SCHEDULE WHERE PAY_ID =@PAY_ID AND AUTH_STATUS_KT='A')
360
				IF(@SUM_OF_PAY_ID +@AMT_PAY_DO >@AMOUNT)
361
				BEGIN
362
					ROLLBACK TRANSACTION
363
					SELECT '-1' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, N'Số tiền tạm ứng đã vượt mức số tiền còn lại cần phải thanh toán'
364
					RETURN '-1'
365
				END
366
				IF(@SUM_OF_PAY_ID+@AMT_PAY_DO+@SUM_ADVANCE < @AMOUNT)
367
				BEGIN
368
					UPDATE TR_REQ_PAY_SCHEDULE SET PAYMENT_STATUS ='DTU' WHERE SCHEDULE_ID=@SCH_ID
369
				END
370
				ELSE IF(@SUM_OF_PAY_ID+@AMT_PAY_DO+@SUM_ADVANCE = @AMOUNT)
371
				BEGIN
372
					UPDATE TR_REQ_PAY_SCHEDULE SET PAYMENT_STATUS ='DTT' WHERE SCHEDULE_ID=@SCH_ID
373
				END
374
				ELSE IF(@SUM_OF_PAY_ID=0 AND @SUM_ADVANCE =0 )
375
				BEGIN
376
					UPDATE TR_REQ_PAY_SCHEDULE SET PAYMENT_STATUS ='CTT' WHERE SCHEDULE_ID=@SCH_ID
377
				END
378
				FETCH NEXT FROM CUR_SH INTO @PAY_ID,@AMOUNT,@AMT_PAY_DO,@SCH_ID,@AMT_ADVANCE
379
			END
380
			CLOSE CUR_SH
381
			DEALLOCATE CUR_SH 
382
			UPDATE TR_REQ_ADVANCE_PAYMENT SET AUTH_STATUS='A', CHECKER_ID=@p_CHECKER_ID, APPROVE_DT = GETDATE(),AUTH_STATUS_KT='U' WHERE REQ_PAY_ID =@p_REQ_PAY_ID
383
			SET @p_AUTH_STATUS ='A'
384
			--- INSERT 1 DONG VAO PL_PROCESS
385
			-- INSERT VAO BANG PL_PROCESS 1 DONG TRA VE
386
			INSERT INTO dbo.PL_PROCESS(REQ_ID,PROCESS_ID,CHECKER_ID,APPROVE_DT,PROCESS_DESC,NOTES)
387
				   VALUES(@p_REQ_PAY_ID,'APP',@p_CHECKER_ID,GETDATE(), N'Trưởng đơn vị đã phê duyệt',N'Trưởng đơn vị phê duyệt')			
388
		END	
389
		IF @@Error <> 0 GOTO ABORT
390
COMMIT TRANSACTION
391
	IF(@p_AUTH_STATUS='A')
392
	BEGIN
393
		SELECT '0' as Result, @p_REQ_PAY_ID  REQ_PAY_ID ,'' ErrorDesc
394
		RETURN '0'
395
	END
396
	ELSE
397
	BEGIN
398
		SELECT '1' as Result, @p_REQ_PAY_ID  REQ_PAY_ID ,'' ErrorDesc
399
		RETURN '1'
400
	END
401
ABORT:
402
BEGIN
403
		ROLLBACK TRANSACTION
404
		SELECT '-1' as Result, '' REQ_PAY_ID, '' ErrorDesc
405
		RETURN '-1'
406
END
407
¿
408
ALTER PROCEDURE [dbo].[TR_REQ_ADVANCE_PAYMENT_Ins]
409
@p_REQ_PAY_ID	varchar(15)= NULL,
410
@p_REQ_PAY_CODE	varchar(50)	= NULL,
411
@p_REQ_DT VARCHAR(10)= NULL,
412
@p_BRANCH_ID	varchar(15)	= NULL,
413
@p_DEP_ID	varchar(15)	= NULL,
414
@p_REQ_REASON	nvarchar(MAX)	= NULL,
415
@p_REQ_TYPE	varchar(15)	= NULL,
416
@P_REQ_ENTRIES nvarchar(MAX)	= NULL,
417
@p_REQ_DESCRIPTION	nvarchar(MAX)	= NULL,
418
@p_REF_ID	varchar(15)	= NULL,
419
@p_RECEIVER_PO	nvarchar(250)	= NULL,
420
@p_RECEIVER_DEBIT	nvarchar(250)	= NULL,
421
@p_REQ_PAY_TYPE	varchar(15)	= NULL,
422
@p_REQ_TYPE_CURRENCY	nvarchar(50)	= NULL,
423
@p_REQ_AMT	decimal(18, 0)	= NULL,
424
@p_REQ_TEMP_AMT	decimal(18, 0)	= NULL,
425
@p_MAKER_ID	varchar(15)	= NULL,
426
@p_CREATE_DT	varchar(25)	= NULL,
427
@p_EDITOR_ID	varchar(15)	= NULL,
428
@p_AUTH_STATUS	varchar(1)	= NULL,
429
@p_CHECKER_ID	varchar(15)	= NULL,
430
@p_APPROVE_DT	varchar(25)	= NULL,
431
@p_CREATE_DT_KT	varchar(25)	= NULL,
432
@p_MAKER_ID_KT	varchar(15)	= NULL,
433
@p_AUTH_STATUS_KT	varchar(1)	= NULL,
434
@p_CHECKER_ID_KT	varchar(1)	= NULL,
435
@p_APPROVE_DT_KT  varchar(25)= null,
436
@p_CONFIRM_NOTE	nvarchar(500)	= NULL,
437
@p_BRANCH_CREATE	varchar(15)	= NULL,
438
@p_NOTES	varchar(15)	= NULL,
439
@p_RECORD_STATUS	varchar(1)	= NULL,
440
@p_TRANSFER_MAKER	nvarchar(50)	= NULL,
441
@p_TRANSFER_DT	varchar(25)	= NULL,
442
@p_TRASFER_USER_RECIVE	varchar(15)	= NULL,
443
@p_PROCESS	varchar(15)	= NULL,
444
@p_PAY_PHASE VARCHAR(15)= NULL,
445
@p_DVDM_ID VARCHAR(15) = NULL,
446
@p_RATE DECIMAL(18,0)= NULL,
447
@p_RECIVER_MONEY VARCHAR(15) = NULL,
448
@p_IS_PERIOD VARCHAR(5) = NULL,
449
@p_TYPE_FUNCTION VARCHAR(15) = NULL,
450
@p_XMP_TEMP XML = NULL
451
AS
452
--Validation is here
453
/*
454
DECLARE @ERRORSYS NVARCHAR(15) = '' 
455
  IF ( NOT EXISTS ( SELECT * FROM ASS_COLLECT WHERE ))
456
	 SET @ERRORSYS = ''
457
IF @ERRORSYS <> '' 
458
BEGIN
459
	SELECT ErrorCode Result, ''  CAR_ID, ErrorDesc ErrorDesc FROM SYS_ERROR WHERE ErrorCode = @ERRORSYS
460
	RETURN '0'
461
END 
462
*/
463
	--DECLARE @ERRORSYS NVARCHAR(15) = '' 
464
	--IF EXISTS(SELECT * FROM TR_PO_MASTER WHERE REF_ID  = @p_REF_ID )
465
	--BEGIN
466
	--	SET @ERRORSYS = 'ASSC-00005'
467
	--	SELECT ErrorCode Result, '' COLLECT_ID, ErrorDesc ErrorDesc FROM SYS_ERROR WHERE ErrorCode = @ERRORSYS
468
	--	RETURN '0'
469
	--END
470
	IF(@p_REQ_TYPE ='I')
471
	BEGIN
472
		DECLARE @AMT_AD_PAY DECIMAL(18,0) =0
473
		DECLARE @AMT_AD_PAY_BACK DECIMAL(18,0) =0
474
		DECLARE @AMT_AD_PAY_REMAIN DECIMAL(18,0) =0
475
		SET @AMT_AD_PAY = (SELECT SUM(REQ_AMT*ISNULL(RATE,1)) FROM TR_REQ_ADVANCE_PAYMENT WHERE REF_ID=@p_MAKER_ID AND AUTH_STATUS_KT='A' AND REQ_TYPE ='I')
476
		SET @AMT_AD_PAY_BACK = (SELECT SUM(D.AMT_USE) +SUM(D.AMT_REVERT) - SUM (D.AMT_ADD)
477
					FROM TR_REQ_PAYMENT_DT D
478
					LEFT JOIN TR_REQ_ADVANCE_PAYMENT X ON D.PAY_ADV_ID = X.REQ_PAY_ID  AND D.AUTH_STATUS_KT ='A'
479
					WHERE X.REF_ID =@p_REF_ID)
480
	 SET @AMT_AD_PAY_REMAIN =ISNULL(@AMT_AD_PAY,0) -ISNULL(@AMT_AD_PAY_BACK,0)
481
	 SET @p_REQ_TEMP_AMT =ISNULL(@AMT_AD_PAY_REMAIN,0)
482
	 END
483
BEGIN TRANSACTION
484
	-- LUCTV 17H51 BO SUNG LAY SO TIEN DA TAM UNG CUA NHAN VIEN --
485
		--SET @AMT_DO =(SELECT * FROM [dbo].TR_RE)
486
	--THIEUVQ 281119---
487
		IF (@p_REQ_TYPE='I')
488
		BEGIN
489
			--SET @p_REF_ID = @p_MAKER_ID
490
			IF(NOT EXISTS(SELECT * FROM CM_ACCOUNT_PAY WHERE ACC_NUM = @p_RECEIVER_DEBIT))
491
			BEGIN
492
				SET @p_RECEIVER_DEBIT = @p_RECEIVER_DEBIT+''
493
			END
494
			ELSE
495
			BEGIN
496
				IF(EXISTS(SELECT * FROM CM_ACCOUNT_PAY WHERE ACC_NUM = @p_RECEIVER_DEBIT AND REF_ID != @p_REF_ID ) AND @p_TYPE_FUNCTION ='SEND')
497
				BEGIN
498
					SET @p_RECEIVER_DEBIT =(SELECT ACC_NUM FROM CM_ACCOUNT_PAY WHERE ACC_NUM = @p_RECEIVER_DEBIT)
499
				END
500
			END
501
		END
502
		EXEC [dbo].[ADVANCE_CODE_GenKey] 'TR_REQ_ADVANCE_PAYMENT', '',@p_REQ_TYPE, @p_REQ_PAY_CODE out
503
	--END--
504
		IF @p_REQ_PAY_CODE IS NULL OR @p_REQ_PAY_CODE =''
505
		BEGIN
506
			ROLLBACK TRANSACTION
507
			SELECT '-1' Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Mã số phiếu không được để trống' ErrorDesc
508
			RETURN '-1'
509
		END
510
		IF (@p_REQ_TYPE='I' AND (@p_RECEIVER_DEBIT IS NULL OR @p_RECEIVER_DEBIT ='') AND @p_TYPE_FUNCTION ='SEND')
511
		BEGIN
512
			ROLLBACK TRANSACTION
513
			SELECT '-1' Result, '' REQ_PAY_ID, N'Tài khoản nhân viên tạm ứng không được để trống' ErrorDesc
514
			RETURN '-1'
515
		END
516
		IF EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_CODE  = @p_REQ_PAY_CODE )
517
		BEGIN
518
			ROLLBACK TRANSACTION
519
			SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Số phiếu tạm ứng đã tồn tại trong hệ thống' ErrorDesc
520
			RETURN '-1'
521
		END
522
		-- START 19-11-2019
523
		-- LUCTV BO SUNG VALIDATE TRONG QUA TRINH TEST SAU UAT- KIEM TRA NEU DOT THANH TOAN CHUA CO THI KHONG DUOC THEM MOI
524
		--IF(@p_REQ_TYPE='P' AND (@p_PAY_PHASE IS NULL OR @p_PAY_PHASE =''))
525
		--BEGIN
526
		--	ROLLBACK TRANSACTION
527
		--	SELECT '-1' as Result, '' REQ_PAY_ID, N'Đợt thanh toán không được phép để trống' ErrorDesc
528
		--	RETURN '-1'
529
		--END
530
		---- NEU THANH TOAN XU LY NO THI NHAN VIEN NHAN TIEN TAM UNG KHONG DUOC PHEP TRONG
531
		--IF(@p_REQ_TYPE='D' AND (@p_RECEIVER_DEBIT IS NULL OR @p_RECEIVER_DEBIT =''))
532
		--BEGIN
533
		--	ROLLBACK TRANSACTION
534
		--	SELECT '-1' as Result, '' REQ_PAY_ID, N'Nhân viên nhận tạm ứng không được phép để trống' ErrorDesc
535
		--	RETURN '-1'
536
		--END
537
		-- SO TIEN THANH TOÁN PHAI LON HON KHONG
538
		IF(@p_REQ_AMT <=0)
539
		BEGIN
540
			ROLLBACK TRANSACTION
541
			SELECT '-1' as Result, '' REQ_PAY_ID, N'Số tiền tạm ứng phải lớn hơn 0' ErrorDesc
542
			RETURN '-1'
543
		END
544
		-----
545
		---- KIEM TRA NEU CHUA CHON KHOI PHE DUYET THI TU DONG CHUYEN VÊ KHOI TAI CHINH
546
		--IF(@p_DVDM_ID IS NULL OR @p_DVDM_ID ='')
547
		--BEGIN
548
		--	SET @p_DVDM_ID = (SELECT TOP 1 DVDM_ID FROM CM_DVDM WHERE DVDM_NAME ='KHOI TAI CHINH')
549
		--END
550
		--
551
		--KIEM TRA NEU TAI KHOAN NHAN VIEN TAM UNG NEU CHUA TON TAI TRONG HE THONG THI BAO LOI
552
		IF(NOT EXISTS(SELECT * FROM CM_ACCOUNT_PAY WHERE REF_ID =@p_REF_ID) AND @p_REQ_TYPE='I')
553
		BEGIN
554
			INSERT INTO CM_ACCOUNT_PAY (REF_ID,ACC_TYPE,ACC_NUM,ACC_NAME,FUNTION,MAKER_ID,AUTH_STATUS,CREATE_DT,TK_GL,TK_GL_NAME) VALUES (@p_REF_ID,'ADV_PAY',@p_RECEIVER_DEBIT,'TK TAM UNG CUA NHAN VIEN ' +@p_REF_ID,'I',@p_MAKER_ID,'U',GETDATE(),'361200001','TAM UNG DE HOAT DONG NGHIEP VU')
555
		END
556
		ELSE
557
		BEGIN
558
			IF(((SELECT TOP 1 ACC_NUM FROM CM_ACCOUNT_PAY WHERE REF_ID =@p_REF_ID)<>@p_RECEIVER_DEBIT) AND @p_REQ_TYPE='I')
559
			BEGIN
560
				ROLLBACK TRANSACTION
561
				SELECT '-1' as Result, '' REQ_PAY_ID, N'Tài khoản tạm ứng của nhân viên đã tồn tại trong hệ thống! Bạn không được phép chỉnh sửa' ErrorDesc
562
				RETURN '-1'
563
			END
564
		END
565
		EXEC SYS_CodeMasters_Gen 'TR_REQ_ADVANCE_PAMENT', @p_REQ_PAY_ID out
566
		IF @p_REQ_PAY_ID='' OR @p_REQ_PAY_ID IS NULL GOTO ABORT
567
		INSERT INTO [dbo].[TR_REQ_ADVANCE_PAYMENT]
568
           ([REQ_PAY_ID]
569
           ,[REQ_PAY_CODE]
570
           ,[BRANCH_ID],[REQ_DT],
571
           [DEP_ID]
572
           ,[REQ_REASON]
573
           ,[REQ_TYPE],REQ_ENTRIES,
574
            [REQ_DESCRIPTION]
575
           ,REF_ID,
576
			RECEIVER_PO, RECEIVER_DEBIT
577
           ,[REQ_PAY_TYPE]
578
           ,[REQ_TYPE_CURRENCY]
579
           ,[REQ_AMT]
580
           ,[REQ_TEMP_AMT]
581
           ,[MAKER_ID]
582
           ,[CREATE_DT]
583
           ,[EDITOR_ID]
584
           ,[AUTH_STATUS]
585
           ,[CHECKER_ID]
586
           ,[APPROVE_DT]
587
           ,[CREATE_DT_KT]
588
           ,[MAKER_ID_KT]
589
           ,[AUTH_STATUS_KT]
590
           ,[CHECKER_ID_KT]
591
		   ,[APPROVE_DT_KT]
592
           ,[CONFIRM_NOTES]
593
           ,[BRANCH_CREATE]
594
           ,[NOTES],RECORD_STATUS,TRANSFER_MAKER,TRANSFER_DT,TRASFER_USER_RECIVE,PROCESS,PAY_PHASE,DVDM_ID,RATE,RECIVER_MONEY,IS_PERIOD)
595
			VALUES
596
           (@p_REQ_PAY_ID,
597
			@p_REQ_PAY_CODE,
598
			@p_BRANCH_ID,CONVERT(DATE,@p_REQ_DT,103),
599
			@p_DEP_ID,
600
			@p_REQ_REASON,
601
			@p_REQ_TYPE,
602
			@P_REQ_ENTRIES,
603
			@p_REQ_DESCRIPTION,
604
			@p_REF_ID,
605
			@p_RECEIVER_PO,
606
			@p_RECEIVER_DEBIT,
607
			@p_REQ_PAY_TYPE,
608
			@p_REQ_TYPE_CURRENCY,
609
			@p_REQ_AMT,
610
			@p_REQ_TEMP_AMT,
611
			@p_MAKER_ID,
612
			GETDATE(),
613
			@p_EDITOR_ID,
614
			'E',
615
			NULL,
616
			NULL,
617
			NULL,
618
			NULL,
619
			NULL,
620
			NULL,
621
			NULL,
622
			NULL,
623
			@p_BRANCH_CREATE,
624
			@p_NOTES,@p_RECORD_STATUS,
625
			@p_TRANSFER_MAKER,
626
			NULL,
627
			@p_TRASFER_USER_RECIVE,
628
			@p_PROCESS,@p_PAY_PHASE,@p_DVDM_ID,@p_RATE,@p_RECIVER_MONEY,@p_IS_PERIOD)
629
			IF @@Error <> 0 GOTO ABORT
630
		--- INSERT VÀO BẢNG DETAIL NÊU TẠM ỨNG LÀ TẠM ỨNG THANH TOÁN
631
			DECLARE @hdoc INT
632
			EXEC sp_xml_preparedocument @hdoc OUTPUT, @p_XMP_TEMP;
633
			
634
			-- KIEM TRA NEU TAM UNG THANH TOAN
635
			IF((@p_REQ_TYPE='P' AND (@p_IS_PERIOD <>'Y' OR @p_IS_PERIOD IS NULL)) OR @p_REQ_TYPE='D')
636
			BEGIN
637
				DECLARE @PO_ID varchar(15),@TERM_PAY varchar(15),@AMT_PAY_SCHEDULE decimal(18,0),@REQ_ADV_ID_SCHE VARCHAR(15),@AMT_ADVANCE_SCHEDULE decimal(18,0),@AMT_PAY_DO decimal(18,0),
638
				@AMT_REMAIN_SCHEDULE decimal(18,0),@REQ_AD_DT varchar(20),@PROCESS varchar(15),@PAY_ID VARCHAR(15),
639
				@REF_ID VARCHAR(15),@REQ_PAY_DESC NVARCHAR(500), @REQ_PAY_ENTRIES NVARCHAR(250),@CURRENCY VARCHAR(15),@RATE DECIMAL(18,0),@CUST_ID VARCHAR(15), @EMP_ID VARCHAR(15),
640
				@AMT_PAY_REAL DECIMAL(18,2), @IS_CLOSED VARCHAR(1)= NULL,@INDEX_NS INT =0,@REASON NVARCHAR(1000), @REF_TYPE VARCHAR(15)
641
				DECLARE XmlDataPO CURSOR FOR
642
				SELECT *
643
				FROM
644
				OPENXML(@hdoc, '/Root/XmlDataPO', 2)
645
				WITH(REF_ID varchar(15),IS_CLOSED VARCHAR(1),REF_TYPE VARCHAR(15))
646
				OPEN XmlDataPO;
647
				DECLARE @INDEX_PO INT =0
648
				SET @INDEX_PO = 0
649
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
650
				WHILE @@fetch_status=0 
651
				BEGIN
652
					SET @INDEX_PO = @INDEX_PO +1
653
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
654
					--IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND REQ_PAY_ID IN (SELECT REQ_PAY_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS_KT<>'A' OR AUTH_STATUS_KT IS NULL) AND REQ_PAY_ID <>@p_REQ_PAY_ID))
655
					--BEGIN
656
					--	ROLLBACK TRANSACTION
657
					--	SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO/ hợp đồng số '+(SELECT PO_CODE FROM TR_PO_MASTER WHERE PO_ID = @REF_ID)+N' đang được tạm ứng. Vui lòng đợi giao dịch hoàn tất' ErrorDesc
658
					--	RETURN '-1'
659
					--END
660
					---- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
661
					--IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND REQ_PAY_ID IN (SELECT REQ_PAY_ID FROM TR_REQ_PAYMENT WHERE AUTH_STATUS_KT<>'A' OR AUTH_STATUS_KT IS NULL)))
662
					--BEGIN
663
					--	ROLLBACK TRANSACTION
664
					--	SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO/ hợp đồng số '+(SELECT PO_CODE FROM TR_PO_MASTER WHERE PO_ID = @REF_ID)+N' đang được thanh toán. Vui lòng đợi giao dịch hoàn tất' ErrorDesc
665
					--	RETURN '-1'
666
					--END
667
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
668
					-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
669
					IF(@p_TYPE_FUNCTION ='SEND')
670
					BEGIN
671
					IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND TYPE ='C' AND REQ_PAY_ID 
672
					IN (SELECT REQ_PAY_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS_KT<>'A' OR AUTH_STATUS_KT IS NULL)))
673
					BEGIN
674
						ROLLBACK TRANSACTION
675
						SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': Hợp đồng số '+
676
						(SELECT CONTRACT_ID FROM TR_CONTRACT WHERE CONTRACT_ID = @REF_ID)+N' đang được tạm ứng. Vui lòng đợi giao dịch hoàn tất' ErrorDesc
677
						RETURN '-1'
678
					END
679
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
680
					IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND TYPE ='C' AND REQ_PAY_ID IN (SELECT REQ_PAY_ID FROM TR_REQ_PAYMENT WHERE AUTH_STATUS_KT<>'A' OR AUTH_STATUS_KT IS NULL) AND REQ_PAY_ID <>@p_REQ_PAY_ID))
681
					BEGIN
682
						ROLLBACK TRANSACTION
683
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': Hợp đồng số '+
684
						(SELECT CONTRACT_ID FROM TR_CONTRACT WHERE CONTRACT_ID = @REF_ID)+N' đang được thanh toán. Vui lòng đợi giao dịch hoàn tất' ErrorDesc
685
						RETURN '-1'
686
					END
687
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
688
					IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND TYPE ='P' AND REQ_PAY_ID 
689
					IN (SELECT REQ_PAY_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS_KT<>'A' OR AUTH_STATUS_KT IS NULL)))
690
					BEGIN
691
						ROLLBACK TRANSACTION
692
						SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO số '+
693
						(SELECT PO_CODE FROM TR_PO_MASTER WHERE PO_ID = @REF_ID)+N' đang được tạm ứng. Vui lòng đợi giao dịch hoàn tất' ErrorDesc
694
						RETURN '-1'
695
					END
696
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
697
					IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND TYPE ='P' AND REQ_PAY_ID IN (SELECT REQ_PAY_ID FROM TR_REQ_PAYMENT WHERE AUTH_STATUS_KT<>'A' OR AUTH_STATUS_KT IS NULL) AND REQ_PAY_ID <>@p_REQ_PAY_ID))
698
					BEGIN
699
						ROLLBACK TRANSACTION
700
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO số '+
701
						(SELECT PO_CODE FROM TR_PO_MASTER WHERE PO_ID = @REF_ID)+N' đang được thanh toán. Vui lòng đợi giao dịch hoàn tất' ErrorDesc
702
						RETURN '-1'
703
					END
704
					END
705
					DECLARE @REQ_PAYDTID VARCHAR(15);
706
					EXEC SYS_CodeMasters_Gen 'TR_REQ_ADVANCE_DT', @REQ_PAYDTID OUT;
707
					IF @REQ_PAYDTID='' OR @REQ_PAYDTID IS NULL GOTO ABORT;
708
					INSERT INTO TR_REQ_ADVANCE_DT (REQ_PAYDTID,REQ_PAY_ID,REF_ID,TYPE,MAKER_ID,CREATE_DT,IS_CLOSED,REF_TYPE) VALUES
709
					(@REQ_PAYDTID,@p_REQ_PAY_ID,@REF_ID,'ADV_PAY',@p_MAKER_ID,GETDATE(),@IS_CLOSED,@REF_TYPE)
710
				IF @@error<>0 GOTO ABORT;
711
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
712
				END
713
				CLOSE XmlDataPO;
714
				DEALLOCATE XmlDataPO;
715
				--- CUSOR DANH SACH LICH THANH TOAN PO - HD	
716
				DECLARE XmlDataSchedule CURSOR FOR
717
				SELECT *
718
				FROM
719
				OPENXML(@hdoc, 'Root/XmlDataSchedule',2)
720
				WITH(PO_ID varchar(15),TERM_PAY varchar(15),AMT_PAY_SCHEDULE decimal(18,0),REQ_ADV_ID varchar(15),AMT_ADVANCE_SCHEDULE decimal(18,0), AMT_PAY_DO decimal(18,0),
721
				AMT_REMAIN_SCHEDULE decimal(18,0),REQ_AD_DT varchar(20),PROCESS varchar(15), PAY_ID VARCHAR(15),REF_ID VARCHAR(15),
722
				REQ_PAY_DESC NVARCHAR(500), REQ_PAY_ENTRIES NVARCHAR(250),CURRENCY VARCHAR(15),RATE DECIMAL(18,0),AMT_PAY_REAL DECIMAL(18,2))
723
				OPEN XmlDataSchedule
724
				FETCH NEXT FROM XmlDataSchedule INTO @PO_ID,@TERM_PAY,@AMT_PAY_SCHEDULE,@REQ_ADV_ID_SCHE,@AMT_ADVANCE_SCHEDULE,@AMT_PAY_DO,
725
				@AMT_REMAIN_SCHEDULE,@REQ_AD_DT,@PROCESS,@PAY_ID,@REF_ID,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@CURRENCY,@RATE,@AMT_PAY_REAL
726
				WHILE @@fetch_status=0 
727
				BEGIN
728
					DECLARE @p_REQ_PAY_SCHEDULE_ID VARCHAR(15);
729
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_SCHEDULE', @p_REQ_PAY_SCHEDULE_ID OUT;
730
					IF @p_REQ_PAY_SCHEDULE_ID='' OR @p_REQ_PAY_SCHEDULE_ID IS NULL GOTO ABORT;
731
					INSERT INTO TR_REQ_PAY_SCHEDULE(
732
					SCHEDULE_ID,REQ_PAY_ID,PAY_ID,AMT_PAY,PAY_PHASE,REQ_ADV_ID,AMT_ADVANCE,AMT_PAY_DO,AMT_REMAIN,REQ_PAY_DT,REQ_AD_DT,PROCESS,MAKER_ID,
733
					CREATE_DT,AUTH_STATUS_KT,PAYMENT_STATUS,TRN_TYPE,REF_ID,REQ_PAY_DESC,REQ_PAY_ENTRIES,CURRENCY,RATE,AMT_PAY_REAL)
734
					VALUES (@p_REQ_PAY_SCHEDULE_ID,@p_REQ_PAY_ID,@PAY_ID,@AMT_PAY_SCHEDULE,@TERM_PAY,@p_REQ_PAY_ID,@AMT_ADVANCE_SCHEDULE,@AMT_PAY_DO,@AMT_REMAIN_SCHEDULE,
735
					GETDATE(),CONVERT(DATETIME,@REQ_AD_DT,103),NULL,@p_MAKER_ID,GETDATE(),'U','','ADV_PAY',@REF_ID,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@CURRENCY,@RATE,@AMT_PAY_REAL)
736
				--- END KHAI BAO CURSOR
737
				IF @@error<>0 GOTO ABORT;
738
				FETCH NEXT FROM XmlDataSchedule INTO @PO_ID,@TERM_PAY,@AMT_PAY_SCHEDULE,@REQ_ADV_ID_SCHE,@AMT_ADVANCE_SCHEDULE,@AMT_PAY_DO,
739
				@AMT_REMAIN_SCHEDULE,@REQ_AD_DT,@PROCESS,@PAY_ID,@REF_ID,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@CURRENCY,@RATE,@AMT_PAY_REAL
740
				END
741
				CLOSE XmlDataSchedule;
742
				DEALLOCATE XmlDataSchedule;
743
			END
744
		--- END TẠM ỨNG THANH TOÁN
745
		--- TẠM ỨNG HĐ ĐỊNH KỲ
746
		IF(@p_REQ_TYPE = 'P' AND @p_IS_PERIOD='Y')
747
		BEGIN
748
				
749
				DECLARE XmlDataPO CURSOR FOR
750
				SELECT *
751
				FROM
752
				OPENXML(@hdoc, '/Root/XmlDataPO', 2)
753
				WITH(REF_ID varchar(15),IS_CLOSED VARCHAR(1),REF_TYPE VARCHAR(15))
754
				OPEN XmlDataPO;
755
				SET @INDEX_PO = 0
756
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
757
				WHILE @@fetch_status=0 
758
				BEGIN
759
					SET @INDEX_PO = @INDEX_PO +1
760
					DECLARE @REQ_PAYDTID_C VARCHAR(15);
761
					EXEC SYS_CodeMasters_Gen 'TR_REQ_ADVANCE_DT', @REQ_PAYDTID_C OUT;
762
					IF @REQ_PAYDTID_C='' OR @REQ_PAYDTID_C IS NULL GOTO ABORT;
763
					INSERT INTO TR_REQ_ADVANCE_DT (REQ_PAYDTID,REQ_PAY_ID,REF_ID,TYPE,MAKER_ID,CREATE_DT,IS_CLOSED,REF_TYPE) VALUES
764
					(@REQ_PAYDTID_C,@p_REQ_PAY_ID,@REF_ID,'ADV_PAY',@p_MAKER_ID,GETDATE(),@IS_CLOSED,@REF_TYPE)
765
				IF @@error<>0 GOTO ABORT;
766
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
767
				END
768
				CLOSE XmlDataPO;
769
				DEALLOCATE XmlDataPO;
770
				--- CUSOR DANH SACH LICH THANH TOAN PO - HD	
771
			----------------------------
772
			--INSERT FROM PERIOD	
773
				DECLARE XmlDataPeriod CURSOR FOR
774
				SELECT *
775
				FROM
776
				OPENXML(@hdoc, '/Root/XmlDataPeriod', 2)
777
				WITH(CONTRACT_ID varchar(15),PAY_DT_REAL VARCHAR(20),PAY_TYPE VARCHAR(5),
778
				OLD_INDEX DECIMAL(18,0),NEW_INDEX DECIMAL(18,0),AMT_PAY DECIMAL(18,2),CURRENCY VARCHAR(5), RATE DECIMAL(18,0), FROM_DATE VARCHAR(20), TO_DATE VARCHAR(20),PAY_PHASE NVARCHAR(250),REASON NVARCHAR(2000))
779
				OPEN XmlDataPeriod;
780
				DECLARE @CONTRACT_ID varchar(15),@PAY_DT_REAL VARCHAR(20),@PAY_TYPE VARCHAR(5),
781
				@OLD_INDEX DECIMAL(18,0),@NEW_INDEX DECIMAL(18,0),@AMT_PAY_PERIOD DECIMAL(18,2),@FROM_DATE VARCHAR(20),@TO_DATE VARCHAR(20),@PAY_PHASE NVARCHAR(250),@REASON_TTDK NVARCHAR(2000)
782
				FETCH NEXT FROM XmlDataPeriod INTO @CONTRACT_ID ,@PAY_DT_REAL ,@PAY_TYPE ,
783
				@OLD_INDEX ,@NEW_INDEX ,@AMT_PAY_PERIOD,@CURRENCY, @RATE,@FROM_DATE,@TO_DATE,@PAY_PHASE,@REASON_TTDK
784
				WHILE @@fetch_status=0 
785
				BEGIN
786
					-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
787
					IF(@p_TYPE_FUNCTION ='SEND')
788
					BEGIN
789
					IF(@NEW_INDEX <=@OLD_INDEX AND @NEW_INDEX >0 AND @OLD_INDEX >0  )
790
					BEGIN
791
						ROLLBACK TRANSACTION
792
						SELECT '-1' as Result, @p_REQ_PAY_ID  REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Chỉ số mới phải lớn hơn chỉ số cũ' ErrorDesc
793
						RETURN '-1'
794
					END
795
					END
796
					DECLARE @PERIOD_ID VARCHAR(15);
797
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_PERIOD', @PERIOD_ID OUT;
798
					IF @PERIOD_ID='' OR @PERIOD_ID IS NULL GOTO ABORT;
799
					INSERT INTO TR_REQ_PAY_PERIOD(PERIOD_ID,REQ_PAY_ID,PAY_TYPE, CONTRACT_ID,PAY_DT_REAL,OLD_INDEX,NEW_INDEX,AMT_PAY,AUTH_STATUS_KT,CURRENCY,RATE,FROM_DATE, TO_DATE,AD_PAY_ID,PROCESS,PAY_PHASE,REASON)
800
					VALUES (@PERIOD_ID,@p_REQ_PAY_ID,'ADV_PAY',@CONTRACT_ID,CONVERT(DATE,@PAY_DT_REAL,103),
801
				@OLD_INDEX ,@NEW_INDEX ,@AMT_PAY_PERIOD,'U',@CURRENCY, @RATE,CONVERT(DATE,@FROM_DATE,103),CONVERT(DATE,@TO_DATE,103),@p_REQ_PAY_ID,'0',@PAY_PHASE,@REASON_TTDK)
802
			IF @@error<>0 GOTO ABORT;
803
			FETCH NEXT FROM XmlDataPeriod INTO @CONTRACT_ID ,@PAY_DT_REAL ,@PAY_TYPE ,
804
				@OLD_INDEX ,@NEW_INDEX ,@AMT_PAY_PERIOD,@CURRENCY, @RATE,@FROM_DATE,@TO_DATE,@PAY_PHASE,@REASON_TTDK
805
			END
806
			CLOSE XmlDataPeriod;
807
			DEALLOCATE XmlDataPeriod;
808
			-- VALIDATE SO TIEN
809
			--IF(@p_REQ_AMT >= @TOTAL_SCHEDULE_AMT)
810
			--BEGIN
811
			--	ROLLBACK TRANSACTION
812
			--	SELECT '-1' as Result, '' REQ_PAY_ID, N'Số tiền thanh toán phải nhỏ hơn hoặc bằng tổng số tiền còn lại cần thanh toán: '+FORMAT(SUM(@TOTAL_SCHEDULE_AMT),'#,#', 'vi-VN') ErrorDesc
813
			--	RETURN '-1'
814
			--END
815
			----
816
		END
817
		---- END TẠM ỨNG HỢP ĐỒNG ĐỊNH KÌ
818
		--- INSERT PHƯƠNG THỨC THANH TOÁN
819
		----MethodCursor
820
			DECLARE @RECEIVE_ID varchar(15),@RECEIVE_NAME nvarchar(100),@REQ_PAY_REASON nvarchar(MAX),@TOTAL_AMT_METHOD decimal(18,0),@REQ_PAY_TYPE varchar(1),
821
					@ACC_NO VARCHAR(50), @ACC_NAME NVARCHAR(50), @ISSED_BY NVARCHAR(250), @ISSUED_DT VARCHAR(20),@CHECK_IN VARCHAR(15)
822
			DECLARE XmlDataMethod CURSOR FOR
823
			SELECT *
824
			FROM
825
			OPENXML(@hdoc, 'Root/XmlDataMethod',2)
826
			WITH(RECEIVE_ID varchar(15),RECEIVE_NAME nvarchar(100),REQ_PAY_REASON nvarchar(MAX),TOTAL_AMT decimal(18,0),REQ_PAY_TYPE varchar(1),
827
			REQ_PAY_DESC nvarchar(MAX),REQ_PAY_ENTRIES nvarchar(MAX),ACC_NO VARCHAR(50), 
828
			ACC_NAME NVARCHAR(50), ISSUED_BY NVARCHAR(250), ISSUED_DT VARCHAR(20),CURRENCY VARCHAR(15),RATE DECIMAL(18,0),CHECK_IN VARCHAR(15))
829
			OPEN XmlDataMethod
830
			FETCH NEXT FROM XmlDataMethod 
831
			INTO  @RECEIVE_ID,@RECEIVE_NAME,@REQ_PAY_REASON,@TOTAL_AMT_METHOD,@REQ_PAY_TYPE,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@ACC_NO,@ACC_NAME ,@ISSED_BY , @ISSUED_DT,@CURRENCY,@RATE,@CHECK_IN
832
			WHILE @@fetch_status=0 
833
			BEGIN
834
				IF(@REQ_PAY_TYPE <>'1')
835
				BEGIN
836
					SET @ISSUED_DT = NULL
837
				END
838
				DECLARE @p_REQ_PAY_METHOD_ID VARCHAR(15);
839
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_METHOD', @p_REQ_PAY_METHOD_ID OUT;
840
				IF @p_REQ_PAY_METHOD_ID='' OR @p_REQ_PAY_METHOD_ID IS NULL GOTO ABORT;
841
				INSERT INTO TR_REQ_PAY_METHOD(METHOD_ID,REQ_PAY_ID,EMP_ID,REQ_PAY_REASON,TOTAL_AMT,REQ_PAY_TYPE,REQ_PAY_DESC,REQ_PAY_ENTRIES, TEMP,MAKER_ID,
842
				CREATE_DT,ACC_NO,ACC_NAME,ISSUED_BY,ISSUED_DT,CURRENCY,RATE,CHECK_IN)
843
				VALUES (@p_REQ_PAY_METHOD_ID,@p_REQ_PAY_ID,@RECEIVE_ID,@REQ_PAY_REASON,@TOTAL_AMT_METHOD,@REQ_PAY_TYPE,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,'',
844
				@p_MAKER_ID,GETDATE(),@ACC_NO,@ACC_NAME,@ISSED_BY, CONVERT(DATE, @ISSUED_DT, 103),@CURRENCY,@RATE,@CHECK_IN)
845
			IF @@error<>0 GOTO ABORT;
846
			FETCH NEXT FROM XmlDataMethod 
847
			INTO @RECEIVE_ID,@RECEIVE_NAME,@REQ_PAY_REASON,@TOTAL_AMT_METHOD,@REQ_PAY_TYPE,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@ACC_NO,@ACC_NAME , @ISSED_BY , @ISSUED_DT,@CURRENCY,@RATE,@CHECK_IN
848
			END
849
			CLOSE XmlDataMethod;
850
			DEALLOCATE XmlDataMethod
851
		----END INSERT PHƯƠNG THỨC THANH TOÁN
852
		----INSERT VAO BANG DS KHACH HANG
853
			DECLARE XmlDataCus CURSOR FOR
854
			SELECT *
855
			FROM
856
			OPENXML(@hdoc, '/Root/XmlDataCus', 2)
857
			WITH(CUS_ID varchar(15), EMP_ID VARCHAR(15), AMT_PAY_DO DECIMAL(18,0),CURRENCY VARCHAR(15),RATE DECIMAL(18,0))
858
			OPEN XmlDataCus;
859
			FETCH NEXT FROM XmlDataCus INTO @CUST_ID, @EMP_ID,@AMT_PAY_DO,@CURRENCY,@RATE
860
				WHILE @@fetch_status=0 
861
				BEGIN		
862
					INSERT INTO TR_REQ_ADVANCE_CUS(REQ_PAY_ID,CUST_ID,EMP_ID,AMT_PAY_DO,CURRENCY,RATE,MAKER_ID,CREATE_DT)
863
					VALUES (@p_REQ_PAY_ID, @CUST_ID, @EMP_ID,@AMT_PAY_DO,@CURRENCY,@RATE,@p_MAKER_ID,GETDATE())
864
				--- END KHAI BAO CURSOR
865
				IF @@error<>0 GOTO ABORT;
866
				FETCH NEXT FROM XmlDataCus INTO  @CUST_ID, @EMP_ID,@AMT_PAY_DO,@CURRENCY,@RATE
867
				END
868
				CLOSE XmlDataCus;
869
				DEALLOCATE XmlDataCus;
870
		----END
871
			-- HANG MUC CHI PHI VA NGAN SACH
872
			DECLARE @TRADE_ID varchar(15),@GD_ID varchar(15),@AMT_APP decimal(18,2), @AMT_DO decimal(18,2), @AMT_EXE decimal(18,2),@AMT_REMAIN_GD decimal(18,2)
873
			DECLARE XmlDataGood CURSOR FOR
874
			SELECT *
875
			FROM
876
			OPENXML(@hdoc, 'Root/XmlDataGood',2) 
877
			WITH(TRADE_ID varchar(15),GD_ID varchar(15),AMT_APP decimal(18,2),AMT_DO decimal(18,2),AMT_EXE decimal(18,2),AMT_REMAIN decimal(18,2),CURRENCY VARCHAR(15), RATE DECIMAL(18,2),REASON NVARCHAR(1000))
878
			OPEN XmlDataGood
879
			FETCH NEXT FROM XmlDataGood INTO @TRADE_ID,@GD_ID ,@AMT_APP ,@AMT_DO,@AMT_EXE ,@AMT_REMAIN_GD,@CURRENCY,@RATE,@REASON
880
			WHILE @@fetch_status=0 BEGIN
881
				--- KIEM TRA NEU NGAN SACH SU DUNG THUC THE LON HON NGAN SACH CON LAI
882
				SET @INDEX_NS = @INDEX_NS +1
883
				-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
884
				IF(@p_TYPE_FUNCTION ='SEND')
885
				BEGIN
886
				IF((@AMT_EXE  > @AMT_REMAIN_GD))
887
				BEGIN
888
						ROLLBACK TRANSACTION
889
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_NS)+ N': Ngân sách sử dụng thực tế không được vượt quá ngân sách còn lại.' ErrorDesc
890
						RETURN '-1'
891
				END
892
				END
893
				DECLARE @p_BUDGET_ID VARCHAR(15);
894
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_BUDGET', @p_BUDGET_ID OUT;
895
				IF @p_BUDGET_ID='' OR @p_BUDGET_ID IS NULL GOTO ABORT;
896
				INSERT INTO TR_REQ_PAY_BUDGET(BUDG_ID,GD_ID,REQ_PAY_ID,TRADE_ID,AMT_APP,AMT_DO, AMT_EXE,AMT_REMAIN,MAKER_ID,CREATE_DT,CURRENCY,RATE,REASON) 
897
				VALUES (@p_BUDGET_ID,@GD_ID,@p_REQ_PAY_ID,@TRADE_ID,@AMT_APP,@AMT_DO, @AMT_EXE,@AMT_REMAIN_GD,@p_MAKER_ID, GETDATE(),@CURRENCY,@RATE,@REASON)
898
			IF @@error<>0 GOTO ABORT;
899
			FETCH NEXT FROM XmlDataGood INTO @TRADE_ID,@GD_ID ,@AMT_APP ,@AMT_DO,@AMT_EXE ,@AMT_REMAIN_GD,@CURRENCY,@RATE,@REASON
900
			END;
901
		CLOSE XmlDataGood;
902
		DEALLOCATE XmlDataGood;
903
		--- END INSERT NGAN SACH
904
		DECLARE @ATTACH_ID varchar(15),@CON_ID varchar(100),@CONT_CODE VARCHAR(50), @CON_NOTES VARCHAR(1000),@CON_DESC NVARCHAR(1000),@CON_TYPE VARCHAR(15),@AMT_ATT DECIMAL(18,2),@REF_DT VARCHAR(20),@NOTES_ATT NVARCHAR(1000)
905
		DECLARE XmlAttach CURSOR FOR
906
		SELECT *
907
		FROM
908
		OPENXML(@hdoc, 'Root/XmlAttach',2) 
909
		WITH(ATTACH_ID varchar(15),CON_ID varchar(100),CONT_CODE VARCHAR(50), CON_NOTES NVARCHAR(1000),CON_DESC NVARCHAR(1000),CON_TYPE VARCHAR(15),AMT_ATT DECIMAL(18,2),REF_DT VARCHAR(20))
910
		OPEN XmlAttach
911
		--INSERT CHUNG TU DINH KEM
912
				FETCH NEXT FROM XmlAttach INTO @ATTACH_ID,@CON_ID,@CONT_CODE,@NOTES_ATT,@CON_DESC,@CON_TYPE,@AMT_ATT,@REF_DT
913
				WHILE @@fetch_status=0 
914
				BEGIN
915
					IF (@REF_DT='')
916
					BEGIN
917
						SET @REF_DT = NULL
918
					END
919
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_ATTACH', @ATTACH_ID OUT;
920
					IF @ATTACH_ID='' OR @ATTACH_ID IS NULL GOTO ABORT;
921
					INSERT INTO TR_REQ_PAY_ATTACH(ATTACH_ID,REQ_PAY_ID,REF_ID,REF_CODE,NOTES,[DESCRIPTION],[TYPE],AMT,REF_DT) VALUES
922
					(@ATTACH_ID,@p_REQ_PAY_ID,@CON_ID,@CONT_CODE,@NOTES_ATT,@CON_DESC,@CON_TYPE,@AMT_ATT, CONVERT(DATE, @REF_DT,103))
923
				IF @@error<>0 GOTO ABORT;
924
				FETCH NEXT FROM XmlAttach INTO @ATTACH_ID,@CON_ID,@CONT_CODE,@NOTES_ATT,@CON_DESC,@CON_TYPE,@AMT_ATT,@REF_DT
925
				END
926
				CLOSE XmlAttach;
927
				DEALLOCATE XmlAttach;
928
		----END
929
		--- BAT DAU VALIDATE
930
		IF(@p_TYPE_FUNCTION ='SEND')
931
		BEGIN
932
			DECLARE @SUM_PTTT DECIMAL(18,0), @SUM_NS DECIMAL(18,0),@SUM_LICH_TT DECIMAL(18,0)
933
			SET @SUM_PTTT =(SELECT SUM(TOTAL_AMT * ISNULL(RATE,1)) FROM  TR_REQ_PAY_METHOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
934
			IF(EXISTS(SELECT * FROM TR_REQ_PAY_SCHEDULE WHERE REQ_PAY_ID =@p_REQ_PAY_ID) AND @p_REQ_TYPE ='D')
935
			BEGIN
936
				SET @SUM_LICH_TT =(SELECT SUM(AMT_PAY_REAL* ISNULL(RATE,1)) FROM TR_REQ_PAY_SCHEDULE WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
937
				IF(@p_REQ_AMT*ISNULL(@p_RATE,1) != ISNULL(@SUM_LICH_TT,0))
938
				BEGIN
939
					ROLLBACK TRANSACTION
940
					SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Tổng số tiền lịch thanh toán PO và hợp đồng liên quan đến khách hàng xử lý nợ phải bằng số tiền tạm ứng' ErrorDesc
941
					RETURN '-1'
942
				END
943
			END
944
			IF(EXISTS(SELECT * FROM TR_REQ_PAY_BUDGET WHERE REQ_PAY_ID =@p_REQ_PAY_ID))
945
			BEGIN
946
				SET @SUM_NS =(SELECT SUM(AMT_EXE * ISNULL(RATE,1)) FROM  TR_REQ_PAY_BUDGET WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
947
				IF(@p_REQ_AMT*ISNULL(@p_RATE,1) != ISNULL(@SUM_PTTT,0))
948
				BEGIN
949
					ROLLBACK TRANSACTION
950
					SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Tổng số tiền sử dụng ngân sách và chi phí phải bằng số tiền tạm ứng' ErrorDesc
951
					RETURN '-1'
952
				END
953
			END
954
			ELSE
955
			IF(@p_REQ_AMT*ISNULL(@p_RATE,1) != ISNULL(@SUM_PTTT,0))
956
			BEGIN
957
				ROLLBACK TRANSACTION
958
				SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Tổng số tiền phương thức thanh toán phải bằng số tiền tạm ứng' ErrorDesc
959
				RETURN '-1'
960
			END
961
			
962
		END
963
		----END
964
		--- INSERT SẴN VÀO BẢNG TR_REQUEST_PROCESS
965
			IF(@p_REQ_TYPE ='I')
966
			BEGIN
967
				DECLARE @tmp table(ROLE_ID VARCHAR(25),BRANCH_ID varchar(15),AMT DECIMAL(18,0))
968
				IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE) ='HS')
969
				BEGIN
970
					--INSERT INTO @tmp  SELECT A.ROLE_ID, A.BRANCH_ID,A.LIMIT_VALUE FROM TL_SYSROLE_LIMIT A WHERE A.LIMIT_TYPE='ADV_PAY'AND BRANCH_ID ='DV0001'
971
					IF EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06908%' AND DEP_ID =@p_DEP_ID)
972
					BEGIN
973
						INSERT INTO @tmp  SELECT A.ROLE_ID, A.BRANCH_ID,A.LIMIT_VALUE FROM TL_SYSROLE_LIMIT A WHERE A.LIMIT_TYPE='ADV_PAY'AND BRANCH_ID ='DV0001' AND A.ROLE_ID <>'GDK'
974
					END
975
					ELSE IF EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06910%' AND DEP_ID =@p_DEP_ID)
976
					BEGIN
977
						INSERT INTO @tmp  SELECT A.ROLE_ID, A.BRANCH_ID,A.LIMIT_VALUE FROM TL_SYSROLE_LIMIT A WHERE A.LIMIT_TYPE='ADV_PAY'AND BRANCH_ID ='DV0001' AND A.ROLE_ID <>'GDK'
978
					END
979
					ELSE IF (EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06900%' AND DEP_ID =@p_DEP_ID) OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06901%' AND DEP_ID =@p_DEP_ID)
980
					OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06902%' AND DEP_ID =@p_DEP_ID) OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06903%' AND DEP_ID =@p_DEP_ID) 
981
					OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06904%' AND DEP_ID =@p_DEP_ID) OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06920%' AND DEP_ID =@p_DEP_ID))
982
					BEGIN
983
						INSERT INTO @tmp  SELECT A.ROLE_ID, A.BRANCH_ID,A.LIMIT_VALUE FROM TL_SYSROLE_LIMIT A WHERE A.LIMIT_TYPE='ADV_PAY'AND BRANCH_ID ='DV0001' AND A.ROLE_ID NOT IN ('GDK','PTGD')
984
					END
985
					ELSE IF (EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06907%' AND DEP_ID =@p_DEP_ID) OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06909%' AND DEP_ID =@p_DEP_ID)
986
					OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06911%' AND DEP_ID =@p_DEP_ID) OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06921%' AND DEP_ID =@p_DEP_ID) 
987
					OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06922%' AND DEP_ID =@p_DEP_ID))
988
					BEGIN
989
						INSERT INTO @tmp  SELECT A.ROLE_ID, A.BRANCH_ID,A.LIMIT_VALUE FROM TL_SYSROLE_LIMIT A WHERE A.LIMIT_TYPE='ADV_PAY'AND BRANCH_ID ='DV0001' AND A.ROLE_ID <>'PTGD'
990
					END
991
					ELSE
992
					BEGIN
993
						INSERT INTO @tmp  SELECT A.ROLE_ID, A.BRANCH_ID,A.LIMIT_VALUE FROM TL_SYSROLE_LIMIT A WHERE A.LIMIT_TYPE='ADV_PAY'AND BRANCH_ID ='DV0001'
994
					END
995
				END
996
				ELSE
997
				BEGIN
998
					IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE) ='CN')
999
					BEGIN
1000
						--- BAO GOM DON VI & 3 CAP DUYET CUA HOI SO
1001
						INSERT INTO @tmp  SELECT A.ROLE_ID, A.BRANCH_ID,A.LIMIT_VALUE FROM TL_SYSROLE_LIMIT A WHERE A.LIMIT_TYPE='ADV_PAY' AND BRANCH_ID =@p_BRANCH_CREATE
1002
						INSERT INTO @tmp  SELECT A.ROLE_ID, A.BRANCH_ID,A.LIMIT_VALUE FROM TL_SYSROLE_LIMIT A WHERE A.LIMIT_TYPE='ADV_PAY'AND BRANCH_ID ='DV0001'
1003
					END
1004
					ELSE IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE) ='PGD')
1005
					BEGIN
1006
						INSERT INTO @tmp  SELECT A.ROLE_ID, A.BRANCH_ID,A.LIMIT_VALUE FROM TL_SYSROLE_LIMIT A WHERE A.LIMIT_TYPE='ADV_PAY' AND BRANCH_ID =(SELECT FATHER_ID FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE)
1007
						INSERT INTO @tmp  SELECT A.ROLE_ID, A.BRANCH_ID,A.LIMIT_VALUE FROM TL_SYSROLE_LIMIT A WHERE A.LIMIT_TYPE='ADV_PAY'AND BRANCH_ID ='DV0001'
1008
					END
1009
				END
1010
				DECLARE @ROLE_ID VARCHAR(20), @BRANCH_ID VARCHAR(20), @INDEX INT =0, @SL_ROLE INT =0,@LIMIT_VALUE DECIMAL(18,0)
1011
				SET @SL_ROLE = (SELECT COUNT(*) FROM @tmp)
1012
				DECLARE @ISLEAF VARCHAR(1) = 'Y', @PARENT_ID VARCHAR(10) = '', @STATUS VARCHAR(1) = 'C', @NOTES NVARCHAR(500)
1013
				DECLARE CUR_PR CURSOR FOR  SELECT A.ROLE_ID, A.BRANCH_ID,A.AMT FROM @tmp A
1014
				OPEN CUR_PR
1015
				FETCH NEXT FROM CUR_PR INTO @ROLE_ID,@BRANCH_ID,@LIMIT_VALUE
1016
				WHILE @@FETCH_STATUS =0 --AND @STOP=0
1017
				BEGIN								
1018
					SET @INDEX= @INDEX+1
1019
					IF @INDEX = @SL_ROLE
1020
						SET @ISLEAF = 'Y'
1021
					ELSE
1022
						SET @ISLEAF = 'N'
1023
					SET @NOTES = (SELECT N'Đợi '+ ROLE_DESC + N' phê duyệt' FROM TL_SYSROLE WHERE ROLE_ID = @ROLE_ID)
1024

    
1025
					IF(@INDEX=1 )
1026
					BEGIN		
1027
						SET @PARENT_ID = NULL
1028
						SET @STATUS = 'C'							
1029
						--INSERT INTO TR_REQUEST_PROCESS VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),'C',@ROLE_ID,@BRANCH_ID,NULL,NULL,NULL,@ISLEAF)
1030
					END				
1031
					ELSE 
1032
					BEGIN
1033
						SET @PARENT_ID = CONVERT(VARCHAR(5),@INDEX -1)
1034
						SET @STATUS = 'U'
1035
					END
1036
						IF(@LIMIT_VALUE >= @p_REQ_AMT)
1037
						BEGIN
1038
							INSERT INTO dbo.PL_REQUEST_PROCESS
1039
							(
1040
								REQ_ID,
1041
								PROCESS_ID,
1042
								STATUS,
1043
								ROLE_USER,
1044
								BRANCH_ID,
1045
								CHECKER_ID,
1046
								APPROVE_DT,
1047
								PARENT_PROCESS_ID,
1048
								IS_LEAF, COST_ID, DVDM_ID, NOTES
1049
							)
1050
							VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),@STATUS,@ROLE_ID,@BRANCH_ID,NULL,NULL, @PARENT_ID,'Y', '',@p_DVDM_ID,@NOTES)
1051
							--INSERT INTO PL_REQUEST_PROCESS VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),@STATUS,@ROLE_ID,@BRANCH_ID,NULL,NULL, @PARENT_ID,'Y')
1052
							BREAK;
1053
						END
1054
						ELSE
1055
							INSERT INTO PL_REQUEST_PROCESS (
1056
								REQ_ID,
1057
								PROCESS_ID,
1058
								STATUS,
1059
								ROLE_USER,
1060
								BRANCH_ID,
1061
								CHECKER_ID,
1062
								APPROVE_DT,
1063
								PARENT_PROCESS_ID,
1064
								IS_LEAF, COST_ID, DVDM_ID, NOTES
1065
							) VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),@STATUS,@ROLE_ID,@BRANCH_ID,NULL,NULL, @PARENT_ID,@ISLEAF, '', @p_DVDM_ID, @NOTES)
1066
					--END
1067
					
1068
					FETCH NEXT FROM CUR_PR INTO @ROLE_ID,@BRANCH_ID,@LIMIT_VALUE
1069
				END
1070
				CLOSE CUR_PR
1071
				DEALLOCATE CUR_PR
1072
			END
1073
			--- CAP NHAT THANG CUOI CUNG LA Y
1074
			--UPDATE TR_REQUEST_PROCESS SET IS_LEAF='Y' WHERE ID = (SELECT MAX(ID) FROM TR_REQUEST_PROCESS WHERE REQ_ID = @p_REQ_PAY_ID)
1075
		COMMIT TRANSACTION
1076
		IF(@p_TYPE_FUNCTION ='SEND')-- BAT DAU GUI PHE DUYET
1077
		BEGIN
1078
				--ROLLBACK TRANSACTION
1079
				-- CAP NHAT TINH TRANG DUYET KE TOAN LA DANG XU LY 
1080
				--UPDATE TR_REQ_ADVANCE_PAYMENT SET AUTH_STATUS ='U' WHERE REQ_PAY_ID =@p_REQ_PAY_ID
1081
				--INSERT INTO dbo.PL_PROCESS(REQ_ID,PROCESS_ID,CHECKER_ID,APPROVE_DT,PROCESS_DESC,NOTES)
1082
				--VALUES(@p_REQ_PAY_ID,'SEND',@p_MAKER_ID,GETDATE(), N'Đơn vị gửi phê duyệt',N'Đơn vị tạo phiếu tạm ứng và gửi phê duyệt')
1083
				--SELECT '4' as Result, @p_REQ_PAY_ID AS REQ_PAY_ID, N'Gửi phê duyệt thành công' ErrorDesc
1084
				--RETURN '4'
1085
				IF(@p_TYPE_FUNCTION ='SEND') -- KIEM TRA NEU 2 BIEN XML KHAC NULL TUC LA DANG TRONG QUA TRINH LUU NHAP
1086
				BEGIN
1087
				DECLARE @BRANCH_TYPE_CR VARCHAR(15)
1088
				SET @BRANCH_TYPE_CR =(SELECT TOP 1 BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID =@p_BRANCH_CREATE)
1089
				IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE TRASFER_USER_RECIVE ='' OR TRASFER_USER_RECIVE IS NULL) AND @BRANCH_TYPE_CR ='HS' AND @p_REQ_TYPE ='I')
1090
				BEGIN
1091
					DECLARE @USER_TP VARCHAR(15)
1092
					SET @USER_TP =(SELECT TOP 1 TLNANME FROM TL_USER WHERE SECUR_CODE =@p_DEP_ID AND RoleName IN ('GDDV','TPTC','TC','KTT'))
1093
					UPDATE TR_REQ_ADVANCE_PAYMENT SET TRASFER_USER_RECIVE =@USER_TP WHERE REQ_PAY_ID =@p_REQ_PAY_ID
1094
				END
1095
				ELSE IF(EXISTS(SELECT * FROM TR_REQ_PAYMENT WHERE TRASFER_USER_RECIVE ='' OR TRASFER_USER_RECIVE IS NULL) AND @BRANCH_TYPE_CR ='PGD')
1096
				BEGIN
1097
					DECLARE @USER_TPGD VARCHAR(15)
1098
					SET @USER_TPGD =(SELECT TOP 1 TLNANME FROM TL_USER WHERE SECUR_CODE =@p_DEP_ID AND RoleName IN ('TPGD'))
1099
					UPDATE TR_REQ_ADVANCE_PAYMENT SET TRASFER_USER_RECIVE =@USER_TPGD WHERE REQ_PAY_ID =@p_REQ_PAY_ID
1100
				END
1101
				-- CAP NHAT TINH TRANG DUYET KE TOAN LA DANG XU LY 
1102
				UPDATE TR_REQ_ADVANCE_PAYMENT SET AUTH_STATUS ='U', PROCESS = NULL WHERE REQ_PAY_ID =@p_REQ_PAY_ID
1103
				INSERT INTO dbo.PL_PROCESS(REQ_ID,PROCESS_ID,CHECKER_ID,APPROVE_DT,PROCESS_DESC,NOTES)
1104
				VALUES(@p_REQ_PAY_ID,'SEND',@p_MAKER_ID,GETDATE(), N'Đơn vị gửi phê duyệt',N'Đơn vị tạo phiếu tạm ứng và gửi phê duyệt')
1105
				SELECT '4' as Result, '' REQ_PAY_ID, N'Gửi phê duyệt thành công' ErrorDesc
1106
				RETURN '4'
1107
			END
1108
		END
1109
		SELECT '0' as Result, @p_REQ_PAY_ID  REQ_PAY_ID,@p_REQ_PAY_CODE AS REQ_PAY_CODE, '' ErrorDesc
1110
		RETURN '0'
1111
ABORT:
1112
BEGIN
1113
		ROLLBACK TRANSACTION
1114
		SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, '' ErrorDesc
1115
		RETURN '-1'
1116
End
1117
¿
1118

    
1119
ALTER PROCEDURE [dbo].[TR_REQ_ADVANCE_PAYMENT_Upd]
1120
@p_REQ_PAY_ID	varchar(15)= NULL,
1121
@p_REQ_PAY_CODE	varchar(50)	= NULL,
1122
@p_REQ_DT VARCHAR(20)= NULL,
1123
@p_BRANCH_ID	varchar(15)	= NULL,
1124
@p_DEP_ID	varchar(15)	= NULL,
1125
@p_REQ_REASON	nvarchar(MAX)	= NULL,
1126
@p_REQ_TYPE	varchar(15)	= NULL,
1127
@P_REQ_ENTRIES nvarchar(MAX)	= NULL,
1128
@p_REQ_DESCRIPTION	nvarchar(MAX)	= NULL,
1129
@p_REF_ID	varchar(15)	= NULL,
1130
@p_RECEIVER_PO	nvarchar(250)	= NULL,
1131
@p_RECEIVER_DEBIT	nvarchar(250)	= NULL,
1132
@p_REQ_PAY_TYPE	varchar(15)	= NULL,
1133
@p_REQ_TYPE_CURRENCY	nvarchar(50)	= NULL,
1134
@p_REQ_AMT	decimal(18, 0)	= NULL,
1135
@p_REQ_TEMP_AMT	decimal(18, 0)	= NULL,
1136
@p_MAKER_ID	varchar(15)	= NULL,
1137
@p_CREATE_DT	varchar(25)	= NULL,
1138
@p_EDITOR_ID	varchar(15)	= NULL,
1139
@p_AUTH_STATUS	varchar(1)	= NULL,
1140
@p_CHECKER_ID	varchar(15)	= NULL,
1141
@p_APPROVE_DT	varchar(25)	= NULL,
1142
@p_CREATE_DT_KT	varchar(25)	= NULL,
1143
@p_MAKER_ID_KT	varchar(15)	= NULL,
1144
@p_AUTH_STATUS_KT	varchar(1)	= NULL,
1145
@p_CHECKER_ID_KT	varchar(1)	= NULL,
1146
@p_APPROVE_DT_KT  varchar(25)= null,
1147
@p_CONFIRM_NOTE	nvarchar(500)	= NULL,
1148
@p_BRANCH_CREATE	varchar(15)	= NULL,
1149
@p_NOTES	varchar(15)	= NULL,
1150
@p_RECORD_STATUS	varchar(1)	= NULL,
1151
@p_TRANSFER_MAKER	nvarchar(50)	= NULL,
1152
@p_TRANSFER_DT	varchar(25)	= NULL,
1153
@p_TRASFER_USER_RECIVE	varchar(15)	= NULL,
1154
@p_PROCESS	varchar(15)	= NULL,
1155
@p_PAY_PHASE VARCHAR(15)= NULL,
1156
@p_DVDM_ID VARCHAR(15)= NULL,
1157
@p_RATE DECIMAL(18,0) =0,
1158
@p_RECIVER_MONEY VARCHAR(15)= NULL,
1159
@p_XMP_TEMP XML = NULL,
1160
@p_TYPE_FUNCTION VARCHAR(15) = NULL,
1161
@p_IS_PERIOD VARCHAR(5) = NULL
1162
AS
1163
--Validation is here
1164
/*
1165
DECLARE @ERRORSYS NVARCHAR(15) = '' 
1166
  IF ( NOT EXISTS ( SELECT * FROM ASS_COLLECT WHERE ))
1167
	 SET @ERRORSYS = ''
1168
IF @ERRORSYS <> '' 
1169
BEGIN
1170
	SELECT ErrorCode Result, ''  CAR_ID, ErrorDesc ErrorDesc FROM SYS_ERROR WHERE ErrorCode = @ERRORSYS
1171
	RETURN '0'
1172
END 
1173
*/
1174
	--Luanlt-2019/10/15 Disable Validation
1175
	--DECLARE @ERRORSYS NVARCHAR(15) = '' 
1176
	--IF EXISTS(SELECT * FROM TR_PO_MASTER WHERE REF_ID  = @p_REF_ID )
1177
	--BEGIN
1178
	--	SET @ERRORSYS = 'ASSC-00005'
1179
	--	SELECT ErrorCode Result, '' REQ_PAY_ID, ErrorDesc ErrorDesc FROM SYS_ERROR WHERE ErrorCode = @ERRORSYS
1180
	--	RETURN '-1'
1181
	--END
1182
	DECLARE @BRANCH_TYPE_CR VARCHAR(15)
1183
	SET @BRANCH_TYPE_CR =(SELECT TOP 1 BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID =@p_BRANCH_CREATE)
1184
	DECLARE @ACC_NUM VARCHAR(15)
1185
	SET @ACC_NUM = (SELECT TOP 1 ACC_NUM FROM CM_ACCOUNT_PAY WHERE REF_ID =@p_REF_ID)
1186
	IF @p_REQ_PAY_CODE IS NULL OR @p_REQ_PAY_CODE =''
1187
	BEGIN
1188
		SELECT '-1' Result, '' REQ_PAY_ID, N'Mã số phiếu không được để trống' ErrorDesc
1189
		RETURN '-1'
1190
	END
1191
	IF (@p_REQ_TYPE='I' AND (@p_RECEIVER_DEBIT IS NULL OR @p_RECEIVER_DEBIT =''))
1192
	BEGIN
1193
		SELECT '-1' Result, '' REQ_PAY_ID, N'Tài khoản nhân viên tạm ứng không được để trống' ErrorDesc
1194
		RETURN '-1'
1195
	END
1196
	IF EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_CODE = @p_REQ_PAY_CODE AND REQ_PAY_ID <> @p_REQ_PAY_ID)
1197
	BEGIN
1198
		SELECT '-1' Result, '' REQ_PAY_ID, N'Mã số phiếu đã tồn tại trong hệ thống' ErrorDesc
1199
		RETURN '-1'
1200
	END
1201
	--IF(((SELECT TOP 1 ACC_NUM FROM CM_ACCOUNT_PAY WHERE REF_ID =@p_REF_ID)<>@p_RECEIVER_DEBIT) AND @p_REQ_TYPE='I')
1202
	IF(@ACC_NUM <>@p_RECEIVER_DEBIT AND @p_REQ_TYPE='I' AND LEN(ISNULL(@ACC_NUM,''))>0)
1203
	BEGIN
1204
		SELECT '-1' as Result, '' REQ_PAY_ID, N'Tài khoản tạm ứng của nhân viên đã tồn tại trong hệ thống! Bạn không được phép chỉnh sửa' ErrorDesc
1205
		RETURN '-1'
1206
	END
1207
	IF(NOT EXISTS(SELECT * FROM CM_ACCOUNT_PAY WHERE REF_ID =@p_REF_ID) AND @p_REQ_TYPE='I')
1208
		BEGIN
1209
			INSERT INTO CM_ACCOUNT_PAY (REF_ID,ACC_TYPE,ACC_NUM,ACC_NAME,FUNTION,MAKER_ID,AUTH_STATUS,CREATE_DT,TK_GL,TK_GL_NAME) VALUES (@p_REF_ID,'ADV_PAY',@p_RECEIVER_DEBIT,'TK TAM UNG CUA NHAN VIEN ' +@p_REF_ID,'I',@p_MAKER_ID,'U',GETDATE(),'361200001','TAM UNG DE HOAT DONG NGHIEP VU')
1210
		END
1211
	ELSE
1212
		BEGIN
1213
			IF(@ACC_NUM <>@p_RECEIVER_DEBIT AND @p_REQ_TYPE='I' AND LEN(ISNULL(@ACC_NUM,''))>0)
1214
			BEGIN
1215
				--ROLLBACK TRANSACTION
1216
				SELECT '-1' as Result, '' REQ_PAY_ID, N'Tài khoản tạm ứng của nhân viên đã tồn tại trong hệ thống! Bạn không được phép chỉnh sửa' ErrorDesc
1217
				RETURN '-1'
1218
			END
1219
	END
1220
	IF(EXISTS(SELECT * FROM CM_ACCOUNT_PAY WHERE ACC_NUM =@p_RECEIVER_DEBIT AND REF_ID!=@p_REF_ID))
1221
	BEGIN
1222
				SELECT '-1' as Result, '' REQ_PAY_ID, N'Tài khoản tạm ứng này đã tồn tại trong hệ thống và được gán cho một nhân viên khác' ErrorDesc
1223
				RETURN '-1'
1224
	END
1225
	IF(LEN(ISNULL(@p_RECEIVER_DEBIT,''))>15 AND @p_REQ_TYPE ='I')
1226
	BEGIN
1227
				SELECT '-1' as Result, '' REQ_PAY_ID, N'Tài khoản tạm ứng này không được vượt quá 15 kí tự' ErrorDesc
1228
				RETURN '-1'
1229
	END
1230
	-- 19-11-2019 LUCTV BO SUNG VALIDATE TRONG QUA TRINH TEST SAU KHI UAT
1231
	-- NEU TAM UNG CHO NHA CUNG CAP THI DOT THANH TOAN KHONG DUOC PHEP NULL
1232
	-- SO TIEN THANH TOÁN PHAI LON HON KHONG
1233
		IF(@p_REQ_AMT <=0)
1234
		BEGIN	
1235
			SELECT '-1' as Result, '' REQ_PAY_ID, N'Số tiền tạm ứng phải lớn hơn 0' ErrorDesc
1236
			RETURN '-1'
1237
		END
1238
	 -- END VALIDATE TRONG QUA TRINH TEST UAT
1239
		BEGIN TRANSACTION
1240
		--IF(@p_DVDM_ID IS NULL OR @p_DVDM_ID ='')
1241
		--BEGIN
1242
		--	SET @p_DVDM_ID = (SELECT TOP 1 DVDM_ID FROM CM_DVDM WHERE DVDM_NAME ='KHOI TAI CHINH')
1243
		--END
1244
		UPDATE TR_REQ_ADVANCE_PAYMENT SET 
1245
		REF_ID = @p_REF_ID,
1246
		DEP_ID= @p_DEP_ID,REQ_REASON = @p_REQ_REASON, REQ_PAY_TYPE = @p_REQ_PAY_TYPE,REQ_DT = CONVERT(DATE,@p_REQ_DT,103),
1247
		REQ_AMT = @p_REQ_AMT,
1248
		NOTES= @p_NOTES,
1249
		REQ_TYPE= @p_REQ_TYPE,REQ_DESCRIPTION = @p_REQ_DESCRIPTION,RECEIVER_PO =@p_RECEIVER_PO, RECEIVER_DEBIT= @p_RECEIVER_DEBIT,
1250
		REQ_TEMP_AMT=@p_REQ_TEMP_AMT,REQ_ENTRIES = @P_REQ_ENTRIES,BRANCH_ID = @p_BRANCH_ID,REQ_PAY_CODE = @p_REQ_PAY_CODE, PAY_PHASE =@p_PAY_PHASE,
1251
		AUTH_STATUS='E', DVDM_ID=@p_DVDM_ID, RATE =@p_RATE,REQ_TYPE_CURRENCY =@p_REQ_TYPE_CURRENCY, RECIVER_MONEY= @p_RECIVER_MONEY, TRASFER_USER_RECIVE =@p_TRASFER_USER_RECIVE,IS_PERIOD =@p_IS_PERIOD
1252
		WHERE REQ_PAY_ID =@p_REQ_PAY_ID
1253
		IF @@Error <> 0 GOTO ABORT
1254
		--- INSERT VÀO BẢNG DETAIL NÊU TẠM ỨNG LÀ TẠM ỨNG THANH TOÁN
1255
			DECLARE @hdoc INT
1256
			EXEC sp_xml_preparedocument @hdoc OUTPUT, @p_XMP_TEMP;
1257
			
1258
			-- KIEM TRA NEU TAM UNG THANH TOAN
1259
			IF((@p_REQ_TYPE='P' AND (@p_IS_PERIOD <>'Y' OR @p_IS_PERIOD IS NULL)) OR @p_REQ_TYPE='D')
1260
			BEGIN
1261
				DELETE FROM TR_REQ_ADVANCE_DT WHERE REQ_PAY_ID=@p_REQ_PAY_ID
1262
				DELETE FROM TR_REQ_PAY_SCHEDULE WHERE REQ_PAY_ID=@p_REQ_PAY_ID
1263
				DECLARE @PO_ID varchar(15),@TERM_PAY varchar(15),@AMT_PAY_SCHEDULE decimal(18,0),@REQ_ADV_ID_SCHE VARCHAR(15),@AMT_ADVANCE_SCHEDULE decimal(18,0),@AMT_PAY_DO decimal(18,0),
1264
				@AMT_REMAIN_SCHEDULE decimal(18,0),@REQ_AD_DT varchar(20),@PROCESS varchar(15),@PAY_ID VARCHAR(15),
1265
				@REF_ID VARCHAR(15),@REQ_PAY_DESC NVARCHAR(500), @REQ_PAY_ENTRIES NVARCHAR(250),@CURRENCY VARCHAR(15),@RATE DECIMAL(18,0),@CUST_ID VARCHAR(15),
1266
				@EMP_ID VARCHAR(15),@AMT_PAY_REAL DECIMAL(18,2),@CHECK_IN VARCHAR(15),@IS_CLOSED VARCHAR(1)= NULL,@INDEX_NS INT =0,@REASON NVARCHAR(1000),@REF_TYPE VARCHAR(15)
1267
				DECLARE XmlDataPO CURSOR FOR
1268
				SELECT *
1269
				FROM
1270
				OPENXML(@hdoc, '/Root/XmlDataPO', 2)
1271
				WITH(REF_ID varchar(15),IS_CLOSED VARCHAR(1),REF_TYPE VARCHAR(15))
1272
				OPEN XmlDataPO;
1273
				DECLARE @INDEX_PO INT =0
1274
				SET @INDEX_PO = 0
1275
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
1276
				WHILE @@fetch_status=0 
1277
				BEGIN
1278
					SET @INDEX_PO = @INDEX_PO +1
1279
					-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
1280
					IF(@p_TYPE_FUNCTION ='SEND')
1281
					BEGIN
1282
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
1283
					IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND TYPE ='C' AND REQ_PAY_ID 
1284
					IN (SELECT REQ_PAY_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS_KT<>'A' OR AUTH_STATUS_KT IS NULL)))
1285
					BEGIN
1286
						ROLLBACK TRANSACTION
1287
						SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO/ hợp đồng số '+
1288
						(SELECT CONTRACT_ID FROM TR_CONTRACT WHERE CONTRACT_ID = @REF_ID)+N' đang được tạm ứng. Vui lòng đợi giao dịch hoàn tất' ErrorDesc
1289
						RETURN '-1'
1290
					END
1291
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
1292
					IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND TYPE ='C' AND REQ_PAY_ID IN (SELECT REQ_PAY_ID FROM TR_REQ_PAYMENT WHERE AUTH_STATUS_KT<>'A' OR AUTH_STATUS_KT IS NULL) AND REQ_PAY_ID <>@p_REQ_PAY_ID))
1293
					BEGIN
1294
						ROLLBACK TRANSACTION
1295
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': Hợp đồng số '+
1296
						(SELECT CONTRACT_ID FROM TR_CONTRACT WHERE CONTRACT_ID = @REF_ID)+N' đang được thanh toán. Vui lòng đợi giao dịch hoàn tất' ErrorDesc
1297
						RETURN '-1'
1298
					END
1299
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
1300
					IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND TYPE ='P' AND REQ_PAY_ID 
1301
					IN (SELECT REQ_PAY_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS_KT<>'A' OR AUTH_STATUS_KT IS NULL)))
1302
					BEGIN
1303
						ROLLBACK TRANSACTION
1304
						SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO số '+
1305
						(SELECT PO_CODE FROM TR_PO_MASTER WHERE PO_ID = @REF_ID)+N' đang được tạm ứng. Vui lòng đợi giao dịch hoàn tất' ErrorDesc
1306
						RETURN '-1'
1307
					END
1308
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
1309
					IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND TYPE ='P' AND REQ_PAY_ID IN (SELECT REQ_PAY_ID FROM TR_REQ_PAYMENT WHERE AUTH_STATUS_KT<>'A' OR AUTH_STATUS_KT IS NULL) AND REQ_PAY_ID <>@p_REQ_PAY_ID))
1310
					BEGIN
1311
						ROLLBACK TRANSACTION
1312
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO số '+
1313
						(SELECT PO_CODE FROM TR_PO_MASTER WHERE PO_ID = @REF_ID)+N' đang được thanh toán. Vui lòng đợi giao dịch hoàn tất' ErrorDesc
1314
						RETURN '-1'
1315
					END
1316
					--- KIEM TRA XEM PO NAY DUOC THANH TOAN HAY CHUA
1317
					IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND TYPE ='P' AND REF_ID IN (SELECT PO_ID FROM TR_PO_MASTER WHERE IS_CLOSED ='Y' )))
1318
					BEGIN
1319
						ROLLBACK TRANSACTION
1320
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO số '+
1321
						(SELECT PO_CODE FROM TR_PO_MASTER WHERE PO_ID = @REF_ID)+N' đã được thanh toán. Vui lòng hủy bản nháp!' ErrorDesc
1322
						RETURN '-1'
1323
					END
1324
					END
1325
					DECLARE @REQ_PAYDTID VARCHAR(15);
1326
					EXEC SYS_CodeMasters_Gen 'TR_REQ_ADVANCE_DT', @REQ_PAYDTID OUT;
1327
					IF @REQ_PAYDTID='' OR @REQ_PAYDTID IS NULL GOTO ABORT;
1328
					INSERT INTO TR_REQ_ADVANCE_DT (REQ_PAYDTID,REQ_PAY_ID,REF_ID,TYPE,MAKER_ID,CREATE_DT,IS_CLOSED,REF_TYPE) VALUES
1329
					(@REQ_PAYDTID,@p_REQ_PAY_ID,@REF_ID,'ADV_PAY',@p_MAKER_ID,GETDATE(),@IS_CLOSED,@REF_TYPE)
1330
				IF @@error<>0 GOTO ABORT;
1331
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
1332
				END
1333
				CLOSE XmlDataPO;
1334
				DEALLOCATE XmlDataPO;
1335
				--- CUSOR DANH SACH LICH THANH TOAN PO - HD	
1336
				DECLARE XmlDataSchedule CURSOR FOR
1337
				SELECT *
1338
				FROM
1339
				OPENXML(@hdoc, 'Root/XmlDataSchedule',2)
1340
				WITH(PO_ID varchar(15),TERM_PAY varchar(15),AMT_PAY_SCHEDULE decimal(18,0),REQ_ADV_ID varchar(15),AMT_ADVANCE_SCHEDULE decimal(18,0), AMT_PAY_DO decimal(18,0),
1341
				AMT_REMAIN_SCHEDULE decimal(18,0),REQ_AD_DT varchar(20),PROCESS varchar(15), PAY_ID VARCHAR(15),REF_ID VARCHAR(15),
1342
				REQ_PAY_DESC NVARCHAR(500), REQ_PAY_ENTRIES NVARCHAR(250),CURRENCY VARCHAR(15),RATE DECIMAL(18,0),AMT_PAY_REAL DECIMAL(18,2))
1343
				OPEN XmlDataSchedule
1344
				FETCH NEXT FROM XmlDataSchedule INTO @PO_ID,@TERM_PAY,@AMT_PAY_SCHEDULE,@REQ_ADV_ID_SCHE,@AMT_ADVANCE_SCHEDULE,@AMT_PAY_DO,
1345
				@AMT_REMAIN_SCHEDULE,@REQ_AD_DT,@PROCESS,@PAY_ID,@REF_ID,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@CURRENCY,@RATE,@AMT_PAY_REAL
1346
				WHILE @@fetch_status=0 
1347
				BEGIN
1348
					DECLARE @p_REQ_PAY_SCHEDULE_ID VARCHAR(15);
1349
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_SCHEDULE', @p_REQ_PAY_SCHEDULE_ID OUT;
1350
					IF @p_REQ_PAY_SCHEDULE_ID='' OR @p_REQ_PAY_SCHEDULE_ID IS NULL GOTO ABORT;
1351
					INSERT INTO TR_REQ_PAY_SCHEDULE(
1352
					SCHEDULE_ID,REQ_PAY_ID,PAY_ID,AMT_PAY,PAY_PHASE,REQ_ADV_ID,AMT_ADVANCE,AMT_PAY_DO,AMT_REMAIN,REQ_PAY_DT,REQ_AD_DT,PROCESS,MAKER_ID,
1353
					CREATE_DT,AUTH_STATUS_KT,PAYMENT_STATUS,TRN_TYPE,REF_ID,REQ_PAY_DESC,REQ_PAY_ENTRIES,CURRENCY,RATE, AMT_PAY_REAL)
1354
					VALUES (@p_REQ_PAY_SCHEDULE_ID,@p_REQ_PAY_ID,@PAY_ID,@AMT_PAY_SCHEDULE,@TERM_PAY,@p_REQ_PAY_ID,@AMT_ADVANCE_SCHEDULE,@AMT_PAY_DO,@AMT_REMAIN_SCHEDULE,
1355
					GETDATE(),CONVERT(DATETIME,@REQ_AD_DT,103),NULL,@p_MAKER_ID,GETDATE(),'U','','ADV_PAY',@REF_ID,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@CURRENCY,@RATE,@AMT_PAY_REAL)
1356
				--- END KHAI BAO CURSOR
1357
				IF @@error<>0 GOTO ABORT;
1358
				FETCH NEXT FROM XmlDataSchedule INTO @PO_ID,@TERM_PAY,@AMT_PAY_SCHEDULE,@REQ_ADV_ID_SCHE,@AMT_ADVANCE_SCHEDULE,@AMT_PAY_DO,
1359
				@AMT_REMAIN_SCHEDULE,@REQ_AD_DT,@PROCESS,@PAY_ID,@REF_ID,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@CURRENCY,@RATE,@AMT_PAY_REAL
1360
				END
1361
				CLOSE XmlDataSchedule;
1362
				DEALLOCATE XmlDataSchedule;
1363
			END
1364
		--- END TẠM ỨNG THANH TOÁN
1365
		---- TẠM ỨNG HĐ ĐỊNH KÌ
1366
			IF(@p_REQ_TYPE = 'P' AND @p_IS_PERIOD='Y')
1367
			BEGIN
1368
				DELETE FROM TR_REQ_ADVANCE_DT WHERE REQ_PAY_ID =@p_REQ_PAY_ID
1369
				DELETE FROM TR_REQ_PAY_PERIOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID
1370
				DECLARE XmlDataPO CURSOR FOR
1371
				SELECT *
1372
				FROM
1373
				OPENXML(@hdoc, '/Root/XmlDataPO', 2)
1374
				WITH(REF_ID varchar(15),IS_CLOSED VARCHAR(1),REF_TYPE VARCHAR(15))
1375
				OPEN XmlDataPO;
1376
				SET @INDEX_PO = 0
1377
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
1378
				WHILE @@fetch_status=0 
1379
				BEGIN
1380
					SET @INDEX_PO = @INDEX_PO +1
1381
					DECLARE @REQ_PAYDTID_C VARCHAR(15);
1382
					EXEC SYS_CodeMasters_Gen 'TR_REQ_ADVANCE_DT', @REQ_PAYDTID_C OUT;
1383
					IF @REQ_PAYDTID_C='' OR @REQ_PAYDTID_C IS NULL GOTO ABORT;
1384
					INSERT INTO TR_REQ_ADVANCE_DT (REQ_PAYDTID,REQ_PAY_ID,REF_ID,TYPE,MAKER_ID,CREATE_DT,IS_CLOSED,REF_TYPE) VALUES
1385
					(@REQ_PAYDTID_C,@p_REQ_PAY_ID,@REF_ID,'ADV_PAY',@p_MAKER_ID,GETDATE(),@IS_CLOSED,@REF_TYPE)
1386
				IF @@error<>0 GOTO ABORT;
1387
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
1388
				END
1389
				CLOSE XmlDataPO;
1390
				DEALLOCATE XmlDataPO;
1391
				--- CUSOR DANH SACH LICH THANH TOAN PO - HD	
1392
			----------------------------
1393
			--INSERT FROM PERIOD	
1394
				DECLARE XmlDataPeriod CURSOR FOR
1395
				SELECT *
1396
				FROM
1397
				OPENXML(@hdoc, '/Root/XmlDataPeriod', 2)
1398
				WITH(CONTRACT_ID varchar(15),PAY_DT_REAL VARCHAR(20),PAY_TYPE VARCHAR(5),
1399
				OLD_INDEX DECIMAL(18,0),NEW_INDEX DECIMAL(18,0),AMT_PAY DECIMAL(18,2),CURRENCY VARCHAR(5), RATE DECIMAL(18,0), FROM_DATE VARCHAR(20), TO_DATE VARCHAR(20),PAY_PHASE NVARCHAR(250),REASON NVARCHAR(2000) )
1400
				OPEN XmlDataPeriod;
1401
				DECLARE @CONTRACT_ID varchar(15),@PAY_DT_REAL VARCHAR(20),@PAY_TYPE VARCHAR(5),
1402
				@OLD_INDEX DECIMAL(18,0),@NEW_INDEX DECIMAL(18,0),@AMT_PAY_PERIOD DECIMAL(18,2),@FROM_DATE VARCHAR(20),@TO_DATE VARCHAR(20),@PAY_PHASE NVARCHAR(250), @REASON_TTDK NVARCHAR(2000)
1403
				FETCH NEXT FROM XmlDataPeriod INTO @CONTRACT_ID ,@PAY_DT_REAL ,@PAY_TYPE ,
1404
				@OLD_INDEX ,@NEW_INDEX ,@AMT_PAY_PERIOD,@CURRENCY, @RATE,@FROM_DATE,@TO_DATE,@PAY_PHASE,@REASON_TTDK
1405
				WHILE @@fetch_status=0 
1406
				BEGIN
1407
					
1408
					-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
1409
					IF(@p_TYPE_FUNCTION ='SEND')
1410
					BEGIN
1411
					IF(@NEW_INDEX <=@OLD_INDEX AND @NEW_INDEX >0 AND @OLD_INDEX >0)
1412
					BEGIN
1413
						ROLLBACK TRANSACTION
1414
						SELECT '-1' as Result, @p_REQ_PAY_ID  REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Chỉ số mới phải lớn hơn chỉ số cũ' ErrorDesc
1415
						RETURN '-1'
1416
					END
1417
					END
1418
					DECLARE @PERIOD_ID VARCHAR(15);
1419
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_PERIOD', @PERIOD_ID OUT;
1420
					IF @PERIOD_ID='' OR @PERIOD_ID IS NULL GOTO ABORT;
1421
					INSERT INTO TR_REQ_PAY_PERIOD(PERIOD_ID,REQ_PAY_ID,PAY_TYPE, CONTRACT_ID,PAY_DT_REAL,OLD_INDEX,NEW_INDEX,AMT_PAY,AUTH_STATUS_KT,CURRENCY,RATE,FROM_DATE, TO_DATE,AD_PAY_ID,PROCESS,PAY_PHASE, REASON)
1422
					VALUES (@PERIOD_ID,@p_REQ_PAY_ID,'ADV_PAY',@CONTRACT_ID,CONVERT(DATE,@PAY_DT_REAL,103),
1423
				@OLD_INDEX ,@NEW_INDEX ,@AMT_PAY_PERIOD,'U',@CURRENCY, @RATE,CONVERT(DATE,@FROM_DATE,103),CONVERT(DATE,@TO_DATE,103),@p_REQ_PAY_ID,'0',@PAY_PHASE,@REASON_TTDK)
1424
			IF @@error<>0 GOTO ABORT;
1425
			FETCH NEXT FROM XmlDataPeriod INTO @CONTRACT_ID ,@PAY_DT_REAL ,@PAY_TYPE ,
1426
				@OLD_INDEX ,@NEW_INDEX ,@AMT_PAY_PERIOD,@CURRENCY, @RATE,@FROM_DATE,@TO_DATE,@PAY_PHASE,@REASON_TTDK
1427
			END
1428
			CLOSE XmlDataPeriod;
1429
			DEALLOCATE XmlDataPeriod;
1430
			-- VALIDATE SO TIEN
1431
			--IF(@p_REQ_AMT >= @TOTAL_SCHEDULE_AMT)
1432
			--BEGIN
1433
			--	ROLLBACK TRANSACTION
1434
			--	SELECT '-1' as Result, '' REQ_PAY_ID, N'Số tiền thanh toán phải nhỏ hơn hoặc bằng tổng số tiền còn lại cần thanh toán: '+FORMAT(SUM(@TOTAL_SCHEDULE_AMT),'#,#', 'vi-VN') ErrorDesc
1435
			--	RETURN '-1'
1436
			--END
1437
			----
1438
			END
1439
		---- END TẠM ỨNG HĐ ĐỊNH KÌ
1440
		--- INSERT PHƯƠNG THỨC THANH TOÁN
1441
		----MethodCursor
1442
			DELETE FROM TR_REQ_PAY_METHOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID
1443
			DECLARE @RECEIVE_ID varchar(15),@RECEIVE_NAME nvarchar(100),@REQ_PAY_REASON nvarchar(MAX),@TOTAL_AMT_METHOD decimal(18,0),@REQ_PAY_TYPE varchar(1),
1444
					@ACC_NO VARCHAR(50), @ACC_NAME NVARCHAR(50), @ISSED_BY NVARCHAR(250), @ISSUED_DT VARCHAR(20)
1445
			DECLARE XmlDataMethod CURSOR FOR
1446
			SELECT *
1447
			FROM
1448
			OPENXML(@hdoc, 'Root/XmlDataMethod',2)
1449
			WITH(RECEIVE_ID varchar(15),RECEIVE_NAME nvarchar(100),REQ_PAY_REASON nvarchar(MAX),TOTAL_AMT decimal(18,0),REQ_PAY_TYPE varchar(1),
1450
			REQ_PAY_DESC nvarchar(MAX),REQ_PAY_ENTRIES nvarchar(MAX),ACC_NO VARCHAR(50), ACC_NAME NVARCHAR(50), 
1451
			ISSUED_BY NVARCHAR(250), ISSUED_DT VARCHAR(20),CURRENCY VARCHAR(15),RATE DECIMAL(18,0),CHECK_IN VARCHAR(15))
1452
			OPEN XmlDataMethod
1453
			FETCH NEXT FROM XmlDataMethod 
1454
			INTO  @RECEIVE_ID,@RECEIVE_NAME,@REQ_PAY_REASON,@TOTAL_AMT_METHOD,@REQ_PAY_TYPE,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@ACC_NO,@ACC_NAME,@ISSED_BY,@ISSUED_DT,@CURRENCY,@RATE,@CHECK_IN 
1455
			WHILE @@fetch_status=0 
1456
			BEGIN
1457
				IF(@REQ_PAY_TYPE<>'1')
1458
				BEGIN
1459
					SET @ISSUED_DT = NULL
1460
				END
1461
				DECLARE @p_REQ_PAY_METHOD_ID VARCHAR(15);
1462
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_METHOD', @p_REQ_PAY_METHOD_ID OUT;
1463
				IF @p_REQ_PAY_METHOD_ID='' OR @p_REQ_PAY_METHOD_ID IS NULL GOTO ABORT;
1464
				INSERT INTO TR_REQ_PAY_METHOD(METHOD_ID,REQ_PAY_ID,EMP_ID,REQ_PAY_REASON,TOTAL_AMT,REQ_PAY_TYPE,REQ_PAY_DESC,REQ_PAY_ENTRIES, TEMP,MAKER_ID,
1465
				CREATE_DT,ACC_NO,ACC_NAME,ISSUED_BY,ISSUED_DT,CURRENCY,RATE,CHECK_IN)
1466
				VALUES (@p_REQ_PAY_METHOD_ID,@p_REQ_PAY_ID,@RECEIVE_ID,@REQ_PAY_REASON,@TOTAL_AMT_METHOD,@REQ_PAY_TYPE,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,'',
1467
				@p_MAKER_ID,GETDATE(),@ACC_NO,@ACC_NAME,@ISSED_BY, CONVERT(DATE, @ISSUED_DT, 103),@CURRENCY,@RATE,@CHECK_IN)
1468
			IF @@error<>0 GOTO ABORT;
1469
			FETCH NEXT FROM XmlDataMethod 
1470
			INTO @RECEIVE_ID,@RECEIVE_NAME,@REQ_PAY_REASON,@TOTAL_AMT_METHOD,@REQ_PAY_TYPE,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@ACC_NO,@ACC_NAME , @ISSED_BY , @ISSUED_DT,@CURRENCY,@RATE,@CHECK_IN
1471
			END
1472
			CLOSE XmlDataMethod;
1473
			DEALLOCATE XmlDataMethod
1474
		----END INSERT PHƯƠNG THỨC THANH TOÁN
1475
		----INSERT VAO BANG DS KHACH HANG
1476
			DELETE FROM TR_REQ_ADVANCE_CUS WHERE REQ_PAY_ID = @p_REQ_PAY_ID
1477
			DECLARE XmlDataCus CURSOR FOR
1478
			SELECT *
1479
			FROM
1480
			OPENXML(@hdoc, '/Root/XmlDataCus', 2)
1481
			WITH(CUS_ID varchar(15), EMP_ID VARCHAR(15), AMT_PAY_DO DECIMAL(18,0),CURRENCY VARCHAR(15),RATE DECIMAL(18,0))
1482
			OPEN XmlDataCus;
1483
			FETCH NEXT FROM XmlDataCus INTO @CUST_ID, @EMP_ID,@AMT_PAY_DO,@CURRENCY,@RATE
1484
				WHILE @@fetch_status=0 
1485
				BEGIN		
1486
					INSERT INTO TR_REQ_ADVANCE_CUS(REQ_PAY_ID,CUST_ID,EMP_ID,AMT_PAY_DO,CURRENCY,RATE,MAKER_ID,CREATE_DT)
1487
					VALUES (@p_REQ_PAY_ID, @CUST_ID, @EMP_ID,@AMT_PAY_DO,@CURRENCY,@RATE,@p_MAKER_ID,GETDATE())
1488
				--- END KHAI BAO CURSOR
1489
				IF @@error<>0 GOTO ABORT;
1490
				FETCH NEXT FROM XmlDataCus INTO  @CUST_ID, @EMP_ID,@AMT_PAY_DO,@CURRENCY,@RATE
1491
				END
1492
				CLOSE XmlDataCus;
1493
				DEALLOCATE XmlDataCus;
1494
		----END
1495
		-- HANG MUC CHI PHI VA NGAN SACH
1496
			DELETE FROM TR_REQ_PAY_BUDGET WHERE REQ_PAY_ID =@p_REQ_PAY_ID
1497
			DECLARE @TRADE_ID varchar(15),@GD_ID varchar(15),@AMT_APP decimal(18,2),@AMT_DO decimal(18,2),@AMT_EXE decimal(18,2),@AMT_REMAIN_GD decimal(18,2)
1498
			DECLARE XmlDataGood CURSOR FOR
1499
			SELECT *
1500
			FROM
1501
			OPENXML(@hdoc, 'Root/XmlDataGood',2) 
1502
			WITH(TRADE_ID varchar(15),GD_ID varchar(15),AMT_APP decimal(18,2),AMT_DO decimal(18,2), AMT_EXE decimal(18,2),AMT_REMAIN decimal(18,2),CURRENCY VARCHAR(15), RATE DECIMAL(18,2),REASON NVARCHAR(1000))
1503
			OPEN XmlDataGood
1504
			FETCH NEXT FROM XmlDataGood INTO @TRADE_ID,@GD_ID ,@AMT_APP ,@AMT_DO,@AMT_EXE ,@AMT_REMAIN_GD,@CURRENCY,@RATE,@REASON
1505
			WHILE @@fetch_status=0 BEGIN
1506
				--- KIEM TRA NEU NGAN SACH SU DUNG THUC THE LON HON NGAN SACH CON LAI
1507
				SET @INDEX_NS = @INDEX_NS +1
1508
				-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
1509
				IF(@p_TYPE_FUNCTION ='SEND')
1510
				BEGIN
1511
				IF((@AMT_EXE  > @AMT_REMAIN_GD))
1512
				BEGIN
1513
						ROLLBACK TRANSACTION
1514
						SELECT '-1' as Result, '' REQ_PAY_ID, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_NS)+ N': Ngân sách sử dụng thực tế không được vượt quá ngân sách còn lại.' ErrorDesc
1515
						RETURN '-1'
1516
				END	
1517
				END
1518
				DECLARE @p_BUDGET_ID VARCHAR(15);
1519
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_BUDGET', @p_BUDGET_ID OUT;
1520
				IF @p_BUDGET_ID='' OR @p_BUDGET_ID IS NULL GOTO ABORT;
1521
				INSERT INTO TR_REQ_PAY_BUDGET(BUDG_ID,GD_ID,REQ_PAY_ID,TRADE_ID,AMT_APP,AMT_DO,AMT_EXE,AMT_REMAIN,MAKER_ID,CREATE_DT,CURRENCY,RATE,REASON) 
1522
				VALUES (@p_BUDGET_ID,@GD_ID,@p_REQ_PAY_ID,@TRADE_ID,@AMT_APP,@AMT_DO,@AMT_EXE,@AMT_REMAIN_GD,@p_MAKER_ID, GETDATE(),@CURRENCY,@RATE,@REASON)
1523
			IF @@error<>0 GOTO ABORT;
1524
			FETCH NEXT FROM XmlDataGood INTO @TRADE_ID,@GD_ID ,@AMT_APP ,@AMT_DO,@AMT_EXE ,@AMT_REMAIN_GD,@CURRENCY,@RATE,@REASON
1525
			END;
1526
		CLOSE XmlDataGood;
1527
		DEALLOCATE XmlDataGood;
1528
		--- END INSERT NGAN SACH
1529
		DELETE FROM TR_REQ_PAY_ATTACH WHERE REQ_PAY_ID =@p_REQ_PAY_ID
1530
		DECLARE @ATTACH_ID varchar(15),@CON_ID varchar(100),@CONT_CODE VARCHAR(50), @CON_NOTES VARCHAR(1000),@CON_DESC NVARCHAR(1000),@CON_TYPE VARCHAR(15),@AMT_ATT DECIMAL(18,2),@REF_DT VARCHAR(20),@NOTES_ATT NVARCHAR(1000)
1531
		DECLARE XmlAttach CURSOR FOR
1532
		SELECT *
1533
		FROM
1534
		OPENXML(@hdoc, 'Root/XmlAttach',2) 
1535
		WITH(ATTACH_ID varchar(15),CON_ID varchar(100),CONT_CODE VARCHAR(50), CON_NOTES NVARCHAR(1000),CON_DESC NVARCHAR(1000),CON_TYPE VARCHAR(15),AMT_ATT DECIMAL(18,2),REF_DT VARCHAR(20))
1536
		OPEN XmlAttach
1537
		--INSERT CHUNG TU DINH KEM
1538
				FETCH NEXT FROM XmlAttach INTO @ATTACH_ID,@CON_ID,@CONT_CODE,@NOTES_ATT,@CON_DESC,@CON_TYPE,@AMT_ATT,@REF_DT
1539
				WHILE @@fetch_status=0 
1540
				BEGIN
1541
					IF (@REF_DT='')
1542
					BEGIN
1543
						SET @REF_DT = NULL
1544
					END
1545
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_ATTACH', @ATTACH_ID OUT;
1546
					IF @ATTACH_ID='' OR @ATTACH_ID IS NULL GOTO ABORT;
1547
					INSERT INTO TR_REQ_PAY_ATTACH(ATTACH_ID,REQ_PAY_ID,REF_ID,REF_CODE,NOTES,[DESCRIPTION],[TYPE],AMT,REF_DT) VALUES
1548
					(@ATTACH_ID,@p_REQ_PAY_ID,@CON_ID,@CONT_CODE,@NOTES_ATT,@CON_DESC,@CON_TYPE,@AMT_ATT, CONVERT(DATE, @REF_DT,103))
1549
				IF @@error<>0 GOTO ABORT;
1550
				FETCH NEXT FROM XmlAttach INTO @ATTACH_ID,@CON_ID,@CONT_CODE,@NOTES_ATT,@CON_DESC,@CON_TYPE,@AMT_ATT,@REF_DT
1551
				END
1552
				CLOSE XmlAttach;
1553
				DEALLOCATE XmlAttach;
1554
		----END
1555
		--- BAT DAU VALIDATE
1556
		IF(@p_TYPE_FUNCTION ='SEND')
1557
		BEGIN
1558
			DECLARE @SUM_PTTT DECIMAL(18,0), @SUM_NS DECIMAL(18,0),@SUM_LICH_TT DECIMAL(18,0)
1559
			SET @SUM_PTTT =(SELECT SUM(TOTAL_AMT * ISNULL(RATE,1)) FROM  TR_REQ_PAY_METHOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
1560
			IF(EXISTS(SELECT * FROM TR_REQ_PAY_SCHEDULE WHERE REQ_PAY_ID =@p_REQ_PAY_ID) AND @p_REQ_TYPE ='D')
1561
			BEGIN
1562
				SET @SUM_LICH_TT =(SELECT SUM(AMT_PAY_REAL* ISNULL(RATE,1)) FROM TR_REQ_PAY_SCHEDULE WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
1563
				IF(@p_REQ_AMT*ISNULL(@p_RATE,1) != ISNULL(@SUM_LICH_TT,0))
1564
				BEGIN
1565
					ROLLBACK TRANSACTION
1566
					SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Tổng số tiền lịch thanh toán PO và hợp đồng liên quan đến khách hàng xử lý nợ phải bằng số tiền tạm ứng' ErrorDesc
1567
					RETURN '-1'
1568
				END
1569
			END
1570
			IF(EXISTS(SELECT * FROM TR_REQ_PAY_BUDGET WHERE REQ_PAY_ID =@p_REQ_PAY_ID))
1571
			BEGIN
1572
				SET @SUM_NS =(SELECT SUM(AMT_EXE * ISNULL(RATE,1)) FROM  TR_REQ_PAY_BUDGET WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
1573
				IF(@p_REQ_AMT*ISNULL(@p_RATE,1) != ISNULL(@SUM_PTTT,0))
1574
				BEGIN
1575
					ROLLBACK TRANSACTION
1576
					SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Tổng số tiền sử dụng ngân sách và chi phí phải bằng số tiền tạm ứng' ErrorDesc
1577
					RETURN '-1'
1578
				END
1579
			END
1580
			ELSE
1581
			IF(@p_REQ_AMT*ISNULL(@p_RATE,1) != ISNULL(@SUM_PTTT,0))
1582
			BEGIN
1583
				ROLLBACK TRANSACTION
1584
				SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Tổng số tiền phương thức thanh toán phải bằng số tiền tạm ứng' ErrorDesc
1585
				RETURN '-1'
1586
			END
1587
			
1588
		END
1589
		----END
1590
		IF(@p_REQ_TYPE ='I')
1591
			BEGIN
1592
				DELETE FROM PL_REQUEST_PROCESS WHERE REQ_ID = @p_REQ_PAY_ID
1593
				DECLARE @tmp table(ROLE_ID VARCHAR(25),BRANCH_ID varchar(15),AMT DECIMAL(18,0))
1594
				IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE) ='HS')
1595
				BEGIN
1596
					--DECLARE @DEP_CODE VARCHAR(15)
1597
					--SET @DEP_CODE =(SELECT * FROM CM_DEPARTMENT WHERE DEP_ID =@p_DEP_ID)
1598
					IF EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06908%' AND DEP_ID =@p_DEP_ID)
1599
					BEGIN
1600
						INSERT INTO @tmp  SELECT A.ROLE_ID, A.BRANCH_ID,A.LIMIT_VALUE FROM TL_SYSROLE_LIMIT A WHERE A.LIMIT_TYPE='ADV_PAY'AND BRANCH_ID ='DV0001' AND A.ROLE_ID <>'GDK'
1601
					END
1602
					ELSE IF EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06910%' AND DEP_ID =@p_DEP_ID)
1603
					BEGIN
1604
						INSERT INTO @tmp  SELECT A.ROLE_ID, A.BRANCH_ID,A.LIMIT_VALUE FROM TL_SYSROLE_LIMIT A WHERE A.LIMIT_TYPE='ADV_PAY'AND BRANCH_ID ='DV0001' AND A.ROLE_ID <>'GDK'
1605
					END
1606
					ELSE IF (EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06900%' AND DEP_ID =@p_DEP_ID) OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06901%' AND DEP_ID =@p_DEP_ID)
1607
					OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06902%' AND DEP_ID =@p_DEP_ID) OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06903%' AND DEP_ID =@p_DEP_ID) 
1608
					OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06904%' AND DEP_ID =@p_DEP_ID) OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06920%' AND DEP_ID =@p_DEP_ID))
1609
					BEGIN
1610
						INSERT INTO @tmp  SELECT A.ROLE_ID, A.BRANCH_ID,A.LIMIT_VALUE FROM TL_SYSROLE_LIMIT A WHERE A.LIMIT_TYPE='ADV_PAY'AND BRANCH_ID ='DV0001' AND A.ROLE_ID NOT IN ('GDK','PTGD')
1611
					END
1612
					ELSE IF (EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06907%' AND DEP_ID =@p_DEP_ID) OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06909%' AND DEP_ID =@p_DEP_ID)
1613
					OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06911%' AND DEP_ID =@p_DEP_ID) OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06921%' AND DEP_ID =@p_DEP_ID) 
1614
					OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06922%' AND DEP_ID =@p_DEP_ID))
1615
					BEGIN
1616
						INSERT INTO @tmp  SELECT A.ROLE_ID, A.BRANCH_ID,A.LIMIT_VALUE FROM TL_SYSROLE_LIMIT A WHERE A.LIMIT_TYPE='ADV_PAY'AND BRANCH_ID ='DV0001' AND A.ROLE_ID <>'PTGD'
1617
					END
1618
					ELSE
1619
					BEGIN
1620
						INSERT INTO @tmp  SELECT A.ROLE_ID, A.BRANCH_ID,A.LIMIT_VALUE FROM TL_SYSROLE_LIMIT A WHERE A.LIMIT_TYPE='ADV_PAY'AND BRANCH_ID ='DV0001'
1621
					END
1622
				END
1623
				ELSE
1624
				BEGIN
1625
				IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE) ='CN')
1626
					BEGIN
1627
						--- BAO GOM DON VI & 3 CAP DUYET CUA HOI SO
1628
						INSERT INTO @tmp  SELECT A.ROLE_ID, A.BRANCH_ID,A.LIMIT_VALUE FROM TL_SYSROLE_LIMIT A WHERE A.LIMIT_TYPE='ADV_PAY' AND BRANCH_ID =@p_BRANCH_CREATE
1629
						INSERT INTO @tmp  SELECT A.ROLE_ID, A.BRANCH_ID,A.LIMIT_VALUE FROM TL_SYSROLE_LIMIT A WHERE A.LIMIT_TYPE='ADV_PAY'AND BRANCH_ID ='DV0001'
1630
				END
1631
				ELSE IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE) ='PGD')
1632
					BEGIN
1633
						INSERT INTO @tmp  SELECT A.ROLE_ID, A.BRANCH_ID,A.LIMIT_VALUE FROM TL_SYSROLE_LIMIT A WHERE A.LIMIT_TYPE='ADV_PAY' AND BRANCH_ID =(SELECT FATHER_ID FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE)
1634
						INSERT INTO @tmp  SELECT A.ROLE_ID, A.BRANCH_ID,A.LIMIT_VALUE FROM TL_SYSROLE_LIMIT A WHERE A.LIMIT_TYPE='ADV_PAY'AND BRANCH_ID ='DV0001'
1635
				END
1636
				END
1637
				DECLARE @ROLE_ID VARCHAR(20), @BRANCH_ID VARCHAR(20), @INDEX INT =0, @SL_ROLE INT =0,@LIMIT_VALUE DECIMAL(18,0)
1638
				SET @SL_ROLE = (SELECT COUNT(*) FROM @tmp)
1639
				DECLARE @ISLEAF VARCHAR(1) = 'Y', @PARENT_ID VARCHAR(10) = '', @STATUS VARCHAR(1) = 'C', @NOTES NVARCHAR(500)
1640
				DECLARE CUR_PR CURSOR FOR  SELECT A.ROLE_ID, A.BRANCH_ID,A.AMT FROM @tmp A
1641
				OPEN CUR_PR
1642
				FETCH NEXT FROM CUR_PR INTO @ROLE_ID,@BRANCH_ID,@LIMIT_VALUE
1643
				WHILE @@FETCH_STATUS =0 --AND @STOP=0
1644
				BEGIN								
1645
					SET @INDEX= @INDEX+1
1646
					IF @INDEX = @SL_ROLE
1647
						SET @ISLEAF = 'Y'
1648
					ELSE
1649
						SET @ISLEAF = 'N'
1650
					SET @NOTES = (SELECT N'Đợi '+ ROLE_DESC + N' phê duyệt' FROM TL_SYSROLE WHERE ROLE_ID = @ROLE_ID)
1651

    
1652
					IF(@INDEX=1 )
1653
					BEGIN		
1654
						SET @PARENT_ID = NULL
1655
						SET @STATUS = 'C'							
1656
						--INSERT INTO TR_REQUEST_PROCESS VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),'C',@ROLE_ID,@BRANCH_ID,NULL,NULL,NULL,@ISLEAF)
1657
					END				
1658
					ELSE 
1659
					BEGIN
1660
						SET @PARENT_ID = CONVERT(VARCHAR(5),@INDEX -1)
1661
						SET @STATUS = 'U'
1662
					END
1663
						IF(@LIMIT_VALUE >= @p_REQ_AMT)
1664
						BEGIN
1665
							INSERT INTO dbo.PL_REQUEST_PROCESS
1666
							(
1667
								REQ_ID,
1668
								PROCESS_ID,
1669
								STATUS,
1670
								ROLE_USER,
1671
								BRANCH_ID,
1672
								CHECKER_ID,
1673
								APPROVE_DT,
1674
								PARENT_PROCESS_ID,
1675
								IS_LEAF, COST_ID, DVDM_ID, NOTES
1676
							)
1677
							VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),@STATUS,@ROLE_ID,@BRANCH_ID,NULL,NULL, @PARENT_ID,'Y', '',@p_DVDM_ID,@NOTES)
1678
							--INSERT INTO PL_REQUEST_PROCESS VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),@STATUS,@ROLE_ID,@BRANCH_ID,NULL,NULL, @PARENT_ID,'Y')
1679
							BREAK;
1680
						END
1681
						ELSE
1682
							INSERT INTO PL_REQUEST_PROCESS (
1683
								REQ_ID,
1684
								PROCESS_ID,
1685
								STATUS,
1686
								ROLE_USER,
1687
								BRANCH_ID,
1688
								CHECKER_ID,
1689
								APPROVE_DT,
1690
								PARENT_PROCESS_ID,
1691
								IS_LEAF, COST_ID, DVDM_ID, NOTES
1692
							) VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),@STATUS,@ROLE_ID,@BRANCH_ID,NULL,NULL, @PARENT_ID,@ISLEAF, '', @p_DVDM_ID, @NOTES)
1693
					--END
1694
					
1695
					FETCH NEXT FROM CUR_PR INTO @ROLE_ID,@BRANCH_ID,@LIMIT_VALUE
1696
				END
1697
				CLOSE CUR_PR
1698
				DEALLOCATE CUR_PR
1699
			END
1700
COMMIT TRANSACTION
1701
		IF(@p_TYPE_FUNCTION ='SEND')-- BAT DAU GUI PHE DUYET
1702
		BEGIN
1703
				--ROLLBACK TRANSACTION
1704
				-- CAP NHAT TINH TRANG DUYET KE TOAN LA DANG XU LY 
1705
				IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE TRASFER_USER_RECIVE ='' OR TRASFER_USER_RECIVE IS NULL) AND @BRANCH_TYPE_CR ='HS'  AND @p_REQ_TYPE ='I')
1706
				BEGIN
1707
					DECLARE @USER_TP VARCHAR(15)
1708
					SET @USER_TP =(SELECT TOP 1 TLNANME FROM TL_USER WHERE SECUR_CODE =@p_DEP_ID AND RoleName IN ('GDDV','TPTC','TC','KTT'))
1709
					UPDATE TR_REQ_ADVANCE_PAYMENT SET TRASFER_USER_RECIVE =@USER_TP WHERE REQ_PAY_ID =@p_REQ_PAY_ID
1710
				END
1711
				IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE TRASFER_USER_RECIVE ='' OR TRASFER_USER_RECIVE IS NULL) AND @BRANCH_TYPE_CR ='PGD')
1712
				BEGIN
1713
					DECLARE @USER_TPGD VARCHAR(15)
1714
					SET @USER_TPGD =(SELECT TOP 1 TLNANME FROM TL_USER WHERE SECUR_CODE =@p_DEP_ID AND RoleName IN ('TPGD'))
1715
					UPDATE TR_REQ_ADVANCE_PAYMENT SET TRASFER_USER_RECIVE =@USER_TPGD WHERE REQ_PAY_ID =@p_REQ_PAY_ID
1716
				END
1717
				UPDATE TR_REQ_ADVANCE_PAYMENT SET AUTH_STATUS ='U' WHERE REQ_PAY_ID =@p_REQ_PAY_ID
1718
				INSERT INTO dbo.PL_PROCESS(REQ_ID,PROCESS_ID,CHECKER_ID,APPROVE_DT,PROCESS_DESC,NOTES)
1719
				VALUES(@p_REQ_PAY_ID,'SEND',@p_MAKER_ID,GETDATE(), N'Đơn vị gửi phê duyệt',N'Đơn vị tạo phiếu tạm ứng và gửi phê duyệt')
1720
				SELECT '4' as Result, @p_REQ_PAY_ID AS REQ_PAY_ID, N'Gửi phê duyệt thành công' ErrorDesc
1721
				RETURN '4'
1722
		END
1723
SELECT '0' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, '' ErrorDesc
1724
RETURN '0'
1725
ABORT:
1726
BEGIN
1727
		ROLLBACK TRANSACTION
1728
		SELECT '-1' as Result, '' REQ_PAY_ID, '' ErrorDesc
1729
		RETURN '-1'
1730
End
1731
¿
1732

    
1733
ALTER PROC [dbo].[TR_REQ_PAY_DETAIL]
1734
@p_REQ_PAY_ID VARCHAR(15) = NULL
1735
AS
1736
BEGIN
1737
	
1738
	DECLARE @TABLE_RETURN_01 TABLE ([NAME] NVARCHAR(250))
1739
	DECLARE @TABLE_RETURN_01_DT TABLE (IND INT IDENTITY(1,1) NOT NULL,[NAME] NVARCHAR(250))
1740
	DECLARE @TABLE_RETURN_02 TABLE ([NAME] NVARCHAR(250))
1741
	DECLARE @TABLE_RETURN_02_DT TABLE (IND INT IDENTITY(1,1) NOT NULL,[NAME] NVARCHAR(250))
1742
	DECLARE @TABLE_RETURN_03 TABLE  (IND INT IDENTITY(1,1) NOT NULL,[NAME] NVARCHAR(250), AMT DECIMAL(18,0))
1743
	DECLARE @TABLE_RETURN_04 TABLE (IND INT IDENTITY(1,1) NOT NULL,[NAME] NVARCHAR(250), AMT DECIMAL(18,0))
1744
	DECLARE @TABLE_RETURN_06 TABLE ([NAME] NVARCHAR(250), AMT DECIMAL(18,0))
1745
	DECLARE @INDEX INT =1
1746
	DECLARE @INDEX_TT INT =0
1747
	IF(EXISTS(SELECT * FROM TR_REQ_PAY_METHOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND REQ_PAY_TYPE ='1'))
1748
	BEGIN
1749
	  SET @INDEX_TT = @INDEX_TT+1
1750
	--INSERT INTO @TABLE_RETURN
1751
	--SELECT N'Tiền mặt' AS PHUONG_THUC, ISNULL(SUM (TOTAL_AMT),0) AS T1 FROM TR_REQ_PAY_METHOD
1752
	--WHERE REQ_PAY_TYPE ='1' AND REQ_PAY_ID = @p_REQ_PAY_ID
1753
	INSERT INTO @TABLE_RETURN_03
1754
	SELECT N'. Người nhận: '+ ACC_NAME + CHAR(10) + N'    CMND số: ' + ACC_NO + char(10) + N'    Được cấp bởi: '+ ISSUED_BY + N' ngày cấp: '+ CONVERT(VARCHAR,ISSUED_DT,103) AS ACC_NAME, SUM(TOTAL_AMT) AS T2 
1755
	FROM TR_REQ_PAY_METHOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND REQ_PAY_TYPE ='1'
1756
	GROUP BY ACC_NO, ACC_NAME, ISSUED_BY, ISSUED_DT
1757
	-- INSERT BANG TAM THE HIEN SO TIEN
1758
	INSERT INTO @TABLE_RETURN_04
1759
	SELECT 'N'+ CHAR(10) + 'D'+char(10) AS ACC_NAME, SUM(TOTAL_AMT) AS T2 
1760
	FROM TR_REQ_PAY_METHOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND REQ_PAY_TYPE ='1'
1761
	GROUP BY ACC_NO, ACC_NAME, ISSUED_BY, ISSUED_DT
1762
	END
1763
	IF(EXISTS(SELECT * FROM TR_REQ_PAY_METHOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND REQ_PAY_TYPE ='0'))
1764
	BEGIN
1765
		SET @INDEX_TT = @INDEX_TT+1
1766
		--INSERT INTO @TABLE_RETURN
1767
		--SELECT N'Chuyển khoản' AS PHUONG_THUC,ISNULL(SUM (TOTAL_AMT),0) AS T3 FROM TR_REQ_PAY_METHOD WHERE REQ_PAY_TYPE ='0' AND REQ_PAY_ID = @p_REQ_PAY_ID
1768
		INSERT INTO @TABLE_RETURN_03
1769
		SELECT N'. Đơn vị thụ hưởng: '+ ACC_NAME + CHAR(10)+ N'    Số tài khoản: ' + ACC_NO + char(10) + N'    Tại ngân hàng: '+ ISSUED_BY AS ACC_NAME, SUM(TOTAL_AMT) AS T4 
1770
		FROM TR_REQ_PAY_METHOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND REQ_PAY_TYPE ='0'
1771
		GROUP BY ACC_NO, ACC_NAME, ISSUED_BY
1772
		-- INSERT BANG TAM THE HIEN SO TIEN
1773
		INSERT INTO @TABLE_RETURN_04
1774
		SELECT  'N'+ CHAR(10)+ 'S'+ char(10) AS ACC_NAME, SUM(TOTAL_AMT) AS T4 
1775
		FROM TR_REQ_PAY_METHOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND REQ_PAY_TYPE ='0'
1776
		GROUP BY ACC_NO, ACC_NAME, ISSUED_BY
1777
	END
1778
	-- KIEM TRA NOI DUNG SU DUNG CHI PHI VA NGAN SACH
1779
	IF(EXISTS(SELECT * FROM TR_REQ_PAY_BUDGET WHERE REQ_PAY_ID =@p_REQ_PAY_ID))
1780
	BEGIN
1781
		--INSERT INTO @TABLE_RETURN_01 VALUES (CONVERT(VARCHAR(15),@INDEX) +N'. Nội dung tạm ứng: ')
1782
		INSERT INTO @TABLE_RETURN_01 VALUES( N'A - Nội dung thanh toán: ')
1783
		--INSERT INTO @TABLE_RETURN_01_DT SELECT N'. '+ A.REQ_PAY_REASON FROM TR_REQ_PAY_METHOD A WHERE A.REQ_PAY_ID =@p_REQ_PAY_ID
1784
		--INSERT INTO @TABLE_RETURN_06 SELECT 'A', A.TOTAL_AMT FROM TR_REQ_PAY_METHOD A WHERE A.REQ_PAY_ID =@p_REQ_PAY_ID	
1785
		INSERT INTO @TABLE_RETURN_01_DT SELECT N'. '+ A.REASON FROM TR_REQ_PAY_PERIOD A WHERE A.REQ_PAY_ID =@p_REQ_PAY_ID
1786
		INSERT INTO @TABLE_RETURN_06 SELECT 'A', A.AMT_PAY FROM  TR_REQ_PAY_PERIOD A WHERE A.REQ_PAY_ID =@p_REQ_PAY_ID	
1787
		
1788
		INSERT INTO @TABLE_RETURN_01_DT SELECT N'. '+ A.REQ_PAY_DESC FROM TR_REQ_PAY_SCHEDULE A WHERE A.REQ_PAY_ID =@p_REQ_PAY_ID
1789
		INSERT INTO @TABLE_RETURN_06 SELECT 'A', A.AMT_PAY_REAL FROM  TR_REQ_PAY_SCHEDULE A WHERE A.REQ_PAY_ID =@p_REQ_PAY_ID	
1790

    
1791
		INSERT INTO @TABLE_RETURN_01_DT SELECT N'. '+ A.REQ_PAY_DESC FROM TR_REQ_PAY_SERVICE A WHERE A.REQ_PAY_ID =@p_REQ_PAY_ID
1792
		INSERT INTO @TABLE_RETURN_06 SELECT 'A', A.TOTAL_AMT FROM  TR_REQ_PAY_SERVICE A WHERE A.REQ_PAY_ID =@p_REQ_PAY_ID	
1793
	END
1794
	--- HĐ & CHỨNG TỪ ĐÍNH KÈM
1795
	IF(EXISTS(SELECT * FROM TR_REQ_PAY_ATTACH WHERE REQ_PAY_ID =@p_REQ_PAY_ID))
1796
	BEGIN
1797
		SET @INDEX = @INDEX+1
1798
		--INSERT INTO @TABLE_RETURN_01 SELECT CONVERT(VARCHAR(15),@INDEX)+ N'. Chứng từ đính kèm: '
1799
		INSERT INTO @TABLE_RETURN_02 SELECT N'B - Chứng từ đính kèm: '
1800
	END
1801
	IF(EXISTS(SELECT * FROM TR_REQ_PAY_ATTACH WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND TYPE ='C'))
1802
	BEGIN
1803
		--INSERT INTO @TABLE_RETURN_01 SELECT N'Thông tin hợp đồng đính kèm: ' 
1804
		INSERT INTO @TABLE_RETURN_02_DT SELECT ' '+ N'. Hợp đồng số ' + REF_CODE + ISNULL(N' ngày '+  FORMAT(REF_DT,'dd/MM/yyyy'),'')+ CASE WHEN AMT >0 THEN  N', số tiền '+ FORMAT( ISNULL(AMT,0),'#,#', 'vi-VN') ELSE '' END  AS T1 FROM TR_REQ_PAY_ATTACH
1805
		WHERE REQ_PAY_ID = @p_REQ_PAY_ID AND [TYPE] ='C'
1806
	END
1807
	IF(EXISTS(SELECT * FROM TR_REQ_PAY_ATTACH WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND TYPE ='R'))
1808
	BEGIN
1809
		--INSERT INTO @TABLE_RETURN_01 SELECT N'Thông tin chứng từ khác đính kèm: ' 
1810
		INSERT INTO @TABLE_RETURN_02_DT SELECT N'. '+ [DESCRIPTION]+ CASE WHEN AMT >0 THEN  N', số tiền '+ FORMAT( ISNULL(AMT,0),'#,#', 'vi-VN') ELSE '' END AS T1 FROM TR_REQ_PAY_ATTACH
1811
		WHERE REQ_PAY_ID = @p_REQ_PAY_ID AND [TYPE] ='R'
1812
	END
1813
	IF(EXISTS(SELECT * FROM TR_REQ_PAY_INVOICE WHERE REQ_PAY_ID =@p_REQ_PAY_ID))
1814
	BEGIN
1815
		--INSERT INTO @TABLE_RETURN_01 SELECT N'Thông tin chứng từ khác đính kèm: ' 
1816
		INSERT INTO @TABLE_RETURN_02_DT SELECT N'. Số hóa đơn '+ INVOICE_NO +ISNULL(N' ngày '+  FORMAT(INVOICE_DT,'dd/MM/yyyy'),'')+ N', số tiền '+ FORMAT( ISNULL(PRICE+VAT,0),'#,#', 'vi-VN') AS T1 FROM TR_REQ_PAY_INVOICE
1817
		WHERE REQ_PAY_ID = @p_REQ_PAY_ID AND TYPE_FUNC='HC'
1818
	END
1819
	-- LAY THONG TIN CAP PHE DUYET
1820
	IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND REQ_TYPE ='I'))
1821
	BEGIN
1822
		DECLARE @TABLE_RETURN_07 TABLE (HDQT NVARCHAR(50),TGD NVARCHAR(50),PTGD NVARCHAR(50),GDK NVARCHAR(50),GDDV NVARCHAR(50))
1823
		DECLARE @GDDV NVARCHAR(50),@GDK NVARCHAR(50),@PTGD NVARCHAR(50),@TGD NVARCHAR(50),@HDQT NVARCHAR(50)
1824
		DECLARE @APPR VARCHAR(15),@APPR1 VARCHAR(15),@APPR2 VARCHAR(15),@APPR3 VARCHAR(15),@APPR4 VARCHAR(15),@APPR5 VARCHAR(15)
1825

    
1826
		DECLARE @POS NVARCHAR(50),@POS1 NVARCHAR(50),@POS2 NVARCHAR(50),@POS3 NVARCHAR(50),@POS4 NVARCHAR(50)
1827

    
1828
		DECLARE @DATE NVARCHAR(50),@DATE1 NVARCHAR(50),@DATE2 NVARCHAR(50),@DATE3 NVARCHAR(50),@DATE4 NVARCHAR(50)
1829

    
1830
		SET @APPR =(SELECT CHECKER_ID FROM PL_PROCESS WHERE REQ_ID= @p_REQ_PAY_ID AND PROCESS_ID ='1')
1831
		SET @POS =(SELECT POS_NAME FROM CM_EMPLOYEE_LOG WHERE USER_DOMAIN =@APPR)
1832
		SET @DATE =(SELECT ISNULL( FORMAT(APPROVE_DT,'dd/MM/yyyy,hh:mm:ss tt'),'') FROM PL_PROCESS WHERE REQ_ID= @p_REQ_PAY_ID AND PROCESS_ID ='1')
1833
		--IF((SELECT RoleName FROM TL_USER WHERE TLNANME =@APPR) ='GDDV') BEGIN SET @GDDV =@APPR END
1834
		--ELSE IF((SELECT RoleName FROM TL_USER WHERE TLNANME =@APPR) ='GDK')BEGIN SET @GDK =@APPR END
1835
		--ELSE IF((SELECT RoleName FROM TL_USER WHERE TLNANME =@APPR) ='PTGD') BEGIN SET @PTGD =@APPR END
1836
		--ELSE IF((SELECT RoleName FROM TL_USER WHERE TLNANME =@APPR) ='TGD') BEGIN	SET @TGD =@APPR	END
1837
		--ELSE IF((SELECT RoleName FROM TL_USER WHERE TLNANME =@APPR) ='HDQT') BEGIN SET @HDQT =@APPR END
1838
		-------------
1839
		SET @APPR1 =(SELECT CHECKER_ID FROM PL_PROCESS WHERE REQ_ID= @p_REQ_PAY_ID AND PROCESS_ID ='2')
1840
		SET @POS1 =(SELECT POS_NAME FROM CM_EMPLOYEE_LOG WHERE USER_DOMAIN =@APPR1)
1841
		SET @DATE1 =(SELECT ISNULL( FORMAT(APPROVE_DT,'dd/MM/yyyy,hh:mm:ss tt'),'') FROM PL_PROCESS WHERE REQ_ID= @p_REQ_PAY_ID AND PROCESS_ID ='2')
1842
		--IF((SELECT RoleName FROM TL_USER WHERE TLNANME =@APPR1) ='GDDV') BEGIN SET @GDDV =@APPR1 END
1843
		--ELSE IF((SELECT RoleName FROM TL_USER WHERE TLNANME =@APPR1) ='GDK')BEGIN SET @GDK =@APPR1 END
1844
		--ELSE IF((SELECT RoleName FROM TL_USER WHERE TLNANME =@APPR1) ='PTGD') BEGIN SET @PTGD =@APPR1 END
1845
		--ELSE IF((SELECT RoleName FROM TL_USER WHERE TLNANME =@APPR1) ='TGD') BEGIN	SET @TGD =@APPR1	END
1846
		--ELSE IF((SELECT RoleName FROM TL_USER WHERE TLNANME =@APPR1) ='HDQT')	BEGIN SET @HDQT =@APPR1 END
1847
		------------
1848

    
1849
		SET @APPR2 =(SELECT CHECKER_ID FROM PL_PROCESS WHERE REQ_ID= @p_REQ_PAY_ID AND PROCESS_ID ='3')
1850
		SET @POS2 =(SELECT POS_NAME FROM CM_EMPLOYEE_LOG WHERE USER_DOMAIN =@APPR2)
1851
		SET @DATE2 =(SELECT ISNULL( FORMAT(APPROVE_DT,'dd/MM/yyyy,hh:mm:ss tt'),'') FROM PL_PROCESS WHERE REQ_ID= @p_REQ_PAY_ID AND PROCESS_ID ='3')
1852
		--IF((SELECT RoleName FROM TL_USER WHERE TLNANME =@APPR1) ='GDDV') BEGIN SET @GDDV =@APPR2 END
1853
		--ELSE IF((SELECT RoleName FROM TL_USER WHERE TLNANME =@APPR1) ='GDK')BEGIN SET @GDK =@APPR2 END
1854
		--ELSE IF((SELECT RoleName FROM TL_USER WHERE TLNANME =@APPR1) ='PTGD') BEGIN SET @PTGD =@APPR2 END
1855
		--ELSE IF((SELECT RoleName FROM TL_USER WHERE TLNANME =@APPR1) ='TGD') BEGIN	SET @TGD =@APPR2	END
1856
		--ELSE IF((SELECT RoleName FROM TL_USER WHERE TLNANME =@APPR1) ='HDQT')	BEGIN SET @HDQT =@APPR2 END
1857

    
1858
		SET @APPR3 =(SELECT CHECKER_ID FROM PL_PROCESS WHERE REQ_ID= @p_REQ_PAY_ID AND PROCESS_ID ='4')
1859
		SET @POS3 =(SELECT POS_NAME FROM CM_EMPLOYEE_LOG WHERE USER_DOMAIN =@APPR3)
1860
		SET @DATE3 =(SELECT ISNULL( FORMAT(APPROVE_DT,'dd/MM/yyyy,hh:mm:ss tt'),'') FROM PL_PROCESS WHERE REQ_ID= @p_REQ_PAY_ID AND PROCESS_ID ='4')
1861

    
1862
		SET @APPR4 =(SELECT CHECKER_ID FROM PL_PROCESS WHERE REQ_ID= @p_REQ_PAY_ID AND PROCESS_ID ='5')
1863
		SET @POS4 =(SELECT POS_NAME FROM CM_EMPLOYEE_LOG WHERE USER_DOMAIN =@APPR4)
1864
		SET @DATE4 =(SELECT ISNULL( FORMAT(APPROVE_DT,'dd/MM/yyyy,hh:mm:ss tt'),'') FROM PL_PROCESS WHERE REQ_ID= @p_REQ_PAY_ID AND PROCESS_ID ='5')
1865
		DECLARE @BRANCH_TYPE VARCHAR(15), @BRANCH_RQ VARCHAR(15)
1866
		SET @BRANCH_RQ =(SELECT BRANCH_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
1867
		SET @BRANCH_TYPE  = (SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID =@BRANCH_RQ)
1868
		IF(@BRANCH_TYPE='CN')
1869
		BEGIN
1870
			INSERT INTO @TABLE_RETURN_07 VALUES ((SELECT TLFULLNAME FROM TL_USER WHERE TLNANME = @APPR4),(SELECT TLFULLNAME FROM TL_USER WHERE TLNANME = @APPR3),
1871
		(SELECT TLFULLNAME FROM TL_USER WHERE TLNANME = @APPR2),(SELECT TLFULLNAME FROM TL_USER WHERE TLNANME =  @APPR1),'')
1872
		INSERT INTO @TABLE_RETURN_07 VALUES (@POS4,@POS3,@POS2,@POS1,'')
1873
		INSERT INTO @TABLE_RETURN_07 VALUES (@DATE4,@DATE3,@DATE2,@DATE1,'')
1874
		END
1875
		ELSE
1876
		BEGIN
1877
			INSERT INTO @TABLE_RETURN_07 VALUES ((SELECT TLFULLNAME FROM TL_USER WHERE TLNANME = @APPR4),(SELECT TLFULLNAME FROM TL_USER WHERE TLNANME = @APPR3),
1878
		(SELECT TLFULLNAME FROM TL_USER WHERE TLNANME = @APPR2),(SELECT TLFULLNAME FROM TL_USER WHERE TLNANME =  @APPR1),(SELECT TLFULLNAME FROM TL_USER WHERE TLNANME = @APPR))
1879
		INSERT INTO @TABLE_RETURN_07 VALUES (@POS4,@POS3,@POS2,@POS1,@POS)
1880
		INSERT INTO @TABLE_RETURN_07 VALUES (@DATE4,@DATE3,@DATE2,@DATE1,@DATE)
1881
		END
1882
		
1883
		--IF((SELECT RoleName FROM TL_USER WHERE TLNANME =@APPR1) ='GDDV') BEGIN SET @GDDV =@APPR2 END
1884
		--ELSE IF((SELECT RoleName FROM TL_USER WHERE TLNANME =@APPR1) ='GDK')BEGIN SET @GDK =@APPR2 END
1885
		--ELSE IF((SELECT RoleName FROM TL_USER WHERE TLNANME =@APPR1) ='PTGD') BEGIN SET @PTGD =@APPR2 END
1886
		--ELSE IF((SELECT RoleName FROM TL_USER WHERE TLNANME =@APPR1) ='TGD') BEGIN	SET @TGD =@APPR2	END
1887
		--ELSE IF((SELECT RoleName FROM TL_USER WHERE TLNANME =@APPR1) ='HDQT')	BEGIN SET @HDQT =@APPR2 END
1888

    
1889

    
1890
	END
1891
	SELECT * FROM @TABLE_RETURN_01
1892
	SELECT * FROM @TABLE_RETURN_01_DT
1893
	SELECT * FROM @TABLE_RETURN_02
1894
    SELECT * FROM @TABLE_RETURN_02_DT
1895
	SELECT * FROM @TABLE_RETURN_03
1896
	SELECT * FROM @TABLE_RETURN_04
1897
	SELECT * FROM @TABLE_RETURN_06
1898
	SELECT * FROM  @TABLE_RETURN_07
1899
END
1900

    
1901
¿
1902

    
1903

    
1904

    
1905
ALTER PROCEDURE [dbo].[rpt_TR_ADVANCE_TEMP_PAYMENT_ByID]
1906
@p_REQ_PAY_ID	varchar(15)= NULL
1907
AS
1908
		-------
1909
		DECLARE @TRUONG_DV NVARCHAR(50),@DVKD_APP_DT VARCHAR(50)
1910
		DECLARE @DATE_APPR DATETIME
1911
		SET @DATE_APPR =ISNULL((SELECT CONVERT(DATETIME,APPROVE_DT,103) FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID),CONVERT(DATETIME,GETDATE(),103))
1912
		DECLARE @REQ_TYPE VARCHAR(15)
1913
		SET @REQ_TYPE =(SELECT REQ_TYPE FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID=@p_REQ_PAY_ID)
1914
		-------------------------------------------
1915
		DECLARE @CONTENT NVARCHAR(MAX)='', @CONTENT_CK NVARCHAR(MAX)='', @REQ_PAY_TYPE VARCHAR(5), @ACCNO VARCHAR(50), @ACCNAME NVARCHAR(500), @BANK NVARCHAR(500),
1916
		@ISUED_DT DATE,@REASON NVARCHAR(MAX), @DESC NVARCHAR(MAX),@NDTM NVARCHAR(MAX) ='', @NDCK NVARCHAR(MAX) =''
1917
		DECLARE CURS CURSOR FOR SELECT A.REQ_PAY_TYPE, A.ACC_NO,A.ACC_NAME,A.ISSUED_BY,A.ISSUED_DT,A.REQ_PAY_REASON,A.REQ_PAY_ENTRIES FROM TR_REQ_PAY_METHOD A WHERE A.REQ_PAY_ID =@p_REQ_PAY_ID
1918
		DECLARE @NOIDUNG NVARCHAR(MAX) =''
1919
		--- LAY NOI DUNG THANH TOAN NEU THANH TOAN CHO NHA CUNG CAP
1920
		DECLARE CURS_PO CURSOR FOR SELECT A.REQ_PAY_DESC,A.REQ_PAY_ENTRIES FROM TR_REQ_PAY_SCHEDULE A WHERE A.REQ_PAY_ID =@p_REQ_PAY_ID
1921
		DECLARE @NOIDUNG_PO NVARCHAR(MAX) =''
1922
		DECLARE @BRANCH_TYPE VARCHAR(15), @BRANCH_RQ VARCHAR(15),@TOTAL_ADVANCE DECIMAL(18,0), @TOTAL_PAYBACK DECIMAL(18,0)
1923
		SET @BRANCH_RQ =(SELECT BRANCH_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
1924
		SET @BRANCH_TYPE  = (SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID =@BRANCH_RQ)
1925
		IF(@BRANCH_TYPE <>'CN')
1926
		BEGIN
1927
			SET @TRUONG_DV = (SELECT TLFullName FROM TL_USER WHERE TLNANME = (SELECT CHECKER_ID FROM PL_PROCESS WHERE REQ_ID = @p_REQ_PAY_ID AND PROCESS_ID='0'))
1928
			SET @DVKD_APP_DT =(SELECT  ISNULL(FORMAT(APPROVE_DT,'dd/MM/yyyy,hh:mm:ss tt'),'') FROM PL_PROCESS WHERE REQ_ID = @p_REQ_PAY_ID AND PROCESS_ID='0')
1929
		END
1930
		ELSE
1931
		BEGIN
1932
			SET @TRUONG_DV = (SELECT TLFullName FROM TL_USER WHERE TLNANME = (SELECT CHECKER_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID))
1933
			SET @DVKD_APP_DT =(SELECT ISNULL(FORMAT(APPROVE_DT,'dd/MM/yyyy,hh:mm:ss tt'),'') FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
1934
		END
1935
		DECLARE @TMP_DVDM TABLE(DVDM_ID VARCHAR(15))
1936
			INSERT INTO @TMP_DVDM
1937
			SELECT A.DVDM_ID--, A.COST_CODE, A.COST_NAME, B.DEP_ID --, C.DEP_CODE, C.DEP_NAME
1938
			FROM PL_COSTCENTER A
1939
			LEFT JOIN PL_COSTCENTER_DT B ON A.COST_ID = B.COST_ID
1940
			WHERE B.DEP_ID = (SELECT DEP_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
1941
			GROUP BY A.DVDM_ID
1942
		DECLARE @tmp_CN table(BRANCH_ID varchar(15))
1943
			IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID =@BRANCH_RQ)='CN')
1944
			BEGIN
1945
				INSERT into @tmp_CN  SELECT BRANCH_ID  FROM [dbo].[CM_BRANCH_GETCHILDID](@BRANCH_RQ)
1946
			END
1947
			ELSE IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID =@BRANCH_RQ)='PGD')
1948
			BEGIN
1949
				DECLARE @FATHER_ID VARCHAR(15) = NULL
1950
				SET @FATHER_ID =(SELECT FATHER_ID FROM CM_BRANCH WHERE BRANCH_ID =@BRANCH_RQ)
1951
				INSERT into @tmp_CN  SELECT BRANCH_ID  FROM [dbo].[CM_BRANCH_GETCHILDID](@FATHER_ID)
1952
			END
1953
		IF(@BRANCH_TYPE='HS')
1954
				BEGIN
1955
					SET @TOTAL_ADVANCE =ISNULL((SELECT SUM(REQ_AMT*ISNULL(RATE,1)) FROM TR_REQ_ADVANCE_PAYMENT WHERE
1956
					 DEP_ID IN
1957
					 (SELECT A.DEP_ID FROM PL_COSTCENTER_DT A
1958
						LEFT JOIN PL_COSTCENTER B ON A.COST_ID = B.COST_ID
1959
						WHERE B.DVDM_ID IN (SELECT DVDM_ID FROM @TMP_DVDM) AND A.BRANCH_ID =@BRANCH_RQ)
1960
					 AND REQ_TYPE ='I' AND AUTH_STATUS ='A' AND (CONVERT(DATETIME,APPROVE_DT,103) <=@DATE_APPR OR APPROVE_DT IS NULL) AND REQ_PAY_ID <>@p_REQ_PAY_ID),0)
1961
					SET @TOTAL_PAYBACK =
1962
					ISNULL(
1963
					(
1964
						SELECT (SUM(B.AMT_USE) - SUM(B.AMT_ADD) + SUM (B.AMT_REVERT))
1965
						FROM TR_REQ_PAYMENT_DT B
1966
						INNER JOIN TR_REQ_PAYMENT A ON B.PAY_ID = A.REQ_PAY_ID
1967
						INNER JOIN TR_REQ_ADVANCE_PAYMENT C ON C.REQ_PAY_ID = B.PAY_ADV_ID
1968
						WHERE A.DEP_ID IN 
1969
						(SELECT A.DEP_ID FROM PL_COSTCENTER_DT A
1970
						LEFT JOIN PL_COSTCENTER B ON A.COST_ID = B.COST_ID
1971
						WHERE B.DVDM_ID IN (SELECT DVDM_ID FROM @TMP_DVDM) AND A.BRANCH_ID =@BRANCH_RQ)
1972
						AND A.AUTH_STATUS_KT ='A' AND C.REQ_TYPE='I' AND (CONVERT(DATETIME,A.APPROVE_DT_KT,103) <=@DATE_APPR OR A.APPROVE_DT_KT IS NULL) AND B.PAY_ADV_ID <>@p_REQ_PAY_ID
1973
					),0)
1974
				END
1975
			
1976
				-- NEU PHIEU DUOC TAO KHAC VOI HOI SO THI TIEN HANH TINH TONG SO TIEN TAM UNG CUA CN VA PHONG GIAO DICH TRUC THUOC
1977
				ELSE IF(@BRANCH_TYPE <>'HS')
1978
				BEGIN
1979
					SET @TOTAL_ADVANCE =(SELECT SUM(REQ_AMT*ISNULL(RATE,1)) FROM TR_REQ_ADVANCE_PAYMENT WHERE BRANCH_ID IN (SELECT BRANCH_ID FROM @tmp_CN)
1980
					 AND REQ_TYPE ='I' AND AUTH_STATUS='A' AND (CONVERT(DATETIME,APPROVE_DT,103) <=@DATE_APPR OR APPROVE_DT IS NULL) AND REQ_PAY_ID <>@p_REQ_PAY_ID)
1981
					SET @TOTAL_PAYBACK =
1982
					(
1983
						SELECT (SUM(B.AMT_USE) - SUM(B.AMT_ADD) + SUM (B.AMT_REVERT))
1984
						FROM TR_REQ_PAYMENT_DT B
1985
						INNER JOIN TR_REQ_PAYMENT A ON B.PAY_ID = A.REQ_PAY_ID
1986
						INNER JOIN TR_REQ_ADVANCE_PAYMENT C ON C.REQ_PAY_ID = B.PAY_ADV_ID
1987
						WHERE A.BRANCH_ID IN 
1988
						(SELECT BRANCH_ID FROM @tmp_CN)
1989
						AND A.AUTH_STATUS_KT ='A' AND C.REQ_TYPE='I' AND (CONVERT(DATETIME,A.APPROVE_DT_KT,103) <=@DATE_APPR OR A.APPROVE_DT_KT IS NULL) AND B.PAY_ADV_ID <>@p_REQ_PAY_ID
1990
					)
1991
				END
1992
		---
1993
        SELECT A.REQ_PAY_CODE, A.REQ_REASON,A.DEP_ID, ISNULL(FORMAT(A.CREATE_DT,'dd/MM/yyyy,hh:mm:ss tt'),'') AS CREATE_DT, A.MAKER_ID_KT,A.CHECKER_ID,
1994
		ISNULL(FORMAT(A.APPROVE_DT,'dd/MM/yyyy,hh:mm:ss tt'),'') AS APPROVE_DT,A.CHECKER_ID_KT,MAKER_ID_KT,ISNULL(FORMAT(A.APPROVE_DT_KT,'dd/MM/yyyy,hh:mm:ss tt'),'') AS APPROVE_DT_KT , ISNULL(FORMAT(A.CREATE_DT_KT,'dd/MM/yyyy,hh:mm:ss tt'),'') AS CREATE_DT_KT,B.AUTH_STATUS_NAME, C.AUTH_STATUS_NAME AUTH_STATUS_NAME_KT, TL.TLFullName CREATE_FULLNAME,TL2.TLFullName CREATE_FULLNAME_KT,TL3.TLFullName APPROVE_FULLNAME_KT,
1995
		BR.BRANCH_NAME BRANCH_NAME_REQ, BR1.BRANCH_NAME BRANCH_NAME_CRE, DP.DEP_NAME, DP.DEP_CODE, BR.BRANCH_CODE BRANCH_CODE_REQ,
1996
		--Luanlt--2019/10/15-Sửa AL,AL1
1997
		BR1.BRANCH_CODE BRANCH_CODE_CRE, AL.CONTENT REQ_TYPE_NAME,AL1.CONTENT REQ_PAY_TYPE_NAME, 0 TOTAL_AMT_TEMP, 0 TOTAL_AMT_PAY_HIS,TL4.TLFullName AS TRANSFER_FULLNAME,TL5.TLFullName AS TRANSFER_RECIEVER_FULLNAME,
1998
		DAY(A.CREATE_DT) D_, MONTH(A.CREATE_DT) M_, YEAR(A.CREATE_DT) Y_,
1999
		CASE
2000
		WHEN A.REQ_TYPE='I' THEN CAST(1 AS BIT)  
2001
		WHEN  A.REQ_TYPE <>'I'  THEN CAST(0 AS BIT)  
2002
		END AS IS_NB,
2003
		CASE
2004
		WHEN A.REQ_TYPE='P' THEN CAST(1 AS BIT)  
2005
		WHEN  A.REQ_TYPE <>'P'  THEN CAST(0 AS BIT)  
2006
		END AS IS_NCC,
2007
		CASE
2008
		WHEN A.REQ_TYPE='D' THEN CAST(1 AS BIT)  
2009
		WHEN  A.REQ_TYPE <>'D'  THEN CAST(0 AS BIT)  
2010
		END AS IS_XLN,
2011
		CASE WHEN LEN(@CONTENT) >0 THEN LEFT(@CONTENT,LEN(@CONTENT)-2) ELSE '' END AS TTTM,
2012
		CASE WHEN LEN(@CONTENT_CK) >0 THEN LEFT(@CONTENT_CK, LEN(@CONTENT_CK)-2) ELSE NULL END AS TTCK,
2013
		CASE WHEN LEN(@CONTENT) >0 THEN N'Tiền mặt:' ELSE '' END AS TM_TITLE,
2014
		CASE WHEN LEN(@CONTENT_CK) >0 THEN N'Chuyển khoản:' ELSE NULL END AS CK_TITLE,
2015
		--CASE WHEN @REQ_TYPE <>'P' THEN LEFT(@NOIDUNG, LEN(@NOIDUNG)-2) ELSE LEFT(@NOIDUNG_PO,LEN(@NOIDUNG_PO)-2) END AS NOIDUNG,
2016
		TL1.TLFullName AS APPROVE_FULLNAME,
2017
		ISNULL(A.REQ_AMT,0) AS SO_TIEN_PTTT,
2018
		CASE WHEN LEN(@NDTM + @NDCK) >0 THEN LEFT(@NDTM + @NDCK,LEN(@NDTM + @NDCK)-2) ELSE '' END AS PHUONG_THUC_THANH_TOAN, A.REQ_TYPE_CURRENCY AS TYPE_CUR,
2019
		(ISNULL(@TOTAL_ADVANCE,0) -ISNULL(@TOTAL_PAYBACK,0))+A.REQ_AMT*A.RATE AS SO_DU_TAM_UNG,A.REQ_AMT, @TRUONG_DV AS TRUONG_DV, @DVKD_APP_DT AS DVKD_APP_DT
2020
        FROM TR_REQ_ADVANCE_PAYMENT A
2021
             LEFT JOIN CM_AUTH_STATUS B ON A.AUTH_STATUS=B.AUTH_STATUS
2022
             LEFT JOIN CM_AUTH_STATUS C ON A.AUTH_STATUS_KT=C.AUTH_STATUS
2023
             LEFT JOIN TL_USER TL ON A.MAKER_ID=TL.TLNANME
2024
             LEFT JOIN TL_USER TL1 ON A.CHECKER_ID=TL1.TLNANME
2025
             LEFT JOIN TL_USER TL2 ON A.MAKER_ID_KT=TL2.TLNANME
2026
             LEFT JOIN TL_USER TL3 ON A.CHECKER_ID_KT=TL3.TLNANME
2027
             LEFT JOIN dbo.CM_BRANCH BR ON A.BRANCH_ID=BR.BRANCH_ID
2028
			 LEFT JOIN dbo.CM_BRANCH BR1 ON A.BRANCH_CREATE=BR1.BRANCH_ID
2029
             LEFT JOIN dbo.CM_DEPARTMENT DP ON DP.DEP_ID=A.DEP_ID
2030
			 --Luanlt--2019/10/15-Sửa AL,AL1
2031
			 LEFT JOIN CM_ALLCODE AL ON A.REQ_TYPE = AL.CDVAL AND AL.CDNAME='REQ_TYPE'
2032
			 LEFT JOIN CM_ALLCODE AL1 ON A.REQ_PAY_TYPE = AL1.CDVAL AND AL1.CDNAME='REQ_PAY_TYPE'
2033
			 LEFT JOIN TL_USER TL4 ON A.TRANSFER_MAKER = TL4.TLNANME
2034
			 LEFT JOIN TL_USER TL5 ON A.TRASFER_USER_RECIVE = TL5.TLNANME
2035
			 WHERE 1=1 
2036
			 AND(A.REQ_PAY_ID=@p_REQ_PAY_ID)
2037
			ORDER BY A.CREATE_DT DESC;