Project

General

Profile

3.0 FIX TAM UNG PHONG THUONG HIEU VA QUAN HE CONG CHUNG.txt

Luc Tran Van, 09/07/2020 02:10 PM

 
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
		--PRINT @BRANCH_CREATE 
11
		SET @BRANCH_CREATE =(SELECT BRANCH_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
12
		DECLARE @DEP_CODE_NEXT VARCHAR(15)
13
		IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID =@BRANCH_CREATE)<>'HS')
14
		BEGIN
15
			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))
16
			SET @DEP_CODE_NEXT = (SELECT DEP_CODE FROM CM_DEPARTMENT WHERE DEP_ID =@p_DEP_ID)
17
			--PRINT @DEP_CODE_NEXT
18
		END
19
		ELSE
20
		BEGIN
21
			SET @p_DEP_ID =(SELECT DEP_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID=@p_REQ_PAY_ID)
22
			SET @DEP_CODE_NEXT = (SELECT DEP_CODE FROM CM_DEPARTMENT WHERE DEP_ID =@p_DEP_ID)
23
		END
24
		IF EXISTS (SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE MAKER_ID =@p_CHECKER_ID AND REQ_PAY_ID =@p_REQ_PAY_ID)
25
		BEGIN
26
			ROLLBACK TRANSACTION
27
			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
28
			RETURN '-1'
29
		END
30
		-- KIEM TRA NEU DANG TRA VE THI PHAI CHO CAP NHAT LAI THONG TIN MOI DUOC PHEP DUYET
31
		IF EXISTS (SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS ='R' AND REQ_PAY_ID =@p_REQ_PAY_ID)
32
		BEGIN
33
			ROLLBACK TRANSACTION
34
			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
35
			RETURN '-1'
36
		END
37
		-- KIEM TRA NEU DANG TRA VE THI PHAI CHO CAP NHAT LAI THONG TIN MOI DUOC PHEP DUYET
38
		IF EXISTS (SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS_KT ='R' AND REQ_PAY_ID =@p_REQ_PAY_ID)
39
		BEGIN
40
			ROLLBACK TRANSACTION
41
			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
42
			RETURN '-1'
43
		END
44
		-- KIEM TRA NEU DANG TRA VE THI PHAI CHO CAP NHAT LAI THONG TIN MOI DUOC PHEP DUYET
45
		IF EXISTS (SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS_KT ='A' AND REQ_PAY_ID =@p_REQ_PAY_ID)
46
		BEGIN
47
			ROLLBACK TRANSACTION
48
			SELECT '-1' as Result, '' REQ_PAY_ID, N'Phiếu đề nghị tạm ứng đã được KSV phê duyệt trước đó' ErrorDesc
49
			RETURN '-1'
50
		END
51
		IF EXISTS (SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS ='A' AND REQ_PAY_ID =@p_REQ_PAY_ID)
52
		BEGIN
53
			ROLLBACK TRANSACTION
54
			SELECT '-1' as Result, '' REQ_PAY_ID, N'Phiếu đề nghị tạm ứng đã được phê duyệt trước đó' ErrorDesc
55
			RETURN '-1'
56
		END
57
		--- KHAI BAO CHUUNG
58
		   DECLARE @ROLE_ID VARCHAR(200), @BRANCH_TYPE VARCHAR(15), @TOTAL_ADVANCE DECIMAL(18,0), @TOTAL_PAYBACK DECIMAL(18,0), @BRANCH_ID VARCHAR(15),
59
			@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)
60
			DECLARE @LIMIT_AMT DECIMAL(18,0), @REQ_AMT DECIMAL(18,2) =0, @TONG_PGD DECIMAL(18,0), @TONG_PGD_HOAN DECIMAL(18,0)
61
			SET @REQ_AMT = (SELECT REQ_AMT *ISNULL(RATE,1) FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
62
			--SET @ROLE_ID = (SELECT ROLENAME FROM TL_USER WHERE TLNANME=@p_CHECKER_ID)
63
			SET @ROLE_ID = (SELECT ROLENAME FROM TL_USER_V2 WHERE TLNANME=@p_CHECKER_ID)
64
			SET @BRANCH_ID = (SELECT TLSUBBRID FROM TL_USER WHERE TLNANME =@p_CHECKER_ID)
65
			SET @BRANCH_RQ =(SELECT BRANCH_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
66
			SET @DEP_ID_RQ =(SELECT DEP_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
67
			SET @BRANCH_TYPE = (SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID =@BRANCH_RQ)
68
			DECLARE @tmp table(BRANCH_ID varchar(15))
69
			INSERT into @tmp  SELECT BRANCH_ID  FROM [dbo].[CM_BRANCH_GETCHILDID](@BRANCH_ID)
70
			DECLARE @tmp_CN table(BRANCH_ID varchar(15))
71
			IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID =@BRANCH_RQ)='CN')
72
			BEGIN
73
				INSERT into @tmp_CN  SELECT BRANCH_ID  FROM [dbo].[CM_BRANCH_GETCHILDID](@BRANCH_RQ)
74
			END
75
			ELSE IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID =@BRANCH_RQ)='PGD')
76
			BEGIN
77
				DECLARE @FATHER_ID VARCHAR(15) = NULL
78
				SET @FATHER_ID =(SELECT FATHER_ID FROM CM_BRANCH WHERE BRANCH_ID =@BRANCH_RQ)
79
				INSERT into @tmp_CN  SELECT BRANCH_ID  FROM [dbo].[CM_BRANCH_GETCHILDID](@FATHER_ID)
80
			END
81
			--DECLARE @DEP_ID_LG VARCHAR(15) = NULL	
82
			--SET @DEP_ID_LG =(SELECT SECUR_CODE FROM TL_USER WHERE TLNANME=@p_CHECKER_ID)
83
			DECLARE @TMP_DVDM TABLE(DVDM_ID VARCHAR(15))
84
			INSERT INTO @TMP_DVDM
85
			SELECT A.DVDM_ID--, A.COST_CODE, A.COST_NAME, B.DEP_ID --, C.DEP_CODE, C.DEP_NAME
86
			FROM PL_COSTCENTER A
87
			LEFT JOIN PL_COSTCENTER_DT B ON A.COST_ID = B.COST_ID
88
			WHERE B.DEP_ID = @DEP_ID_RQ
89
			GROUP BY A.DVDM_ID
90
			-- KHAI BAO BRANCH CUA USER DUYET
91
			SET @BRANCH_LOGIN = (SELECT TLSUBBRID FROM TL_USER WHERE TLNANME =@p_CHECKER_ID)
92
			DECLARE @LIMIT_REMAIN DECIMAL(18,0)
93
		--CAP NHAT CODE TRONG QUA TRINH TEST UAT
94
		IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND REQ_TYPE='I'))
95
		BEGIN
96
			IF(NOT EXISTS(SELECT * FROM PL_REQUEST_PROCESS WHERE ROLE_USER=@ROLE_ID AND REQ_ID = @p_REQ_PAY_ID))
97
			BEGIN
98
					ROLLBACK TRANSACTION
99
					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
100
					RETURN '-1'
101
			END
102
			--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'))
103
			--BEGIN
104
			--		ROLLBACK TRANSACTION
105
			--		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
106
			--		RETURN '-1'
107
			--END
108
			-- KIEM TRA AUTH_STATUS TRUYEN XUONG LA GI, A: DUYET, C: CONFIRM  
109
			IF(@p_AUTH_STATUS='U') -- KIEM TRA HAN MUC CON LAI CUA USER VA THONG BAO CHO NGUOI DUYET
110
			BEGIN
111
			-- BAT DAU DUYET THEO NGAN SACH			
112
			--- LAY HAN MUC CUA USER
113
			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)
114

    
115
			print @LIMIT_AMT
116
			--
117
			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)
118
			IF(@ROLE_ID ='GDK' AND ((SELECT SECUR_CODE FROM TL_USER WHERE TLNANME =@p_CHECKER_ID) ='DEP000000000011'))
119
			BEGIN
120
				SET @LIMIT_AMT =1000000000
121
				
122
			END
123
			IF(@ROLE_ID ='PTGD' AND ((SELECT SECUR_CODE FROM TL_USER WHERE TLNANME =@p_CHECKER_ID) ='DEP000000000011'))
124
			BEGIN
125
				SET @LIMIT_AMT =3000000000
126
				
127
			END
128
			-- NEU LA HOI SO THI LAY TONG SO TIEN TAM UNG CUA CAC PHONG BAN CHUNG VOI KHOI CUA PHIEU DANG DUOC DUYET
129
			SET @TONG_PGD =(SELECT SUM(REQ_AMT*ISNULL(RATE,1)) FROM TR_REQ_ADVANCE_PAYMENT WHERE BRANCH_ID = @BRANCH_RQ
130
					 AND REQ_TYPE ='I' AND AUTH_STATUS ='A') + @REQ_AMT
131
			SET @TONG_PGD_HOAN =(
132
						--SELECT (SUM(B.AMT_USE) - SUM(B.AMT_ADD) + SUM (B.AMT_REVERT))
133
						--FROM TR_REQ_PAYMENT_DT B
134
						--INNER JOIN TR_REQ_PAYMENT A ON B.PAY_ID = A.REQ_PAY_ID
135
						--INNER JOIN TR_REQ_ADVANCE_PAYMENT C ON C.REQ_PAY_ID = B.PAY_ADV_ID
136
						SELECT SUM (ISNULL(A.PAY_AMT,0)) FROM TR_REQ_ADVANCE_PAYMENT A
137
						WHERE A.BRANCH_ID = @BRANCH_RQ
138
						AND A.AUTH_STATUS_KT ='A' AND A.REQ_TYPE='I') 
139
				IF(@BRANCH_TYPE='HS')
140
				BEGIN
141
					SET @TOTAL_ADVANCE =ISNULL((SELECT SUM(REQ_AMT*ISNULL(RATE,1)) FROM TR_REQ_ADVANCE_PAYMENT WHERE
142
					 DEP_ID IN
143
					 (SELECT A.DEP_ID FROM PL_COSTCENTER_DT A
144
						LEFT JOIN PL_COSTCENTER B ON A.COST_ID = B.COST_ID
145
						WHERE B.DVDM_ID IN (SELECT DVDM_ID FROM @TMP_DVDM) AND A.BRANCH_ID =@BRANCH_RQ)
146
					 AND REQ_TYPE ='I' AND AUTH_STATUS ='A'),0)
147
					SET @TOTAL_PAYBACK =
148
					--ISNULL(
149
					--(
150
					--	SELECT (SUM(B.AMT_USE) - SUM(B.AMT_ADD) + SUM (B.AMT_REVERT))
151
					--	FROM TR_REQ_PAYMENT_DT B
152
					--	INNER JOIN TR_REQ_PAYMENT A ON B.PAY_ID = A.REQ_PAY_ID
153
					--	INNER JOIN TR_REQ_ADVANCE_PAYMENT C ON C.REQ_PAY_ID = B.PAY_ADV_ID
154
					--	WHERE A.DEP_ID IN 
155
					--	(SELECT A.DEP_ID FROM PL_COSTCENTER_DT A
156
					--	LEFT JOIN PL_COSTCENTER B ON A.COST_ID = B.COST_ID
157
					--	WHERE B.DVDM_ID IN (SELECT DVDM_ID FROM @TMP_DVDM) AND A.BRANCH_ID =@BRANCH_ID)
158
					--	AND A.AUTH_STATUS_KT ='A' AND C.REQ_TYPE='I'
159
					--),0)
160
					ISNULL(
161
					(
162
						SELECT (SUM(ISNULL(C.PAY_AMT,0)))
163
						FROM TR_REQ_ADVANCE_PAYMENT C
164
						WHERE C.DEP_ID IN 
165
						(SELECT A.DEP_ID FROM PL_COSTCENTER_DT A
166
						LEFT JOIN PL_COSTCENTER B ON A.COST_ID = B.COST_ID
167
						WHERE B.DVDM_ID IN (SELECT DVDM_ID FROM @TMP_DVDM) AND A.BRANCH_ID =@BRANCH_ID)
168
						AND C.AUTH_STATUS_KT ='A' AND C.REQ_TYPE='I'
169
					),0)
170
				END
171
				-- 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
172
				ELSE IF(@BRANCH_TYPE <>'HS')
173
				BEGIN
174
					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)
175
					 AND REQ_TYPE ='I' AND AUTH_STATUS='A')
176
					--SET @TOTAL_PAYBACK =
177
					--(
178
					--	SELECT (SUM(B.AMT_USE) - SUM(B.AMT_ADD) + SUM (B.AMT_REVERT))
179
					--	FROM TR_REQ_PAYMENT_DT B
180
					--	INNER JOIN TR_REQ_PAYMENT A ON B.PAY_ID = A.REQ_PAY_ID
181
					--	INNER JOIN TR_REQ_ADVANCE_PAYMENT C ON C.REQ_PAY_ID = B.PAY_ADV_ID
182
					--	WHERE A.BRANCH_ID IN 
183
					--	(SELECT BRANCH_ID FROM @tmp_CN)
184
					--	AND A.AUTH_STATUS_KT ='A' AND C.REQ_TYPE='I'
185
					--)
186
					SET @TOTAL_PAYBACK =
187
					(
188
						SELECT (SUM(ISNULL(B.PAY_AMT,0)))
189
						FROM TR_REQ_ADVANCE_PAYMENT B
190
						WHERE B.BRANCH_ID IN 
191
						(SELECT BRANCH_ID FROM @tmp_CN)
192
						AND B.AUTH_STATUS_KT ='A' AND B.REQ_TYPE='I'
193
					)
194
				END
195
				
196
				SET @LIMIT_REMAIN =ISNULL(@TOTAL_ADVANCE,0) - ISNULL(@TOTAL_PAYBACK,0)
197
				-- KIEM TRA NEU LA CHU TICH HDQT THI PHE DUYET LUON, KHONG CAN XET HAN MUC GI
198
				IF(EXISTS(SELECT * FROM TL_USER WHERE TLNANME=@p_CHECKER_ID AND RoleName ='HDQT'))
199
				BEGIN
200
					ROLLBACK TRANSACTION
201
					SELECT '-4' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, 
202
					--N'Tổng hạn mức phê duyệt của bạn là: '+FORMAT(@LIMIT_AMT,'#,#', 'vi-VN')
203
					--+ CHAR(10) +
204
					--N'Hạn mức trên một lần phê duyệt là: '+ FORMAT(@LIMIT_ONE_OF,'#,#', 'vi-VN') 
205
					--+ CHAR(10) + CHAR(13) +
206
					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')
207
					+ CHAR(10) + 
208
					N'Bạn có muốn tiếp tục duyệt hay không' ErrorDesc
209
					RETURN '-4'
210
				END
211
				IF(@LIMIT_AMT <(SELECT REQ_AMT * ISNULL(RATE,1) FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID) + @LIMIT_REMAIN)
212
				BEGIN
213
					ROLLBACK TRANSACTION
214
					SELECT '-2' as Result, @p_REQ_PAY_ID  REQ_PAY_ID,
215
					N'Tổng hạn mức phê duyệt là: '+ FORMAT(@LIMIT_AMT,'#,#', 'vi-VN') + CHAR(10)+
216
					N'Hạn mức trên một lần phê duyệt là: '+ FORMAT(@LIMIT_ONE_OF,'#,#', 'vi-VN') 
217
					+ CHAR(10) + CHAR(13)+
218
					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') 
219
					+ CHAR(10) +
220
					N'Số tiền tạm ứng đã vượt mức phê duyệt là: '+ FORMAT((@LIMIT_REMAIN +@REQ_AMT) -@LIMIT_AMT,'#,#', 'vi-VN') 
221
					+ CHAR(10) +
222
					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
223
					RETURN '-2'
224
				END
225
				--- NEU DU HAN MUC THI THONG BAO DE NGUOI DUYET CAN NHAC CO NEN DUYET PHIEU HAY KHONG
226
				IF(@LIMIT_AMT >=(SELECT REQ_AMT * ISNULL(RATE,1) FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID) +@LIMIT_REMAIN)
227
				BEGIN
228
					IF(@REQ_AMT >@LIMIT_ONE_OF)
229
					BEGIN
230
						ROLLBACK TRANSACTION
231
						SELECT '-2' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, 
232
						N'Tổng hạn mức phê duyệt là: '+ FORMAT(@LIMIT_AMT,'#,#', 'vi-VN') 
233
						+ CHAR(10)+
234
						N'Hạn mức trên một lần phê duyệt là: '+ FORMAT(@LIMIT_ONE_OF,'#,#', 'vi-VN') 
235
						+ CHAR(10) + CHAR(13) +
236
						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') 
237
						+ CHAR(10) + 
238
						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') 
239
						+ CHAR(10) + 
240
						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
241
						RETURN '-2'
242
					END
243
					ELSE
244
					BEGIN
245
						-- KIEM TRA NEU LA PGD THI CANH BAO
246
						IF(@BRANCH_TYPE ='HS')
247
						BEGIN
248
							IF(EXISTS(SELECT * FROM TL_USER WHERE TLNANME=@p_CHECKER_ID AND RoleName NOT IN('TGD','HQDT')))
249
							BEGIN
250
								ROLLBACK TRANSACTION
251
								SELECT '-4' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, 
252
								N'Tổng hạn mức phê duyệt của bạn là: '+FORMAT(@LIMIT_AMT,'#,#', 'vi-VN')
253
								+ CHAR(10) + CHAR(13) +  
254
								N'Hạn mức trên một lần phê duyệt là: '+ FORMAT(@LIMIT_ONE_OF,'#,#', 'vi-VN') 
255
								+ CHAR(10) + 
256
								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')
257
								+ CHAR(10) + 
258
								N'Bạn có muốn tiếp tục duyệt hay không' ErrorDesc
259
								RETURN '-4'
260
							END
261
							ELSE
262
							BEGIN
263
								ROLLBACK TRANSACTION
264
								SELECT '-4' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, 
265
								--N'Tổng hạn mức phê duyệt của bạn là: '+FORMAT(@LIMIT_AMT,'#,#', 'vi-VN')
266
								--+ CHAR(10) + CHAR(13) +  
267
								--N'Hạn mức trên một lần phê duyệt là: '+ FORMAT(@LIMIT_ONE_OF,'#,#', 'vi-VN') 
268
								--+ CHAR(10) + 
269
								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')
270
								+ CHAR(10) + 
271
								N'Bạn có muốn tiếp tục duyệt hay không' ErrorDesc
272
								RETURN '-4'
273
							END
274
						END
275
						ELSE IF(@BRANCH_TYPE ='CN')
276
						BEGIN
277
							IF(ISNULL(@TONG_PGD,0) -ISNULL(@TONG_PGD_HOAN,0) > 40000000)
278
							BEGIN
279
								ROLLBACK TRANSACTION
280
								SELECT '-4' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, 
281
								N'Tổng hạn mức phê duyệt của bạn là: '+FORMAT(@LIMIT_AMT,'#,#', 'vi-VN')
282
								+ CHAR(10) + 
283
								N'Hạn mức trên một lần phê duyệt là: '+ FORMAT(@LIMIT_ONE_OF,'#,#', 'vi-VN') 
284
								+ CHAR(10) + CHAR(13) +
285
								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')
286
								+ CHAR(10) +
287
								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')
288
								+ CHAR(10) + 
289
								N'Bạn có muốn tiếp tục duyệt hay không' ErrorDesc
290
								RETURN '-4'
291
							END
292
							ELSE
293
							BEGIN
294
								IF(EXISTS(SELECT * FROM TL_USER WHERE TLNANME=@p_CHECKER_ID AND RoleName NOT IN('TGD','HQDT')))
295
								BEGIN
296
									ROLLBACK TRANSACTION
297
									SELECT '-4' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, 
298
									N'Tổng hạn mức phê duyệt của bạn là: '+FORMAT(@LIMIT_AMT,'#,#', 'vi-VN')
299
									+ CHAR(10) +
300
									N'Hạn mức trên một lần phê duyệt là: '+ FORMAT(@LIMIT_ONE_OF,'#,#', 'vi-VN') 
301
									+ CHAR(10) + CHAR(13) +
302
									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')
303
									+ CHAR(10) + 
304
									N'Bạn có muốn tiếp tục duyệt hay không' ErrorDesc
305
									RETURN '-4'
306
								END
307
								ELSE
308
								BEGIN
309
									ROLLBACK TRANSACTION
310
									SELECT '-4' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, 
311
									--N'Tổng hạn mức phê duyệt của bạn là: '+FORMAT(@LIMIT_AMT,'#,#', 'vi-VN')
312
									--+ CHAR(10) +
313
									--N'Hạn mức trên một lần phê duyệt là: '+ FORMAT(@LIMIT_ONE_OF,'#,#', 'vi-VN') 
314
									--+ CHAR(10) + CHAR(13) +
315
									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')
316
									+ CHAR(10) + 
317
									N'Bạn có muốn tiếp tục duyệt hay không' ErrorDesc
318
									RETURN '-4'
319
								END
320
							END
321
						END
322
						ELSE IF(@BRANCH_TYPE ='PGD')
323
						BEGIN
324
							IF(ISNULL(@TONG_PGD,0) -ISNULL(@TONG_PGD_HOAN,0) > 10000000)
325
							BEGIN
326
								ROLLBACK TRANSACTION
327
								SELECT '-4' as Result, @p_REQ_PAY_ID  REQ_PAY_ID,
328
								N'Tổng hạn mức phê duyệt của bạn là: '+FORMAT(@LIMIT_AMT,'#,#', 'vi-VN')+ CHAR(10) +
329
								N'Hạn mức trên một lần phê duyệt là: '+ FORMAT(@LIMIT_ONE_OF,'#,#', 'vi-VN') 
330
								+ CHAR(10) + CHAR(13) + 
331
								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')
332
								+ CHAR(10) + 
333
								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')
334
								+ CHAR(10) + 
335
								N'Bạn có muốn tiếp tục duyệt hay không' ErrorDesc
336
								RETURN '-4'
337
							END
338
							ELSE
339
							BEGIN
340
								ROLLBACK TRANSACTION
341
								SELECT '-4' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, 
342
								N'Tổng hạn mức phê duyệt của bạn là: '+FORMAT(@LIMIT_AMT,'#,#', 'vi-VN')
343
								+ CHAR(10) + 
344
								N'Hạn mức trên một lần phê duyệt là: '+ FORMAT(@LIMIT_ONE_OF,'#,#', 'vi-VN') 
345
								+ CHAR(10) + CHAR(13) +
346
								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')
347
								+ CHAR(10) + 
348
								N'Bạn có muốn tiếp tục duyệt hay không' ErrorDesc
349
								RETURN '-4'
350
							END
351
						END
352
					END
353
				END
354
			-- NEU THOA MAN CAC DIEU KIEN SE TIEN HANH DUYET
355
			END -- END DU HAN MUC DUYET
356
			ELSE IF(@p_AUTH_STATUS='A')
357
			BEGIN
358
				UPDATE TR_REQ_ADVANCE_PAYMENT
359
				SET    AUTH_STATUS='A', CHECKER_ID = @p_CHECKER_ID, APPROVE_DT =  GETDATE(), AUTH_STATUS_KT='U'
360
				WHERE  REQ_PAY_ID = @p_REQ_PAY_ID
361
				--- CAP NHAT LAI TINH TRANG TRONG REQUEST_PROCESS
362
				DECLARE @PROCESS_CURR VARCHAR(5)
363
				SET @PROCESS_CURR =(SELECT PROCESS_ID FROM PL_REQUEST_PROCESS WHERE REQ_ID = @p_REQ_PAY_ID AND ROLE_USER =@ROLE_ID)
364
				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')
365
				--- CAP NHAT PROCESS CUA PHIEU DE NGHI TAM UNG LA DA DUYET
366
				UPDATE TR_REQ_ADVANCE_PAYMENT SET PROCESS=@PROCESS_CURR WHERE REQ_PAY_ID=@p_REQ_PAY_ID
367
				--
368
				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
369
			DECLARE @l_REQ_AMT DECIMAL(18,0) = (SELECT REQ_AMT*ISNULL(RATE,1) FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID=@p_REQ_PAY_ID)
370
			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)
371
			--
372
			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)
373
			IF(@ROLE_ID ='GDK' AND ((SELECT SECUR_CODE FROM TL_USER WHERE TLNANME =@p_CHECKER_ID) ='DEP000000000011'))
374
			BEGIN
375
				SET @LIMIT_AMT =1000000000
376
				
377
			END
378
			IF(@ROLE_ID ='PTGD' AND ((SELECT SECUR_CODE FROM TL_USER WHERE TLNANME =@p_CHECKER_ID) ='DEP000000000011'))
379
			BEGIN
380
				SET @LIMIT_AMT =3000000000
381
				
382
			END
383
			-- NEU LA HOI SO THI LAY TONG SO TIEN TAM UNG CUA CAC PHONG BAN CHUNG VOI KHOI CUA PHIEU DANG DUOC DUYET
384
			SET @TONG_PGD =(SELECT SUM(REQ_AMT*ISNULL(RATE,1)) FROM TR_REQ_ADVANCE_PAYMENT WHERE BRANCH_ID = @BRANCH_RQ
385
					 AND REQ_TYPE ='I' AND AUTH_STATUS ='A') + @REQ_AMT
386
			SET @TONG_PGD_HOAN =(
387
						--SELECT (SUM(B.AMT_USE) - SUM(B.AMT_ADD) + SUM (B.AMT_REVERT))
388
						--FROM TR_REQ_PAYMENT_DT B
389
						--INNER JOIN TR_REQ_PAYMENT A ON B.PAY_ID = A.REQ_PAY_ID
390
						--INNER JOIN TR_REQ_ADVANCE_PAYMENT C ON C.REQ_PAY_ID = B.PAY_ADV_ID
391
						SELECT SUM (ISNULL(A.PAY_AMT,0)) FROM TR_REQ_ADVANCE_PAYMENT A
392
						WHERE A.BRANCH_ID = @BRANCH_RQ
393
						AND A.AUTH_STATUS_KT ='A' AND A.REQ_TYPE='I') 
394
				IF(@BRANCH_TYPE='HS')
395
				BEGIN
396
					SET @TOTAL_ADVANCE =ISNULL((SELECT SUM(REQ_AMT*ISNULL(RATE,1)) FROM TR_REQ_ADVANCE_PAYMENT WHERE
397
					 DEP_ID IN
398
					 (SELECT A.DEP_ID FROM PL_COSTCENTER_DT A
399
						LEFT JOIN PL_COSTCENTER B ON A.COST_ID = B.COST_ID
400
						WHERE B.DVDM_ID IN (SELECT DVDM_ID FROM @TMP_DVDM) AND A.BRANCH_ID =@BRANCH_RQ)
401
					 AND REQ_TYPE ='I' AND AUTH_STATUS ='A'),0)
402
					SET @TOTAL_PAYBACK =
403
					ISNULL(
404
					(
405
						SELECT (SUM(ISNULL(C.PAY_AMT,0)))
406
						FROM TR_REQ_ADVANCE_PAYMENT C
407
						WHERE C.DEP_ID IN 
408
						(SELECT A.DEP_ID FROM PL_COSTCENTER_DT A
409
						LEFT JOIN PL_COSTCENTER B ON A.COST_ID = B.COST_ID
410
						WHERE B.DVDM_ID IN (SELECT DVDM_ID FROM @TMP_DVDM) AND A.BRANCH_ID =@BRANCH_ID)
411
						AND C.AUTH_STATUS_KT ='A' AND C.REQ_TYPE='I'
412
					),0)
413
				END
414
				-- 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
415
				ELSE IF(@BRANCH_TYPE <>'HS')
416
				BEGIN
417
					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)
418
					 AND REQ_TYPE ='I' AND AUTH_STATUS='A')
419
					SET @TOTAL_PAYBACK =
420
					(
421
						SELECT (SUM(ISNULL(B.PAY_AMT,0)))
422
						FROM TR_REQ_ADVANCE_PAYMENT B
423
						WHERE B.BRANCH_ID IN 
424
						(SELECT BRANCH_ID FROM @tmp_CN)
425
						AND B.AUTH_STATUS_KT ='A' AND B.REQ_TYPE='I'
426
					)
427
				END
428
				SET @LIMIT_REMAIN =ISNULL(@TOTAL_ADVANCE,0) - ISNULL(@TOTAL_PAYBACK,0)
429
				--- INSERT VAO BANG LOG
430
				INSERT INTO TR_REQ_ADVANCE_LIMIT_LOG  VALUES (@p_REQ_PAY_ID,@LIMIT_REMAIN,GETDATE())
431
				----
432
			END
433
			ELSE -- NEW KHONG DU HAN MUC THI BAT DAU XAC NHAN VA DUYET THEO HAN MUC
434
			BEGIN
435
				DECLARE @t_REQ_AMT DECIMAL(18,0) = (SELECT REQ_AMT*ISNULL(RATE,1) FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID=@p_REQ_PAY_ID)
436
			
437
				--PRINT @t_REQ_AMT
438
				--- 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
439
				DECLARE @MAX_STEP INT, @NEXT_ROLE VARCHAR(20), @MESSAGE NVARCHAR(100), @PROCESS_ID_NEXT VARCHAR(5), @PROCESS_PARENT VARCHAR(5),
440
				@BRANCH_ID_PROC VARCHAR(15), @NEX_ROLE_STEP VARCHAR(25), @CURRENT_PROCESS VARCHAR(15)
441
				SET @CURRENT_PROCESS =(SELECT PROCESS_ID FROM PL_REQUEST_PROCESS WHERE REQ_ID = @p_REQ_PAY_ID AND ROLE_USER=@ROLE_ID)
442
				SET @NEX_ROLE_STEP = (SELECT ROLE_USER FROM PL_REQUEST_PROCESS WHERE PARENT_PROCESS_ID =@CURRENT_PROCESS AND REQ_ID = @p_REQ_PAY_ID )
443
				--PRINT @NEX_ROLE_STEP
444
				--SET @MAX_STEP = CONVERT(INT,(SELECT MAX(PROCESS_ID) FROM TR_REQUEST_PROCESS WHERE REQ_ID =@p_REQ_PAY_ID))
445
				SET @PROCESS_ID_NEXT = CONVERT(VARCHAR(5),@CURRENT_PROCESS+1)
446
				--SET @PROCESS_PARENT = CONVERT(VARCHAR(5),@MAX_STEP)
447
				DECLARE @TMP_ROLE TABLE (ROLE_ID VARCHAR(15), BRANCH_ID VARCHAR(15), LIMIT_VALUE DECIMAL(18,0),LIMIT_TYPE VARCHAR(15))
448
				--IF EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06908%' AND DEP_ID =@p_DEP_ID)
449
					IF(LEFT(@DEP_CODE_NEXT,5) ='06908' OR @DEP_CODE_NEXT ='0690605')
450
					BEGIN
451
						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'
452
					END
453
					--ELSE IF EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06910%' AND DEP_ID =@p_DEP_ID)
454
					ELSE IF(LEFT(@DEP_CODE_NEXT,5) ='06910')
455
					BEGIN
456
						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'
457
					END
458
					--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)
459
					--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) 
460
					--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))
461
					ELSE IF((LEFT(@DEP_CODE_NEXT,5) ='06900') OR (LEFT(@DEP_CODE_NEXT,5)) ='06901' OR (LEFT(@DEP_CODE_NEXT,5))='06904'
462
					OR (LEFT(@DEP_CODE_NEXT,5))='06902' OR (LEFT(@DEP_CODE_NEXT,5))='06903'  OR (LEFT(@DEP_CODE_NEXT,5))='06920')
463
					BEGIN
464
						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')
465
					END
466
					--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)
467
					--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) 
468
					--OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06922%' AND DEP_ID =@p_DEP_ID))
469
					ELSE IF((LEFT(@DEP_CODE_NEXT,5) ='06907') OR (LEFT(@DEP_CODE_NEXT,5)) ='06909' OR (LEFT(@DEP_CODE_NEXT,5))='06911'
470
					OR (LEFT(@DEP_CODE_NEXT,5))='06922' OR (LEFT(@DEP_CODE_NEXT,5))='06921'  OR (LEFT(@DEP_CODE_NEXT,5))='06920')
471
					BEGIN
472
						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'
473
					END
474
					ELSE
475
					BEGIN
476
						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'
477
					END
478
				SET @BRANCH_ID_PROC= (SELECT BRANCH_ID FROM @TMP_ROLE WHERE ROLE_ID=@NEXT_ROLE AND LIMIT_TYPE='ADV_PAY')
479
				print @DEP_CODE_NEXT
480
				print @BRANCH_ID_PROC 
481
			    print @NEX_ROLE_STEP
482
				IF(NOT EXISTS(SELECT * FROM PL_REQUEST_PROCESS WHERE ROLE_USER=@NEX_ROLE_STEP AND REQ_ID= @p_REQ_PAY_ID))
483
				BEGIN
484
					--SET @NEXT_ROLE =(SELECT TOP 1 ROLE_ID FROM @TMP_ROLE WHERE LIMIT_VALUE >@t_REQ_AMT 
485
					SET @NEXT_ROLE =(SELECT TOP 1 ROLE_ID FROM @TMP_ROLE WHERE 1 =1
486
					AND ROLE_ID NOT IN (SELECT ROLE_USER FROM PL_REQUEST_PROCESS WHERE REQ_ID = @p_REQ_PAY_ID) AND LIMIT_TYPE ='ADV_PAY')
487
					--print @NEXT_ROLE
488
					SET @BRANCH_ID_PROC= (SELECT BRANCH_ID FROM @TMP_ROLE WHERE ROLE_ID=@NEXT_ROLE AND LIMIT_TYPE='ADV_PAY')
489
					SET @MESSAGE = (SELECT N'Đợi '+ ROLE_DESC + N' phê duyệt' FROM TL_SYSROLE WHERE ROLE_ID = @NEXT_ROLE)
490
					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)  
491
					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)
492
					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')
493
				END
494
				ELSE
495
				BEGIN
496
					--print @NEX_ROLE_STEP
497
					SET @NEXT_ROLE =@NEX_ROLE_STEP
498
					UPDATE PL_REQUEST_PROCESS SET STATUS='C',DVDM_ID=@p_COST_ID WHERE ROLE_USER =@NEXT_ROLE AND REQ_ID = @p_REQ_PAY_ID	
499
					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')
500
				END
501
				--				
502
				IF @@Error <> 0 GOTO ABORT
503
					-- UPDATE STATUS CUA STEP HIEN TAI
504
				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		
505
				--INSERT VAO TR_PROCESS		
506
				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	
507
				--- 
508
				UPDATE PL_REQUEST_PROCESS SET DVDM_ID= @p_COST_ID WHERE REQ_ID =@p_REQ_PAY_ID AND ROLE_USER <>@ROLE_ID
509
		  END
510
		END	
511
		ELSE
512
		BEGIN
513
			--- 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
514
			DECLARE @PAY_ID VARCHAR(15), @SUM_OF_PAY_ID DECIMAL(18,2), @SUM_ADVANCE DECIMAL(18,2),
515
			@AMOUNT DECIMAL(18,2),@AMT_PAY_DO DECIMAL(18,2),@SCH_ID VARCHAR(15),@AMT_ADVANCE DECIMAL(18,0)
516
			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
517
			OPEN CUR_SH
518
			FETCH NEXT FROM CUR_SH INTO @PAY_ID,@AMOUNT,@AMT_PAY_DO,@SCH_ID,@AMT_ADVANCE
519
			WHILE @@FETCH_STATUS =0
520
			BEGIN
521
				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')
522
				SET @SUM_ADVANCE =(SELECT SUM(AMT_ADVANCE) FROM TR_REQ_PAY_SCHEDULE WHERE PAY_ID =@PAY_ID AND AUTH_STATUS_KT='A')
523
				IF(@SUM_OF_PAY_ID +@AMT_PAY_DO >@AMOUNT)
524
				BEGIN
525
					ROLLBACK TRANSACTION
526
					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'
527
					RETURN '-1'
528
				END
529
				IF(@SUM_OF_PAY_ID+@AMT_PAY_DO+@SUM_ADVANCE < @AMOUNT)
530
				BEGIN
531
					UPDATE TR_REQ_PAY_SCHEDULE SET PAYMENT_STATUS ='DTU' WHERE SCHEDULE_ID=@SCH_ID
532
				END
533
				ELSE IF(@SUM_OF_PAY_ID+@AMT_PAY_DO+@SUM_ADVANCE = @AMOUNT)
534
				BEGIN
535
					UPDATE TR_REQ_PAY_SCHEDULE SET PAYMENT_STATUS ='DTT' WHERE SCHEDULE_ID=@SCH_ID
536
				END
537
				ELSE IF(@SUM_OF_PAY_ID=0 AND @SUM_ADVANCE =0 )
538
				BEGIN
539
					UPDATE TR_REQ_PAY_SCHEDULE SET PAYMENT_STATUS ='CTT' WHERE SCHEDULE_ID=@SCH_ID
540
				END
541
				FETCH NEXT FROM CUR_SH INTO @PAY_ID,@AMOUNT,@AMT_PAY_DO,@SCH_ID,@AMT_ADVANCE
542
			END
543
			CLOSE CUR_SH
544
			DEALLOCATE CUR_SH 
545

    
546
			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
547
			SET @p_AUTH_STATUS ='A'
548
			--- INSERT 1 DONG VAO PL_PROCESS
549
			-- INSERT VAO BANG PL_PROCESS 1 DONG TRA VE
550
			INSERT INTO dbo.PL_PROCESS(REQ_ID,PROCESS_ID,CHECKER_ID,APPROVE_DT,PROCESS_DESC,NOTES)
551
				   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')			
552
		END	
553
		IF @@Error <> 0 GOTO ABORT
554
COMMIT TRANSACTION
555
	IF(@p_AUTH_STATUS='A')
556
	BEGIN
557
		SELECT '0' as Result, @p_REQ_PAY_ID  REQ_PAY_ID ,N'12345' +@DEP_CODE_NEXT ErrorDesc
558
		RETURN '0'
559
	END
560
	ELSE
561
	BEGIN
562
		SELECT '1' as Result, @p_REQ_PAY_ID  REQ_PAY_ID ,'' ErrorDesc
563
		RETURN '1'
564
	END
565
ABORT:
566
BEGIN
567
		ROLLBACK TRANSACTION
568
		SELECT '-1' as Result, '' REQ_PAY_ID, '' ErrorDesc
569
		RETURN '-1'
570
END
571
¿
572

    
573
ALTER PROCEDURE [dbo].[TR_REQ_ADVANCE_PAYMENT_Upd]
574
@p_REQ_PAY_ID	varchar(15)= NULL,
575
@p_REQ_PAY_CODE	varchar(50)	= NULL,
576
@p_REQ_DT VARCHAR(20)= NULL,
577
@p_BRANCH_ID	varchar(15)	= NULL,
578
@p_DEP_ID	varchar(15)	= NULL,
579
@p_REQ_REASON	nvarchar(MAX)	= NULL,
580
@p_REQ_TYPE	varchar(15)	= NULL,
581
@P_REQ_ENTRIES nvarchar(MAX)	= NULL,
582
@p_REQ_DESCRIPTION	nvarchar(MAX)	= NULL,
583
@p_REF_ID	varchar(15)	= NULL,
584
@p_RECEIVER_PO	nvarchar(250)	= NULL,
585
@p_RECEIVER_DEBIT	nvarchar(250)	= NULL,
586
@p_REQ_PAY_TYPE	varchar(15)	= NULL,
587
@p_REQ_TYPE_CURRENCY	nvarchar(50)	= NULL,
588
@p_REQ_AMT	decimal(18, 0)	= NULL,
589
@p_REQ_TEMP_AMT	decimal(18, 0)	= NULL,
590
@p_MAKER_ID	varchar(15)	= NULL,
591
@p_CREATE_DT	varchar(25)	= NULL,
592
@p_EDITOR_ID	varchar(15)	= NULL,
593
@p_AUTH_STATUS	varchar(1)	= NULL,
594
@p_CHECKER_ID	varchar(15)	= NULL,
595
@p_APPROVE_DT	varchar(25)	= NULL,
596
@p_CREATE_DT_KT	varchar(25)	= NULL,
597
@p_MAKER_ID_KT	varchar(15)	= NULL,
598
@p_AUTH_STATUS_KT	varchar(1)	= NULL,
599
@p_CHECKER_ID_KT	varchar(1)	= NULL,
600
@p_APPROVE_DT_KT  varchar(25)= null,
601
@p_CONFIRM_NOTE	nvarchar(500)	= NULL,
602
@p_BRANCH_CREATE	varchar(15)	= NULL,
603
@p_NOTES	varchar(15)	= NULL,
604
@p_RECORD_STATUS	varchar(1)	= NULL,
605
@p_TRANSFER_MAKER	nvarchar(50)	= NULL,
606
@p_TRANSFER_DT	varchar(25)	= NULL,
607
@p_TRASFER_USER_RECIVE	varchar(15)	= NULL,
608
@p_PROCESS	varchar(15)	= NULL,
609
@p_PAY_PHASE VARCHAR(15)= NULL,
610
@p_DVDM_ID VARCHAR(15)= NULL,
611
@p_RATE DECIMAL(18,0) =0,
612
@p_RECIVER_MONEY VARCHAR(15)= NULL,
613
@p_XMP_TEMP XML = NULL,
614
@p_TYPE_FUNCTION VARCHAR(15) = NULL,
615
@p_IS_PERIOD VARCHAR(5) = NULL
616
AS
617
--Validation is here
618
/*
619
DECLARE @ERRORSYS NVARCHAR(15) = '' 
620
  IF ( NOT EXISTS ( SELECT * FROM ASS_COLLECT WHERE ))
621
	 SET @ERRORSYS = ''
622
IF @ERRORSYS <> '' 
623
BEGIN
624
	SELECT ErrorCode Result, ''  CAR_ID, ErrorDesc ErrorDesc FROM SYS_ERROR WHERE ErrorCode = @ERRORSYS
625
	RETURN '0'
626
END 
627
*/
628
	--Luanlt-2019/10/15 Disable Validation
629
	--DECLARE @ERRORSYS NVARCHAR(15) = '' 
630
	--IF EXISTS(SELECT * FROM TR_PO_MASTER WHERE REF_ID  = @p_REF_ID )
631
	--BEGIN
632
	--	SET @ERRORSYS = 'ASSC-00005'
633
	--	SELECT ErrorCode Result, '' REQ_PAY_ID, ErrorDesc ErrorDesc FROM SYS_ERROR WHERE ErrorCode = @ERRORSYS
634
	--	RETURN '-1'
635
	--END
636

    
637
	DECLARE @BRANCH_TYPE_CR VARCHAR(15), @ROLE_KI_NHAY VARCHAR(50)
638
	SET @ROLE_KI_NHAY =(SELECT RoleName FROM TL_USER_V2 WHERE TLNANME =@p_TRASFER_USER_RECIVE)
639
	IF(@ROLE_KI_NHAY IS NOT NULL AND @ROLE_KI_NHAY <> '' AND @ROLE_KI_NHAY IN ('TP','GDDV','KTT','TPTC','TC'))
640
	BEGIN
641
		SELECT '-1' Result, '' REQ_PAY_ID, N'Bạn không được phép chọn cấp trưởng đơn vị làm cấp phê duyệt trung gian. Vui lòng bỏ qua hoặc chọn cấp phó phòng, trưởng bộ phận' ErrorDesc
642
		RETURN '-1'
643
	END
644
	SET @BRANCH_TYPE_CR =(SELECT TOP 1 BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID =@p_BRANCH_CREATE)
645
	DECLARE @ACC_NUM VARCHAR(15)
646
	SET @ACC_NUM = (SELECT TOP 1 ACC_NUM FROM CM_ACCOUNT_PAY WHERE REF_ID =@p_REF_ID)
647
	IF @p_REQ_PAY_CODE IS NULL OR @p_REQ_PAY_CODE =''
648
	BEGIN
649
		SELECT '-1' Result, '' REQ_PAY_ID, N'Mã số phiếu không được để trống' ErrorDesc
650
		RETURN '-1'
651
	END
652
	IF (@p_REQ_TYPE='I' AND (@p_RECEIVER_DEBIT IS NULL OR @p_RECEIVER_DEBIT =''))
653
	BEGIN
654
		SELECT '-1' Result, '' REQ_PAY_ID, N'Tài khoản nhân viên tạm ứng không được để trống' ErrorDesc
655
		RETURN '-1'
656
	END
657
	IF EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_CODE = @p_REQ_PAY_CODE AND REQ_PAY_ID <> @p_REQ_PAY_ID)
658
	BEGIN
659
		SELECT '-1' Result, '' REQ_PAY_ID, N'Mã số phiếu đã tồn tại trong hệ thống' ErrorDesc
660
		RETURN '-1'
661
	END
662
	--IF(((SELECT TOP 1 ACC_NUM FROM CM_ACCOUNT_PAY WHERE REF_ID =@p_REF_ID)<>@p_RECEIVER_DEBIT) AND @p_REQ_TYPE='I')
663
	--IF(@ACC_NUM <>@p_RECEIVER_DEBIT AND @p_REQ_TYPE='I' AND LEN(ISNULL(@ACC_NUM,''))>0)
664
	--BEGIN
665
	--	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
666
	--	RETURN '-1'
667
	--END
668
	IF(NOT EXISTS(SELECT * FROM CM_ACCOUNT_PAY WHERE REF_ID =@p_REF_ID) AND @p_REQ_TYPE='I')
669
		BEGIN
670
			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')
671
		END
672
	ELSE
673
		BEGIN
674
			IF(@ACC_NUM <>@p_RECEIVER_DEBIT AND @p_REQ_TYPE='I' AND LEN(ISNULL(@ACC_NUM,''))>0)
675
			BEGIN
676
				--ROLLBACK TRANSACTION
677
				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
678
				RETURN '-1'
679
			END
680
	END
681
	--IF(EXISTS(SELECT * FROM CM_ACCOUNT_PAY WHERE ACC_NUM =@p_RECEIVER_DEBIT AND REF_ID <> @p_REF_ID))
682
	--BEGIN
683
	--			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
684
	--			RETURN '-1'
685
	--END
686
	IF(LEN(ISNULL(@p_RECEIVER_DEBIT,''))>15 AND @p_REQ_TYPE ='I')
687
	BEGIN
688
				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
689
				RETURN '-1'
690
	END
691
	-- 19-11-2019 LUCTV BO SUNG VALIDATE TRONG QUA TRINH TEST SAU KHI UAT
692
	-- NEU TAM UNG CHO NHA CUNG CAP THI DOT THANH TOAN KHONG DUOC PHEP NULL
693
	-- SO TIEN THANH TOÁN PHAI LON HON KHONG
694
		IF(@p_REQ_AMT <=0)
695
		BEGIN	
696
			SELECT '-1' as Result, '' REQ_PAY_ID, N'Số tiền tạm ứng phải lớn hơn 0' ErrorDesc
697
			RETURN '-1'
698
		END
699
	 -- END VALIDATE TRONG QUA TRINH TEST UAT
700
		BEGIN TRANSACTION
701
		--IF(@p_DVDM_ID IS NULL OR @p_DVDM_ID ='')
702
		--BEGIN
703
		--	SET @p_DVDM_ID = (SELECT TOP 1 DVDM_ID FROM CM_DVDM WHERE DVDM_NAME ='KHOI TAI CHINH')
704
		--END
705
		UPDATE TR_REQ_ADVANCE_PAYMENT SET 
706
		REF_ID = @p_REF_ID,
707
		DEP_ID= @p_DEP_ID,REQ_REASON = @p_REQ_REASON, REQ_PAY_TYPE = @p_REQ_PAY_TYPE,
708
		REQ_AMT = @p_REQ_AMT,
709
		NOTES= @p_NOTES,
710
		REQ_TYPE= @p_REQ_TYPE,REQ_DESCRIPTION = @p_REQ_DESCRIPTION,RECEIVER_PO =@p_RECEIVER_PO, RECEIVER_DEBIT= @p_RECEIVER_DEBIT,
711
		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,
712
		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
713
		WHERE REQ_PAY_ID =@p_REQ_PAY_ID
714
		IF @@Error <> 0 GOTO ABORT
715
		--- INSERT VÀO BẢNG DETAIL NÊU TẠM ỨNG LÀ TẠM ỨNG THANH TOÁN
716
			DECLARE @hdoc INT
717
			EXEC sp_xml_preparedocument @hdoc OUTPUT, @p_XMP_TEMP;
718
			
719
			-- KIEM TRA NEU TAM UNG THANH TOAN
720
			IF((@p_REQ_TYPE='P' AND (@p_IS_PERIOD <>'Y' OR @p_IS_PERIOD IS NULL)) OR @p_REQ_TYPE='D')
721
			BEGIN
722
				DELETE FROM TR_REQ_ADVANCE_DT WHERE REQ_PAY_ID=@p_REQ_PAY_ID
723
				DELETE FROM TR_REQ_PAY_SCHEDULE WHERE REQ_PAY_ID=@p_REQ_PAY_ID
724
				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,2),
725
				@AMT_REMAIN_SCHEDULE decimal(18,0),@REQ_AD_DT varchar(20),@PROCESS varchar(15),@PAY_ID VARCHAR(15),
726
				@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),
727
				@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)
728
				DECLARE XmlDataPO CURSOR FOR
729
				SELECT *
730
				FROM
731
				OPENXML(@hdoc, '/Root/XmlDataPO', 2)
732
				WITH(REF_ID varchar(15),IS_CLOSED VARCHAR(1),REF_TYPE VARCHAR(15))
733
				OPEN XmlDataPO;
734
				DECLARE @INDEX_PO INT =0
735
				SET @INDEX_PO = 0
736
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
737
				WHILE @@fetch_status=0 
738
				BEGIN
739
					SET @INDEX_PO = @INDEX_PO +1
740
					-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
741
					IF(@p_TYPE_FUNCTION ='SEND')
742
					BEGIN
743
					
744
					
745
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
746
					IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND TYPE ='C' AND REQ_PAY_ID 
747
					IN (SELECT REQ_PAY_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS_KT<>'A' OR AUTH_STATUS_KT IS NULL)))
748
					BEGIN
749
						ROLLBACK TRANSACTION
750
						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ố '+
751
						(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
752
						RETURN '-1'
753
					END
754
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
755
					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))
756
					BEGIN
757
						ROLLBACK TRANSACTION
758
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': Hợp đồng số '+
759
						(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
760
						RETURN '-1'
761
					END
762
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
763
					IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND TYPE ='P' AND REQ_PAY_ID 
764
					IN (SELECT REQ_PAY_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS_KT<>'A' OR AUTH_STATUS_KT IS NULL)))
765
					BEGIN
766
						ROLLBACK TRANSACTION
767
						SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO số '+
768
						(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
769
						RETURN '-1'
770
					END
771
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
772
					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))
773
					BEGIN
774
						ROLLBACK TRANSACTION
775
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO số '+
776
						(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
777
						RETURN '-1'
778
					END
779
					--- KIEM TRA XEM PO NAY DUOC THANH TOAN HAY CHUA
780
					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' )))
781
					BEGIN
782
						ROLLBACK TRANSACTION
783
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO số '+
784
						(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
785
						RETURN '-1'
786
					END
787
					END
788
					DECLARE @REQ_PAYDTID VARCHAR(15);
789
					EXEC SYS_CodeMasters_Gen 'TR_REQ_ADVANCE_DT', @REQ_PAYDTID OUT;
790
					IF @REQ_PAYDTID='' OR @REQ_PAYDTID IS NULL GOTO ABORT;
791
					INSERT INTO TR_REQ_ADVANCE_DT (REQ_PAYDTID,REQ_PAY_ID,REF_ID,TYPE,MAKER_ID,CREATE_DT,IS_CLOSED,REF_TYPE) VALUES
792
					(@REQ_PAYDTID,@p_REQ_PAY_ID,@REF_ID,'ADV_PAY',@p_MAKER_ID,GETDATE(),@IS_CLOSED,@REF_TYPE)
793
				IF @@error<>0 GOTO ABORT;
794
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
795
				END
796
				CLOSE XmlDataPO;
797
				DEALLOCATE XmlDataPO;
798
				--- CUSOR DANH SACH LICH THANH TOAN PO - HD	
799
				DECLARE XmlDataSchedule CURSOR FOR
800
				SELECT *
801
				FROM
802
				OPENXML(@hdoc, 'Root/XmlDataSchedule',2)
803
				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,2),
804
				AMT_REMAIN_SCHEDULE decimal(18,0),REQ_AD_DT varchar(20),PROCESS varchar(15), PAY_ID VARCHAR(15),REF_ID VARCHAR(15),
805
				REQ_PAY_DESC NVARCHAR(500), REQ_PAY_ENTRIES NVARCHAR(250),CURRENCY VARCHAR(15),RATE DECIMAL(18,0),AMT_PAY_REAL DECIMAL(18,2))
806
				OPEN XmlDataSchedule
807
				FETCH NEXT FROM XmlDataSchedule INTO @PO_ID,@TERM_PAY,@AMT_PAY_SCHEDULE,@REQ_ADV_ID_SCHE,@AMT_ADVANCE_SCHEDULE,@AMT_PAY_DO,
808
				@AMT_REMAIN_SCHEDULE,@REQ_AD_DT,@PROCESS,@PAY_ID,@REF_ID,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@CURRENCY,@RATE,@AMT_PAY_REAL
809
				WHILE @@fetch_status=0 
810
				BEGIN
811
					DECLARE @p_REQ_PAY_SCHEDULE_ID VARCHAR(15);
812
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_SCHEDULE', @p_REQ_PAY_SCHEDULE_ID OUT;
813
					IF @p_REQ_PAY_SCHEDULE_ID='' OR @p_REQ_PAY_SCHEDULE_ID IS NULL GOTO ABORT;
814
					INSERT INTO TR_REQ_PAY_SCHEDULE(
815
					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,
816
					CREATE_DT,AUTH_STATUS_KT,PAYMENT_STATUS,TRN_TYPE,REF_ID,REQ_PAY_DESC,REQ_PAY_ENTRIES,CURRENCY,RATE, AMT_PAY_REAL)
817
					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,
818
					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)
819
				--- END KHAI BAO CURSOR
820
				IF @@error<>0 GOTO ABORT;
821
				FETCH NEXT FROM XmlDataSchedule INTO @PO_ID,@TERM_PAY,@AMT_PAY_SCHEDULE,@REQ_ADV_ID_SCHE,@AMT_ADVANCE_SCHEDULE,@AMT_PAY_DO,
822
				@AMT_REMAIN_SCHEDULE,@REQ_AD_DT,@PROCESS,@PAY_ID,@REF_ID,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@CURRENCY,@RATE,@AMT_PAY_REAL
823
				END
824
				CLOSE XmlDataSchedule;
825
				DEALLOCATE XmlDataSchedule;
826
			END
827
		--- END TẠM ỨNG THANH TOÁN
828
		---- TẠM ỨNG HĐ ĐỊNH KÌ
829
			IF(@p_REQ_TYPE = 'P' AND @p_IS_PERIOD='Y')
830
			BEGIN
831
				DELETE FROM TR_REQ_ADVANCE_DT WHERE REQ_PAY_ID =@p_REQ_PAY_ID
832
				DELETE FROM TR_REQ_PAY_PERIOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID
833
				DECLARE XmlDataPO CURSOR FOR
834
				SELECT *
835
				FROM
836
				OPENXML(@hdoc, '/Root/XmlDataPO', 2)
837
				WITH(REF_ID varchar(15),IS_CLOSED VARCHAR(1),REF_TYPE VARCHAR(15))
838
				OPEN XmlDataPO;
839
				SET @INDEX_PO = 0
840
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
841
				WHILE @@fetch_status=0 
842
				BEGIN
843
					SET @INDEX_PO = @INDEX_PO +1
844
					DECLARE @REQ_PAYDTID_C VARCHAR(15);
845
					EXEC SYS_CodeMasters_Gen 'TR_REQ_ADVANCE_DT', @REQ_PAYDTID_C OUT;
846
					IF @REQ_PAYDTID_C='' OR @REQ_PAYDTID_C IS NULL GOTO ABORT;
847
					INSERT INTO TR_REQ_ADVANCE_DT (REQ_PAYDTID,REQ_PAY_ID,REF_ID,TYPE,MAKER_ID,CREATE_DT,IS_CLOSED,REF_TYPE) VALUES
848
					(@REQ_PAYDTID_C,@p_REQ_PAY_ID,@REF_ID,'ADV_PAY',@p_MAKER_ID,GETDATE(),@IS_CLOSED,@REF_TYPE)
849
				IF @@error<>0 GOTO ABORT;
850
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
851
				END
852
				CLOSE XmlDataPO;
853
				DEALLOCATE XmlDataPO;
854
				--- CUSOR DANH SACH LICH THANH TOAN PO - HD	
855
			----------------------------
856
			--INSERT FROM PERIOD	
857
				DECLARE XmlDataPeriod CURSOR FOR
858
				SELECT *
859
				FROM
860
				OPENXML(@hdoc, '/Root/XmlDataPeriod', 2)
861
				WITH(CONTRACT_ID varchar(15),PAY_DT_REAL VARCHAR(20),PAY_TYPE VARCHAR(5),
862
				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) )
863
				OPEN XmlDataPeriod;
864
				DECLARE @CONTRACT_ID varchar(15),@PAY_DT_REAL VARCHAR(20),@PAY_TYPE VARCHAR(5),
865
				@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)
866
				FETCH NEXT FROM XmlDataPeriod INTO @CONTRACT_ID ,@PAY_DT_REAL ,@PAY_TYPE ,
867
				@OLD_INDEX ,@NEW_INDEX ,@AMT_PAY_PERIOD,@CURRENCY, @RATE,@FROM_DATE,@TO_DATE,@PAY_PHASE,@REASON_TTDK
868
				WHILE @@fetch_status=0 
869
				BEGIN
870
					-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
871
					IF(@p_TYPE_FUNCTION ='SEND')
872
					BEGIN
873
					
874
					--IF(EXISTS(SELECT CONTRACT_ID 
875
					--FROM TR_CONTRACT 
876
					--WHERE CONTRACT_ID = @REF_ID AND CONVERT(DATE,END_DT,103) < CONVERT(DATE,GETDATE(),103) AND END_DT IS NOT NULL AND CONT_TYPE ='DK' AND CONT_TYPE IS NOT NULL AND  CONT_TYPE <>''))
877
					
878
					----AND IS_CLOSED='Y' ))
879
					--BEGIN
880
					--	ROLLBACK TRANSACTION
881
					--	SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Tạm ứng hợp đồng định kì đã đóng' ErrorDesc
882
					--	RETURN '-1'
883
					--END
884

    
885
					IF(@NEW_INDEX <=@OLD_INDEX AND @NEW_INDEX >0 AND @OLD_INDEX >0)
886
					BEGIN
887
						ROLLBACK TRANSACTION
888
						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
889
						RETURN '-1'
890
					END
891
					END
892
					DECLARE @PERIOD_ID VARCHAR(15);
893
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_PERIOD', @PERIOD_ID OUT;
894
					IF @PERIOD_ID='' OR @PERIOD_ID IS NULL GOTO ABORT;
895
					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)
896
					VALUES (@PERIOD_ID,@p_REQ_PAY_ID,'ADV_PAY',@CONTRACT_ID,CONVERT(DATE,@PAY_DT_REAL,103),
897
				@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)
898
			IF @@error<>0 GOTO ABORT;
899
			FETCH NEXT FROM XmlDataPeriod INTO @CONTRACT_ID ,@PAY_DT_REAL ,@PAY_TYPE ,
900
				@OLD_INDEX ,@NEW_INDEX ,@AMT_PAY_PERIOD,@CURRENCY, @RATE,@FROM_DATE,@TO_DATE,@PAY_PHASE,@REASON_TTDK
901
			END
902
			CLOSE XmlDataPeriod;
903
			DEALLOCATE XmlDataPeriod;
904
			-- VALIDATE SO TIEN
905
			--IF(@p_REQ_AMT >= @TOTAL_SCHEDULE_AMT)
906
			--BEGIN
907
			--	ROLLBACK TRANSACTION
908
			--	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
909
			--	RETURN '-1'
910
			--END
911
			----
912
			END
913
		---- END TẠM ỨNG HĐ ĐỊNH KÌ
914
		--- INSERT PHƯƠNG THỨC THANH TOÁN
915
		----MethodCursor
916
			DELETE FROM TR_REQ_PAY_METHOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID
917
			DECLARE @RECEIVE_ID varchar(15),@RECEIVE_NAME nvarchar(100),@REQ_PAY_REASON nvarchar(MAX),@TOTAL_AMT_METHOD decimal(18,2),@REQ_PAY_TYPE varchar(1),
918
					@ACC_NO VARCHAR(50), @ACC_NAME NVARCHAR(250), @ISSED_BY NVARCHAR(250), @ISSUED_DT VARCHAR(20)
919
			DECLARE XmlDataMethod CURSOR FOR
920
			SELECT *
921
			FROM
922
			OPENXML(@hdoc, 'Root/XmlDataMethod',2)
923
			WITH(RECEIVE_ID varchar(15),RECEIVE_NAME nvarchar(100),REQ_PAY_REASON nvarchar(MAX),TOTAL_AMT decimal(18,2),REQ_PAY_TYPE varchar(1),
924
			REQ_PAY_DESC nvarchar(MAX),REQ_PAY_ENTRIES nvarchar(MAX),ACC_NO VARCHAR(50), ACC_NAME NVARCHAR(250), 
925
			ISSUED_BY NVARCHAR(250), ISSUED_DT VARCHAR(20),CURRENCY VARCHAR(15),RATE DECIMAL(18,0),CHECK_IN VARCHAR(15))
926
			OPEN XmlDataMethod
927
			FETCH NEXT FROM XmlDataMethod 
928
			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 
929
			WHILE @@fetch_status=0 
930
			BEGIN
931
				IF(@REQ_PAY_TYPE<>'1')
932
				BEGIN
933
					SET @ISSUED_DT = NULL
934
				END
935
				DECLARE @p_REQ_PAY_METHOD_ID VARCHAR(15);
936
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_METHOD', @p_REQ_PAY_METHOD_ID OUT;
937
				IF @p_REQ_PAY_METHOD_ID='' OR @p_REQ_PAY_METHOD_ID IS NULL GOTO ABORT;
938
				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,
939
				CREATE_DT,ACC_NO,ACC_NAME,ISSUED_BY,ISSUED_DT,CURRENCY,RATE,CHECK_IN)
940
				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,'',
941
				@p_MAKER_ID,GETDATE(),@ACC_NO,@ACC_NAME,@ISSED_BY, CONVERT(DATE, @ISSUED_DT, 103),@CURRENCY,@RATE,@CHECK_IN)
942
			IF @@error<>0 GOTO ABORT;
943
			FETCH NEXT FROM XmlDataMethod 
944
			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
945
			END
946
			CLOSE XmlDataMethod;
947
			DEALLOCATE XmlDataMethod
948
		----END INSERT PHƯƠNG THỨC THANH TOÁN
949
		----INSERT VAO BANG DS KHACH HANG
950
			DELETE FROM TR_REQ_ADVANCE_CUS WHERE REQ_PAY_ID = @p_REQ_PAY_ID
951
			DECLARE XmlDataCus CURSOR FOR
952
			SELECT *
953
			FROM
954
			OPENXML(@hdoc, '/Root/XmlDataCus', 2)
955
			WITH(CUS_ID varchar(15), EMP_ID VARCHAR(15), AMT_PAY_DO decimal(18,2),CURRENCY VARCHAR(15),RATE DECIMAL(18,0))
956
			OPEN XmlDataCus;
957
			FETCH NEXT FROM XmlDataCus INTO @CUST_ID, @EMP_ID,@AMT_PAY_DO,@CURRENCY,@RATE
958
				WHILE @@fetch_status=0 
959
				BEGIN		
960
					INSERT INTO TR_REQ_ADVANCE_CUS(REQ_PAY_ID,CUST_ID,EMP_ID,AMT_PAY_DO,CURRENCY,RATE,MAKER_ID,CREATE_DT)
961
					VALUES (@p_REQ_PAY_ID, @CUST_ID, @EMP_ID,@AMT_PAY_DO,@CURRENCY,@RATE,@p_MAKER_ID,GETDATE())
962
				--- END KHAI BAO CURSOR
963
				IF @@error<>0 GOTO ABORT;
964
				FETCH NEXT FROM XmlDataCus INTO  @CUST_ID, @EMP_ID,@AMT_PAY_DO,@CURRENCY,@RATE
965
				END
966
				CLOSE XmlDataCus;
967
				DEALLOCATE XmlDataCus;
968
		----END
969
		-- HANG MUC CHI PHI VA NGAN SACH
970
			DELETE FROM TR_REQ_PAY_BUDGET WHERE REQ_PAY_ID =@p_REQ_PAY_ID
971
			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)
972
			DECLARE XmlDataGood CURSOR FOR
973
			SELECT *
974
			FROM
975
			OPENXML(@hdoc, 'Root/XmlDataGood',2) 
976
			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))
977
			OPEN XmlDataGood
978
			FETCH NEXT FROM XmlDataGood INTO @TRADE_ID,@GD_ID ,@AMT_APP ,@AMT_DO,@AMT_EXE ,@AMT_REMAIN_GD,@CURRENCY,@RATE,@REASON
979
			WHILE @@fetch_status=0 BEGIN
980
				--- KIEM TRA NEU NGAN SACH SU DUNG THUC THE LON HON NGAN SACH CON LAI
981
				SET @INDEX_NS = @INDEX_NS +1
982
				-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
983
				--IF(@p_TYPE_FUNCTION ='SEND')
984
				--BEGIN
985
				--IF((@AMT_EXE  > @AMT_REMAIN_GD))
986
				--BEGIN
987
				--		ROLLBACK TRANSACTION
988
				--		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
989
				--		RETURN '-1'
990
				--END	
991
				--END
992
				IF(@p_TYPE_FUNCTION ='SEND')
993
				BEGIN
994
				IF(ISNULL(@AMT_EXE,0) =0)
995
				BEGIN
996
					ROLLBACK TRANSACTION
997
						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ế phải lớn hơn không.' ErrorDesc
998
						RETURN '-1'
999
				END
1000
				IF((@AMT_EXE  > @AMT_REMAIN_GD) AND ((SELECT GD_TYPE_ID FROM CM_GOODS WHERE GD_ID =@GD_ID) ='NS'))
1001
				BEGIN
1002
						ROLLBACK TRANSACTION
1003
						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
1004
						RETURN '-1'
1005
				END		
1006
			END
1007
				DECLARE @p_BUDGET_ID VARCHAR(15);
1008
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_BUDGET', @p_BUDGET_ID OUT;
1009
				IF @p_BUDGET_ID='' OR @p_BUDGET_ID IS NULL GOTO ABORT;
1010
				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) 
1011
				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)
1012
			IF @@error<>0 GOTO ABORT;
1013
			FETCH NEXT FROM XmlDataGood INTO @TRADE_ID,@GD_ID ,@AMT_APP ,@AMT_DO,@AMT_EXE ,@AMT_REMAIN_GD,@CURRENCY,@RATE,@REASON
1014
			END;
1015
		CLOSE XmlDataGood;
1016
		DEALLOCATE XmlDataGood;
1017
		--- END INSERT NGAN SACH
1018
		DELETE FROM TR_REQ_PAY_ATTACH WHERE REQ_PAY_ID =@p_REQ_PAY_ID
1019
		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)
1020
		DECLARE XmlAttach CURSOR FOR
1021
		SELECT *
1022
		FROM
1023
		OPENXML(@hdoc, 'Root/XmlAttach',2) 
1024
		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))
1025
		OPEN XmlAttach
1026
		--INSERT CHUNG TU DINH KEM
1027
				FETCH NEXT FROM XmlAttach INTO @ATTACH_ID,@CON_ID,@CONT_CODE,@NOTES_ATT,@CON_DESC,@CON_TYPE,@AMT_ATT,@REF_DT
1028
				WHILE @@fetch_status=0 
1029
				BEGIN
1030
					IF (@REF_DT='')
1031
					BEGIN
1032
						SET @REF_DT = NULL
1033
					END
1034
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_ATTACH', @ATTACH_ID OUT;
1035
					IF @ATTACH_ID='' OR @ATTACH_ID IS NULL GOTO ABORT;
1036
					INSERT INTO TR_REQ_PAY_ATTACH(ATTACH_ID,REQ_PAY_ID,REF_ID,REF_CODE,NOTES,[DESCRIPTION],[TYPE],AMT,REF_DT) VALUES
1037
					(@ATTACH_ID,@p_REQ_PAY_ID,@CON_ID,@CONT_CODE,@NOTES_ATT,@CON_DESC,@CON_TYPE,@AMT_ATT, CONVERT(DATE, @REF_DT,103))
1038
				IF @@error<>0 GOTO ABORT;
1039
				FETCH NEXT FROM XmlAttach INTO @ATTACH_ID,@CON_ID,@CONT_CODE,@NOTES_ATT,@CON_DESC,@CON_TYPE,@AMT_ATT,@REF_DT
1040
				END
1041
				CLOSE XmlAttach;
1042
				DEALLOCATE XmlAttach;
1043
		----END
1044
		--- BAT DAU VALIDATE
1045
		IF(@p_TYPE_FUNCTION ='SEND')
1046
		BEGIN
1047
			DECLARE @SUM_PTTT DECIMAL(18,0), @SUM_NS DECIMAL(18,0),@SUM_LICH_TT DECIMAL(18,0)
1048
			SET @SUM_PTTT =(SELECT SUM(TOTAL_AMT * ISNULL(RATE,1)) FROM  TR_REQ_PAY_METHOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
1049
			IF(EXISTS(SELECT * FROM TR_REQ_PAY_SCHEDULE WHERE REQ_PAY_ID =@p_REQ_PAY_ID) AND @p_REQ_TYPE ='D')
1050
			BEGIN
1051
				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)
1052
				IF(@p_REQ_AMT*ISNULL(@p_RATE,1) != ISNULL(@SUM_LICH_TT,0))
1053
				BEGIN
1054
					ROLLBACK TRANSACTION
1055
					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
1056
					RETURN '-1'
1057
				END
1058
			END
1059
			IF(EXISTS(SELECT * FROM TR_REQ_PAY_BUDGET WHERE REQ_PAY_ID =@p_REQ_PAY_ID))
1060
			BEGIN
1061
				SET @SUM_NS =(SELECT SUM(AMT_EXE * ISNULL(RATE,1)) FROM  TR_REQ_PAY_BUDGET WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
1062
				IF(@p_REQ_AMT*ISNULL(@p_RATE,1) != ISNULL(@SUM_PTTT,0))
1063
				BEGIN
1064
					ROLLBACK TRANSACTION
1065
					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
1066
					RETURN '-1'
1067
				END
1068
			END
1069
			ELSE
1070
			IF(@p_REQ_AMT*ISNULL(@p_RATE,1) != ISNULL(@SUM_PTTT,0))
1071
			BEGIN
1072
				ROLLBACK TRANSACTION
1073
				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
1074
				RETURN '-1'
1075
			END
1076
			
1077
		END
1078
		----END
1079
		IF(@p_REQ_TYPE ='I')
1080
			BEGIN
1081
				DELETE FROM PL_REQUEST_PROCESS WHERE REQ_ID = @p_REQ_PAY_ID
1082
				DECLARE @tmp table(ROLE_ID VARCHAR(25),BRANCH_ID varchar(15),AMT decimal(18,2))
1083
				IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE) ='HS')
1084
				BEGIN
1085
					--DECLARE @DEP_CODE VARCHAR(15)
1086
					--SET @DEP_CODE =(SELECT * FROM CM_DEPARTMENT WHERE DEP_ID =@p_DEP_ID)
1087
					IF EXISTS(SELECT * FROM CM_DEPARTMENT WHERE (DEP_CODE LIKE '%06908%' OR DEP_CODE ='0690605') AND DEP_ID =@p_DEP_ID)
1088
					BEGIN
1089
						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'
1090
					END
1091
					ELSE IF EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06910%' AND DEP_ID =@p_DEP_ID)
1092
					BEGIN
1093
						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'
1094
					END
1095
					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)
1096
					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) 
1097
					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))
1098
					BEGIN
1099
						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')
1100
					END
1101
					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)
1102
					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) 
1103
					OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06922%' AND DEP_ID =@p_DEP_ID))
1104
					BEGIN
1105
						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'
1106
					END
1107
					ELSE
1108
					BEGIN
1109
						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'
1110
					END
1111
				END
1112
				ELSE
1113
				BEGIN
1114
				IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE) ='CN')
1115
					BEGIN
1116
						--- BAO GOM DON VI & 3 CAP DUYET CUA HOI SO
1117
						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
1118
						--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'
1119
				END
1120
				ELSE IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE) ='PGD')
1121
					BEGIN
1122
						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)
1123
						--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'
1124
				END
1125
				END
1126
				DECLARE @ROLE_ID VARCHAR(20), @BRANCH_ID VARCHAR(20), @INDEX INT =0, @SL_ROLE INT =0,@LIMIT_VALUE DECIMAL(18,0)
1127
				SET @SL_ROLE = (SELECT COUNT(*) FROM @tmp)
1128
				DECLARE @ISLEAF VARCHAR(1) = 'Y', @PARENT_ID VARCHAR(10) = '', @STATUS VARCHAR(1) = 'C', @NOTES NVARCHAR(500)
1129
				DECLARE CUR_PR CURSOR FOR  SELECT A.ROLE_ID, A.BRANCH_ID,A.AMT FROM @tmp A
1130
				OPEN CUR_PR
1131
				FETCH NEXT FROM CUR_PR INTO @ROLE_ID,@BRANCH_ID,@LIMIT_VALUE
1132
				WHILE @@FETCH_STATUS =0 --AND @STOP=0
1133
				BEGIN								
1134
					SET @INDEX= @INDEX+1
1135
					IF @INDEX = @SL_ROLE
1136
						SET @ISLEAF = 'Y'
1137
					ELSE
1138
						SET @ISLEAF = 'N'
1139
					SET @NOTES = (SELECT N'Đợi '+ ROLE_DESC + N' phê duyệt' FROM TL_SYSROLE WHERE ROLE_ID = @ROLE_ID)
1140

    
1141
					IF(@INDEX=1 )
1142
					BEGIN		
1143
						SET @PARENT_ID = NULL
1144
						SET @STATUS = 'C'							
1145
						--INSERT INTO TR_REQUEST_PROCESS VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),'C',@ROLE_ID,@BRANCH_ID,NULL,NULL,NULL,@ISLEAF)
1146
					END				
1147
					ELSE 
1148
					BEGIN
1149
						SET @PARENT_ID = CONVERT(VARCHAR(5),@INDEX -1)
1150
						SET @STATUS = 'U'
1151
					END
1152
						IF(@LIMIT_VALUE >= @p_REQ_AMT)
1153
						BEGIN
1154
							INSERT INTO dbo.PL_REQUEST_PROCESS
1155
							(
1156
								REQ_ID,
1157
								PROCESS_ID,
1158
								STATUS,
1159
								ROLE_USER,
1160
								BRANCH_ID,
1161
								CHECKER_ID,
1162
								APPROVE_DT,
1163
								PARENT_PROCESS_ID,
1164
								IS_LEAF, COST_ID, DVDM_ID, NOTES
1165
							)
1166
							VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),@STATUS,@ROLE_ID,@BRANCH_ID,NULL,NULL, @PARENT_ID,'Y', '',@p_DVDM_ID,@NOTES)
1167
							--INSERT INTO PL_REQUEST_PROCESS VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),@STATUS,@ROLE_ID,@BRANCH_ID,NULL,NULL, @PARENT_ID,'Y')
1168
							BREAK;
1169
						END
1170
						ELSE
1171
							INSERT INTO PL_REQUEST_PROCESS (
1172
								REQ_ID,
1173
								PROCESS_ID,
1174
								STATUS,
1175
								ROLE_USER,
1176
								BRANCH_ID,
1177
								CHECKER_ID,
1178
								APPROVE_DT,
1179
								PARENT_PROCESS_ID,
1180
								IS_LEAF, COST_ID, DVDM_ID, NOTES
1181
							) VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),@STATUS,@ROLE_ID,@BRANCH_ID,NULL,NULL, @PARENT_ID,@ISLEAF, '', @p_DVDM_ID, @NOTES)
1182
					--END
1183
					
1184
					FETCH NEXT FROM CUR_PR INTO @ROLE_ID,@BRANCH_ID,@LIMIT_VALUE
1185
				END
1186
				CLOSE CUR_PR
1187
				DEALLOCATE CUR_PR
1188
			END
1189
COMMIT TRANSACTION
1190
		IF(@p_TYPE_FUNCTION ='SEND')-- BAT DAU GUI PHE DUYET
1191
		BEGIN
1192
				--ROLLBACK TRANSACTION
1193
				-- CAP NHAT TINH TRANG DUYET KE TOAN LA DANG XU LY 
1194
				IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE (TRASFER_USER_RECIVE ='' OR TRASFER_USER_RECIVE IS NULL) AND REQ_PAY_ID =@p_REQ_PAY_ID ) AND @BRANCH_TYPE_CR ='HS'  AND @p_REQ_TYPE ='I')
1195
				BEGIN
1196
					DECLARE @USER_TP VARCHAR(15) =''
1197
					--SET @USER_TP =(SELECT TOP 1 TLNANME FROM TL_USER WHERE SECUR_CODE =@p_DEP_ID 
1198
					--		AND (RoleName IN ('GDDV','TPTC','TC','KTT') OR RoleName IN (SELECT ROLE_OLD FROM TL_SYS_ROLE_MAPPING WHERE ROLE_NEW ='GDDV')))
1199
					IF(@USER_TP IS NULL OR @USER_TP ='')
1200
					BEGIN
1201
						SET @USER_TP = (SELECT TOP 1 TLNANME FROM TL_USER_V2 WHERE SECUR_CODE =@p_DEP_ID 
1202
							AND (RoleName IN ('GDDV','TPTC','TC','KTT')))
1203
					END
1204
					UPDATE TR_REQ_ADVANCE_PAYMENT SET TRASFER_USER_RECIVE =@USER_TP WHERE REQ_PAY_ID =@p_REQ_PAY_ID
1205
				END
1206
				IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE TRASFER_USER_RECIVE ='' OR TRASFER_USER_RECIVE IS NULL) AND @BRANCH_TYPE_CR ='PGD')
1207
				BEGIN
1208
					DECLARE @USER_TPGD VARCHAR(15) =''
1209
					SET @USER_TPGD =(SELECT TOP 1 TLNANME FROM TL_USER WHERE SECUR_CODE =@p_DEP_ID AND (RoleName IN ('TPGD')))
1210
					IF(@USER_TPGD IS NULL OR @USER_TPGD ='')
1211
					BEGIN
1212
						SET @USER_TPGD = (SELECT TOP 1 TLNANME FROM TL_USER_V2 WHERE TLSUBBRID =@p_BRANCH_CREATE 
1213
							AND RoleName ='TPGD')
1214
					END
1215
					UPDATE TR_REQ_ADVANCE_PAYMENT SET TRASFER_USER_RECIVE =@USER_TPGD WHERE REQ_PAY_ID =@p_REQ_PAY_ID
1216
				END
1217
				IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID  =@p_REQ_PAY_ID AND AUTH_STATUS='U'))
1218
				BEGIN
1219
					SELECT '-1' as Result, '' REQ_PAY_ID, N'Phiếu đề nghị tạm ứng đã được gửi phê duyệt trước đó! Vui lòng đợi các cấp phê duyệt' ErrorDesc
1220
					RETURN '-1'
1221
				END
1222
				UPDATE TR_REQ_ADVANCE_PAYMENT SET AUTH_STATUS ='U',CREATE_DT = GETDATE() WHERE REQ_PAY_ID =@p_REQ_PAY_ID
1223
				INSERT INTO dbo.PL_PROCESS(REQ_ID,PROCESS_ID,CHECKER_ID,APPROVE_DT,PROCESS_DESC,NOTES)
1224
				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')
1225
				SELECT '4' as Result, @p_REQ_PAY_ID AS REQ_PAY_ID, N'Gửi phê duyệt thành công' ErrorDesc
1226
				RETURN '4'
1227
		END
1228
SELECT '0' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, '' ErrorDesc
1229
RETURN '0'
1230
ABORT:
1231
BEGIN
1232
		ROLLBACK TRANSACTION
1233
		SELECT '-1' as Result, '' REQ_PAY_ID, '' ErrorDesc
1234
		RETURN '-1'
1235
End
1236
¿
1237

    
1238
ALTER PROCEDURE [dbo].[TR_REQ_ADVANCE_PAYMENT_Ins]
1239
@p_REQ_PAY_ID	varchar(15)= NULL,
1240
@p_REQ_PAY_CODE	varchar(50)	= NULL,
1241
@p_REQ_DT VARCHAR(10)= NULL,
1242
@p_BRANCH_ID	varchar(15)	= NULL,
1243
@p_DEP_ID	varchar(15)	= NULL,
1244
@p_REQ_REASON	nvarchar(MAX)	= NULL,
1245
@p_REQ_TYPE	varchar(15)	= NULL,
1246
@P_REQ_ENTRIES nvarchar(MAX)	= NULL,
1247
@p_REQ_DESCRIPTION	nvarchar(MAX)	= NULL,
1248
@p_REF_ID	varchar(15)	= NULL,
1249
@p_RECEIVER_PO	nvarchar(250)	= NULL,
1250
@p_RECEIVER_DEBIT	nvarchar(250)	= NULL,
1251
@p_REQ_PAY_TYPE	varchar(15)	= NULL,
1252
@p_REQ_TYPE_CURRENCY	nvarchar(50)	= NULL,
1253
@p_REQ_AMT	decimal(18, 0)	= NULL,
1254
@p_REQ_TEMP_AMT	decimal(18, 0)	= NULL,
1255
@p_MAKER_ID	varchar(15)	= NULL,
1256
@p_CREATE_DT	varchar(25)	= NULL,
1257
@p_EDITOR_ID	varchar(15)	= NULL,
1258
@p_AUTH_STATUS	varchar(1)	= NULL,
1259
@p_CHECKER_ID	varchar(15)	= NULL,
1260
@p_APPROVE_DT	varchar(25)	= NULL,
1261
@p_CREATE_DT_KT	varchar(25)	= NULL,
1262
@p_MAKER_ID_KT	varchar(15)	= NULL,
1263
@p_AUTH_STATUS_KT	varchar(1)	= NULL,
1264
@p_CHECKER_ID_KT	varchar(1)	= NULL,
1265
@p_APPROVE_DT_KT  varchar(25)= null,
1266
@p_CONFIRM_NOTE	nvarchar(500)	= NULL,
1267
@p_BRANCH_CREATE	varchar(15)	= NULL,
1268
@p_NOTES	varchar(15)	= NULL,
1269
@p_RECORD_STATUS	varchar(1)	= NULL,
1270
@p_TRANSFER_MAKER	nvarchar(50)	= NULL,
1271
@p_TRANSFER_DT	varchar(25)	= NULL,
1272
@p_TRASFER_USER_RECIVE	varchar(15)	= NULL,
1273
@p_PROCESS	varchar(15)	= NULL,
1274
@p_PAY_PHASE VARCHAR(15)= NULL,
1275
@p_DVDM_ID VARCHAR(15) = NULL,
1276
@p_RATE DECIMAL(18,0)= NULL,
1277
@p_RECIVER_MONEY VARCHAR(15) = NULL,
1278
@p_IS_PERIOD VARCHAR(5) = NULL,
1279
@p_TYPE_FUNCTION VARCHAR(15) = NULL,
1280
@p_XMP_TEMP XML = NULL
1281
AS
1282
--Validation is here
1283
/*
1284
DECLARE @ERRORSYS NVARCHAR(15) = '' 
1285
  IF ( NOT EXISTS ( SELECT * FROM ASS_COLLECT WHERE ))
1286
	 SET @ERRORSYS = ''
1287
IF @ERRORSYS <> '' 
1288
BEGIN
1289
	SELECT ErrorCode Result, ''  CAR_ID, ErrorDesc ErrorDesc FROM SYS_ERROR WHERE ErrorCode = @ERRORSYS
1290
	RETURN '0'
1291
END 
1292
*/
1293
	--DECLARE @ERRORSYS NVARCHAR(15) = '' 
1294
	--IF EXISTS(SELECT * FROM TR_PO_MASTER WHERE REF_ID  = @p_REF_ID )
1295
	--BEGIN
1296
	--	SET @ERRORSYS = 'ASSC-00005'
1297
	--	SELECT ErrorCode Result, '' COLLECT_ID, ErrorDesc ErrorDesc FROM SYS_ERROR WHERE ErrorCode = @ERRORSYS
1298
	--	RETURN '0'
1299
	--END
1300
	IF(@p_REQ_TYPE ='I')
1301
	BEGIN
1302
		DECLARE @AMT_AD_PAY DECIMAL(18,0) =0
1303
		DECLARE @AMT_AD_PAY_BACK DECIMAL(18,0) =0
1304
		DECLARE @AMT_AD_PAY_REMAIN DECIMAL(18,0) =0
1305
		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')
1306
		SET @AMT_AD_PAY_BACK = (SELECT SUM(D.AMT_USE) +SUM(D.AMT_REVERT) - SUM (D.AMT_ADD)
1307
					FROM TR_REQ_PAYMENT_DT D
1308
					LEFT JOIN TR_REQ_ADVANCE_PAYMENT X ON D.PAY_ADV_ID = X.REQ_PAY_ID  AND D.AUTH_STATUS_KT ='A'
1309
					WHERE X.REF_ID =@p_REF_ID)
1310
	 SET @AMT_AD_PAY_REMAIN =ISNULL(@AMT_AD_PAY,0) -ISNULL(@AMT_AD_PAY_BACK,0)
1311
	 SET @p_REQ_TEMP_AMT =ISNULL(@AMT_AD_PAY_REMAIN,0)
1312
	 END
1313
BEGIN TRANSACTION
1314
	-- LUCTV 17H51 BO SUNG LAY SO TIEN DA TAM UNG CUA NHAN VIEN --
1315
		--SET @AMT_DO =(SELECT * FROM [dbo].TR_RE)
1316
	--THIEUVQ 281119---
1317
		DECLARE @REC_DEBIT_AUTO VARCHAR(15),@ROLE_KI_NHAY VARCHAR(50)
1318
		SET @REC_DEBIT_AUTO =(SELECT TOP 1 ACC_NUM FROM CM_ACCOUNT_PAY WHERE REF_ID = @p_REF_ID)
1319
		IF (@p_REQ_TYPE='I')
1320
		BEGIN
1321
			--SET @p_REF_ID = @p_MAKER_ID
1322
			--IF(NOT EXISTS(SELECT * FROM CM_ACCOUNT_PAY WHERE ACC_NUM = @p_RECEIVER_DEBIT))
1323
			--BEGIN
1324
			--	SET @p_RECEIVER_DEBIT = @p_RECEIVER_DEBIT+''
1325
			--END
1326
			--ELSE
1327
			--BEGIN
1328
			--	IF(EXISTS(SELECT * FROM CM_ACCOUNT_PAY WHERE ACC_NUM = @p_RECEIVER_DEBIT AND REF_ID != @p_REF_ID ) AND @p_TYPE_FUNCTION ='SEND')
1329
			--	BEGIN
1330
			--		SET @p_RECEIVER_DEBIT =(SELECT ACC_NUM FROM CM_ACCOUNT_PAY WHERE ACC_NUM = @p_RECEIVER_DEBIT)
1331
			--	END
1332
			--END
1333
			IF(@p_RECEIVER_DEBIT IS NOT NULL AND @p_RECEIVER_DEBIT <>'')
1334
			BEGIN
1335
				IF(@REC_DEBIT_AUTO IS NOT NULL AND @REC_DEBIT_AUTO <>''  AND @REC_DEBIT_AUTO <> @p_RECEIVER_DEBIT)
1336
				BEGIN
1337
					SET @p_RECEIVER_DEBIT =@REC_DEBIT_AUTO
1338
				END
1339
				--IF(EXISTS(SELECT * FROM CM_ACCOUNT_PAY WHERE REF_ID <> @p_REF_ID AND ACC_NUM =@p_RECEIVER_DEBIT))
1340
				--BEGIN
1341
				--	ROLLBACK TRANSACTION
1342
				--	SELECT '-1' Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Tài khoản tạm ứng này đã tồn tại và thuộc về nhân viên khác' ErrorDesc
1343
				--	RETURN '-1'
1344
				--END
1345
			END
1346
			ELSE
1347
			BEGIN
1348
				SET @p_RECEIVER_DEBIT =(SELECT TOP 1 ACC_NUM FROM CM_ACCOUNT_PAY WHERE REF_ID =@p_REF_ID) 
1349
			END
1350

    
1351
		END
1352
		EXEC [dbo].[ADVANCE_CODE_GenKey] 'TR_REQ_ADVANCE_PAYMENT', '',@p_REQ_TYPE, @p_REQ_PAY_CODE out
1353
	--END--
1354
		IF @p_REQ_PAY_CODE IS NULL OR @p_REQ_PAY_CODE =''
1355
		BEGIN
1356
			ROLLBACK TRANSACTION
1357
			SELECT '-1' Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Mã số phiếu không được để trống' ErrorDesc
1358
			RETURN '-1'
1359
		END
1360
		IF (@p_REQ_TYPE='I' AND (@p_RECEIVER_DEBIT IS NULL OR @p_RECEIVER_DEBIT ='') AND @p_TYPE_FUNCTION ='SEND')
1361
		BEGIN
1362
			ROLLBACK TRANSACTION
1363
			SELECT '-1' Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Tài khoản nhân viên tạm ứng không được để trống' ErrorDesc
1364
			RETURN '-1'
1365
		END
1366
		IF EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_CODE  = @p_REQ_PAY_CODE )
1367
		BEGIN
1368
			ROLLBACK TRANSACTION
1369
			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
1370
			RETURN '-1'
1371
		END
1372
		IF(LEN(ISNULL(@p_RECEIVER_DEBIT,''))>15 AND @p_REQ_TYPE ='I')
1373
		BEGIN
1374
				SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Tài khoản tạm ứng này không được vượt quá 15 kí tự' ErrorDesc
1375
				RETURN '-1'
1376
		END
1377
		-- START 19-11-2019
1378
		-- LUCTV BO SUNG VALIDATE TRONG QUA TRINH TEST SAU UAT- KIEM TRA NEU DOT THANH TOAN CHUA CO THI KHONG DUOC THEM MOI
1379
		--IF(@p_REQ_TYPE='P' AND (@p_PAY_PHASE IS NULL OR @p_PAY_PHASE =''))
1380
		--BEGIN
1381
		--	ROLLBACK TRANSACTION
1382
		--	SELECT '-1' as Result, '' REQ_PAY_ID, N'Đợt thanh toán không được phép để trống' ErrorDesc
1383
		--	RETURN '-1'
1384
		--END
1385
		---- NEU THANH TOAN XU LY NO THI NHAN VIEN NHAN TIEN TAM UNG KHONG DUOC PHEP TRONG
1386
		--IF(@p_REQ_TYPE='D' AND (@p_RECEIVER_DEBIT IS NULL OR @p_RECEIVER_DEBIT =''))
1387
		--BEGIN
1388
		--	ROLLBACK TRANSACTION
1389
		--	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
1390
		--	RETURN '-1'
1391
		--END
1392
		-- SO TIEN THANH TOÁN PHAI LON HON KHONG
1393
		IF(@p_REQ_AMT <=0)
1394
		BEGIN
1395
			ROLLBACK TRANSACTION
1396
			SELECT '-1' as Result, '' REQ_PAY_ID,'' AS REQ_PAY_CODE, N'Số tiền tạm ứng phải lớn hơn 0' ErrorDesc
1397
			RETURN '-1'
1398
		END
1399
		-----
1400
		---- KIEM TRA NEU CHUA CHON KHOI PHE DUYET THI TU DONG CHUYEN VÊ KHOI TAI CHINH
1401
		--IF(@p_DVDM_ID IS NULL OR @p_DVDM_ID ='')
1402
		--BEGIN
1403
		--	SET @p_DVDM_ID = (SELECT TOP 1 DVDM_ID FROM CM_DVDM WHERE DVDM_NAME ='KHOI TAI CHINH')
1404
		--END
1405
		--
1406
		--KIEM TRA NEU TAI KHOAN NHAN VIEN TAM UNG NEU CHUA TON TAI TRONG HE THONG THI BAO LOI
1407
		IF(NOT EXISTS(SELECT * FROM CM_ACCOUNT_PAY WHERE REF_ID =@p_REF_ID) AND @p_REQ_TYPE='I')
1408
		BEGIN
1409
			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')
1410
		END
1411
		ELSE
1412
		BEGIN
1413
			IF(((SELECT TOP 1 ACC_NUM FROM CM_ACCOUNT_PAY WHERE REF_ID =@p_REF_ID)<>@p_RECEIVER_DEBIT) AND @p_REQ_TYPE='I')
1414
			BEGIN
1415
				ROLLBACK TRANSACTION
1416
				SELECT '-1' as Result, '' REQ_PAY_ID, '' AS REQ_PAY_CODE, 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
1417
				RETURN '-1'
1418
			END
1419
		END
1420
		
1421
		SET @ROLE_KI_NHAY =(SELECT RoleName FROM TL_USER_V2 WHERE TLNANME =@p_TRASFER_USER_RECIVE)
1422
		IF(@ROLE_KI_NHAY IS NOT NULL AND @ROLE_KI_NHAY <> '' AND @ROLE_KI_NHAY IN ('TP','GDDV','KTT','TPTC','TC'))
1423
		BEGIN
1424
			ROLLBACK TRANSACTION
1425
			SELECT '-1' Result, '' REQ_PAY_ID, N'Bạn không được phép chọn cấp trưởng đơn vị làm cấp phê duyệt trung gian. Vui lòng bỏ qua hoặc chọn cấp phó phòng, trưởng bộ phận' ErrorDesc
1426
			RETURN '-1'
1427
		END
1428
		EXEC SYS_CodeMasters_Gen 'TR_REQ_ADVANCE_PAMENT', @p_REQ_PAY_ID out
1429
		IF @p_REQ_PAY_ID='' OR @p_REQ_PAY_ID IS NULL GOTO ABORT
1430
		INSERT INTO [dbo].[TR_REQ_ADVANCE_PAYMENT]
1431
           ([REQ_PAY_ID]
1432
           ,[REQ_PAY_CODE]
1433
           ,[BRANCH_ID],[REQ_DT],
1434
           [DEP_ID]
1435
           ,[REQ_REASON]
1436
           ,[REQ_TYPE],REQ_ENTRIES,
1437
            [REQ_DESCRIPTION]
1438
           ,REF_ID,
1439
			RECEIVER_PO, RECEIVER_DEBIT
1440
           ,[REQ_PAY_TYPE]
1441
           ,[REQ_TYPE_CURRENCY]
1442
           ,[REQ_AMT]
1443
           ,[REQ_TEMP_AMT]
1444
           ,[MAKER_ID]
1445
           ,[CREATE_DT]
1446
           ,[EDITOR_ID]
1447
           ,[AUTH_STATUS]
1448
           ,[CHECKER_ID]
1449
           ,[APPROVE_DT]
1450
           ,[CREATE_DT_KT]
1451
           ,[MAKER_ID_KT]
1452
           ,[AUTH_STATUS_KT]
1453
           ,[CHECKER_ID_KT]
1454
		   ,[APPROVE_DT_KT]
1455
           ,[CONFIRM_NOTES]
1456
           ,[BRANCH_CREATE]
1457
           ,[NOTES],RECORD_STATUS,TRANSFER_MAKER,TRANSFER_DT,TRASFER_USER_RECIVE,PROCESS,PAY_PHASE,DVDM_ID,RATE,RECIVER_MONEY,IS_PERIOD)
1458
			VALUES
1459
           (@p_REQ_PAY_ID,
1460
			@p_REQ_PAY_CODE,
1461
			@p_BRANCH_ID,CONVERT(DATE,GETDATE(),103),
1462
			@p_DEP_ID,
1463
			@p_REQ_REASON,
1464
			@p_REQ_TYPE,
1465
			@P_REQ_ENTRIES,
1466
			@p_REQ_DESCRIPTION,
1467
			@p_REF_ID,
1468
			@p_RECEIVER_PO,
1469
			@p_RECEIVER_DEBIT,
1470
			@p_REQ_PAY_TYPE,
1471
			@p_REQ_TYPE_CURRENCY,
1472
			@p_REQ_AMT,
1473
			@p_REQ_TEMP_AMT,
1474
			@p_MAKER_ID,
1475
			GETDATE(),
1476
			@p_EDITOR_ID,
1477
			'E',
1478
			NULL,
1479
			NULL,
1480
			NULL,
1481
			NULL,
1482
			NULL,
1483
			NULL,
1484
			NULL,
1485
			NULL,
1486
			@p_BRANCH_CREATE,
1487
			@p_NOTES,'1',
1488
			@p_TRANSFER_MAKER,
1489
			NULL,
1490
			@p_TRASFER_USER_RECIVE,
1491
			@p_PROCESS,@p_PAY_PHASE,@p_DVDM_ID,@p_RATE,@p_RECIVER_MONEY,@p_IS_PERIOD)
1492
			IF @@Error <> 0 GOTO ABORT
1493
		--- INSERT VÀO BẢNG DETAIL NÊU TẠM ỨNG LÀ TẠM ỨNG THANH TOÁN
1494
			DECLARE @hdoc INT
1495
			EXEC sp_xml_preparedocument @hdoc OUTPUT, @p_XMP_TEMP;
1496
			
1497
			-- KIEM TRA NEU TAM UNG THANH TOAN
1498
			IF((@p_REQ_TYPE='P' AND (@p_IS_PERIOD <>'Y' OR @p_IS_PERIOD IS NULL)) OR @p_REQ_TYPE='D')
1499
			BEGIN
1500
				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,2),
1501
				@AMT_REMAIN_SCHEDULE decimal(18,0),@REQ_AD_DT varchar(20),@PROCESS varchar(15),@PAY_ID VARCHAR(15),
1502
				@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),
1503
				@AMT_PAY_REAL DECIMAL(18,2), @IS_CLOSED VARCHAR(1)= NULL,@INDEX_NS INT =0,@REASON NVARCHAR(1000), @REF_TYPE VARCHAR(15)
1504
				DECLARE XmlDataPO CURSOR FOR
1505
				SELECT *
1506
				FROM
1507
				OPENXML(@hdoc, '/Root/XmlDataPO', 2)
1508
				WITH(REF_ID varchar(15),IS_CLOSED VARCHAR(1),REF_TYPE VARCHAR(15))
1509
				OPEN XmlDataPO;
1510
				DECLARE @INDEX_PO INT =0
1511
				SET @INDEX_PO = 0
1512
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
1513
				WHILE @@fetch_status=0 
1514
				BEGIN
1515
					SET @INDEX_PO = @INDEX_PO +1
1516
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
1517
					--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))
1518
					--BEGIN
1519
					--	ROLLBACK TRANSACTION
1520
					--	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
1521
					--	RETURN '-1'
1522
					--END
1523
					---- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
1524
					--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)))
1525
					--BEGIN
1526
					--	ROLLBACK TRANSACTION
1527
					--	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
1528
					--	RETURN '-1'
1529
					--END
1530
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
1531
					-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
1532
					IF(@p_TYPE_FUNCTION ='SEND')
1533
					BEGIN
1534
							
1535
				
1536
					IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND TYPE ='C' AND REQ_PAY_ID 
1537
					IN (SELECT REQ_PAY_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS_KT<>'A' OR AUTH_STATUS_KT IS NULL)))
1538
					BEGIN
1539
						ROLLBACK TRANSACTION
1540
						SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': Hợp đồng số '+
1541
						(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
1542
						RETURN '-1'
1543
					END
1544
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
1545
					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))
1546
					BEGIN
1547
						ROLLBACK TRANSACTION
1548
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': Hợp đồng số '+
1549
						(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
1550
						RETURN '-1'
1551
					END
1552
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
1553
					IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND TYPE ='P' AND REQ_PAY_ID 
1554
					IN (SELECT REQ_PAY_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS_KT<>'A' OR AUTH_STATUS_KT IS NULL)))
1555
					BEGIN
1556
						ROLLBACK TRANSACTION
1557
						SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO số '+
1558
						(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
1559
						RETURN '-1'
1560
					END
1561
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
1562
					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))
1563
					BEGIN
1564
						ROLLBACK TRANSACTION
1565
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO số '+
1566
						(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
1567
						RETURN '-1'
1568
					END
1569
					END
1570
					DECLARE @REQ_PAYDTID VARCHAR(15);
1571
					EXEC SYS_CodeMasters_Gen 'TR_REQ_ADVANCE_DT', @REQ_PAYDTID OUT;
1572
					IF @REQ_PAYDTID='' OR @REQ_PAYDTID IS NULL GOTO ABORT;
1573
					INSERT INTO TR_REQ_ADVANCE_DT (REQ_PAYDTID,REQ_PAY_ID,REF_ID,TYPE,MAKER_ID,CREATE_DT,IS_CLOSED,REF_TYPE) VALUES
1574
					(@REQ_PAYDTID,@p_REQ_PAY_ID,@REF_ID,'ADV_PAY',@p_MAKER_ID,GETDATE(),@IS_CLOSED,@REF_TYPE)
1575
				IF @@error<>0 GOTO ABORT;
1576
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
1577
				END
1578
				CLOSE XmlDataPO;
1579
				DEALLOCATE XmlDataPO;
1580
				--- CUSOR DANH SACH LICH THANH TOAN PO - HD	
1581
				DECLARE XmlDataSchedule CURSOR FOR
1582
				SELECT *
1583
				FROM
1584
				OPENXML(@hdoc, 'Root/XmlDataSchedule',2)
1585
				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),
1586
				AMT_REMAIN_SCHEDULE decimal(18,0),REQ_AD_DT varchar(20),PROCESS varchar(15), PAY_ID VARCHAR(15),REF_ID VARCHAR(15),
1587
				REQ_PAY_DESC NVARCHAR(500), REQ_PAY_ENTRIES NVARCHAR(250),CURRENCY VARCHAR(15),RATE DECIMAL(18,0),AMT_PAY_REAL DECIMAL(18,2))
1588
				OPEN XmlDataSchedule
1589
				FETCH NEXT FROM XmlDataSchedule INTO @PO_ID,@TERM_PAY,@AMT_PAY_SCHEDULE,@REQ_ADV_ID_SCHE,@AMT_ADVANCE_SCHEDULE,@AMT_PAY_DO,
1590
				@AMT_REMAIN_SCHEDULE,@REQ_AD_DT,@PROCESS,@PAY_ID,@REF_ID,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@CURRENCY,@RATE,@AMT_PAY_REAL
1591
				WHILE @@fetch_status=0 
1592
				BEGIN
1593
					DECLARE @p_REQ_PAY_SCHEDULE_ID VARCHAR(15);
1594
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_SCHEDULE', @p_REQ_PAY_SCHEDULE_ID OUT;
1595
					IF @p_REQ_PAY_SCHEDULE_ID='' OR @p_REQ_PAY_SCHEDULE_ID IS NULL GOTO ABORT;
1596
					INSERT INTO TR_REQ_PAY_SCHEDULE(
1597
					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,
1598
					CREATE_DT,AUTH_STATUS_KT,PAYMENT_STATUS,TRN_TYPE,REF_ID,REQ_PAY_DESC,REQ_PAY_ENTRIES,CURRENCY,RATE,AMT_PAY_REAL)
1599
					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,
1600
					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)
1601
				--- END KHAI BAO CURSOR
1602
				IF @@error<>0 GOTO ABORT;
1603
				FETCH NEXT FROM XmlDataSchedule INTO @PO_ID,@TERM_PAY,@AMT_PAY_SCHEDULE,@REQ_ADV_ID_SCHE,@AMT_ADVANCE_SCHEDULE,@AMT_PAY_DO,
1604
				@AMT_REMAIN_SCHEDULE,@REQ_AD_DT,@PROCESS,@PAY_ID,@REF_ID,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@CURRENCY,@RATE,@AMT_PAY_REAL
1605
				END
1606
				CLOSE XmlDataSchedule;
1607
				DEALLOCATE XmlDataSchedule;
1608
			END
1609
		--- END TẠM ỨNG THANH TOÁN
1610
		--- TẠM ỨNG HĐ ĐỊNH KỲ
1611
		IF(@p_REQ_TYPE = 'P' AND @p_IS_PERIOD='Y')
1612
		BEGIN
1613
				
1614
				DECLARE XmlDataPO CURSOR FOR
1615
				SELECT *
1616
				FROM
1617
				OPENXML(@hdoc, '/Root/XmlDataPO', 2)
1618
				WITH(REF_ID varchar(15),IS_CLOSED VARCHAR(1),REF_TYPE VARCHAR(15))
1619
				OPEN XmlDataPO;
1620
				SET @INDEX_PO = 0
1621
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
1622
				WHILE @@fetch_status=0 
1623
				BEGIN
1624
					SET @INDEX_PO = @INDEX_PO +1
1625
					DECLARE @REQ_PAYDTID_C VARCHAR(15);
1626
					EXEC SYS_CodeMasters_Gen 'TR_REQ_ADVANCE_DT', @REQ_PAYDTID_C OUT;
1627
					IF @REQ_PAYDTID_C='' OR @REQ_PAYDTID_C IS NULL GOTO ABORT;
1628
					INSERT INTO TR_REQ_ADVANCE_DT (REQ_PAYDTID,REQ_PAY_ID,REF_ID,TYPE,MAKER_ID,CREATE_DT,IS_CLOSED,REF_TYPE) VALUES
1629
					(@REQ_PAYDTID_C,@p_REQ_PAY_ID,@REF_ID,'ADV_PAY',@p_MAKER_ID,GETDATE(),@IS_CLOSED,@REF_TYPE)
1630
				IF @@error<>0 GOTO ABORT;
1631
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
1632
				END
1633
				CLOSE XmlDataPO;
1634
				DEALLOCATE XmlDataPO;
1635
				--- CUSOR DANH SACH LICH THANH TOAN PO - HD	
1636
			----------------------------
1637
			--INSERT FROM PERIOD	
1638
				DECLARE XmlDataPeriod CURSOR FOR
1639
				SELECT *
1640
				FROM
1641
				OPENXML(@hdoc, '/Root/XmlDataPeriod', 2)
1642
				WITH(CONTRACT_ID varchar(15),PAY_DT_REAL VARCHAR(20),PAY_TYPE VARCHAR(5),
1643
				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))
1644
				OPEN XmlDataPeriod;
1645
				DECLARE @CONTRACT_ID varchar(15),@PAY_DT_REAL VARCHAR(20),@PAY_TYPE VARCHAR(5),
1646
				@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)
1647
				FETCH NEXT FROM XmlDataPeriod INTO @CONTRACT_ID ,@PAY_DT_REAL ,@PAY_TYPE ,
1648
				@OLD_INDEX ,@NEW_INDEX ,@AMT_PAY_PERIOD,@CURRENCY, @RATE,@FROM_DATE,@TO_DATE,@PAY_PHASE,@REASON_TTDK
1649
				WHILE @@fetch_status=0 
1650
				BEGIN
1651
					-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
1652
					IF(@p_TYPE_FUNCTION ='SEND')
1653
					BEGIN
1654
					
1655
						IF(EXISTS(SELECT CONTRACT_ID 
1656
						FROM TR_CONTRACT 
1657
						WHERE CONTRACT_ID = @REF_ID
1658
						AND IS_CLOSED='Y' ))
1659
						BEGIN
1660
							ROLLBACK TRANSACTION
1661
							SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Tạm ứng hợp đồng định kì đã đóng' ErrorDesc
1662
							RETURN '-1'
1663
						END
1664

    
1665
					
1666
					IF(@NEW_INDEX <=@OLD_INDEX AND @NEW_INDEX >0 AND @OLD_INDEX >0  )
1667
					BEGIN
1668
						ROLLBACK TRANSACTION
1669
						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
1670
						RETURN '-1'
1671
					END
1672
					END
1673
					DECLARE @PERIOD_ID VARCHAR(15);
1674
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_PERIOD', @PERIOD_ID OUT;
1675
					IF @PERIOD_ID='' OR @PERIOD_ID IS NULL GOTO ABORT;
1676
					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)
1677
					VALUES (@PERIOD_ID,@p_REQ_PAY_ID,'ADV_PAY',@CONTRACT_ID,CONVERT(DATE,@PAY_DT_REAL,103),
1678
				@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)
1679
			IF @@error<>0 GOTO ABORT;
1680
			FETCH NEXT FROM XmlDataPeriod INTO @CONTRACT_ID ,@PAY_DT_REAL ,@PAY_TYPE ,
1681
				@OLD_INDEX ,@NEW_INDEX ,@AMT_PAY_PERIOD,@CURRENCY, @RATE,@FROM_DATE,@TO_DATE,@PAY_PHASE,@REASON_TTDK
1682
			END
1683
			CLOSE XmlDataPeriod;
1684
			DEALLOCATE XmlDataPeriod;
1685
			-- VALIDATE SO TIEN
1686
			--IF(@p_REQ_AMT >= @TOTAL_SCHEDULE_AMT)
1687
			--BEGIN
1688
			--	ROLLBACK TRANSACTION
1689
			--	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
1690
			--	RETURN '-1'
1691
			--END
1692
			----
1693
		END
1694
		---- END TẠM ỨNG HỢP ĐỒNG ĐỊNH KÌ
1695
		--- INSERT PHƯƠNG THỨC THANH TOÁN
1696
		----MethodCursor
1697
			DECLARE @RECEIVE_ID varchar(15),@RECEIVE_NAME nvarchar(100),@REQ_PAY_REASON nvarchar(MAX),@TOTAL_AMT_METHOD decimal(18,2),@REQ_PAY_TYPE varchar(1),
1698
					@ACC_NO VARCHAR(50), @ACC_NAME NVARCHAR(50), @ISSED_BY NVARCHAR(250), @ISSUED_DT VARCHAR(20),@CHECK_IN VARCHAR(15)
1699
			DECLARE XmlDataMethod CURSOR FOR
1700
			SELECT *
1701
			FROM
1702
			OPENXML(@hdoc, 'Root/XmlDataMethod',2)
1703
			WITH(RECEIVE_ID varchar(15),RECEIVE_NAME nvarchar(100),REQ_PAY_REASON nvarchar(MAX),TOTAL_AMT decimal(18,2),REQ_PAY_TYPE varchar(1),
1704
			REQ_PAY_DESC nvarchar(MAX),REQ_PAY_ENTRIES nvarchar(MAX),ACC_NO VARCHAR(50), 
1705
			ACC_NAME NVARCHAR(200), ISSUED_BY NVARCHAR(250), ISSUED_DT VARCHAR(20),CURRENCY VARCHAR(15),RATE DECIMAL(18,0),CHECK_IN VARCHAR(15))
1706
			OPEN XmlDataMethod
1707
			FETCH NEXT FROM XmlDataMethod 
1708
			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
1709
			WHILE @@fetch_status=0 
1710
			BEGIN
1711
				IF(@REQ_PAY_TYPE <>'1')
1712
				BEGIN
1713
					SET @ISSUED_DT = NULL
1714
				END
1715
				DECLARE @p_REQ_PAY_METHOD_ID VARCHAR(15);
1716
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_METHOD', @p_REQ_PAY_METHOD_ID OUT;
1717
				IF @p_REQ_PAY_METHOD_ID='' OR @p_REQ_PAY_METHOD_ID IS NULL GOTO ABORT;
1718
				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,
1719
				CREATE_DT,ACC_NO,ACC_NAME,ISSUED_BY,ISSUED_DT,CURRENCY,RATE,CHECK_IN)
1720
				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,'',
1721
				@p_MAKER_ID,GETDATE(),@ACC_NO,@ACC_NAME,@ISSED_BY, CONVERT(DATE, @ISSUED_DT, 103),@CURRENCY,@RATE,@CHECK_IN)
1722
			IF @@error<>0 GOTO ABORT;
1723
			FETCH NEXT FROM XmlDataMethod 
1724
			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
1725
			END
1726
			CLOSE XmlDataMethod;
1727
			DEALLOCATE XmlDataMethod
1728
		----END INSERT PHƯƠNG THỨC THANH TOÁN
1729
		----INSERT VAO BANG DS KHACH HANG
1730
			DECLARE XmlDataCus CURSOR FOR
1731
			SELECT *
1732
			FROM
1733
			OPENXML(@hdoc, '/Root/XmlDataCus', 2)
1734
			WITH(CUS_ID varchar(15), EMP_ID VARCHAR(15), AMT_PAY_DO DECIMAL(18,2),CURRENCY VARCHAR(15),RATE DECIMAL(18,0))
1735
			OPEN XmlDataCus;
1736
			FETCH NEXT FROM XmlDataCus INTO @CUST_ID, @EMP_ID,@AMT_PAY_DO,@CURRENCY,@RATE
1737
				WHILE @@fetch_status=0 
1738
				BEGIN		
1739
					INSERT INTO TR_REQ_ADVANCE_CUS(REQ_PAY_ID,CUST_ID,EMP_ID,AMT_PAY_DO,CURRENCY,RATE,MAKER_ID,CREATE_DT)
1740
					VALUES (@p_REQ_PAY_ID, @CUST_ID, @EMP_ID,@AMT_PAY_DO,@CURRENCY,@RATE,@p_MAKER_ID,GETDATE())
1741
				--- END KHAI BAO CURSOR
1742
				IF @@error<>0 GOTO ABORT;
1743
				FETCH NEXT FROM XmlDataCus INTO  @CUST_ID, @EMP_ID,@AMT_PAY_DO,@CURRENCY,@RATE
1744
				END
1745
				CLOSE XmlDataCus;
1746
				DEALLOCATE XmlDataCus;
1747
		----END
1748
			-- HANG MUC CHI PHI VA NGAN SACH
1749
			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)
1750
			DECLARE XmlDataGood CURSOR FOR
1751
			SELECT *
1752
			FROM
1753
			OPENXML(@hdoc, 'Root/XmlDataGood',2) 
1754
			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))
1755
			OPEN XmlDataGood
1756
			FETCH NEXT FROM XmlDataGood INTO @TRADE_ID,@GD_ID ,@AMT_APP ,@AMT_DO,@AMT_EXE ,@AMT_REMAIN_GD,@CURRENCY,@RATE,@REASON
1757
			WHILE @@fetch_status=0 BEGIN
1758
				--- KIEM TRA NEU NGAN SACH SU DUNG THUC THE LON HON NGAN SACH CON LAI
1759
				SET @INDEX_NS = @INDEX_NS +1
1760
				-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
1761
				--IF(@p_TYPE_FUNCTION ='SEND')
1762
				--BEGIN
1763
				--IF((@AMT_EXE  > @AMT_REMAIN_GD))
1764
				--BEGIN
1765
				--		ROLLBACK TRANSACTION
1766
				--		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
1767
				--		RETURN '-1'
1768
				--END
1769
				--END
1770
				IF(@p_TYPE_FUNCTION ='SEND')
1771
				BEGIN
1772
				IF(ISNULL(@AMT_EXE,0) =0)
1773
				BEGIN
1774
					ROLLBACK TRANSACTION
1775
						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ế phải lớn hơn không.' ErrorDesc
1776
						RETURN '-1'
1777
				END
1778
				IF((@AMT_EXE  > @AMT_REMAIN_GD) AND ((SELECT GD_TYPE_ID FROM CM_GOODS WHERE GD_ID =@GD_ID) ='NS'))
1779
				BEGIN
1780
						ROLLBACK TRANSACTION
1781
						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
1782
						RETURN '-1'
1783
				END		
1784
			END
1785
				DECLARE @p_BUDGET_ID VARCHAR(15);
1786
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_BUDGET', @p_BUDGET_ID OUT;
1787
				IF @p_BUDGET_ID='' OR @p_BUDGET_ID IS NULL GOTO ABORT;
1788
				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) 
1789
				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)
1790
			IF @@error<>0 GOTO ABORT;
1791
			FETCH NEXT FROM XmlDataGood INTO @TRADE_ID,@GD_ID ,@AMT_APP ,@AMT_DO,@AMT_EXE ,@AMT_REMAIN_GD,@CURRENCY,@RATE,@REASON
1792
			END;
1793
		CLOSE XmlDataGood;
1794
		DEALLOCATE XmlDataGood;
1795
		--- END INSERT NGAN SACH
1796
		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)
1797
		DECLARE XmlAttach CURSOR FOR
1798
		SELECT *
1799
		FROM
1800
		OPENXML(@hdoc, 'Root/XmlAttach',2) 
1801
		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))
1802
		OPEN XmlAttach
1803
		--INSERT CHUNG TU DINH KEM
1804
				FETCH NEXT FROM XmlAttach INTO @ATTACH_ID,@CON_ID,@CONT_CODE,@NOTES_ATT,@CON_DESC,@CON_TYPE,@AMT_ATT,@REF_DT
1805
				WHILE @@fetch_status=0 
1806
				BEGIN
1807
					IF (@REF_DT='')
1808
					BEGIN
1809
						SET @REF_DT = NULL
1810
					END
1811
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_ATTACH', @ATTACH_ID OUT;
1812
					IF @ATTACH_ID='' OR @ATTACH_ID IS NULL GOTO ABORT;
1813
					INSERT INTO TR_REQ_PAY_ATTACH(ATTACH_ID,REQ_PAY_ID,REF_ID,REF_CODE,NOTES,[DESCRIPTION],[TYPE],AMT,REF_DT) VALUES
1814
					(@ATTACH_ID,@p_REQ_PAY_ID,@CON_ID,@CONT_CODE,@NOTES_ATT,@CON_DESC,@CON_TYPE,@AMT_ATT, CONVERT(DATE, @REF_DT,103))
1815
				IF @@error<>0 GOTO ABORT;
1816
				FETCH NEXT FROM XmlAttach INTO @ATTACH_ID,@CON_ID,@CONT_CODE,@NOTES_ATT,@CON_DESC,@CON_TYPE,@AMT_ATT,@REF_DT
1817
				END
1818
				CLOSE XmlAttach;
1819
				DEALLOCATE XmlAttach;
1820
		----END
1821
		--- BAT DAU VALIDATE
1822
		IF(@p_TYPE_FUNCTION ='SEND')
1823
		BEGIN
1824
			DECLARE @SUM_PTTT DECIMAL(18,0), @SUM_NS DECIMAL(18,0),@SUM_LICH_TT DECIMAL(18,0)
1825
			SET @SUM_PTTT =(SELECT SUM(TOTAL_AMT * ISNULL(RATE,1)) FROM  TR_REQ_PAY_METHOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
1826
			IF(EXISTS(SELECT * FROM TR_REQ_PAY_SCHEDULE WHERE REQ_PAY_ID =@p_REQ_PAY_ID) AND @p_REQ_TYPE ='D')
1827
			BEGIN
1828
				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)
1829
				IF(@p_REQ_AMT*ISNULL(@p_RATE,1) != ISNULL(@SUM_LICH_TT,0))
1830
				BEGIN
1831
					ROLLBACK TRANSACTION
1832
					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
1833
					RETURN '-1'
1834
				END
1835
			END
1836
			IF(EXISTS(SELECT * FROM TR_REQ_PAY_BUDGET WHERE REQ_PAY_ID =@p_REQ_PAY_ID))
1837
			BEGIN
1838
				SET @SUM_NS =(SELECT SUM(AMT_EXE * ISNULL(RATE,1)) FROM  TR_REQ_PAY_BUDGET WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
1839
				IF(@p_REQ_AMT*ISNULL(@p_RATE,1) != ISNULL(@SUM_PTTT,0))
1840
				BEGIN
1841
					ROLLBACK TRANSACTION
1842
					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
1843
					RETURN '-1'
1844
				END
1845
			END
1846
			ELSE
1847
			IF(@p_REQ_AMT*ISNULL(@p_RATE,1) != ISNULL(@SUM_PTTT,0))
1848
			BEGIN
1849
				ROLLBACK TRANSACTION
1850
				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
1851
				RETURN '-1'
1852
			END
1853
			
1854
		END
1855
		----END
1856
		--- INSERT SẴN VÀO BẢNG TR_REQUEST_PROCESS
1857
			IF(@p_REQ_TYPE ='I')
1858
			BEGIN
1859
				DECLARE @tmp table(ROLE_ID VARCHAR(25),BRANCH_ID varchar(15),AMT DECIMAL(18,0))
1860
				IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE) ='HS')
1861
				BEGIN
1862
					--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'
1863
					IF EXISTS(SELECT * FROM CM_DEPARTMENT WHERE (DEP_CODE LIKE '%06908%' OR DEP_CODE ='0690605') AND DEP_ID =@p_DEP_ID)
1864
					BEGIN
1865
						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'
1866
					END
1867
					ELSE IF EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06910%' AND DEP_ID =@p_DEP_ID)
1868
					BEGIN
1869
						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'
1870
					END
1871
					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)
1872
					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) 
1873
					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))
1874
					BEGIN
1875
						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')
1876
					END
1877
					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)
1878
					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) 
1879
					OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06922%' AND DEP_ID =@p_DEP_ID))
1880
					BEGIN
1881
						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'
1882
					END
1883
					ELSE
1884
					BEGIN
1885
						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'
1886
					END
1887
				END
1888
				ELSE
1889
				BEGIN
1890
					IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE) ='CN')
1891
					BEGIN
1892
						--- BAO GOM DON VI & 3 CAP DUYET CUA HOI SO
1893
						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
1894
						--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'
1895
					END
1896
					ELSE IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE) ='PGD')
1897
					BEGIN
1898
						INSERT INTO @tmp  SELECT A.ROLE_ID, A.BRANCH_ID,A.LIMIT_VALUE FROM TL_SYSROLE_LIMIT A WHERE A.LIMIT_TYPE='ADV_PAY'
1899
						AND BRANCH_ID =(SELECT FATHER_ID FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE)
1900
						--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'
1901
					END
1902
				END
1903
				DECLARE @ROLE_ID VARCHAR(20), @BRANCH_ID VARCHAR(20), @INDEX INT =0, @SL_ROLE INT =0,@LIMIT_VALUE DECIMAL(18,0)
1904
				SET @SL_ROLE = (SELECT COUNT(*) FROM @tmp)
1905
				DECLARE @ISLEAF VARCHAR(1) = 'Y', @PARENT_ID VARCHAR(10) = '', @STATUS VARCHAR(1) = 'C', @NOTES NVARCHAR(500)
1906
				DECLARE CUR_PR CURSOR FOR  SELECT A.ROLE_ID, A.BRANCH_ID,A.AMT FROM @tmp A
1907
				OPEN CUR_PR
1908
				FETCH NEXT FROM CUR_PR INTO @ROLE_ID,@BRANCH_ID,@LIMIT_VALUE
1909
				WHILE @@FETCH_STATUS =0 --AND @STOP=0
1910
				BEGIN								
1911
					SET @INDEX= @INDEX+1
1912
					IF @INDEX = @SL_ROLE
1913
						SET @ISLEAF = 'Y'
1914
					ELSE
1915
						SET @ISLEAF = 'N'
1916
					SET @NOTES = (SELECT N'Đợi '+ ROLE_DESC + N' phê duyệt' FROM TL_SYSROLE WHERE ROLE_ID = @ROLE_ID)
1917

    
1918
					IF(@INDEX=1 )
1919
					BEGIN		
1920
						SET @PARENT_ID = NULL
1921
						SET @STATUS = 'C'							
1922
						--INSERT INTO TR_REQUEST_PROCESS VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),'C',@ROLE_ID,@BRANCH_ID,NULL,NULL,NULL,@ISLEAF)
1923
					END				
1924
					ELSE 
1925
					BEGIN
1926
						SET @PARENT_ID = CONVERT(VARCHAR(5),@INDEX -1)
1927
						SET @STATUS = 'U'
1928
					END
1929
						IF(@LIMIT_VALUE >= @p_REQ_AMT)
1930
						BEGIN
1931
							INSERT INTO dbo.PL_REQUEST_PROCESS
1932
							(
1933
								REQ_ID,
1934
								PROCESS_ID,
1935
								STATUS,
1936
								ROLE_USER,
1937
								BRANCH_ID,
1938
								CHECKER_ID,
1939
								APPROVE_DT,
1940
								PARENT_PROCESS_ID,
1941
								IS_LEAF, COST_ID, DVDM_ID, NOTES
1942
							)
1943
							VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),@STATUS,@ROLE_ID,@BRANCH_ID,NULL,NULL, @PARENT_ID,'Y', '',@p_DVDM_ID,@NOTES)
1944
							--INSERT INTO PL_REQUEST_PROCESS VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),@STATUS,@ROLE_ID,@BRANCH_ID,NULL,NULL, @PARENT_ID,'Y')
1945
							BREAK;
1946
						END
1947
						ELSE
1948
							INSERT INTO PL_REQUEST_PROCESS (
1949
								REQ_ID,
1950
								PROCESS_ID,
1951
								STATUS,
1952
								ROLE_USER,
1953
								BRANCH_ID,
1954
								CHECKER_ID,
1955
								APPROVE_DT,
1956
								PARENT_PROCESS_ID,
1957
								IS_LEAF, COST_ID, DVDM_ID, NOTES
1958
							) VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),@STATUS,@ROLE_ID,@BRANCH_ID,NULL,NULL, @PARENT_ID,@ISLEAF, '', @p_DVDM_ID, @NOTES)
1959
					--END
1960
					
1961
					FETCH NEXT FROM CUR_PR INTO @ROLE_ID,@BRANCH_ID,@LIMIT_VALUE
1962
				END
1963
				CLOSE CUR_PR
1964
				DEALLOCATE CUR_PR
1965
			END
1966
			--- CAP NHAT THANG CUOI CUNG LA Y
1967
			--UPDATE TR_REQUEST_PROCESS SET IS_LEAF='Y' WHERE ID = (SELECT MAX(ID) FROM TR_REQUEST_PROCESS WHERE REQ_ID = @p_REQ_PAY_ID)
1968
		COMMIT TRANSACTION
1969
		IF(@p_TYPE_FUNCTION ='SEND')-- BAT DAU GUI PHE DUYET
1970
		BEGIN
1971
				--ROLLBACK TRANSACTION
1972
				-- CAP NHAT TINH TRANG DUYET KE TOAN LA DANG XU LY 
1973
				--UPDATE TR_REQ_ADVANCE_PAYMENT SET AUTH_STATUS ='U' WHERE REQ_PAY_ID =@p_REQ_PAY_ID
1974
				--INSERT INTO dbo.PL_PROCESS(REQ_ID,PROCESS_ID,CHECKER_ID,APPROVE_DT,PROCESS_DESC,NOTES)
1975
				--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')
1976
				--SELECT '4' as Result, @p_REQ_PAY_ID AS REQ_PAY_ID, N'Gửi phê duyệt thành công' ErrorDesc
1977
				--RETURN '4'
1978
				IF(@p_TYPE_FUNCTION ='SEND') -- KIEM TRA NEU 2 BIEN XML KHAC NULL TUC LA DANG TRONG QUA TRINH LUU NHAP
1979
				BEGIN
1980
				DECLARE @BRANCH_TYPE_CR VARCHAR(15)
1981
				SET @BRANCH_TYPE_CR =(SELECT TOP 1 BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID =@p_BRANCH_CREATE)
1982
				IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE TRASFER_USER_RECIVE ='' OR TRASFER_USER_RECIVE IS NULL AND REQ_PAY_ID =@p_REQ_PAY_ID) AND @BRANCH_TYPE_CR ='HS' AND @p_REQ_TYPE ='I')
1983
				BEGIN
1984
					DECLARE @USER_TP VARCHAR(15) =''
1985
					--SET @USER_TP =(SELECT TOP 1 TLNANME FROM TL_USER WHERE SECUR_CODE =@p_DEP_ID 
1986
					--		AND (RoleName IN ('GDDV','TPTC','TC','KTT') OR RoleName IN (SELECT ROLE_OLD FROM TL_SYS_ROLE_MAPPING WHERE ROLE_NEW ='GDDV')))
1987
					IF(@USER_TP IS NULL OR @USER_TP ='')
1988
					BEGIN
1989
						SET @USER_TP = (SELECT TOP 1 TLNANME FROM TL_USER_V2 WHERE SECUR_CODE =@p_DEP_ID 
1990
							AND (RoleName IN ('GDDV','TPTC','TC','KTT')))
1991
					END
1992
					UPDATE TR_REQ_ADVANCE_PAYMENT SET TRASFER_USER_RECIVE =@USER_TP WHERE REQ_PAY_ID =@p_REQ_PAY_ID
1993
				END
1994
				ELSE IF(EXISTS(SELECT * FROM TR_REQ_PAYMENT WHERE TRASFER_USER_RECIVE ='' OR TRASFER_USER_RECIVE IS NULL) AND @BRANCH_TYPE_CR ='PGD')
1995
				BEGIN
1996
					DECLARE @USER_TPGD VARCHAR(15) =''
1997
					SET @USER_TPGD =(SELECT TOP 1 TLNANME FROM TL_USER WHERE SECUR_CODE =@p_DEP_ID AND RoleName IN ('TPGD'))
1998
					--SET @USER_TPGD =(SELECT TOP 1 TLNANME FROM TL_USER WHERE SECUR_CODE =@p_DEP_ID AND (RoleName IN ('TPGD') OR
1999
					--RoleName IN (SELECT ROLE_OLD FROM TL_SYS_ROLE_MAPPING WHERE ROLE_NEW ='TPGD')))
2000
					IF(@USER_TPGD IS NULL OR @USER_TPGD ='')
2001
					BEGIN
2002
						SET @USER_TPGD = (SELECT TOP 1 TLNANME FROM TL_USER_V2 WHERE TLSUBBRID =@p_BRANCH_CREATE 
2003
							AND RoleName ='TPGD')
2004
					END
2005
					UPDATE TR_REQ_ADVANCE_PAYMENT SET TRASFER_USER_RECIVE =@USER_TPGD WHERE REQ_PAY_ID =@p_REQ_PAY_ID
2006
				END
2007
				IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID  =@p_REQ_PAY_ID AND AUTH_STATUS='U'))
2008
				BEGIN
2009
					SELECT '-1' as Result, '' REQ_PAY_ID, N'Phiếu đề nghị tạm ứng đã được gửi phê duyệt trước đó! Vui lòng đợi các cấp phê duyệt' ErrorDesc
2010
					RETURN '-1'
2011
				END
2012
				-- CAP NHAT TINH TRANG DUYET KE TOAN LA DANG XU LY 
2013
				UPDATE TR_REQ_ADVANCE_PAYMENT SET AUTH_STATUS ='U', PROCESS = NULL WHERE REQ_PAY_ID =@p_REQ_PAY_ID
2014
				INSERT INTO dbo.PL_PROCESS(REQ_ID,PROCESS_ID,CHECKER_ID,APPROVE_DT,PROCESS_DESC,NOTES)
2015
				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')
2016
				SELECT '4' as Result, '' REQ_PAY_ID, N'Gửi phê duyệt thành công' ErrorDesc
2017
				RETURN '4'
2018
			END
2019
		END
2020
		SELECT '0' as Result, @p_REQ_PAY_ID  REQ_PAY_ID,@p_REQ_PAY_CODE AS REQ_PAY_CODE, '' ErrorDesc
2021
		RETURN '0'
2022
ABORT:
2023
BEGIN
2024
		ROLLBACK TRANSACTION
2025
		SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, '' ErrorDesc
2026
		RETURN '-1'
2027
End
2028