Project

General

Profile

script1.txt

Luc Tran Van, 11/25/2022 08:42 AM

 
1
ALTER   PROCEDURE [dbo].[TR_REQ_ADVANCE_PAYMENT_Appr]
2
--Luanlt 2019/17/10 - Sửa params
3
@p_REQ_PAY_ID	varchar(15)= NULL,
4
@p_CHECKER_ID	varchar(15)	= NULL,
5
@p_AUTH_STATUS varchar(15) = NULL,
6
@p_COST_ID VARCHAR(15) = NULL,
7
@p_IS_AUTHORITY varchar(1) = NULL,
8
@p_PROCESS_NOTES nvarchar(max) = NULL
9
AS
10
-- BEGIN VALIDATE
11
	IF EXISTS (SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE MAKER_ID =@p_CHECKER_ID AND REQ_PAY_ID =@p_REQ_PAY_ID)
12
	BEGIN
13
		SELECT '-1' as Result, ''  REQ_PAY_ID, N'Bạn không được phép duyệt phiếu đề nghị tạm ứng này này! Người phê duyệt phiếu phải khác với người tạo phiếu' ErrorDesc
14
		RETURN '-1'
15
	END
16
	IF EXISTS (SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS ='A' AND REQ_PAY_ID =@p_REQ_PAY_ID)
17
	BEGIN
18
		SELECT '-1' as Result, '' REQ_PAY_ID, N'Phê duyệt phiếu đề nghị tạm ứng thất bại! Phiếu đề nghị tạm ứng số: '+(SELECT REQ_PAY_CODE FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID)+N' đã được phê duyệt trước đó' ErrorDesc
19
		RETURN '-1'
20
	END
21
	IF EXISTS (SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS ='R' AND REQ_PAY_ID =@p_REQ_PAY_ID)
22
	BEGIN
23
		SELECT '-1' as Result, '' REQ_PAY_ID, N'Phiếu đề nghị tạm ứng số: '+(SELECT REQ_PAY_CODE FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID)+N' đ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
24
		RETURN '-1'
25
	END
26
	IF EXISTS (SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS_KT ='A' AND REQ_PAY_ID =@p_REQ_PAY_ID)
27
	BEGIN
28
		SELECT '-1' as Result, '' REQ_PAY_ID, N'Phiếu đề nghị tạm ứng số: '+(SELECT REQ_PAY_CODE FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID)+N' đã được kiểm soát viên phê duyệt trước đó' ErrorDesc
29
		RETURN '-1'
30
	END
31
	IF EXISTS (SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS_KT ='R' AND REQ_PAY_ID =@p_REQ_PAY_ID)
32
	BEGIN
33
		SELECT '-1' as Result, '' REQ_PAY_ID, N'Phiếu đề nghị tạm ứng số: '+(SELECT REQ_PAY_CODE FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID)+N' đang được trả về giao dịch viên. Vui lòng kiểm tra lại thông tin' ErrorDesc
34
		RETURN '-1'
35
	END
36
	IF EXISTS (SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS_KT ='S' AND REQ_PAY_ID =@p_REQ_PAY_ID)
37
	BEGIN
38
		SELECT '-1' as Result, '' REQ_PAY_ID, N'Phiếu đề nghị tạm ứng số: '+(SELECT REQ_PAY_CODE FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID)+N' đang được đề xuất từ chối. Vui lòng kiểm tra lại thông tin' ErrorDesc
39
		RETURN '-1'
40
	END
41
-- CHAN CUOI
42
	IF (EXISTS (SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS <> 'U' AND REQ_PAY_ID =@p_REQ_PAY_ID))
43
	BEGIN
44
		SELECT '-1' as Result, '' REQ_PAY_ID, N'Phiếu đề nghị tạm ứng số: '+(SELECT REQ_PAY_CODE FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID)+N' chưa được gửi phê duyệt. Vui lòng đợi người tạo gửi phê duyệt trước khi phê duyệt phiếu' ErrorDesc
45
		RETURN '-1'
46
	END
47
-- END VALIDATE
48

    
49
BEGIN TRANSACTION
50
		IF(@p_IS_AUTHORITY <> 'Y')
51
		BEGIN
52
			SET @p_IS_AUTHORITY = 'N'
53
		END
54
		-- KHAI BAO THEM ROLE NHAN UY QUYEN
55
		DECLARE @TABLE_ROLE TABLE (ROLE_AUTH VARCHAR(50))
56
		INSERT INTO @TABLE_ROLE SELECT (SELECT ROLENAME FROM TL_USER WHERE TLNANME =@p_CHECKER_ID)
57
		INSERT INTO @TABLE_ROLE SELECT ROLE_NEW FROM TL_SYS_ROLE_MAPPING WHERE ROLE_OLD =(SELECT ROLENAME FROM TL_USER WHERE TLNANME =@p_CHECKER_ID) 
58
		AND (CONVERT(DATE,GETDATE(),103) >= CONVERT(DATE,EFF_DATE, 103) OR EFF_DATE IS NULL)
59
		AND (CONVERT(DATE, GETDATE(),103) <=CONVERT(DATE,EXP_DATE, 103) OR EXP_DATE IS NULL)
60
		AND TLNAME =@p_CHECKER_ID
61
	
62
		-- KHAI BAO NHUNG PHONG BAN MA 1 USER KIEM NHIEM
63
		DECLARE @DEP_AUTH TABLE (DEP_AUTH VARCHAR(15))
64
		INSERT INTO @DEP_AUTH SELECT DEP_ID FROM TL_SYS_ROLE_MAPPING WHERE TLNAME =@p_CHECKER_ID 
65
		--AND CONVERT(DATE,GETDATE(),103) >= CONVERT(DATE,EFF_DATE, 103) AND CONVERT(DATE, GETDATE(),103) <=CONVERT(DATE,EXP_DATE, 103)
66
		AND (CONVERT(DATE,GETDATE(),103) >= CONVERT(DATE,EFF_DATE, 103) OR EFF_DATE IS NULL)
67
		AND (CONVERT(DATE, GETDATE(),103) <=CONVERT(DATE,EXP_DATE, 103) OR EXP_DATE IS NULL)
68
				DECLARE @BRANCH_CREATE VARCHAR(15), @p_DEP_ID VARCHAR(15) 
69
		--PRINT @BRANCH_CREATE 
70
		SET @BRANCH_CREATE =(SELECT BRANCH_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
71
		DECLARE @DEP_CODE_NEXT VARCHAR(15)
72
		IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID =@BRANCH_CREATE)<>'HS')
73
		BEGIN
74
			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))
75
			SET @DEP_CODE_NEXT = (SELECT DEP_CODE FROM CM_DEPARTMENT WHERE DEP_ID =@p_DEP_ID)
76
			--PRINT @DEP_CODE_NEXT
77
		END
78
		ELSE
79
		BEGIN
80
			SET @p_DEP_ID =(SELECT DEP_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID=@p_REQ_PAY_ID)
81
			SET @DEP_CODE_NEXT = (SELECT DEP_CODE FROM CM_DEPARTMENT WHERE DEP_ID =@p_DEP_ID)
82
		END
83
		
84
		IF (ISNULL(@p_COST_ID, '') <> '' AND (SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID =@BRANCH_CREATE) = 'HS')
85
		BEGIN
86
			ROLLBACK TRANSACTION
87
			SELECT '-1' as Result, '' REQ_PAY_ID, N'Xác nhận phiếu đề nghị tạm ứng thất bại! Nhân viên ở hội sở không được phép chọn khối phê duyệt' ErrorDesc
88
			RETURN '-1'
89
		END
90
		
91
		--- KHAI BAO CHUNG
92
		   DECLARE @ROLE_ID VARCHAR(200), @BRANCH_TYPE VARCHAR(15), @TOTAL_ADVANCE DECIMAL(18,0), @TOTAL_PAYBACK DECIMAL(18,0), @BRANCH_ID VARCHAR(15),
93
			@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)
94
			DECLARE @LIMIT_AMT DECIMAL(18,0), @REQ_AMT DECIMAL(18,2) =0, @TONG_PGD DECIMAL(18,0), @TONG_PGD_HOAN DECIMAL(18,0)
95
			SET @REQ_AMT = (SELECT REQ_AMT *ISNULL(RATE,1) FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
96
			--SET @ROLE_ID = (SELECT ROLENAME FROM TL_USER WHERE TLNANME=@p_CHECKER_ID)
97
			SET @ROLE_ID = (SELECT ROLENAME FROM TL_USER WHERE TLNANME=@p_CHECKER_ID)
98
			--SET  @ROLE_ID =(SELECT TOP 1 RoleName FROM TL_USER WHERE TLNANME =@p_USER_LOGIN)
99
			IF(@ROLE_ID IS NOT NULL AND @ROLE_ID <>'' AND @ROLE_ID IN ('TPGD','GDDV','PGD','PTGD','TGD','HDQT','TP','PP','TBP','KTT','GDK','KSV','TC','NVTC','TPTC'))
100
			BEGIN
101
				PRINT @ROLE_ID
102
			END
103
			ELSE
104
			BEGIN
105
				SET @ROLE_ID =(SELECT TOP 1 RoleName FROM TL_USER_V2 WHERE TLNANME =@p_CHECKER_ID)
106
				IF(@ROLE_ID IS NULL OR @ROLE_ID ='')
107
				BEGIN
108
					SET @ROLE_ID =(SELECT TOP 1 ROLE_NEW FROM TL_SYS_ROLE_MAPPING WHERE ROLE_OLD =(SELECT TOP 1 ROLENAME FROM TL_USER WHERE TLNANME=@p_CHECKER_ID))
109
				END
110
			END
111
			SET @BRANCH_ID = (SELECT TLSUBBRID FROM TL_USER WHERE TLNANME =@p_CHECKER_ID)
112
			SET @BRANCH_RQ =(SELECT BRANCH_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
113
			SET @DEP_ID_RQ =(SELECT DEP_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
114
			SET @BRANCH_TYPE = (SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID =@BRANCH_RQ)
115
			DECLARE @tmp table(BRANCH_ID varchar(15))
116
			INSERT into @tmp  SELECT BRANCH_ID  FROM [dbo].[CM_BRANCH_GETCHILDID](@BRANCH_ID)
117
			DECLARE @tmp_CN table(BRANCH_ID varchar(15))
118
			IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID =@BRANCH_RQ)='CN')
119
			BEGIN
120
				--INSERT into @tmp_CN  SELECT BRANCH_ID  FROM [dbo].[CM_BRANCH_GETCHILDID](@BRANCH_RQ)
121
				INSERT into @tmp_CN  VALUES (@BRANCH_RQ)
122
			END
123
			ELSE IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID =@BRANCH_RQ)='PGD')
124
			BEGIN
125
				--DECLARE @FATHER_ID VARCHAR(15) = NULL
126
				--SET @FATHER_ID =(SELECT FATHER_ID FROM CM_BRANCH WHERE BRANCH_ID =@BRANCH_RQ)
127
				--INSERT into @tmp_CN  SELECT BRANCH_ID  FROM [dbo].[CM_BRANCH_GETCHILDID](@FATHER_ID)
128
				INSERT into @tmp_CN  VALUES (@BRANCH_RQ)
129
			END
130
			--DECLARE @DEP_ID_LG VARCHAR(15) = NULL	
131
			--SET @DEP_ID_LG =(SELECT SECUR_CODE FROM TL_USER WHERE TLNANME=@p_CHECKER_ID)
132
			DECLARE @TMP_DVDM TABLE(DVDM_ID VARCHAR(15))
133
			INSERT INTO @TMP_DVDM
134
			SELECT A.DVDM_ID--, A.COST_CODE, A.COST_NAME, B.DEP_ID --, C.DEP_CODE, C.DEP_NAME
135
			FROM PL_COSTCENTER A
136
			LEFT JOIN PL_COSTCENTER_DT B ON A.COST_ID = B.COST_ID
137
			WHERE B.DEP_ID = @DEP_ID_RQ
138
			GROUP BY A.DVDM_ID
139
			-- KHAI BAO BRANCH CUA USER DUYET
140
			SET @BRANCH_LOGIN = (SELECT TLSUBBRID FROM TL_USER WHERE TLNANME =@p_CHECKER_ID)
141
			DECLARE @LIMIT_REMAIN DECIMAL(18,0)
142
		--CAP NHAT CODE TRONG QUA TRINH TEST UAT
143
		INSERT INTO @TABLE_ROLE SELECT @ROLE_ID
144
		IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND REQ_TYPE='I'))
145
		BEGIN
146
			IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID =@BRANCH_CREATE) ='HS')
147
			BEGIN
148
				IF(EXISTS(SELECT * FROM @TABLE_ROLE WHERE ISNULL(ROLE_AUTH,'') IN ('GDDV','TP') AND (SELECT ISNULL(PROCESS,'') FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID) =''))
149
				BEGIN
150
					-- doanptt them note khi xac nhan
151
					IF(@p_PROCESS_NOTES IS NULL OR @p_PROCESS_NOTES = '')
152
					BEGIN
153
						SET @p_PROCESS_NOTES = N'Trưởng đơn vị xác nhận phiếu';
154
					END
155

    
156
					UPDATE TR_REQ_ADVANCE_PAYMENT SET PROCESS='0', NOTES ='' WHERE REQ_PAY_ID =@p_REQ_PAY_ID
157
					INSERT INTO PL_PROCESS VALUES (@p_REQ_PAY_ID,'0',@p_CHECKER_ID, GETDATE(), @p_PROCESS_NOTES,N'Xác nhận phiếu tạm ứng')
158
					COMMIT TRANSACTION
159
					SELECT '1' as Result, @p_REQ_PAY_ID  REQ_PAY_ID ,N'' ErrorDesc
160
					RETURN '1'
161
				END
162
			END
163
			IF(NOT EXISTS(SELECT * FROM PL_REQUEST_PROCESS WHERE ROLE_USER IN (SELECT * FROM @TABLE_ROLE) AND REQ_ID = @p_REQ_PAY_ID))
164
			BEGIN
165
					ROLLBACK TRANSACTION
166
					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
167
					RETURN '-1'
168
			END
169
			IF NOT EXISTS (SELECT * FROM PL_REQUEST_PROCESS WHERE REQ_ID =@p_REQ_PAY_ID AND ROLE_USER IN (SELECT * FROM @TABLE_ROLE) AND STATUS = 'C')
170
			BEGIN
171
				ROLLBACK TRANSACTION
172
				SELECT '-1' as Result, '' REQ_PAY_ID, N'Phiếu đề nghị tạm ứng đã được bạn phê duyệt xong trước đó! Vui lòng đợi cấp tiếp theo phê duyệt tạm ứng' ErrorDesc
173
				RETURN '-1'
174
			END
175
			
176
			--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'))
177
			--BEGIN
178
			--		ROLLBACK TRANSACTION
179
			--		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
180
			--		RETURN '-1'
181
			--END
182
			-- KIEM TRA AUTH_STATUS TRUYEN XUONG LA GI, A: DUYET, C: CONFIRM  
183
			IF(@p_AUTH_STATUS='U') -- KIEM TRA HAN MUC CON LAI CUA USER VA THONG BAO CHO NGUOI DUYET
184
			BEGIN
185
			-- KIEM TRA NEU ROLE CHUA CO HAN MUC PHE DUYET THI PHAI THONG BAO
186
				IF(NOT EXISTS(SELECT * FROM TL_SYSROLE_LIMIT WHERE ROLE_ID =@ROLE_ID AND LIMIT_TYPE ='ADV_PAY' AND BRANCH_ID =@BRANCH_LOGIN))
187
				BEGIN
188
						ROLLBACK TRANSACTION
189
						SELECT '-1' as Result, ''  REQ_PAY_ID, N'Bạn chưa được cấu hình hạn mức phê duyệt tạm ứng nội bộ. Vui lòng thông báo Admin cấu hình hạn mức phê duyệt' ErrorDesc
190
						RETURN '-1'
191
				END
192
			-- BAT DAU DUYET THEO NGAN SACH			
193
			--- LAY HAN MUC CUA USER
194
				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)
195

    
196
				--print @LIMIT_AMT
197
				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)
198
				IF(@ROLE_ID ='GDK' AND ((SELECT SECUR_CODE FROM TL_USER WHERE TLNANME =@p_CHECKER_ID) ='DEP000000000011'))
199
				BEGIN
200
					SET @LIMIT_AMT =6000000000 -- TANG LEN 6 TY
201
					SET @LIMIT_ONE_OF =1000000000
202
				
203
				END
204
				IF(@ROLE_ID ='PTGD' AND ((SELECT SECUR_CODE FROM TL_USER WHERE TLNANME =@p_CHECKER_ID) ='DEP000000000011'))
205
				BEGIN
206
						SET @LIMIT_AMT =4000000000 --- TANG LEN 4 TY
207
						SET @LIMIT_ONE_OF =500000000
208
						IF(EXISTS(SELECT * FROM TL_SYS_ROLE_MAPPING WHERE ROLE_OLD ='PTGD' AND ROLE_NEW ='TGD' 
209
						AND (CONVERT(DATE, GETDATE(),103) <=CONVERT(DATE,EXP_DATE, 103) OR EXP_DATE IS NULL OR EXP_DATE ='')))
210
						BEGIN
211
							SET @LIMIT_AMT =(SELECT LIMIT_VALUE FROM TL_SYSROLE_LIMIT WHERE ROLE_ID='TGD' AND  LIMIT_TYPE='ADV_PAY' AND BRANCH_ID =@BRANCH_LOGIN)
212
							SET @LIMIT_ONE_OF =(SELECT LIMIT_PERCENT FROM TL_SYSROLE_LIMIT WHERE ROLE_ID='TGD' AND  LIMIT_TYPE='ADV_PAY' AND BRANCH_ID =@BRANCH_LOGIN)
213
							IF(EXISTS(SELECT * FROM PL_REQUEST_PROCESS WHERE ROLE_USER ='TGD' AND REQ_ID =@p_REQ_PAY_ID))
214
							BEGIN
215
								UPDATE PL_REQUEST_PROCESS SET STATUS ='P' WHERE ROLE_USER ='PTGD' AND REQ_ID =@p_REQ_PAY_ID
216
								UPDATE PL_REQUEST_PROCESS SET STATUS ='C',ROLE_USER ='PTGD' WHERE ROLE_USER ='TGD' AND REQ_ID =@p_REQ_PAY_ID
217
								SET @ROLE_ID ='TGD'
218
							END
219
						END
220
				
221
				END
222
			-- NEU LA HOI SO THI LAY TONG SO TIEN TAM UNG CUA CAC PHONG BAN CHUNG VOI KHOI CUA PHIEU DANG DUOC DUYET
223
				SET @TONG_PGD =(SELECT SUM(REQ_AMT*ISNULL(RATE,1)) FROM TR_REQ_ADVANCE_PAYMENT WHERE BRANCH_ID = @BRANCH_RQ
224
					 AND REQ_TYPE ='I' AND AUTH_STATUS ='A') + @REQ_AMT
225
				SET @TONG_PGD_HOAN =(
226
						--SELECT (SUM(B.AMT_USE) - SUM(B.AMT_ADD) + SUM (B.AMT_REVERT))
227
						--FROM TR_REQ_PAYMENT_DT B
228
						--INNER JOIN TR_REQ_PAYMENT A ON B.PAY_ID = A.REQ_PAY_ID
229
						--INNER JOIN TR_REQ_ADVANCE_PAYMENT C ON C.REQ_PAY_ID = B.PAY_ADV_ID
230
						SELECT SUM (ISNULL(A.PAY_AMT,0)) FROM TR_REQ_ADVANCE_PAYMENT A
231
						WHERE A.BRANCH_ID = @BRANCH_RQ
232
						AND A.AUTH_STATUS_KT ='A' AND A.REQ_TYPE='I') 
233
				IF(@BRANCH_TYPE='HS')
234
				BEGIN
235
					SET @TOTAL_ADVANCE =ISNULL((SELECT SUM(REQ_AMT*ISNULL(RATE,1)) FROM TR_REQ_ADVANCE_PAYMENT WHERE
236
					 DEP_ID IN
237
					 (SELECT A.DEP_ID FROM PL_COSTCENTER_DT A
238
						LEFT JOIN PL_COSTCENTER B ON A.COST_ID = B.COST_ID
239
						WHERE B.DVDM_ID IN (SELECT DVDM_ID FROM @TMP_DVDM) AND A.BRANCH_ID =@BRANCH_RQ)
240
					 AND REQ_TYPE ='I' AND AUTH_STATUS ='A'),0)
241
					SET @TOTAL_PAYBACK =
242
					ISNULL(
243
					(
244
						SELECT (SUM(ISNULL(C.PAY_AMT,0)))
245
						FROM TR_REQ_ADVANCE_PAYMENT C
246
						WHERE C.DEP_ID IN 
247
						(SELECT A.DEP_ID FROM PL_COSTCENTER_DT A
248
						LEFT JOIN PL_COSTCENTER B ON A.COST_ID = B.COST_ID
249
						WHERE B.DVDM_ID IN (SELECT DVDM_ID FROM @TMP_DVDM) AND A.BRANCH_ID =@BRANCH_RQ)
250
						AND C.AUTH_STATUS_KT ='A' AND C.REQ_TYPE='I'
251
					),0)
252
				END
253
				--- BO SUNG NEU RIENG PHONG THUONG HIEU VA TRUYEN THONG --- 2021824
254
				IF(@BRANCH_TYPE='HS' AND @DEP_CODE_NEXT ='0690405' )
255
				BEGIN
256
					SET @TOTAL_ADVANCE =ISNULL((SELECT SUM(REQ_AMT*ISNULL(RATE,1)) FROM TR_REQ_ADVANCE_PAYMENT WHERE
257
					 DEP_ID IN
258
					 (SELECT DEP_ID FROM CM_DEPARTMENT WHERE DEP_CODE ='0690405' AND BRANCH_ID =@BRANCH_RQ)
259
					 AND REQ_TYPE ='I' AND AUTH_STATUS ='A'),0)
260
					SET @TOTAL_PAYBACK =
261
					ISNULL(
262
					(
263
						SELECT (SUM(ISNULL(C.PAY_AMT,0)))
264
						FROM TR_REQ_ADVANCE_PAYMENT C
265
						WHERE C.DEP_ID IN 
266
						(SELECT DEP_ID FROM CM_DEPARTMENT WHERE DEP_CODE ='0690405' AND BRANCH_ID =@BRANCH_RQ)
267
						AND C.AUTH_STATUS_KT ='A' AND C.REQ_TYPE='I'
268
					),0)
269
				PRINT @TOTAL_ADVANCE
270
				PRINT @TOTAL_PAYBACK
271
				END
272
				--- END
273
				-- 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
274
				ELSE IF(@BRANCH_TYPE <>'HS')
275
				BEGIN
276
					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)
277
					 AND REQ_TYPE ='I' AND AUTH_STATUS='A')
278
					SET @TOTAL_PAYBACK =
279
					(
280
						SELECT (SUM(ISNULL(B.PAY_AMT,0)))
281
						FROM TR_REQ_ADVANCE_PAYMENT B
282
						WHERE B.BRANCH_ID IN 
283
						(SELECT BRANCH_ID FROM @tmp_CN)
284
						AND B.AUTH_STATUS_KT ='A' AND B.REQ_TYPE='I'
285
					)
286
				END
287
				
288
				SET @LIMIT_REMAIN =ISNULL(@TOTAL_ADVANCE,0) - ISNULL(@TOTAL_PAYBACK,0)
289
				PRINT @LIMIT_REMAIN
290
				-- KIEM TRA NEU LA CHU TICH HDQT THI PHE DUYET LUON, KHONG CAN XET HAN MUC GI
291
				IF(EXISTS(SELECT * FROM TL_USER WHERE TLNANME=@p_CHECKER_ID AND RoleName ='HDQT'))
292
				BEGIN
293
					ROLLBACK TRANSACTION
294
					SELECT '-4' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, 
295
					--N'Tổng hạn mức phê duyệt của bạn là: '+FORMAT(@LIMIT_AMT,'#,#', 'vi-VN')
296
					--+ CHAR(10) +
297
					--N'Hạn mức trên một lần phê duyệt là: '+ FORMAT(@LIMIT_ONE_OF,'#,#', 'vi-VN') 
298
					--+ CHAR(10) + CHAR(13) +
299
					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')
300
					+ CHAR(10) + 
301
					N'Bạn có muốn tiếp tục duyệt hay không' ErrorDesc
302
					RETURN '-4'
303
				END
304
				IF(@LIMIT_AMT <(SELECT REQ_AMT * ISNULL(RATE,1) FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID) + @LIMIT_REMAIN)
305
				BEGIN
306
					ROLLBACK TRANSACTION
307
					SELECT '-2' as Result, @p_REQ_PAY_ID  REQ_PAY_ID,
308
					N'Tổng hạn mức phê duyệt là: '+ FORMAT(@LIMIT_AMT,'#,#', 'vi-VN') + CHAR(10)+
309
					N'Hạn mức trên một lần phê duyệt là: '+ FORMAT(@LIMIT_ONE_OF,'#,#', 'vi-VN') 
310
					+ CHAR(10) + CHAR(13)+
311
					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') 
312
					+ CHAR(10) +
313
					N'Số tiền tạm ứng đã vượt mức phê duyệt là: '+ FORMAT((@LIMIT_REMAIN +@REQ_AMT) -@LIMIT_AMT,'#,#', 'vi-VN') 
314
					+ CHAR(10) +
315
					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
316
					RETURN '-2'
317
				END
318
				--- NEU DU HAN MUC THI THONG BAO DE NGUOI DUYET CAN NHAC CO NEN DUYET PHIEU HAY KHONG
319
				IF(@LIMIT_AMT >=(SELECT REQ_AMT * ISNULL(RATE,1) FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID) +@LIMIT_REMAIN)
320
				BEGIN
321
					IF(@REQ_AMT >@LIMIT_ONE_OF)
322
					BEGIN
323
						ROLLBACK TRANSACTION
324
						SELECT '-2' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, 
325
						N'Tổng hạn mức phê duyệt là: '+ FORMAT(@LIMIT_AMT,'#,#', 'vi-VN') 
326
						+ CHAR(10)+
327
						N'Hạn mức trên một lần phê duyệt là: '+ FORMAT(@LIMIT_ONE_OF,'#,#', 'vi-VN') 
328
						+ CHAR(10) + CHAR(13) +
329
						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') 
330
						+ CHAR(10) + 
331
						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') 
332
						+ CHAR(10) + 
333
						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
334
						RETURN '-2'
335
					END
336
					ELSE
337
					BEGIN
338
						-- KIEM TRA NEU LA PGD THI CANH BAO
339
						IF(@BRANCH_TYPE ='HS')
340
						BEGIN
341
							IF(EXISTS(SELECT * FROM TL_USER WHERE TLNANME=@p_CHECKER_ID AND RoleName NOT IN('TGD','HQDT')))
342
							BEGIN
343
								ROLLBACK TRANSACTION
344
								SELECT '-4' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, 
345
								--N'Tổng hạn mức phê duyệt của bạn là: '+FORMAT(@LIMIT_AMT,'#,#', 'vi-VN')
346
								--+ CHAR(10) + CHAR(13) +  
347
								N'Hạn mức trên một lần phê duyệt là: '+ FORMAT(@LIMIT_ONE_OF,'#,#', 'vi-VN') 
348
								+ CHAR(10) + 
349
								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')
350
								+ CHAR(10) + 
351
								N'Bạn có muốn tiếp tục duyệt hay không' ErrorDesc
352
								RETURN '-4'
353
							END
354
							ELSE
355
							BEGIN
356
								ROLLBACK TRANSACTION
357
								SELECT '-4' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, 
358
								--N'Tổng hạn mức phê duyệt của bạn là: '+FORMAT(@LIMIT_AMT,'#,#', 'vi-VN')
359
								--+ CHAR(10) + CHAR(13) +  
360
								--N'Hạn mức trên một lần phê duyệt là: '+ FORMAT(@LIMIT_ONE_OF,'#,#', 'vi-VN') 
361
								--+ CHAR(10) + 
362
								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')
363
								+ CHAR(10) + 
364
								N'Bạn có muốn tiếp tục duyệt hay không' ErrorDesc
365
								RETURN '-4'
366
							END
367
						END
368
						ELSE IF(@BRANCH_TYPE ='CN')
369
						BEGIN
370
							---LUCTV 24.11.2022 NẾU PHIẾU TỪ CN GỬI LÊN THÌ CHỈ CẦN XÉT SỐ TIỀN DUYỆT 1 LẦN CÓ ĐỦ HẠN MỨC KHÔNG
371
							IF(EXISTS(SELECT * FROM TL_USER WHERE TLNANME=@p_CHECKER_ID AND RoleName  IN('GDK','PTGD','TGD')))
372
							BEGIN
373
								IF(@REQ_AMT >@LIMIT_ONE_OF)
374
								BEGIN
375
									ROLLBACK TRANSACTION
376
									SELECT '-2' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, 
377
									N'Tổng hạn mức phê duyệt là: '+ FORMAT(@LIMIT_AMT,'#,#', 'vi-VN') 
378
									+ CHAR(10)+
379
									N'Hạn mức trên một lần phê duyệt là: '+ FORMAT(@LIMIT_ONE_OF,'#,#', 'vi-VN') 
380
									+ CHAR(10) + CHAR(13) +
381
									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') 
382
									+ CHAR(10) + 
383
									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') 
384
									+ CHAR(10) + 
385
									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
386
									RETURN '-2'
387
								END
388
								ELSE
389
								BEGIN
390
									ROLLBACK TRANSACTION
391
									SELECT '-4' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, 
392
									--N'Tổng hạn mức phê duyệt của bạn là: '+FORMAT(@LIMIT_AMT,'#,#', 'vi-VN')
393
									--+ CHAR(10) +
394
									N'Hạn mức trên một lần phê duyệt là: '+ FORMAT(@LIMIT_ONE_OF,'#,#', 'vi-VN') 
395
									+ CHAR(10) + CHAR(13) +
396
									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')
397
									+ CHAR(10) + 
398
									N'Bạn có muốn tiếp tục duyệt hay không' ErrorDesc
399
									RETURN '-4'
400
								END
401
							END--- END LUCTV
402
							ELSE IF(ISNULL(@TONG_PGD,0) -ISNULL(@TONG_PGD_HOAN,0) > 40000000)
403
							BEGIN
404
								ROLLBACK TRANSACTION
405
								SELECT '-4' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, 
406
								N'Tổng hạn mức phê duyệt của bạn là: '+FORMAT(@LIMIT_AMT,'#,#', 'vi-VN')
407
								+ CHAR(10) + 
408
								N'Hạn mức trên một lần phê duyệt là: '+ FORMAT(@LIMIT_ONE_OF,'#,#', 'vi-VN') 
409
								+ CHAR(10) + CHAR(13) +
410
								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')
411
								+ CHAR(10) +
412
								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')
413
								+ CHAR(10) + 
414
								N'Bạn có muốn tiếp tục duyệt hay không' ErrorDesc
415
								RETURN '-4'
416
							END
417
							ELSE
418
							BEGIN
419
								IF(EXISTS(SELECT * FROM TL_USER WHERE TLNANME=@p_CHECKER_ID AND RoleName NOT IN('TGD','HQDT')))
420
								BEGIN
421
									ROLLBACK TRANSACTION
422
									SELECT '-4' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, 
423
									--N'Tổng hạn mức phê duyệt của bạn là: '+FORMAT(@LIMIT_AMT,'#,#', 'vi-VN')
424
									--+ CHAR(10) +
425
									N'Hạn mức trên một lần phê duyệt là: '+ FORMAT(@LIMIT_ONE_OF,'#,#', 'vi-VN') 
426
									+ CHAR(10) + CHAR(13) +
427
									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')
428
									+ CHAR(10) + 
429
									N'Bạn có muốn tiếp tục duyệt hay không' ErrorDesc
430
									RETURN '-4'
431
								END
432
								ELSE
433
								BEGIN
434
									ROLLBACK TRANSACTION
435
									SELECT '-4' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, 
436
									--N'Tổng hạn mức phê duyệt của bạn là: '+FORMAT(@LIMIT_AMT,'#,#', 'vi-VN')
437
									--+ CHAR(10) +
438
									--N'Hạn mức trên một lần phê duyệt là: '+ FORMAT(@LIMIT_ONE_OF,'#,#', 'vi-VN') 
439
									--+ CHAR(10) + CHAR(13) +
440
									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')
441
									+ CHAR(10) + 
442
									N'Bạn có muốn tiếp tục duyệt hay không' ErrorDesc
443
									RETURN '-4'
444
								END
445
							END
446
						END
447
						ELSE IF(@BRANCH_TYPE ='PGD')
448
						BEGIN
449
							IF(ISNULL(@TONG_PGD,0) -ISNULL(@TONG_PGD_HOAN,0) > 10000000)
450
							BEGIN
451
								ROLLBACK TRANSACTION
452
								SELECT '-4' as Result, @p_REQ_PAY_ID  REQ_PAY_ID,
453
								N'Tổng hạn mức phê duyệt của bạn là: '+FORMAT(@LIMIT_AMT,'#,#', 'vi-VN')+ CHAR(10) +
454
								N'Hạn mức trên một lần phê duyệt là: '+ FORMAT(@LIMIT_ONE_OF,'#,#', 'vi-VN') 
455
								+ CHAR(10) + CHAR(13) + 
456
								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')
457
								+ CHAR(10) + 
458
								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')
459
								+ CHAR(10) + 
460
								N'Bạn có muốn tiếp tục duyệt hay không' ErrorDesc
461
								RETURN '-4'
462
							END
463
							ELSE
464
							BEGIN
465
								ROLLBACK TRANSACTION
466
								SELECT '-4' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, 
467
								N'Tổng hạn mức phê duyệt của bạn là: '+FORMAT(@LIMIT_AMT,'#,#', 'vi-VN')
468
								+ CHAR(10) + 
469
								N'Hạn mức trên một lần phê duyệt là: '+ FORMAT(@LIMIT_ONE_OF,'#,#', 'vi-VN') 
470
								+ CHAR(10) + CHAR(13) +
471
								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')
472
								+ CHAR(10) + 
473
								N'Bạn có muốn tiếp tục duyệt hay không' ErrorDesc
474
								RETURN '-4'
475
							END
476
						END
477
					END
478
				END
479
			-- NEU THOA MAN CAC DIEU KIEN SE TIEN HANH DUYET
480
			END -- END DU HAN MUC DUYET
481
			ELSE IF(@p_AUTH_STATUS='A')
482
			BEGIN
483
				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)
484
				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)
485
				--
486
				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)
487
				IF(@ROLE_ID ='GDK' AND ((SELECT SECUR_CODE FROM TL_USER WHERE TLNANME =@p_CHECKER_ID) ='DEP000000000011'))
488
				BEGIN
489
					SET @LIMIT_AMT =6000000000 -- TANG LEN 6 TY ROLE HAN MUC GDK
490
					SET @LIMIT_ONE_OF =1000000000 --- TANG LEN 1 TY 1 LAN VOI GDK HO TRO
491
				
492
				END
493
				IF(@ROLE_ID ='PTGD' AND ((SELECT SECUR_CODE FROM TL_USER WHERE TLNANME =@p_CHECKER_ID) ='DEP000000000011'))
494
				BEGIN
495
					SET @LIMIT_AMT =4000000000 --- TANG LEN 4 TY
496
					SET @LIMIT_ONE_OF =500000000
497
					IF(EXISTS(SELECT * FROM TL_SYS_ROLE_MAPPING WHERE ROLE_OLD ='PTGD' AND ROLE_NEW ='TGD' 
498
					AND (CONVERT(DATE, GETDATE(),103) <=CONVERT(DATE,EXP_DATE, 103) OR EXP_DATE IS NULL OR EXP_DATE ='')))
499
					BEGIN
500
						SET @LIMIT_AMT =(SELECT LIMIT_VALUE FROM TL_SYSROLE_LIMIT WHERE ROLE_ID='TGD' AND  LIMIT_TYPE='ADV_PAY' AND BRANCH_ID =@BRANCH_LOGIN)
501
						SET @LIMIT_ONE_OF =(SELECT LIMIT_PERCENT FROM TL_SYSROLE_LIMIT WHERE ROLE_ID='TGD' AND  LIMIT_TYPE='ADV_PAY' AND BRANCH_ID =@BRANCH_LOGIN)
502
						IF(EXISTS(SELECT * FROM PL_REQUEST_PROCESS WHERE ROLE_USER ='TGD' AND REQ_ID =@p_REQ_PAY_ID))
503
						BEGIN
504
							UPDATE PL_REQUEST_PROCESS SET STATUS ='P' WHERE ROLE_USER ='PTGD' AND REQ_ID =@p_REQ_PAY_ID
505
							UPDATE PL_REQUEST_PROCESS SET STATUS ='C',ROLE_USER ='PTGD' WHERE ROLE_USER ='TGD' AND REQ_ID =@p_REQ_PAY_ID
506
							SET @ROLE_ID ='TGD'
507
						END
508
					END
509
				END
510
				UPDATE TR_REQ_ADVANCE_PAYMENT
511
				SET    AUTH_STATUS='A', CHECKER_ID = @p_CHECKER_ID, APPROVE_DT =  GETDATE(), AUTH_STATUS_KT='U', IS_AUTHORITY = @p_IS_AUTHORITY
512
				WHERE  REQ_PAY_ID = @p_REQ_PAY_ID
513
				--- CAP NHAT LAI TINH TRANG TRONG REQUEST_PROCESS
514
				DECLARE @PROCESS_CURR VARCHAR(5)
515
				SET @PROCESS_CURR =(SELECT PROCESS_ID FROM PL_REQUEST_PROCESS WHERE REQ_ID = @p_REQ_PAY_ID AND ROLE_USER =@ROLE_ID)
516
				IF(ISNULL(@p_PROCESS_NOTES,'') <> '')
517
				BEGIN
518
					INSERT INTO PL_PROCESS VALUES (@p_REQ_PAY_ID,@PROCESS_CURR,@p_CHECKER_ID, GETDATE(),(SELECT ROLE_DESC + N': ' + ISNULL(@p_PROCESS_NOTES,'')  FROM TL_SYSROLE WHERE ROLE_ID = @ROLE_ID),N'Các cấp phê duyệt theo hạn mức')
519
				END
520
				ELSE
521
				BEGIN
522
					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')
523
				END
524
				--- CAP NHAT PROCESS CUA PHIEU DE NGHI TAM UNG LA DA DUYET
525
				UPDATE TR_REQ_ADVANCE_PAYMENT SET PROCESS=@PROCESS_CURR WHERE REQ_PAY_ID=@p_REQ_PAY_ID
526
				--
527
				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
528
			-- NEU LA HOI SO THI LAY TONG SO TIEN TAM UNG CUA CAC PHONG BAN CHUNG VOI KHOI CUA PHIEU DANG DUOC DUYET
529
			SET @TONG_PGD =(SELECT SUM(REQ_AMT*ISNULL(RATE,1)) FROM TR_REQ_ADVANCE_PAYMENT WHERE BRANCH_ID = @BRANCH_RQ
530
					 AND REQ_TYPE ='I' AND AUTH_STATUS ='A') + @REQ_AMT
531
			SET @TONG_PGD_HOAN =(
532
						--SELECT (SUM(B.AMT_USE) - SUM(B.AMT_ADD) + SUM (B.AMT_REVERT))
533
						--FROM TR_REQ_PAYMENT_DT B
534
						--INNER JOIN TR_REQ_PAYMENT A ON B.PAY_ID = A.REQ_PAY_ID
535
						--INNER JOIN TR_REQ_ADVANCE_PAYMENT C ON C.REQ_PAY_ID = B.PAY_ADV_ID
536
						SELECT SUM (ISNULL(A.PAY_AMT,0)) FROM TR_REQ_ADVANCE_PAYMENT A
537
						WHERE A.BRANCH_ID = @BRANCH_RQ
538
						AND A.AUTH_STATUS_KT ='A' AND A.REQ_TYPE='I') 
539
				IF(@BRANCH_TYPE='HS')
540
				BEGIN
541
					SET @TOTAL_ADVANCE =ISNULL((SELECT SUM(REQ_AMT*ISNULL(RATE,1)) FROM TR_REQ_ADVANCE_PAYMENT WHERE
542
					 DEP_ID IN
543
					 (SELECT A.DEP_ID FROM PL_COSTCENTER_DT A
544
						LEFT JOIN PL_COSTCENTER B ON A.COST_ID = B.COST_ID
545
						WHERE B.DVDM_ID IN (SELECT DVDM_ID FROM @TMP_DVDM) AND A.BRANCH_ID =@BRANCH_RQ)
546
					 AND REQ_TYPE ='I' AND AUTH_STATUS ='A'),0)
547
					SET @TOTAL_PAYBACK =
548
					ISNULL(
549
					(
550
						SELECT (SUM(ISNULL(C.PAY_AMT,0)))
551
						FROM TR_REQ_ADVANCE_PAYMENT C
552
						WHERE C.DEP_ID IN 
553
						(SELECT A.DEP_ID FROM PL_COSTCENTER_DT A
554
						LEFT JOIN PL_COSTCENTER B ON A.COST_ID = B.COST_ID
555
						WHERE B.DVDM_ID IN (SELECT DVDM_ID FROM @TMP_DVDM) AND A.BRANCH_ID =@BRANCH_ID)
556
						AND C.AUTH_STATUS_KT ='A' AND C.REQ_TYPE='I'
557
					),0)
558
				END
559
				--- BO SUNG NEU RIENG PHONG THUONG HIEU VA TRUYEN THONG --- 2021824
560
				IF(@BRANCH_TYPE='HS' AND @DEP_CODE_NEXT ='0690405' )
561
				BEGIN
562
					SET @TOTAL_ADVANCE =ISNULL((SELECT SUM(REQ_AMT*ISNULL(RATE,1)) FROM TR_REQ_ADVANCE_PAYMENT WHERE
563
					 DEP_ID IN
564
					 (SELECT DEP_ID FROM CM_DEPARTMENT WHERE DEP_CODE ='0690405' AND BRANCH_ID =@BRANCH_RQ)
565
					 AND REQ_TYPE ='I' AND AUTH_STATUS ='A'),0)
566
					SET @TOTAL_PAYBACK =
567
					ISNULL(
568
					(
569
						SELECT (SUM(ISNULL(C.PAY_AMT,0)))
570
						FROM TR_REQ_ADVANCE_PAYMENT C
571
						WHERE C.DEP_ID IN 
572
						(SELECT DEP_ID FROM CM_DEPARTMENT WHERE DEP_CODE ='0690405' AND BRANCH_ID =@BRANCH_RQ)
573
						AND C.AUTH_STATUS_KT ='A' AND C.REQ_TYPE='I'
574
					),0)
575
				END
576
				--- END
577
				-- 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
578
				-- 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
579
				ELSE IF(@BRANCH_TYPE <>'HS')
580
				BEGIN
581
					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)
582
					 AND REQ_TYPE ='I' AND AUTH_STATUS='A')
583
					SET @TOTAL_PAYBACK =
584
					(
585
						SELECT (SUM(ISNULL(B.PAY_AMT,0)))
586
						FROM TR_REQ_ADVANCE_PAYMENT B
587
						WHERE B.BRANCH_ID IN 
588
						(SELECT BRANCH_ID FROM @tmp_CN)
589
						AND B.AUTH_STATUS_KT ='A' AND B.REQ_TYPE='I'
590
					)
591
				END
592
				SET @LIMIT_REMAIN =ISNULL(@TOTAL_ADVANCE,0) - ISNULL(@TOTAL_PAYBACK,0)
593
				--- INSERT VAO BANG LOG
594
				INSERT INTO TR_REQ_ADVANCE_LIMIT_LOG  VALUES (@p_REQ_PAY_ID,@LIMIT_REMAIN,GETDATE())
595
				----
596
			END
597
			--ELSE IF (@p_AUTH_STATUS='T')
598
			--BEGIN
599
			---- NEU AUTH_STATUS = T LA THU KI TGD / HDQT
600
			--	IF( @ROLE_ID ='TKTGD')
601
			--	BEGIN
602
			--		UPDATE PL_REQUEST_PROCESS SET STATUS ='C' WHERE ROLE_USER ='TGD' AND REQ_ID =@p_REQ_PAY_ID
603
			--		UPDATE PL_REQUEST_PROCESS SET STATUS ='P' WHERE ROLE_USER ='TKTGD' AND REQ_ID =@p_REQ_PAY_ID
604
			--		INSERT INTO dbo.PL_PROCESS(REQ_ID,PROCESS_ID,CHECKER_ID,APPROVE_DT,PROCESS_DESC,NOTES)
605
			--		 VALUES(@p_REQ_PAY_ID,'TKTGD',@p_CHECKER_ID,GETDATE(), N'Thư kí văn phòng Tổng Giám Đốc đã phê duyệt',N'Thư kí văn phòng Tổng Giám Đốc phê duyệt')	
606
			--	END
607
			--	ELSE IF( @ROLE_ID ='TKHDQT')
608
			--	BEGIN
609
			--		UPDATE PL_REQUEST_PROCESS SET STATUS ='C' WHERE ROLE_USER ='HDQT' AND REQ_ID =@p_REQ_PAY_ID
610
			--		UPDATE PL_REQUEST_PROCESS SET STATUS ='P' WHERE ROLE_USER ='TKHDQT' AND REQ_ID =@p_REQ_PAY_ID
611
			--		INSERT INTO dbo.PL_PROCESS(REQ_ID,PROCESS_ID,CHECKER_ID,APPROVE_DT,PROCESS_DESC,NOTES)
612
			--		VALUES(@p_REQ_PAY_ID,'TKHDQT',@p_CHECKER_ID,GETDATE(), N'Thư kí văn phòng Hội Đồng Quản Trị đã phê duyệt',N'Thư kí văn phòng Hội Đồng Quản Trị phê duyệt')	
613
			--	END
614
			--ENDr
615
			ELSE -- NEW KHONG DU HAN MUC THI BAT DAU XAC NHAN VA DUYET THEO HAN MUC
616
			BEGIN
617
				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)
618
			
619
				--PRINT @t_REQ_AMT
620
				--- 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
621
				DECLARE @MAX_STEP INT, @NEXT_ROLE VARCHAR(20), @MESSAGE NVARCHAR(100), @PROCESS_ID_NEXT VARCHAR(5), @PROCESS_PARENT VARCHAR(5),
622
				@BRANCH_ID_PROC VARCHAR(15), @NEX_ROLE_STEP VARCHAR(25), @CURRENT_PROCESS VARCHAR(15)
623

    
624
				SET @CURRENT_PROCESS =(SELECT PROCESS_ID FROM PL_REQUEST_PROCESS WHERE REQ_ID = @p_REQ_PAY_ID AND ROLE_USER=@ROLE_ID)
625
				SET @NEX_ROLE_STEP = (SELECT ROLE_USER FROM PL_REQUEST_PROCESS WHERE PARENT_PROCESS_ID =@CURRENT_PROCESS AND REQ_ID = @p_REQ_PAY_ID )
626
				--PRINT @NEX_ROLE_STEP
627
				--SET @MAX_STEP = CONVERT(INT,(SELECT MAX(PROCESS_ID) FROM TR_REQUEST_PROCESS WHERE REQ_ID =@p_REQ_PAY_ID))
628
				SET @PROCESS_ID_NEXT = CONVERT(VARCHAR(5),@CURRENT_PROCESS+1)
629
				--SET @PROCESS_PARENT = CONVERT(VARCHAR(5),@MAX_STEP)
630
				DECLARE @TMP_ROLE TABLE (ROLE_ID VARCHAR(15), BRANCH_ID VARCHAR(15), LIMIT_VALUE DECIMAL(18,0),LIMIT_TYPE VARCHAR(15))
631
				--IF EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06908%' AND DEP_ID =@p_DEP_ID)
632
					IF(LEFT(@DEP_CODE_NEXT,5) ='06908' OR @DEP_CODE_NEXT ='0690605' OR @DEP_CODE_NEXT LIKE '06906%')
633
					BEGIN
634
						--LUCTV 29032021: KHOI TAI CHINH SE KHONG CO PTGD NUA, CHI CO GDK TAI CHINH
635
						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'
636
						--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'
637
					END
638
					ELSE
639
					BEGIN
640
						IF( @DEP_CODE_NEXT ='0690405')
641
						BEGIN
642
							--LUCTV 29032021: KHOI TAI CHINH SE KHONG CO PTGD NUA, CHI CO GDK TAI CHINH
643
							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'
644
							--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'
645
						END
646
						--ELSE IF EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06910%' AND DEP_ID =@p_DEP_ID)
647
						ELSE IF(LEFT(@DEP_CODE_NEXT,5) ='06910')
648
						BEGIN
649
							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'
650
						END
651
						--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)
652
						--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) 
653
						--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))
654
						ELSE IF((LEFT(@DEP_CODE_NEXT,5) ='06900') OR (LEFT(@DEP_CODE_NEXT,5)) ='06901' OR (LEFT(@DEP_CODE_NEXT,5))='06904'
655
						OR (LEFT(@DEP_CODE_NEXT,5))='06902' OR (LEFT(@DEP_CODE_NEXT,5))='06903'  OR (LEFT(@DEP_CODE_NEXT,5))='06920' OR (LEFT(@DEP_CODE_NEXT,3))='799'  OR (LEFT(@DEP_CODE_NEXT,3))='899')
656
						BEGIN
657
							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')
658
						END
659
						--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)
660
						--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) 
661
						--OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06922%' AND DEP_ID =@p_DEP_ID))
662
						ELSE IF((LEFT(@DEP_CODE_NEXT,5) ='06907') OR (LEFT(@DEP_CODE_NEXT,5)) ='06909' OR (LEFT(@DEP_CODE_NEXT,5))='06911'
663
						OR (LEFT(@DEP_CODE_NEXT,5))='06922' OR (LEFT(@DEP_CODE_NEXT,5))='06921'  OR (LEFT(@DEP_CODE_NEXT,5))='06920')
664
						BEGIN
665
							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'
666
						END
667
						ELSE
668
						BEGIN
669
							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' ORDER BY LIMIT_VALUE
670
						END
671
					END
672
					
673
				SET @BRANCH_ID_PROC= (SELECT TOP 1 BRANCH_ID FROM @TMP_ROLE WHERE ROLE_ID=@NEXT_ROLE AND LIMIT_TYPE='ADV_PAY')
674
				--print @DEP_CODE_NEXT
675
				--print @BRANCH_ID_PROC 
676
			    --print @NEX_ROLE_STEP
677
				IF(NOT EXISTS(SELECT * FROM PL_REQUEST_PROCESS WHERE ROLE_USER=@NEX_ROLE_STEP AND REQ_ID= @p_REQ_PAY_ID))
678
				BEGIN
679
					-- doanptt them note khi xac nhan
680
					IF(@p_PROCESS_NOTES IS NULL OR @p_PROCESS_NOTES = '')
681
					BEGIN
682
						SET @p_PROCESS_NOTES = (SELECT TOP 1 ROLE_DESC + N' xác nhận' FROM TL_SYSROLE WHERE ROLE_ID = @ROLE_ID);
683
					END
684
					--SET @NEXT_ROLE =(SELECT TOP 1 ROLE_ID FROM @TMP_ROLE WHERE LIMIT_VALUE >@t_REQ_AMT 
685
					SET @NEXT_ROLE =(SELECT TOP 1 ROLE_ID FROM @TMP_ROLE WHERE 1 =1
686
					AND ROLE_ID NOT IN (SELECT ROLE_USER FROM PL_REQUEST_PROCESS WHERE REQ_ID = @p_REQ_PAY_ID) AND LIMIT_TYPE ='ADV_PAY' ORDER BY LIMIT_VALUE)
687
					--print @NEXT_ROLE
688
					SET @BRANCH_ID_PROC= (SELECT TOP 1 BRANCH_ID FROM @TMP_ROLE WHERE ROLE_ID=@NEXT_ROLE AND LIMIT_TYPE='ADV_PAY')
689
					SET @MESSAGE = (SELECT TOP 1 N'Đợi '+ ROLE_DESC + N' phê duyệt' FROM TL_SYSROLE WHERE ROLE_ID = @NEXT_ROLE)
690
					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)
691
					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)
692
					INSERT INTO PL_PROCESS VALUES (@p_REQ_PAY_ID,@CURRENT_PROCESS,@p_CHECKER_ID, GETDATE(), @p_PROCESS_NOTES,N'Các cấp phê duyệt theo hạn mức')
693
				END
694
				ELSE
695
				BEGIN
696
					-- doanptt them note khi xac nhan
697
					IF(@p_PROCESS_NOTES IS NULL OR @p_PROCESS_NOTES = '')
698
					BEGIN
699
						SET @p_PROCESS_NOTES = (SELECT TOP 1 ROLE_DESC + N' xác nhận' FROM TL_SYSROLE WHERE ROLE_ID = @ROLE_ID);
700
					END
701
					ELSE
702
					BEGIN
703
						SET @p_PROCESS_NOTES = (SELECT TOP 1 ROLE_DESC + N': ' + @p_PROCESS_NOTES FROM TL_SYSROLE WHERE ROLE_ID = @ROLE_ID);
704
					END
705

    
706
					SET @NEXT_ROLE =@NEX_ROLE_STEP
707
					UPDATE PL_REQUEST_PROCESS SET STATUS='C',DVDM_ID=@p_COST_ID WHERE ROLE_USER =@NEXT_ROLE AND REQ_ID = @p_REQ_PAY_ID	
708
					INSERT INTO PL_PROCESS VALUES (@p_REQ_PAY_ID,@CURRENT_PROCESS,@p_CHECKER_ID, GETDATE(), @p_PROCESS_NOTES,N'Các cấp phê duyệt theo hạn mức')
709
				END
710
				--				
711
				IF @@Error <> 0 GOTO ABORT
712
					-- UPDATE STATUS CUA STEP HIEN TAI
713
				UPDATE PL_REQUEST_PROCESS SET STATUS='P',IS_LEAF ='N', NOTES = (SELECT TOP 1 ROLE_DESC + N' xác nhận' FROM TL_SYSROLE WHERE ROLE_ID =@ROLE_ID)
714
				WHERE ROLE_USER IN(SELECT * FROM @TABLE_ROLE) AND REQ_ID = @p_REQ_PAY_ID		
715
				--INSERT VAO TR_PROCESS		
716
				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	
717
				--- 
718
				UPDATE PL_REQUEST_PROCESS SET DVDM_ID= @p_COST_ID WHERE REQ_ID =@p_REQ_PAY_ID AND ROLE_USER <>@ROLE_ID
719
		  END
720
		END	
721
		ELSE
722
		BEGIN
723
			--- 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
724
			DECLARE @PAY_ID VARCHAR(15), @SUM_OF_PAY_ID DECIMAL(18,2), @SUM_ADVANCE DECIMAL(18,2),
725
			@AMOUNT DECIMAL(18,2),@AMT_PAY_DO DECIMAL(18,2),@SCH_ID VARCHAR(15),@AMT_ADVANCE DECIMAL(18,0)
726
			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
727
			OPEN CUR_SH
728
			FETCH NEXT FROM CUR_SH INTO @PAY_ID,@AMOUNT,@AMT_PAY_DO,@SCH_ID,@AMT_ADVANCE
729
			WHILE @@FETCH_STATUS =0
730
			BEGIN
731
				SET @SUM_OF_PAY_ID =(SELECT TOP 1 SUM(AMT_PAY_DO) FROM TR_REQ_PAY_SCHEDULE WHERE PAY_ID =@PAY_ID AND AUTH_STATUS_KT='A')
732
				SET @SUM_ADVANCE =(SELECT TOP 1 SUM(AMT_ADVANCE) FROM TR_REQ_PAY_SCHEDULE WHERE PAY_ID =@PAY_ID AND AUTH_STATUS_KT='A')
733
				IF(@SUM_OF_PAY_ID +@AMT_PAY_DO >@AMOUNT)
734
				BEGIN
735
					ROLLBACK TRANSACTION
736
					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' ErrorDesc
737
					RETURN '-1'
738
				END
739
				IF(@SUM_OF_PAY_ID+@AMT_PAY_DO+@SUM_ADVANCE < @AMOUNT)
740
				BEGIN
741
					UPDATE TR_REQ_PAY_SCHEDULE SET PAYMENT_STATUS ='DTU' WHERE SCHEDULE_ID=@SCH_ID
742
				END
743
				ELSE IF(@SUM_OF_PAY_ID+@AMT_PAY_DO+@SUM_ADVANCE = @AMOUNT)
744
				BEGIN
745
					UPDATE TR_REQ_PAY_SCHEDULE SET PAYMENT_STATUS ='DTT' WHERE SCHEDULE_ID=@SCH_ID
746
				END
747
				ELSE IF(@SUM_OF_PAY_ID=0 AND @SUM_ADVANCE =0 )
748
				BEGIN
749
					UPDATE TR_REQ_PAY_SCHEDULE SET PAYMENT_STATUS ='CTT' WHERE SCHEDULE_ID=@SCH_ID
750
				END
751
				FETCH NEXT FROM CUR_SH INTO @PAY_ID,@AMOUNT,@AMT_PAY_DO,@SCH_ID,@AMT_ADVANCE
752
			END
753
			CLOSE CUR_SH
754
			DEALLOCATE CUR_SH 
755

    
756
			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
757
			UPDATE PL_REQUEST_PROCESS SET [STATUS] ='A' WHERE [STATUS] ='C' AND REQ_ID =@p_REQ_PAY_ID
758
			SET @p_AUTH_STATUS ='A'
759
			--- INSERT 1 DONG VAO PL_PROCESS
760
			-- INSERT VAO BANG PL_PROCESS 1 DONG TRA VE
761
			INSERT INTO dbo.PL_PROCESS(REQ_ID,PROCESS_ID,CHECKER_ID,APPROVE_DT,PROCESS_DESC,NOTES)
762
				   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')			
763
		END	
764
		IF @@Error <> 0 GOTO ABORT
765
COMMIT TRANSACTION
766
	IF(@p_AUTH_STATUS='A')
767
	BEGIN
768
		SELECT '0' as Result, @p_REQ_PAY_ID  REQ_PAY_ID ,N'12345' +@DEP_CODE_NEXT ErrorDesc
769
		RETURN '0'
770
	END
771
	--ELSE IF(@p_AUTH_STATUS='T' AND @ROLE_ID ='TKTGD')
772
	--BEGIN
773
	--	SELECT '5' as Result, @p_REQ_PAY_ID  REQ_PAY_ID ,N'Thư kí văn phòng Tổng Giám Đốc phê duyệt phiếu đề nghị tạm ứng số: ' +(SELECT TOP 1 REQ_PAY_CODE FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID)+ N' thành công' +@DEP_CODE_NEXT ErrorDesc
774
	--	RETURN '5'
775
	--END
776
	--ELSE IF(@p_AUTH_STATUS='T' AND @ROLE_ID ='TKHDQT')
777
	--BEGIN
778
	--	SELECT '5' as Result, @p_REQ_PAY_ID  REQ_PAY_ID ,N'Thư kí văn phòng Hội Đồng Quản Trị phê duyệt phiếu đề nghị tạm ứng số: ' +(SELECT TOP 1 REQ_PAY_CODE FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID)+ N' thành công' +@DEP_CODE_NEXT ErrorDesc
779
	--	RETURN '5'
780
	--END
781
	ELSE
782
	BEGIN
783
		SELECT '1' as Result, @p_REQ_PAY_ID  REQ_PAY_ID ,'Phiếu đề nghị tạm ứng số: ' + @p_REQ_PAY_ID + ' đã được phê duyệt thành công. Vui lòng đợi bộ phận kế toán xử lý phiếu.' ErrorDesc
784
		RETURN '1'
785
	END
786
ABORT:
787
BEGIN
788
		ROLLBACK TRANSACTION
789
		SELECT '-1' as Result, '' REQ_PAY_ID, '' ErrorDesc
790
		RETURN '-1'
791
END
792

    
793
GO
794

    
795
ALTER   PROCEDURE [dbo].[TR_REQ_ADVANCE_PAYMENT_Confirm]
796
@p_REQ_PAY_ID	varchar(15)= NULL,
797
@p_CHECKER_ID	varchar(15)	= NULL
798
AS
799
-- BEGIN VALIDATION 
800
	-- KIEM TRA NEU PHIEU DA XAC NHAN ROI THI KHONG CHO PHÉP XAC NHAN LAN THU  2
801
	IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID=@p_REQ_PAY_ID AND PROCESS = '' AND @p_CHECKER_ID = TRASFER_USER_RECIVE))
802
	BEGIN
803
		SELECT '-1' as Result, @p_REQ_PAY_ID  REQ_PAY_ID ,N'Phiếu đề nghị tạm ứng đã được cấp phê duyệt trung gian xác nhận trước đó' ErrorDesc
804
		RETURN '-1'
805
	END
806
-- END VALIDATION
807

    
808
BEGIN TRANSACTION
809
	DECLARE @ROLE_SIGN VARCHAR(50), @REQ_TYPE VARCHAR(15), @BRANCH_CREATE_TYPE VARCHAR(15)
810
	SET @BRANCH_CREATE_TYPE = (SELECT TOP 1 BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID = (SELECT TOP 1 BRANCH_CREATE FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID=@p_REQ_PAY_ID))
811
	--SET @ROLE_SIGN =(SELECT RoleName FROM TL_USER_V2 WHERE TLNANME =@p_CHECKER_ID)
812
	SET  @ROLE_SIGN =(SELECT TOP 1 RoleName FROM TL_USER WHERE TLNANME =@p_CHECKER_ID)
813
	-- KHAI BAO THEM ROLE NHAN UY QUYEN  
814
	DECLARE @TABLE_ROLE TABLE (ROLE_AUTH VARCHAR(50))  
815
	INSERT INTO @TABLE_ROLE SELECT ROLE_NEW FROM TL_SYS_ROLE_MAPPING WHERE ROLE_OLD =@ROLE_SIGN  
816
	AND (CONVERT(DATE,GETDATE(),103) >= CONVERT(DATE,EFF_DATE, 103) OR EFF_DATE IS NULL OR EFF_DATE ='')
817
	AND (CONVERT(DATE, GETDATE(),103) <=CONVERT(DATE,EXP_DATE, 103) OR EXP_DATE IS NULL OR EXP_DATE ='') 
818

    
819
	IF(@ROLE_SIGN IS NOT NULL AND @ROLE_SIGN <>'' AND @ROLE_SIGN IN ('TPGD','GDDV','PGD','PTGD','TGD','HDQT','TP','PP','TBP','KTT','GDK','KSV','TC','NVTC','TPTC','PPGD'))
820
	BEGIN
821
		PRINT @ROLE_SIGN
822
	END
823
	ELSE
824
	BEGIN
825
	--SET @ROLE_ID =(SELECT TOP 1 RoleName FROM TL_USER_V2 WHERE TLNANME =@p_USER_LOGIN)
826
		SET @ROLE_SIGN =(SELECT TOP 1 RoleName FROM TL_USER_V2 WHERE TLNANME =@p_CHECKER_ID)
827
		IF(@ROLE_SIGN IS NULL OR @ROLE_SIGN ='')
828
		BEGIN
829
			SET @ROLE_SIGN =(SELECT TOP 1 ROLE_NEW FROM TL_SYS_ROLE_MAPPING WHERE ROLE_OLD =(SELECT TOP 1 ROLENAME FROM TL_USER WHERE TLNANME=@ROLE_SIGN))
830
		END
831
	END
832
	SET @REQ_TYPE =(SELECT REQ_TYPE FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
833
	IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID=@p_REQ_PAY_ID AND AUTH_STATUS ='R'))
834
	BEGIN
835
		ROLLBACK TRANSACTION
836
		SELECT '-1' as Result, @p_REQ_PAY_ID  REQ_PAY_ID ,N'Bạn không được phép xác nhận hoặc phê duyệt giao dịch này. Phiếu đề nghị tạm ứng số: '+(SELECT REQ_PAY_CODE FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID)+ N' đang được trả về. Vui lòng đợi nhân viên cập nhật thông tin và gửi phê duyệt lại' ErrorDesc
837
		RETURN '-1'
838
	END
839
-- NEU LA TAM UNG NOI BO
840
	IF(@REQ_TYPE ='I')
841
	BEGIN
842
		PRINT '0'
843
		DECLARE @USER_SIGN VARCHAR(15)
844
		SET @USER_SIGN =(SELECT ISNULL(TRASFER_USER_RECIVE,'') FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
845
	-- NEU LA O HOI SO
846
		IF(@BRANCH_CREATE_TYPE ='HS' AND EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND TRASFER_USER_RECIVE IS NOT NULL AND TRASFER_USER_RECIVE <> ''))
847
		BEGIN
848
			IF(@p_CHECKER_ID <>  @USER_SIGN AND (SELECT TOP 1 PROCESS_ID FROM PL_PROCESS WHERE REQ_ID =@p_REQ_PAY_ID ORDER BY ID DESC ) = 'SEND')
849
			BEGIN
850
				ROLLBACK TRANSACTION		
851
				SELECT '-1' as Result, @p_REQ_PAY_ID  REQ_PAY_ID ,N'Phiếu đề nghị tạm ứng đang chờ cấp phê duyệt trung gian xác nhận. User domain: '+ISNULL(@USER_SIGN,'') ErrorDesc
852
				RETURN '-1'
853
			END
854
			-- doanptt 19/04/2022 nếu người duyệt là trưởng phòng hành chính thì phải duyệt có hạn mức
855
			IF(@p_CHECKER_ID <>  @USER_SIGN 
856
				AND @ROLE_SIGN = 'GDDV'
857
				AND  (SELECT B.DEP_CODE FROM TL_USER A LEFT JOIN CM_DEPARTMENT B ON A.DEP_ID = B.DEP_ID WHERE TLNANME =@p_CHECKER_ID) ='0690604' -- mã phòng hành chính
858
				AND (SELECT TOP 1 PROCESS_ID FROM PL_PROCESS WHERE REQ_ID =@p_REQ_PAY_ID ORDER BY ID DESC ) = '0')
859
			BEGIN
860
				ROLLBACK TRANSACTION		
861
				SELECT '3' as Result, @p_REQ_PAY_ID  REQ_PAY_ID ,ISNULL(@USER_SIGN,'') ErrorDesc
862
				RETURN '3'
863
			END
864
			--IF(EXISTS (SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND ISNULL(NOTES,'') <> ''))
865
			--BEGIN
866
			--	ROLLBACK TRANSACTION
867
			--	SELECT '-1' as Result, @p_REQ_PAY_ID  REQ_PAY_ID ,N'Phiếu đề nghị tạm ứng đã được bạn xác nhận trước đó. Vui lòng đợi các cấp duyệt tiếp theo' ErrorDesc
868
			--	RETURN '-1'
869
			--END
870
		END
871
		IF	(	@ROLE_SIGN IN ('GDDV','PP','KTT','TC','TPTC') 
872
				OR (	EXISTS	(SELECT * FROM @TABLE_ROLE WHERE ROLE_AUTH IN ('GDDV','PP','KTT','TC','TPTC'))  
873
						AND NOT EXISTS	(	SELECT * FROM TR_REQ_ADVANCE_PAYMENT 
874
											WHERE REQ_PAY_ID =@p_REQ_PAY_ID 
875
											AND TRASFER_USER_RECIVE =@p_CHECKER_ID
876
										)
877
					)
878
			)
879
		BEGIN
880
			UPDATE TR_REQ_ADVANCE_PAYMENT SET PROCESS='0',NOTES =N'SIGN' WHERE REQ_PAY_ID =@p_REQ_PAY_ID
881
			INSERT INTO PL_PROCESS VALUES (@p_REQ_PAY_ID,'0',@p_CHECKER_ID, GETDATE(),N'Trưởng đơn vị xác nhận phiếu',N'Xác nhận phiếu tạm ứng')
882
		END
883
		ELSE
884
		BEGIN
885
			IF((SELECT BRANCH_CREATE FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID) ='DV0001')
886
			BEGIN
887
				UPDATE TR_REQ_ADVANCE_PAYMENT SET PROCESS='',NOTES =N'SIGN' WHERE REQ_PAY_ID =@p_REQ_PAY_ID
888
				INSERT INTO PL_PROCESS VALUES (@p_REQ_PAY_ID,'0',@p_CHECKER_ID, GETDATE(),N'Cấp phê duyệt trung gian xác nhận phiếu' ,N'Xác nhận phiếu tạm ứng')
889
			END
890
			ELSE
891
			BEGIN
892
				UPDATE TR_REQ_ADVANCE_PAYMENT SET PROCESS='',NOTES =N'SIGN' WHERE REQ_PAY_ID =@p_REQ_PAY_ID
893
				INSERT INTO PL_PROCESS VALUES (@p_REQ_PAY_ID,'0',@p_CHECKER_ID, GETDATE(),N'Cấp phê duyệt trung gian xác nhận phiếu',N'Xác nhận phiếu tạm ứng')
894
			END
895
		END
896
		-- NẾU NGƯỜI DUYỆT TRÙNG VỚI CẤP PHÊ DUYỆT TRUNG GIAN THÌ KHÔNG CẦN UPDATE PROCESS_ID
897
		--UPDATE TR_REQ_ADVANCE_PAYMENT SET PROCESS='', NOTES =N'SIGN' WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND TRASFER_USER_RECIVE =@p_CHECKER_ID AND @REQ_TYPE ='I' AND @BRANCH_CREATE_TYPE ='HS'
898
	END
899
-- NEU LA CAC TAM UNG CON LAI
900
	ELSE
901
	BEGIN
902
		UPDATE TR_REQ_ADVANCE_PAYMENT SET PROCESS='',NOTES =N'SIGN' WHERE REQ_PAY_ID =@p_REQ_PAY_ID
903
		INSERT INTO PL_PROCESS VALUES (@p_REQ_PAY_ID,'0',@p_CHECKER_ID, GETDATE(),N'Cấp phê duyệt trung gian xác nhận phiếu',N'Xác nhận phiếu tạm ứng')
904
	END
905
	
906
COMMIT TRANSACTION
907
		IF(@p_CHECKER_ID =(SELECT ISNULL(TRASFER_USER_RECIVE,'') FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID))
908
		BEGIN
909
			SELECT '0' as Result, @p_REQ_PAY_ID  REQ_PAY_ID ,N'Phiếu đề nghị tạm ứng số: '+(SELECT REQ_PAY_CODE FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID)+N' đã được cấp phê duyệt trung gian xác nhận thành công! Vui lòng đợi trưởng đơn vị phê duyệt phiếu' ErrorDesc
910
			RETURN '0'
911
		END
912
		ELSE
913
		BEGIN
914
			UPDATE TR_REQ_ADVANCE_PAYMENT SET NOTES =N'' WHERE REQ_PAY_ID =@p_REQ_PAY_ID
915
			SELECT '0' as Result, @p_REQ_PAY_ID  REQ_PAY_ID ,N'Phiếu đề nghị tạm ứng số: '+(SELECT REQ_PAY_CODE FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID)+N' đã được xác nhận thành công! Vui lòng đợi các cấp phê duyệt tiếp theo' ErrorDesc
916
			RETURN '0'
917
		END
918
ABORT:
919
BEGIN
920
		ROLLBACK TRANSACTION
921
		SELECT '-1' as Result, '' REQ_PAY_ID, '' ErrorDesc
922
		RETURN '-1'
923
END
924

    
925
GO
926

    
927
ALTER   PROCEDURE [dbo].[TR_REQ_ADVANCE_PAYMENT_Upd]
928
@p_REQ_PAY_ID	varchar(15)= NULL,
929
@p_REQ_PAY_CODE	varchar(50)	= NULL,
930
@p_REQ_DT VARCHAR(20)= NULL,
931
@p_BRANCH_ID	varchar(15)	= NULL,
932
@p_DEP_ID	varchar(15)	= NULL,
933
@p_REQ_REASON	nvarchar(MAX)	= NULL,
934
@p_REQ_TYPE	varchar(15)	= NULL,
935
@P_REQ_ENTRIES nvarchar(MAX)	= NULL,
936
@p_REQ_DESCRIPTION	nvarchar(MAX)	= NULL,
937
@p_REF_ID	varchar(15)	= NULL,
938
@p_RECEIVER_PO	nvarchar(250)	= NULL,
939
@p_RECEIVER_DEBIT	nvarchar(250)	= NULL,
940
@p_REQ_PAY_TYPE	varchar(15)	= NULL,
941
@p_REQ_TYPE_CURRENCY	nvarchar(50)	= NULL,
942
@p_REQ_AMT	decimal(18, 0)	= NULL,
943
@p_REQ_TEMP_AMT	decimal(18, 0)	= NULL,
944
@p_MAKER_ID	varchar(15)	= NULL,
945
@p_CREATE_DT	varchar(25)	= NULL,
946
@p_EDITOR_ID	varchar(15)	= NULL,
947
@p_AUTH_STATUS	varchar(1)	= NULL,
948
@p_CHECKER_ID	varchar(15)	= NULL,
949
@p_APPROVE_DT	varchar(25)	= NULL,
950
@p_CREATE_DT_KT	varchar(25)	= NULL,
951
@p_MAKER_ID_KT	varchar(15)	= NULL,
952
@p_AUTH_STATUS_KT	varchar(1)	= NULL,
953
@p_CHECKER_ID_KT	varchar(1)	= NULL,
954
@p_APPROVE_DT_KT  varchar(25)= null,
955
@p_CONFIRM_NOTE	nvarchar(500)	= NULL,
956
@p_BRANCH_CREATE	varchar(15)	= NULL,
957
@p_NOTES	varchar(15)	= NULL,
958
@p_RECORD_STATUS	varchar(1)	= NULL,
959
@p_TRANSFER_MAKER	nvarchar(50)	= NULL,
960
@p_TRANSFER_DT	varchar(25)	= NULL,
961
@p_TRASFER_USER_RECIVE	varchar(15)	= NULL,
962
@p_PROCESS	varchar(15)	= NULL,
963
@p_PAY_PHASE VARCHAR(15)= NULL,
964
@p_DVDM_ID VARCHAR(15)= NULL,
965
@p_RATE DECIMAL(18,0) =0,
966
@p_RECIVER_MONEY VARCHAR(15)= NULL,
967
@p_TYPE_FUNCTION VARCHAR(15) = NULL,
968
@p_IS_PERIOD VARCHAR(5) = NULL,
969
@p_PAY_AMT DECIMAL(18,0)= NULL,
970
--doanptt 19/01/2022
971
@p_XMP_TEMP XML = NULL,
972
@p_XMP_CUS XML = NULL,
973
@p_XMP_PAY_ATTACH XML = NULL,
974
@p_XMP_PAY_INVOICE XML = NULL,
975
@p_XMP_ADVANCE_DT_2 XML = NULL,
976
@p_XMP_PAY_SCHEDULE XML = NULL,
977
@p_XMP_PAY_PERIOD XML = NULL,
978
@p_XMP_PAY_METHOD XML = NULL,
979
@p_XMP_PAY_BUDGET XML = NULL,
980
@p_XMP_ADVANCE_DT XML = NULL
981
AS
982
-- Begin Validation update
983
	IF(@p_TYPE_FUNCTION <> 'SEND')
984
	BEGIN
985
		IF(NOT EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT where MAKER_ID = @p_MAKER_ID ))
986
		BEGIN
987
			SELECT '-1' as Result, '' REQ_PAY_ID, N'Bạn không được phép cập nhật phiếu đề nghị tạm ứng này. Chỉ người tạo phiếu mới được cập nhật phiếu' ErrorDesc
988
			RETURN '-1'
989
		END
990
		IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT where AUTH_STATUS = 'U' AND REQ_PAY_ID = @p_REQ_PAY_ID ))
991
		BEGIN
992
			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
993
			RETURN '-1'
994
		END
995
		IF (@p_REQ_PAY_CODE IS NULL OR @p_REQ_PAY_CODE ='')
996
		BEGIN
997
			SELECT '-1' Result, '' REQ_PAY_ID, N'Mã số phiếu không được để trống' ErrorDesc
998
			RETURN '-1'
999
		END
1000
		IF (EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_CODE = @p_REQ_PAY_CODE AND REQ_PAY_ID <> @p_REQ_PAY_ID))
1001
		BEGIN
1002
			SELECT '-1' Result, '' REQ_PAY_ID, N'Mã số phiếu đã tồn tại trong hệ thống' ErrorDesc
1003
			RETURN '-1'
1004
		END
1005
		IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND AUTH_STATUS <> 'E' AND AUTH_STATUS <> 'R' AND ISNULL(AUTH_STATUS, '') <> ''))
1006
		BEGIN
1007
			SELECT '-1' Result, '' REQ_PAY_ID, N'Phiếu đề nghị tạm ứng đã được kí xác nhận từ các cấp. Bạn không được quyền chỉnh sửa' ErrorDesc
1008
			RETURN '-1'
1009
		END
1010
	END
1011
	
1012
-- End Validation update
1013

    
1014
/*
1015
DECLARE @ERRORSYS NVARCHAR(15) = '' 
1016
  IF ( NOT EXISTS ( SELECT * FROM ASS_COLLECT WHERE ))
1017
	 SET @ERRORSYS = ''
1018
IF @ERRORSYS <> '' 
1019
BEGIN
1020
	SELECT ErrorCode Result, ''  CAR_ID, ErrorDesc ErrorDesc FROM SYS_ERROR WHERE ErrorCode = @ERRORSYS
1021
	RETURN '0'
1022
END 
1023
*/
1024
	--Luanlt-2019/10/15 Disable Validation
1025
	--DECLARE @ERRORSYS NVARCHAR(15) = '' 
1026
	--IF EXISTS(SELECT * FROM TR_PO_MASTER WHERE REF_ID  = @p_REF_ID )
1027
	--BEGIN
1028
	--	SET @ERRORSYS = 'ASSC-00005'
1029
	--	SELECT ErrorCode Result, '' REQ_PAY_ID, ErrorDesc ErrorDesc FROM SYS_ERROR WHERE ErrorCode = @ERRORSYS
1030
	--	RETURN '-1'
1031
	--END
1032

    
1033
	DECLARE @BRANCH_TYPE_CR VARCHAR(15), @ROLE_KI_NHAY VARCHAR(50)
1034
	--SET @ROLE_KI_NHAY =(SELECT RoleName FROM TL_USER_V2 WHERE TLNANME =@p_TRASFER_USER_RECIVE)
1035
	--IF(@ROLE_KI_NHAY IS NOT NULL AND @ROLE_KI_NHAY <> '' AND @ROLE_KI_NHAY IN ('TP','GDDV','KTT','TPTC','TC'))
1036
	--BEGIN
1037
	--	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
1038
	--	RETURN '-1'
1039
	--END
1040
		SET  @ROLE_KI_NHAY =(SELECT TOP 1 RoleName FROM TL_USER WHERE TLNANME =@p_TRASFER_USER_RECIVE)
1041
		IF(@ROLE_KI_NHAY IS NOT NULL AND @ROLE_KI_NHAY <>'' AND @ROLE_KI_NHAY IN ('TPGD','GDDV','PGD','PTGD','TGD','HDQT','TP','PP','TBP','KTT','GDK','KSV','TC','NVTC','TPTC'))
1042
		BEGIN
1043
		PRINT @ROLE_KI_NHAY
1044
		END
1045
		ELSE
1046
		BEGIN
1047
		SET @ROLE_KI_NHAY =(SELECT TOP 1 RoleName FROM TL_USER_V2 WHERE TLNANME =@p_TRASFER_USER_RECIVE)
1048
		IF(@ROLE_KI_NHAY IS NULL OR @ROLE_KI_NHAY ='')
1049
		BEGIN
1050
				SET @ROLE_KI_NHAY =(SELECT TOP 1 ROLE_NEW FROM TL_SYS_ROLE_MAPPING WHERE ROLE_OLD =(SELECT TOP 1 ROLENAME FROM TL_USER WHERE TLNANME=@p_TRASFER_USER_RECIVE))
1051
		END
1052
		END
1053
		--SET @ROLE_KI_NHAY =(SELECT RoleName FROM TL_USER_V2 WHERE TLNANME =@p_TRASFER_USER_RECIVE)
1054
		IF(@ROLE_KI_NHAY IS NOT NULL AND @ROLE_KI_NHAY <> '' AND @ROLE_KI_NHAY IN ('TP','GDDV','KTT','TPTC','TC','TPGD')  AND @p_REQ_TYPE <> 'I')
1055
		BEGIN
1056
			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
1057
			RETURN '-1'
1058
		END
1059
	SET @BRANCH_TYPE_CR =(SELECT TOP 1 BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID =@p_BRANCH_CREATE)
1060
	DECLARE @ACC_NUM VARCHAR(15)
1061
	SET @ACC_NUM = (SELECT TOP 1 ACC_NUM FROM CM_ACCOUNT_PAY WHERE REF_ID =@p_REF_ID)
1062

    
1063
------------------------------------------------------------------------------------ start validate phần master ------------------------------------------------------------------------------------------------------
1064
	IF(@p_TYPE_FUNCTION = 'SEND')
1065
	BEGIN
1066
		IF (@p_BRANCH_ID IS NULL OR @p_BRANCH_ID ='')
1067
		BEGIN
1068
			SELECT '-1' Result, '' REQ_PAY_ID, N'Đơn vị yêu cầu không được để trống' ErrorDesc
1069
			RETURN '-1'
1070
		END
1071
		IF (@p_DEP_ID IS NULL OR @p_DEP_ID ='')
1072
		BEGIN
1073
			SELECT '-1' Result, '' REQ_PAY_ID, N'Phòng ban đề nghị không được để trống' ErrorDesc
1074
			RETURN '-1'
1075
		END
1076
		IF (@p_REQ_TYPE IS NULL OR @p_REQ_TYPE ='')
1077
		BEGIN
1078
			SELECT '-1' Result, '' REQ_PAY_ID, N'Loại phiếu yêu cầu không được để trống' ErrorDesc
1079
			RETURN '-1'
1080
		END
1081
		IF (@p_REQ_REASON IS NULL OR @p_REQ_REASON ='')
1082
		BEGIN
1083
			SELECT '-1' Result, '' REQ_PAY_ID, N'Lý do tạm ứng không được để trống' ErrorDesc
1084
			RETURN '-1'
1085
		END
1086
		IF (@p_REQ_AMT IS NULL OR @p_REQ_AMT = 0)
1087
		BEGIN
1088
			SELECT '-1' Result, '' REQ_PAY_ID, N'Số tiền tạm ứng phải lớn hơn không' ErrorDesc
1089
			RETURN '-1'
1090
		END
1091
		IF (@p_BRANCH_ID IS NULL OR @p_BRANCH_ID ='')
1092
		BEGIN
1093
			SELECT '-1' Result, '' REQ_PAY_ID, N'Đơn vị không được để trống' ErrorDesc
1094
			RETURN '-1'
1095
		END
1096

    
1097
		
1098
		IF (@p_RECIVER_MONEY IS NOT NULL AND @p_RECIVER_MONEY ='' AND @p_REQ_TYPE = 'D')
1099
		BEGIN
1100
			SELECT '-1' Result, '' REQ_PAY_ID, N'Người nhận tiền tạm ứng không được để trống' ErrorDesc
1101
			RETURN '-1'
1102
		END
1103

    
1104
		IF(@p_REQ_TYPE='I')
1105
		BEGIN
1106
			IF((@p_RECEIVER_DEBIT IS NULL OR @p_RECEIVER_DEBIT = ''))
1107
			BEGIN
1108
						SELECT '-1' as Result, '' REQ_PAY_ID, N'Tài khoản người đề nghị tạm ứng không được để trống'  ErrorDesc
1109
						RETURN '-1'
1110
			END
1111
			IF(NOT EXISTS(SELECT * FROM CM_ACCOUNT_PAY WHERE ACC_NUM =@p_RECEIVER_DEBIT AND REF_ID =  @p_REF_ID))
1112
			BEGIN
1113
						SELECT '-1' as Result, '' REQ_PAY_ID, N'Tài khoản tạm ứng số '+ @p_RECEIVER_DEBIT + N' không phải tài khoản của user: '+@p_REF_ID  ErrorDesc
1114
						RETURN '-1'
1115
			END
1116
			IF(LEN(ISNULL(@p_RECEIVER_DEBIT,''))>15)
1117
			BEGIN
1118
						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
1119
						RETURN '-1'
1120
			END
1121
		END
1122
	END
1123
------------------------------------------------------------------------------------ end validate phần master ------------------------------------------------------------------------------------------------------
1124

    
1125

    
1126
-- doanptt 19/01/2022 Khai báo lưới danh sách 
1127
	DECLARE @hdocCus INT, @hdocPayAtach INT, @hdocPO INT, @hdocSchedule INT, @hdocRecurring INT, @hdocPeriod INT, @hdocPayMethod INT, @hdocPayBudget INT
1128

    
1129
		-- THONG TIN KHACH HANG
1130
		EXEC sp_xml_preparedocument @hdocCus OUTPUT, @p_XMP_CUS;
1131
		-- HOP DONG, CHUNG TU DINH KEM
1132
		EXEC sp_xml_preparedocument @hdocPayAtach OUTPUT, @p_XMP_PAY_ATTACH;
1133
		-- THONG TIN PO/ HOP DONG
1134
		EXEC sp_xml_preparedocument @hdocPO OUTPUT, @p_XMP_ADVANCE_DT_2;
1135
		-- DANH SACH CAC DOT THANH TOAN PO/ HOP DONG
1136
		EXEC sp_xml_preparedocument @hdocSchedule OUTPUT, @p_XMP_PAY_SCHEDULE;
1137
		-- THONG TIN HOP DONG DINH KY
1138
		EXEC sp_xml_preparedocument @hdocRecurring OUTPUT, @p_XMP_ADVANCE_DT;
1139
		-- THONG TIN DINH KY TAM UNG
1140
		EXEC sp_xml_preparedocument @hdocPeriod OUTPUT, @p_XMP_PAY_PERIOD;
1141
		-- THONG TIN PHUONG THUC THANH TOAN
1142
		EXEC sp_xml_preparedocument @hdocPayMethod OUTPUT, @p_XMP_PAY_METHOD;
1143
		-- THONG TIN HANG MUC NGAN SACH VA CHI PHI
1144
		EXEC sp_xml_preparedocument @hdocPayBudget OUTPUT, @p_XMP_PAY_BUDGET;
1145

    
1146
		-------------------------------------------------------------- start validate các lưới -----------------------------------------------------------------------
1147
-- BEGIN VALIDATE CAC DANH SACH
1148
		IF(@p_REQ_TYPE = 'P' AND @p_IS_PERIOD='N' AND NOT EXISTS(SELECT * FROM OPENXML(@hdocPO, '/Root/XmlDataPO', 2) WITH(REQ_PAY_ID varchar(15))))
1149
		BEGIN
1150
			SELECT '-1' Result, '' REQ_PAY_ID, N'Danh sách PO/ hợp đồng không được để trống' ErrorDesc
1151
			RETURN '-1'
1152
		END
1153
		IF(@p_REQ_TYPE = 'P' AND @p_IS_PERIOD='N' AND NOT EXISTS(SELECT * FROM OPENXML(@hdocSchedule, '/Root/XmlDataSchedule', 2) WITH(REQ_PAY_ID varchar(15))))
1154
		BEGIN
1155
			SELECT '-1' Result, '' REQ_PAY_ID, N'Danh sách thông tin chi tiết lịch thanh toán PO/ hợp đồng không được để trống' ErrorDesc
1156
			RETURN '-1'
1157
		END
1158

    
1159
		IF(@p_REQ_TYPE = 'P' AND (@p_IS_PERIOD='Y' OR @p_IS_PERIOD IS NULL) AND NOT EXISTS(SELECT * FROM OPENXML(@hdocRecurring, '/Root/XmlDataRecurring', 2) WITH(REQ_PAY_ID varchar(15))))
1160
		BEGIN
1161
			SELECT '-1' Result, '' REQ_PAY_ID, N'Danh sách thông tin hợp đồng định kì không được phép để trống' ErrorDesc
1162
			RETURN '-1'
1163
		END
1164

    
1165
		IF(@p_REQ_TYPE = 'P' AND (@p_IS_PERIOD='Y' OR @p_IS_PERIOD IS NULL) AND NOT EXISTS(SELECT * FROM OPENXML(@hdocPeriod, '/Root/XmlDataPeriod', 2) WITH(REQ_PAY_ID varchar(15))))
1166
		BEGIN
1167
			SELECT '-1' Result, '' REQ_PAY_ID, N'Danh sách thông tin định kỳ tạm ứng không được phép để trống' ErrorDesc
1168
			RETURN '-1'
1169
		END
1170

    
1171
		IF(@p_REQ_TYPE = 'D' AND NOT EXISTS(SELECT * FROM OPENXML(@hdocCus, '/Root/XmlDataCus', 2) WITH(CONTRACT_ID varchar(15))))
1172
		BEGIN
1173
			SELECT '-1' Result, '' REQ_PAY_ID, N'Danh sách khách hàng không được để trống' ErrorDesc
1174
			RETURN '-1'
1175
		END
1176
-- END VALIDATE CAC DANH SACH
1177
		-------------------------------------------------------------- end validate các lưới -----------------------------------------------------------------------
1178
	
1179
	-- 19-11-2019 LUCTV BO SUNG VALIDATE TRONG QUA TRINH TEST SAU KHI UAT
1180
	-- NEU TAM UNG CHO NHA CUNG CAP THI DOT THANH TOAN KHONG DUOC PHEP NULL
1181
	-- SO TIEN THANH TOÁN PHAI LON HON KHONG
1182
		IF(@p_REQ_AMT <=0)
1183
		BEGIN	
1184
			SELECT '-1' as Result, '' REQ_PAY_ID, N'Số tiền tạm ứng phải lớn hơn 0' ErrorDesc
1185
			RETURN '-1'
1186
		END
1187
	 -- END VALIDATE TRONG QUA TRINH TEST UAT
1188
		BEGIN TRANSACTION
1189
		--IF(@p_DVDM_ID IS NULL OR @p_DVDM_ID ='')
1190
		--BEGIN
1191
		--	SET @p_DVDM_ID = (SELECT TOP 1 DVDM_ID FROM CM_DVDM WHERE DVDM_NAME ='KHOI TAI CHINH')
1192
		--END
1193
		UPDATE TR_REQ_ADVANCE_PAYMENT SET 
1194
		REF_ID = @p_REF_ID,
1195
		DEP_ID= @p_DEP_ID,REQ_REASON = @p_REQ_REASON, REQ_PAY_TYPE = @p_REQ_PAY_TYPE,
1196
		REQ_AMT = @p_REQ_AMT,
1197
		NOTES= @p_NOTES,
1198
		REQ_TYPE= @p_REQ_TYPE,REQ_DESCRIPTION = @p_REQ_DESCRIPTION,RECEIVER_PO =@p_RECEIVER_PO, RECEIVER_DEBIT= @p_RECEIVER_DEBIT,
1199
		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,
1200
		AUTH_STATUS='E', DVDM_ID=@p_DVDM_ID, RATE =@p_RATE,REQ_TYPE_CURRENCY =@p_REQ_TYPE_CURRENCY, RECIVER_MONEY= @p_RECIVER_MONEY, 
1201
		TRASFER_USER_RECIVE =@p_TRASFER_USER_RECIVE,IS_PERIOD =@p_IS_PERIOD, PAY_AMT = @p_PAY_AMT
1202
		WHERE REQ_PAY_ID =@p_REQ_PAY_ID
1203
		IF @@Error <> 0 GOTO ABORT
1204
		--- INSERT VÀO BẢNG DETAIL NÊU TẠM ỨNG LÀ TẠM ỨNG THANH TOÁN
1205
			
1206
			-- KIEM TRA NEU TAM UNG THANH TOAN
1207
			IF((@p_REQ_TYPE='P' AND (@p_IS_PERIOD <>'Y' OR @p_IS_PERIOD IS NULL)) OR @p_REQ_TYPE='D')
1208
			BEGIN
1209
				DELETE FROM TR_REQ_ADVANCE_DT WHERE REQ_PAY_ID=@p_REQ_PAY_ID
1210
				DELETE FROM TR_REQ_PAY_SCHEDULE WHERE REQ_PAY_ID=@p_REQ_PAY_ID
1211
				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),
1212
				@AMT_REMAIN_SCHEDULE decimal(18,0),@REQ_AD_DT varchar(20),@PROCESS varchar(15),@PAY_ID VARCHAR(15),
1213
				@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),
1214
				@EMP_ID VARCHAR(15),@AMT_PAY_REAL DECIMAL(18,2),@CHECK_IN VARCHAR(15),@IS_CLOSED VARCHAR(1)= NULL,@REASON NVARCHAR(1000),@REF_TYPE VARCHAR(15)
1215
				DECLARE @TYPE_COST VARCHAR(25), @FR_LEVEL INT ,@TO_LEVEL INT
1216
				DECLARE XmlDataPO CURSOR FOR
1217
				SELECT *
1218
				FROM
1219
				OPENXML(@hdocPO, '/Root/XmlDataPO', 2)--Thông tin PO/ hợp đồng
1220
				WITH(REF_ID varchar(15),IS_CLOSED VARCHAR(1),REF_TYPE VARCHAR(15))
1221
				OPEN XmlDataPO;
1222
				DECLARE @INDEX_PO INT =0
1223
				SET @INDEX_PO = 0
1224
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
1225
				WHILE @@fetch_status=0 
1226
				BEGIN
1227
					SET @INDEX_PO = @INDEX_PO +1
1228
					-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
1229
					IF(@p_TYPE_FUNCTION ='SEND')
1230
					BEGIN
1231
					
1232
					
1233
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
1234
					IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND TYPE ='C' AND REQ_PAY_ID 
1235
					IN (SELECT REQ_PAY_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS_KT<>'A' OR AUTH_STATUS_KT IS NULL)))
1236
					BEGIN
1237
						ROLLBACK TRANSACTION
1238
						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ố '+
1239
						(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
1240
						RETURN '-1'
1241
					END
1242
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
1243
					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))
1244
					BEGIN
1245
						ROLLBACK TRANSACTION
1246
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': Hợp đồng số '+
1247
						(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
1248
						RETURN '-1'
1249
					END
1250
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
1251
					IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND TYPE ='P' AND REQ_PAY_ID 
1252
					IN (SELECT REQ_PAY_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS_KT<>'A' OR AUTH_STATUS_KT IS NULL)))
1253
					BEGIN
1254
						ROLLBACK TRANSACTION
1255
						SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO số '+
1256
						(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
1257
						RETURN '-1'
1258
					END
1259
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
1260
					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))
1261
					BEGIN
1262
						ROLLBACK TRANSACTION
1263
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO số '+
1264
						(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
1265
						RETURN '-1'
1266
					END
1267
					--- KIEM TRA XEM PO NAY DUOC THANH TOAN HAY CHUA
1268
					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' )))
1269
					BEGIN
1270
						ROLLBACK TRANSACTION
1271
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO số '+
1272
						(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
1273
						RETURN '-1'
1274
					END
1275
					END
1276
					DECLARE @REQ_PAYDTID VARCHAR(15);
1277
					EXEC SYS_CodeMasters_Gen 'TR_REQ_ADVANCE_DT', @REQ_PAYDTID OUT;
1278
					IF @REQ_PAYDTID='' OR @REQ_PAYDTID IS NULL GOTO ABORT;
1279
					INSERT INTO TR_REQ_ADVANCE_DT (REQ_PAYDTID,REQ_PAY_ID,REF_ID,TYPE,MAKER_ID,CREATE_DT,IS_CLOSED,REF_TYPE) VALUES
1280
					(@REQ_PAYDTID,@p_REQ_PAY_ID,@REF_ID,'ADV_PAY',@p_MAKER_ID,GETDATE(),@IS_CLOSED,'P')
1281
				IF @@error<>0 GOTO ABORT;
1282
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
1283
				END
1284
				CLOSE XmlDataPO;
1285
				DEALLOCATE XmlDataPO;
1286
				--- CUSOR DANH SACH LICH THANH TOAN PO - HD	
1287
				DECLARE XmlDataSchedule CURSOR FOR
1288
				SELECT *
1289
				FROM
1290
				OPENXML(@hdocSchedule, '/Root/XmlDataSchedule',2)
1291
				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),
1292
				AMT_REMAIN_SCHEDULE decimal(18,0),REQ_AD_DT varchar(20),PROCESS varchar(15), PAY_ID VARCHAR(15),REF_ID VARCHAR(15),
1293
				REQ_PAY_DESC NVARCHAR(500), REQ_PAY_ENTRIES NVARCHAR(250),CURRENCY VARCHAR(15),RATE DECIMAL(18,0),AMT_PAY_REAL DECIMAL(18,2))
1294
				OPEN XmlDataSchedule
1295
				FETCH NEXT FROM XmlDataSchedule INTO @PO_ID,@TERM_PAY,@AMT_PAY_SCHEDULE,@REQ_ADV_ID_SCHE,@AMT_ADVANCE_SCHEDULE,@AMT_PAY_DO,
1296
				@AMT_REMAIN_SCHEDULE,@REQ_AD_DT,@PROCESS,@PAY_ID,@REF_ID,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@CURRENCY,@RATE,@AMT_PAY_REAL
1297
				WHILE @@fetch_status=0 
1298
				BEGIN
1299
					DECLARE @p_REQ_PAY_SCHEDULE_ID VARCHAR(15);
1300
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_SCHEDULE', @p_REQ_PAY_SCHEDULE_ID OUT;
1301
					IF @p_REQ_PAY_SCHEDULE_ID='' OR @p_REQ_PAY_SCHEDULE_ID IS NULL GOTO ABORT;
1302
					INSERT INTO TR_REQ_PAY_SCHEDULE(
1303
					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,
1304
					CREATE_DT,AUTH_STATUS_KT,PAYMENT_STATUS,TRN_TYPE,REF_ID,REQ_PAY_DESC,REQ_PAY_ENTRIES,CURRENCY,RATE, AMT_PAY_REAL)
1305
					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,
1306
					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)
1307
				--- END KHAI BAO CURSOR
1308
				IF @@error<>0 GOTO ABORT;
1309
				FETCH NEXT FROM XmlDataSchedule INTO @PO_ID,@TERM_PAY,@AMT_PAY_SCHEDULE,@REQ_ADV_ID_SCHE,@AMT_ADVANCE_SCHEDULE,@AMT_PAY_DO,
1310
				@AMT_REMAIN_SCHEDULE,@REQ_AD_DT,@PROCESS,@PAY_ID,@REF_ID,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@CURRENCY,@RATE,@AMT_PAY_REAL
1311
				END
1312
				CLOSE XmlDataSchedule;
1313
				DEALLOCATE XmlDataSchedule;
1314
			END
1315
		--- END TẠM ỨNG THANH TOÁN
1316
		---- TẠM ỨNG HĐ ĐỊNH KÌ
1317
			IF(@p_REQ_TYPE = 'P' AND @p_IS_PERIOD='Y')
1318
			BEGIN
1319
				DELETE FROM TR_REQ_ADVANCE_DT WHERE REQ_PAY_ID =@p_REQ_PAY_ID
1320
				DELETE FROM TR_REQ_PAY_PERIOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID
1321
				DECLARE @END_DT VARCHAR(20)
1322
				DECLARE XmlDataRecurring CURSOR FOR
1323
				SELECT *
1324
				FROM
1325
				OPENXML(@hdocRecurring, '/Root/XmlDataRecurring', 2)
1326
				WITH(CONTRACT_ID varchar(15),IS_CLOSED VARCHAR(1),REF_TYPE VARCHAR(15), END_DT VARCHAR(20))
1327
				OPEN XmlDataRecurring;
1328
				SET @INDEX_PO = 0
1329
				FETCH NEXT FROM XmlDataRecurring INTO @REF_ID,@IS_CLOSED,@REF_TYPE, @END_DT
1330
				WHILE @@fetch_status=0 
1331
				BEGIN
1332
					SET @INDEX_PO = @INDEX_PO +1
1333
					DECLARE @REQ_PAYDTID_C VARCHAR(15);
1334
					EXEC SYS_CodeMasters_Gen 'TR_REQ_ADVANCE_DT', @REQ_PAYDTID_C OUT;
1335
					IF @REQ_PAYDTID_C='' OR @REQ_PAYDTID_C IS NULL GOTO ABORT;
1336
					INSERT INTO TR_REQ_ADVANCE_DT (REQ_PAYDTID,REQ_PAY_ID,REF_ID,TYPE,MAKER_ID,CREATE_DT,IS_CLOSED,REF_TYPE, END_DT) 
1337
					VALUES(@REQ_PAYDTID_C,@p_REQ_PAY_ID,@REF_ID,'ADV_PAY',@p_MAKER_ID,GETDATE(),@IS_CLOSED,'C', CONVERT(DATE,@END_DT,103))
1338
				IF @@error<>0 GOTO ABORT;
1339
				FETCH NEXT FROM XmlDataRecurring INTO @REF_ID,@IS_CLOSED,@REF_TYPE, @END_DT
1340
				END
1341
				CLOSE XmlDataRecurring;
1342
				DEALLOCATE XmlDataRecurring;
1343
				--- CUSOR DANH SACH LICH THANH TOAN PO - HD	
1344
			----------------------------
1345
			--INSERT FROM PERIOD	
1346
				DECLARE XmlDataPeriod CURSOR FOR
1347
				SELECT *
1348
				FROM
1349
				OPENXML(@hdocPeriod, '/Root/XmlDataPeriod', 2)
1350
				WITH(CONTRACT_ID varchar(15),PAY_DT_REAL VARCHAR(20),PAY_TYPE VARCHAR(5),
1351
				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), END_DT VARCHAR(20) )
1352
				OPEN XmlDataPeriod;
1353
				DECLARE @CONTRACT_ID varchar(15),@PAY_DT_REAL VARCHAR(20),@PAY_TYPE VARCHAR(5), @OLD_INDEX DECIMAL(18,0),@NEW_INDEX DECIMAL(18,0),
1354
				@AMT_PAY_PERIOD DECIMAL(18,2),@FROM_DATE VARCHAR(20),@TO_DATE VARCHAR(20),@PAY_PHASE NVARCHAR(250), @REASON_TTDK NVARCHAR(2000)
1355
				FETCH NEXT FROM XmlDataPeriod INTO @CONTRACT_ID ,@PAY_DT_REAL ,@PAY_TYPE, @OLD_INDEX ,@NEW_INDEX ,@AMT_PAY_PERIOD,@CURRENCY, @RATE,@FROM_DATE,@TO_DATE,@PAY_PHASE,@REASON_TTDK, @END_DT
1356
				WHILE @@fetch_status=0 
1357
				BEGIN
1358
					-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
1359
					IF(@p_TYPE_FUNCTION ='SEND')
1360
					BEGIN
1361
					
1362
					--IF(EXISTS(SELECT CONTRACT_ID 
1363
					--FROM TR_CONTRACT 
1364
					--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 <>''))
1365
					
1366
					----AND IS_CLOSED='Y' ))
1367
					--BEGIN
1368
					--	ROLLBACK TRANSACTION
1369
					--	SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Tạm ứng hợp đồng định kì đã đóng' ErrorDesc
1370
					--	RETURN '-1'
1371
					--END
1372

    
1373
					IF(@NEW_INDEX <=@OLD_INDEX AND @NEW_INDEX >0 AND @OLD_INDEX >0)
1374
					BEGIN
1375
						ROLLBACK TRANSACTION
1376
						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
1377
						RETURN '-1'
1378
					END
1379
					-- NEU LÀ DINH KI THI HD PHAI KHAC NULL
1380
						IF(@CONTRACT_ID IS NULL OR @CONTRACT_ID ='' )
1381
						BEGIN
1382
							ROLLBACK TRANSACTION
1383
							SELECT '-1' as Result, @p_REQ_PAY_ID  REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Thông tin thanh toán hợp đồng định kì: Cột Số hợp đồng không được phép để trống' ErrorDesc
1384
							RETURN '-1'
1385
						END
1386
					-- KIEM TRA CHI TIET HOP DONG PHAI NAM TRONG DANH SACH CAC HOP DONG
1387
						IF(@CONTRACT_ID IS NOT NULL AND  @CONTRACT_ID <> '' )
1388
						BEGIN
1389
							IF(NOT EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND REF_ID =@CONTRACT_ID))
1390
							BEGIN
1391
								ROLLBACK TRANSACTION
1392
								SELECT '-1' as Result, @p_REQ_PAY_ID  REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Thông tin thanh toán hợp đồng định kì - Số hợp đồng phải nằm trong danh sách các hợp đồng được chọn trên lưới Hợp đồng định kì' ErrorDesc
1393
								RETURN '-1'
1394
							END
1395
						END
1396
					END
1397
					DECLARE @PERIOD_ID VARCHAR(15);
1398
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_PERIOD', @PERIOD_ID OUT;
1399
					IF @PERIOD_ID='' OR @PERIOD_ID IS NULL GOTO ABORT;
1400
					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, 
1401
					TO_DATE,AD_PAY_ID,PROCESS,PAY_PHASE, REASON)
1402
					VALUES (@PERIOD_ID,@p_REQ_PAY_ID,'ADV_PAY',@CONTRACT_ID,CONVERT(DATE,@PAY_DT_REAL,103), @OLD_INDEX ,@NEW_INDEX ,@AMT_PAY_PERIOD,'U',
1403
					@CURRENCY, @RATE,CONVERT(DATE,@FROM_DATE,103),CONVERT(DATE,@TO_DATE,103),@p_REQ_PAY_ID,'0',@PAY_PHASE,@REASON_TTDK)
1404
				IF @@error<>0 GOTO ABORT;
1405
				FETCH NEXT FROM XmlDataPeriod INTO @CONTRACT_ID ,@PAY_DT_REAL ,@PAY_TYPE , @OLD_INDEX ,@NEW_INDEX ,@AMT_PAY_PERIOD,@CURRENCY, @RATE,@FROM_DATE, @TO_DATE,@PAY_PHASE,@REASON_TTDK, @END_DT
1406
			END
1407
			CLOSE XmlDataPeriod;
1408
			DEALLOCATE XmlDataPeriod;
1409
			-- VALIDATE SO TIEN
1410
			--IF(@p_REQ_AMT >= @TOTAL_SCHEDULE_AMT)
1411
			--BEGIN
1412
			--	ROLLBACK TRANSACTION
1413
			--	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
1414
			--	RETURN '-1'
1415
			--END
1416
			----
1417
			END
1418
		---- END TẠM ỨNG HĐ ĐỊNH KÌ
1419
		--- INSERT PHƯƠNG THỨC THANH TOÁN
1420
		----MethodCursor
1421
			DELETE FROM TR_REQ_PAY_METHOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID
1422
			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),
1423
					@ACC_NO VARCHAR(50), @ACC_NAME NVARCHAR(250), @ISSED_BY NVARCHAR(250), @ISSUED_DT VARCHAR(20),
1424
					@TYPE_TRANSFER VARCHAR(15), @BANKCODE_NAPAS VARCHAR(20), @BANKCODE VARCHAR(20), @BANKNAME VARCHAR(250), @SUB_ISSUED_BY VARCHAR(250), @RECEIVER_DEBIT VARCHAR(20)
1425
			DECLARE @INDEX_PAY_METHOD DECIMAL(18,0) = 0;
1426
			DECLARE XmlDataMethod CURSOR FOR
1427
			SELECT *
1428
			FROM
1429
			OPENXML(@hdocPayMethod, '/Root/XmlDataMethod',2)
1430
			WITH(RECEIVE_ID varchar(15),RECEIVE_NAME nvarchar(100),REQ_PAY_REASON nvarchar(MAX),TOTAL_AMT decimal(18,2),REQ_PAY_TYPE varchar(1),
1431
			REQ_PAY_DESC nvarchar(MAX),REQ_PAY_ENTRIES nvarchar(MAX),ACC_NO VARCHAR(50), ACC_NAME NVARCHAR(250), 
1432
			ISSUED_BY NVARCHAR(250), ISSUED_DT VARCHAR(20),CURRENCY VARCHAR(15),RATE DECIMAL(18,0),CHECK_IN VARCHAR(15),
1433
			TYPE_TRANSFER VARCHAR(15), BANKCODE_NAPAS VARCHAR(20), BANKCODE VARCHAR(20), BANKNAME NVARCHAR(250), SUB_ISSUED_BY NVARCHAR(250), RECEIVER_DEBIT NVARCHAR(20))
1434
			OPEN XmlDataMethod
1435
			FETCH NEXT FROM XmlDataMethod 
1436
			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,@TYPE_TRANSFER, @BANKCODE_NAPAS, @BANKCODE, @BANKNAME, @SUB_ISSUED_BY, @RECEIVER_DEBIT 
1437
			WHILE @@fetch_status=0 
1438
			BEGIN
1439
				SET @INDEX_PAY_METHOD = @INDEX_PAY_METHOD + 1;
1440
					---------------------------start validate ------------------------------
1441
					IF(@p_TYPE_FUNCTION ='SEND')
1442
					BEGIN
1443
						IF(@ACC_NO IS NULL OR @ACC_NO = '')
1444
						BEGIN
1445
							ROLLBACK TRANSACTION
1446
							SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Phương thức thanh toán: Dòng ' + CAST(@INDEX_PAY_METHOD AS NVARCHAR(255)) + N': Số tài khoản/ CMND không được để trống'  ErrorDesc
1447
							RETURN '-1'
1448
						END
1449
						IF(@ACC_NAME IS NULL OR @ACC_NAME = '')
1450
						BEGIN
1451
							ROLLBACK TRANSACTION
1452
							SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Phương thức thanh toán: Dòng ' + CAST(@INDEX_PAY_METHOD AS NVARCHAR(255)) + N': Tên tài khoản/ người nhận không được để trống'  ErrorDesc
1453
							RETURN '-1'
1454
						END
1455
						IF(@ISSED_BY IS NULL OR @ISSED_BY = '')
1456
						BEGIN
1457
							ROLLBACK TRANSACTION
1458
							SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Phương thức thanh toán: Dòng ' + CAST(@INDEX_PAY_METHOD AS NVARCHAR(255)) + N': Ngân hàng/ nơi cấp CMND không được để trống'  ErrorDesc
1459
							RETURN '-1'
1460
						END
1461
						IF(@REQ_PAY_REASON IS NULL OR @REQ_PAY_REASON = '')
1462
						BEGIN
1463
							ROLLBACK TRANSACTION
1464
							SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Phương thức thanh toán: Dòng ' + CAST(@INDEX_PAY_METHOD AS NVARCHAR(255)) + N': Nội dung thanh toán không được để trống'  ErrorDesc
1465
							RETURN '-1'
1466
						END
1467
						IF(@TOTAL_AMT_METHOD IS NULL OR @TOTAL_AMT_METHOD = 0)
1468
						BEGIN
1469
							ROLLBACK TRANSACTION
1470
							SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Phương thức thanh toán: Dòng ' + CAST(@INDEX_PAY_METHOD AS NVARCHAR(255)) + N': Số tiền thanh toán phải lớn hơn 0'  ErrorDesc
1471
							RETURN '-1'
1472
						END
1473
						IF(@REQ_PAY_TYPE = '1' AND (@ISSUED_DT IS NULL OR @ISSUED_DT = ''))
1474
						BEGIN
1475
							ROLLBACK TRANSACTION
1476
							SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Phương thức thanh toán, dòng ' + CAST(@INDEX_PAY_METHOD AS NVARCHAR(255)) + N': Ngày cấp CMND không được để trống nếu phương thức thanh toán là bằng tiền mặt'  ErrorDesc
1477
							RETURN '-1'
1478
						END
1479
						
1480
					END
1481
					-----------------------------end validate ----------------------------
1482
				IF(@REQ_PAY_TYPE<>'1')
1483
				BEGIN
1484
					SET @ISSUED_DT = NULL
1485
				END
1486
				DECLARE @p_REQ_PAY_METHOD_ID VARCHAR(15);
1487
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_METHOD', @p_REQ_PAY_METHOD_ID OUT;
1488
				IF @p_REQ_PAY_METHOD_ID='' OR @p_REQ_PAY_METHOD_ID IS NULL GOTO ABORT;
1489
				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,
1490
				CREATE_DT,ACC_NO,ACC_NAME,ISSUED_BY,ISSUED_DT,CURRENCY,RATE,CHECK_IN, TYPE_TRANSFER, BANKCODE_NAPAS, BANKCODE, BANKNAME, SUB_ISSUED_BY, RECEIVER_DEBIT)
1491
				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,'',
1492
				@p_MAKER_ID,GETDATE(),@ACC_NO,@ACC_NAME,@ISSED_BY, CONVERT(DATE, @ISSUED_DT, 103),@CURRENCY,@RATE,@CHECK_IN,@TYPE_TRANSFER, @BANKCODE_NAPAS, @BANKCODE, @BANKNAME, @SUB_ISSUED_BY, @RECEIVER_DEBIT)
1493
			IF @@error<>0 GOTO ABORT;
1494
			FETCH NEXT FROM XmlDataMethod 
1495
			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,@TYPE_TRANSFER, @BANKCODE_NAPAS, @BANKCODE, @BANKNAME, @SUB_ISSUED_BY, @RECEIVER_DEBIT
1496
			END
1497
			CLOSE XmlDataMethod;
1498
			DEALLOCATE XmlDataMethod
1499
		----END INSERT PHƯƠNG THỨC THANH TOÁN
1500
		----INSERT VAO BANG DS KHACH HANG
1501
			DELETE FROM TR_REQ_ADVANCE_CUS WHERE REQ_PAY_ID = @p_REQ_PAY_ID
1502
			DECLARE XmlDataCus CURSOR FOR
1503
			SELECT *
1504
			FROM
1505
			OPENXML(@hdocCus, '/Root/XmlDataCus', 2)
1506
			WITH(CUST_ID varchar(15), EMP_ID VARCHAR(15), AMT_PAY_DO decimal(18,2),CURRENCY VARCHAR(15),RATE DECIMAL(18,0))
1507
			OPEN XmlDataCus;
1508

    
1509
			FETCH NEXT FROM XmlDataCus INTO @CUST_ID, @EMP_ID,@AMT_PAY_DO,@CURRENCY,@RATE
1510
				WHILE @@fetch_status=0 
1511
				BEGIN		
1512
					INSERT INTO TR_REQ_ADVANCE_CUS(REQ_PAY_ID,CUST_ID,EMP_ID,AMT_PAY_DO,CURRENCY,RATE,MAKER_ID,CREATE_DT)
1513
					VALUES (@p_REQ_PAY_ID, @CUST_ID, @EMP_ID,@AMT_PAY_DO,@CURRENCY,@RATE,@p_MAKER_ID,GETDATE())
1514
				--- END KHAI BAO CURSOR
1515
				IF @@error<>0 GOTO ABORT;
1516
				FETCH NEXT FROM XmlDataCus INTO  @CUST_ID, @EMP_ID,@AMT_PAY_DO,@CURRENCY,@RATE
1517
				END
1518
				CLOSE XmlDataCus;
1519
				DEALLOCATE XmlDataCus;
1520
		----END
1521
		-- HANG MUC CHI PHI VA NGAN SACH
1522
			DELETE FROM TR_REQ_PAY_BUDGET WHERE REQ_PAY_ID =@p_REQ_PAY_ID
1523
			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), @INDEX_NS INT =0
1524
			DECLARE XmlDataGood CURSOR LOCAL FOR
1525
			SELECT *
1526
			FROM
1527
			OPENXML(@hdocPayBudget, '/Root/XmlDataGood',2) 
1528
			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),TYPE_COST VARCHAR(25) , FR_LEVEL INT  ,TO_LEVEL INT)
1529
			OPEN XmlDataGood
1530
			FETCH NEXT FROM XmlDataGood INTO @TRADE_ID,@GD_ID ,@AMT_APP ,@AMT_DO,@AMT_EXE ,@AMT_REMAIN_GD,@CURRENCY,@RATE,@REASON,@TYPE_COST , @FR_LEVEL  ,@TO_LEVEL
1531
			WHILE @@fetch_status=0 BEGIN
1532
				--- KIEM TRA NEU NGAN SACH SU DUNG THUC THE LON HON NGAN SACH CON LAI
1533
				SET @INDEX_NS = @INDEX_NS +1
1534
				-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
1535
				--IF(@p_TYPE_FUNCTION ='SEND')
1536
				--BEGIN
1537
				--IF((@AMT_EXE  > @AMT_REMAIN_GD))
1538
				--BEGIN
1539
				--		ROLLBACK TRANSACTION
1540
				--		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
1541
				--		RETURN '-1'
1542
				--END	
1543
				--END
1544
				IF(@p_TYPE_FUNCTION ='SEND')
1545
				BEGIN
1546
				IF(ISNULL(@AMT_EXE,0) =0)
1547
				BEGIN
1548
						ROLLBACK TRANSACTION
1549
						CLOSE XmlDataGood;
1550
						DEALLOCATE XmlDataGood;
1551
						SELECT '-1' as Result, @p_REQ_PAY_ID REQ_PAY_ID,@p_REQ_PAY_CODE  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(NVARCHAR(5),@INDEX_NS)+ N': Ngân sách sử dụng thực tế phải lớn hơn 0.' ErrorDesc
1552
						RETURN '-1'
1553
				END
1554
				--		ROLLBACK TRANSACTION
1555
				--		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
1556
				--		RETURN '-1'
1557
				--END		
1558
			END
1559
				DECLARE @p_BUDGET_ID VARCHAR(15);
1560
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_BUDGET', @p_BUDGET_ID OUT;
1561
				IF @p_BUDGET_ID='' OR @p_BUDGET_ID IS NULL GOTO ABORT;
1562
				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,TYPE_COST , FR_LEVEL  ,TO_LEVEL) 
1563
				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,@TYPE_COST , @FR_LEVEL  ,@TO_LEVEL)
1564
			IF @@error<>0 GOTO ABORT;
1565
			FETCH NEXT FROM XmlDataGood INTO @TRADE_ID,@GD_ID ,@AMT_APP ,@AMT_DO,@AMT_EXE ,@AMT_REMAIN_GD,@CURRENCY,@RATE,@REASON,@TYPE_COST , @FR_LEVEL  ,@TO_LEVEL
1566
			END;
1567
		CLOSE XmlDataGood;
1568
		DEALLOCATE XmlDataGood;
1569
		--- END INSERT NGAN SACH
1570
		DELETE FROM TR_REQ_PAY_ATTACH WHERE REQ_PAY_ID =@p_REQ_PAY_ID
1571
		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), @LICENSE_DT VARCHAR(20)
1572
		DECLARE XmlAttach CURSOR FOR
1573
		SELECT *
1574
		FROM
1575
		OPENXML(@hdocPayAtach, '/Root/XmlAttach',2) 
1576
		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), LICENSE_DT VARCHAR(20))
1577
		OPEN XmlAttach
1578
		--INSERT CHUNG TU DINH KEM
1579
				FETCH NEXT FROM XmlAttach INTO @ATTACH_ID,@CON_ID,@CONT_CODE,@NOTES_ATT,@CON_DESC,@CON_TYPE,@AMT_ATT,@REF_DT, @LICENSE_DT
1580
				WHILE @@fetch_status=0 
1581
				BEGIN
1582
					IF (@REF_DT='')
1583
					BEGIN
1584
						SET @REF_DT = NULL
1585
					END
1586
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_ATTACH', @ATTACH_ID OUT;
1587
					IF @ATTACH_ID='' OR @ATTACH_ID IS NULL GOTO ABORT;
1588
					INSERT INTO TR_REQ_PAY_ATTACH(ATTACH_ID,REQ_PAY_ID,REF_ID,REF_CODE,NOTES,[DESCRIPTION],[TYPE],AMT,REF_DT, LICENSE_DT) VALUES
1589
					(@ATTACH_ID,@p_REQ_PAY_ID,@CON_ID,@CONT_CODE,@NOTES_ATT,@CON_DESC,@CON_TYPE,@AMT_ATT, CONVERT(DATE, @REF_DT,103), CONVERT(DATE, @LICENSE_DT,103))
1590
				IF @@error<>0 GOTO ABORT;
1591
				FETCH NEXT FROM XmlAttach INTO @ATTACH_ID,@CON_ID,@CONT_CODE,@NOTES_ATT,@CON_DESC,@CON_TYPE,@AMT_ATT,@REF_DT, @LICENSE_DT
1592
				END
1593
				CLOSE XmlAttach;
1594
				DEALLOCATE XmlAttach;
1595
		----END
1596
		--- BAT DAU VALIDATE
1597
		IF(@p_TYPE_FUNCTION ='SEND')
1598
		BEGIN
1599
			DECLARE @SUM_PTTT DECIMAL(18,0), @SUM_NS DECIMAL(18,0),@SUM_LICH_TT DECIMAL(18,0)
1600
			SET @SUM_PTTT =(SELECT SUM(TOTAL_AMT * ISNULL(RATE,1)) FROM  TR_REQ_PAY_METHOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
1601
			IF(EXISTS(SELECT * FROM TR_REQ_PAY_SCHEDULE WHERE REQ_PAY_ID =@p_REQ_PAY_ID) AND @p_REQ_TYPE ='D')
1602
			BEGIN
1603
				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)
1604
				IF(@p_REQ_AMT*ISNULL(@p_RATE,1) != ISNULL(@SUM_LICH_TT,0))
1605
				BEGIN
1606
					ROLLBACK TRANSACTION
1607
					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
1608
					RETURN '-1'
1609
				END
1610
			END
1611
			IF(EXISTS(SELECT * FROM TR_REQ_PAY_BUDGET WHERE REQ_PAY_ID =@p_REQ_PAY_ID))
1612
			BEGIN
1613
				SET @SUM_NS =(SELECT SUM(AMT_EXE * ISNULL(RATE,1)) FROM  TR_REQ_PAY_BUDGET WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
1614
				IF(@p_REQ_AMT*ISNULL(@p_RATE,1) != ISNULL(@SUM_NS,0))
1615
				BEGIN
1616
					ROLLBACK TRANSACTION
1617
					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
1618
					RETURN '-1'
1619
				END
1620
			END
1621
			ELSE
1622
			IF(@p_REQ_AMT*ISNULL(@p_RATE,1) != ISNULL(@SUM_PTTT,0))
1623
			BEGIN
1624
				ROLLBACK TRANSACTION
1625
				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
1626
				RETURN '-1'
1627
			END
1628
			
1629
		END
1630
		----END
1631
		IF(@p_REQ_TYPE ='I')
1632
			BEGIN
1633
				DELETE FROM PL_REQUEST_PROCESS WHERE REQ_ID = @p_REQ_PAY_ID
1634
				DECLARE @tmp table(ROLE_ID VARCHAR(25),BRANCH_ID varchar(15),AMT decimal(18,2))
1635
				IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE) ='HS')
1636
				BEGIN
1637
					--DECLARE @DEP_CODE VARCHAR(15)
1638
					--SET @DEP_CODE =(SELECT * FROM CM_DEPARTMENT WHERE DEP_ID =@p_DEP_ID)
1639
					IF EXISTS(SELECT * FROM CM_DEPARTMENT WHERE (DEP_CODE LIKE '%06908%' OR DEP_CODE ='0690605') AND DEP_ID =@p_DEP_ID) --- LUCTV 14.10.22 BO SUNG THEM PHONG BAN
1640
					BEGIN
1641
						-- KHOI TAI CHINH SE KHONG CO PTGD NUA MA CHI CO KDK - LUCTV 29032021
1642
						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'
1643
						--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'
1644
						--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' ORDER BY LIMIT_VALUE ASC
1645
					END
1646
					ELSE IF EXISTS(SELECT * FROM CM_DEPARTMENT WHERE (DEP_CODE LIKE'06906%') AND DEP_ID =@p_DEP_ID) --- DOANPTT 261022 BO SUNG HAN MUC GDK HO TRO
1647
					BEGIN
1648
						-- KHOI HO TRO SE KHONG CO PTGD NUA MA CHI CO KDK - LUCTV 29032021
1649
						INSERT INTO @tmp  SELECT A.ROLE_ID, A.BRANCH_ID, 1000000000 FROM TL_SYSROLE_LIMIT A WHERE A.LIMIT_TYPE='ADV_PAY'AND BRANCH_ID ='DV0001' AND A.ROLE_ID = 'GDK'
1650
						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 ('PTGD', 'GDK')
1651
					END
1652
					ELSE
1653
					BEGIN
1654
						IF EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE ='0690405' AND DEP_ID =@p_DEP_ID)
1655
						BEGIN
1656
								-- KHOI TAI CHINH SE KHONG CO PTGD NUA MA CHI CO KDK - LUCTV 29032021
1657
							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'
1658
							--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'
1659
							--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' ORDER BY LIMIT_VALUE ASC
1660
						END
1661
						ELSE IF EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06910%' AND DEP_ID =@p_DEP_ID)
1662
						BEGIN
1663
							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' ORDER BY LIMIT_VALUE ASC
1664
						END
1665
						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)
1666
						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) 
1667
						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)
1668
						OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%799%' AND DEP_ID =@p_DEP_ID)
1669
						OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%899%' AND DEP_ID =@p_DEP_ID))
1670
						BEGIN
1671
							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') ORDER BY LIMIT_VALUE ASC
1672
						END
1673
						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)
1674
						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) 
1675
						OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06922%' AND DEP_ID =@p_DEP_ID))
1676
						BEGIN
1677
							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' ORDER BY LIMIT_VALUE ASC
1678
						END
1679
						ELSE
1680
						BEGIN
1681
							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' ORDER BY LIMIT_VALUE ASC
1682
						END
1683
					END
1684
					
1685
				END
1686
				ELSE
1687
				BEGIN
1688
					IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE) ='CN')
1689
					BEGIN
1690
							--- BAO GOM DON VI & 3 CAP DUYET CUA HOI SO
1691
							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 AND ROLE_ID ='GDDV' 
1692
							--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'
1693
					END
1694
					ELSE IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE) ='PGD')
1695
					BEGIN
1696
							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 AND ROLE_ID ='TPGD'
1697
							--BRANCH_ID =(SELECT FATHER_ID FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE)
1698
							--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'
1699
					END
1700
				END
1701
				DECLARE @ROLE_ID VARCHAR(20), @BRANCH_ID VARCHAR(20), @INDEX INT =0, @SL_ROLE INT =0,@LIMIT_VALUE DECIMAL(18,0)
1702
				SET @SL_ROLE = (SELECT COUNT(*) FROM @tmp)
1703
				DECLARE @ISLEAF VARCHAR(1) = 'Y', @PARENT_ID VARCHAR(10) = '', @STATUS VARCHAR(1) = 'C', @NOTES NVARCHAR(500)
1704
				DECLARE CUR_PR CURSOR FOR  SELECT A.ROLE_ID, A.BRANCH_ID,A.AMT FROM @tmp A ORDER BY A.AMT ASC
1705
				OPEN CUR_PR
1706
				FETCH NEXT FROM CUR_PR INTO @ROLE_ID,@BRANCH_ID,@LIMIT_VALUE
1707
				WHILE @@FETCH_STATUS =0 --AND @STOP=0
1708
				BEGIN
1709
					-- DOANPTT 261022: DONG NHAT PROCESS GIUA DON VI VA HOI SO
1710
					IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE) ='HS')
1711
					BEGIN
1712
						SET @INDEX= @INDEX+1
1713

    
1714
						IF @INDEX = @SL_ROLE
1715
						SET @ISLEAF = 'Y'
1716
						ELSE
1717
						SET @ISLEAF = 'N'
1718
						SET @NOTES = (SELECT N'Đợi '+ ROLE_DESC + N' phê duyệt' FROM TL_SYSROLE WHERE ROLE_ID = @ROLE_ID)
1719

    
1720
						IF(@INDEX=1 )
1721
						BEGIN		
1722
							SET @PARENT_ID = NULL
1723
							SET @STATUS = 'C'							
1724
						END				
1725
						ELSE 
1726
						BEGIN
1727
							SET @PARENT_ID = CONVERT(VARCHAR(5),@INDEX -1)
1728
							SET @STATUS = 'U'
1729
						END
1730
					END
1731
					ELSE
1732
					BEGIN
1733
						SET @INDEX= 0
1734
						IF @INDEX = @SL_ROLE - 1
1735
						SET @ISLEAF = 'Y'
1736
						ELSE
1737
						SET @ISLEAF = 'N'
1738
						SET @NOTES = (SELECT N'Đợi '+ ROLE_DESC + N' phê duyệt' FROM TL_SYSROLE WHERE ROLE_ID = @ROLE_ID)
1739

    
1740
						IF(@INDEX = 0 )
1741
						BEGIN		
1742
							SET @PARENT_ID = NULL
1743
							SET @STATUS = 'C'							
1744
						END				
1745
						ELSE 
1746
						BEGIN
1747
							SET @PARENT_ID = CONVERT(VARCHAR(5),@INDEX -1)
1748
							SET @STATUS = 'U'
1749
						END
1750
					END
1751
					
1752
					IF(@ROLE_ID = 'TKTGD')
1753
					BEGIN
1754
						SET @INDEX = 3
1755
					END
1756

    
1757
					IF(@LIMIT_VALUE >= @p_REQ_AMT)
1758
					BEGIN
1759
						INSERT INTO dbo.PL_REQUEST_PROCESS(
1760
						REQ_ID,
1761
						PROCESS_ID,
1762
						STATUS,
1763
						ROLE_USER,
1764
						BRANCH_ID,
1765
						CHECKER_ID,
1766
						APPROVE_DT,
1767
						PARENT_PROCESS_ID,
1768
						IS_LEAF, COST_ID, DVDM_ID, NOTES
1769
						)
1770
						VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),@STATUS,@ROLE_ID,@BRANCH_ID,NULL,NULL, @PARENT_ID,'Y', '',@p_DVDM_ID,@NOTES)
1771
						--INSERT INTO PL_REQUEST_PROCESS VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),@STATUS,@ROLE_ID,@BRANCH_ID,NULL,NULL, @PARENT_ID,'Y','')
1772
						IF(@ROLE_ID <> 'TKTGD' AND @ROLE_ID <> 'TKHDQT')
1773
						BEGIN
1774
							BREAK;
1775
						END
1776
					END
1777
					ELSE
1778
					BEGIN
1779
						INSERT INTO PL_REQUEST_PROCESS (
1780
						REQ_ID,
1781
						PROCESS_ID,
1782
						STATUS,
1783
						ROLE_USER,
1784
						BRANCH_ID,
1785
						CHECKER_ID,
1786
						APPROVE_DT,
1787
						PARENT_PROCESS_ID,
1788
						IS_LEAF, COST_ID, DVDM_ID, NOTES
1789
						) 
1790
						VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),@STATUS,@ROLE_ID,@BRANCH_ID,NULL,NULL, @PARENT_ID,@ISLEAF, '', @p_DVDM_ID, @NOTES)
1791
					END
1792
					
1793
					FETCH NEXT FROM CUR_PR INTO @ROLE_ID,@BRANCH_ID,@LIMIT_VALUE
1794
				END
1795
				CLOSE CUR_PR
1796
				DEALLOCATE CUR_PR
1797
			END
1798
COMMIT TRANSACTION
1799
-- BEIGN VALIDATE SEND APPROVE
1800
		IF(@p_TYPE_FUNCTION ='SEND')-- BAT DAU GUI PHE DUYET
1801
		BEGIN
1802
			IF(@p_MAKER_ID <> (SELECT TOP 1 MAKER_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID = @p_REQ_PAY_ID))
1803
			BEGIN
1804
				SELECT '-1' as Result, '' REQ_PAY_ID, N'Gửi phê duyệt thất bại! Bạn không được quyền gửi phê duyệt phiếu đề nghị tạm ứng của người khác tạo'  ErrorDesc
1805
				RETURN '-1'
1806
			END
1807
			IF(NOT EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT where MAKER_ID = @p_MAKER_ID ))
1808
			BEGIN
1809
				SELECT '-1' as Result, '' REQ_PAY_ID, N'Bạn không được phép cập nhật phiếu đề nghị tạm ứng này. Chỉ người tạo phiếu mới được cập nhật phiếu' ErrorDesc
1810
				RETURN '-1'
1811
			END
1812
			IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT where AUTH_STATUS = 'U' AND REQ_PAY_ID = @p_REQ_PAY_ID ))
1813
			BEGIN
1814
				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
1815
				RETURN '-1'
1816
			END
1817
			IF (@p_REQ_PAY_CODE IS NULL OR @p_REQ_PAY_CODE ='')
1818
			BEGIN
1819
				SELECT '-1' Result, '' REQ_PAY_ID, N'Mã số phiếu không được để trống' ErrorDesc
1820
				RETURN '-1'
1821
			END
1822
			IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND AUTH_STATUS <> 'E' AND ISNULL(AUTH_STATUS, '') <> ''))
1823
			BEGIN
1824
				SELECT '-1' Result, '' REQ_PAY_ID, N'Phiếu đề nghị tạm ứng đã được kí xác nhận từ các cấp. Bạn không được quyền chỉnh sửa' ErrorDesc
1825
				RETURN '-1'
1826
			END
1827
			--ROLLBACK TRANSACTION
1828
			-- CAP NHAT TINH TRANG DUYET KE TOAN LA DANG XU LY 
1829
			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')
1830
			BEGIN
1831
				DECLARE @USER_TP VARCHAR(15) =''
1832
				--SET @USER_TP =(SELECT TOP 1 TLNANME FROM TL_USER WHERE SECUR_CODE =@p_DEP_ID 
1833
				--		AND (RoleName IN ('GDDV','TPTC','TC','KTT') OR RoleName IN (SELECT ROLE_OLD FROM TL_SYS_ROLE_MAPPING WHERE ROLE_NEW ='GDDV')))
1834
				IF(@USER_TP IS NULL OR @USER_TP ='')
1835
				BEGIN
1836
					SET @USER_TP = (SELECT TOP 1 TLNANME FROM TL_USER_V2 WHERE SECUR_CODE =@p_DEP_ID 
1837
						AND (RoleName IN ('TBP','PP')))
1838
				END
1839
				--UPDATE TR_REQ_ADVANCE_PAYMENT SET TRASFER_USER_RECIVE =@USER_TP WHERE REQ_PAY_ID =@p_REQ_PAY_ID
1840
			END
1841
			DECLARE @SUM_TEMP_PAY DECIMAL, @SUM_PAY DECIMAL
1842
			IF (@p_REQ_TYPE ='I')
1843
			BEGIN
1844
				SET @SUM_TEMP_PAY = (SELECT SUM(REQ_AMT*ISNULL(RATE,1)) 
1845
				FROM TR_REQ_ADVANCE_PAYMENT WHERE  REF_ID =@p_REF_ID AND AUTH_STATUS ='A' AND  REQ_TYPE ='I')
1846
				SET  @SUM_PAY = (SELECT SUM (ISNULL(PAY_AMT,0)) FROM TR_REQ_ADVANCE_PAYMENT WHERE REF_ID =@p_REF_ID  AND AUTH_STATUS_KT ='A' AND REQ_TYPE ='I')
1847
				UPDATE TR_REQ_ADVANCE_PAYMENT SET REQ_TEMP_AMT =ISNULL(@SUM_TEMP_PAY,0) -ISNULL(@SUM_PAY,0) WHERE REQ_PAY_ID =@p_REQ_PAY_ID
1848
			END
1849
			DECLARE @SUM_THANH_TOAN DECIMAL(18,0) =0, @SUM_PHUONG_THUC DECIMAL(18,0) =0
1850
			SET @SUM_THANH_TOAN =(SELECT ISNULL(SUM(REQ_AMT * ISNULL(RATE,1)),0) FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
1851
			SET @SUM_PHUONG_THUC =(SELECT ISNULL(SUM(TOTAL_AMT * ISNULL(RATE,1)),0) FROM TR_REQ_PAY_METHOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
1852
			IF(ROUND(@SUM_THANH_TOAN,0) <> ROUND(@SUM_PHUONG_THUC,0))
1853
			BEGIN
1854
				SELECT '-1' as Result, '' REQ_PAY_ID, N'Số tiền phương thức thanh toán phải bằng số tiền bạn cần thanh toán là: ' + FORMAT(SUM(@SUM_THANH_TOAN),'#,#', 'vi-VN')  ErrorDesc
1855
				RETURN '-1'
1856
			END
1857
			IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE TRASFER_USER_RECIVE <>'' AND TRASFER_USER_RECIVE IS NOT NULL AND REQ_PAY_ID =@p_REQ_PAY_ID) AND @BRANCH_TYPE_CR ='PGD' AND @p_REQ_TYPE <>'I')
1858
			BEGIN
1859
				SELECT '-1' as Result, '' REQ_PAY_ID, N'Ở cấp độ phòng giao dịch. Vui lòng không được chọn cấp phê duyệt trung gian' ErrorDesc
1860
				RETURN '-1'
1861
			END
1862

    
1863
				
1864
			--IF(NOT EXISTS(SELECT * FROM TR_REQ_PAY_BUDGET WHERE REQ_PAY_ID  =@p_REQ_PAY_ID AND @p_REQ_TYPE='P' AND (@p_IS_PERIOD IS NULL OR @p_IS_PERIOD ='' OR @p_IS_PERIOD ='N')))
1865
			--BEGIN
1866
			--	SELECT '-1' as Result, '' REQ_PAY_ID, N'Thông tin hạng mục ngân sách và chi phí không được để trống. Vui lòng chọn ngân sách và chi phí' ErrorDesc
1867
			--	RETURN '-1'
1868
			--END
1869
			UPDATE TR_REQ_ADVANCE_PAYMENT SET AUTH_STATUS ='U',CREATE_DT = GETDATE() WHERE REQ_PAY_ID =@p_REQ_PAY_ID
1870
			UPDATE PL_REQUEST_PROCESS SET ROLE_USER ='GDDV' WHERE REQ_ID =@p_REQ_PAY_ID AND ROLE_USER ='PGD'
1871
			UPDATE PL_REQUEST_PROCESS SET ROLE_USER ='TPGD' WHERE REQ_ID =@p_REQ_PAY_ID AND ROLE_USER ='PPGD'
1872
			INSERT INTO dbo.PL_PROCESS(REQ_ID,PROCESS_ID,CHECKER_ID,APPROVE_DT,PROCESS_DESC,NOTES)
1873
			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')
1874
			IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE (TRASFER_USER_RECIVE <> '' AND TRASFER_USER_RECIVE IS NOT NULL) AND REQ_PAY_ID =@p_REQ_PAY_ID))
1875
			BEGIN
1876
				SELECT '4' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, N'Đơn vị gửi phiếu phê duyệt phiếu đề nghị tạm ứng số: ' + ISNULL(@p_REQ_PAY_CODE,'') + N' thành công. Vui lòng đợi cấp phê duyệt trung gian xác nhận phiếu' ErrorDesc
1877
				RETURN '4'
1878
			END
1879
			ELSE
1880
			BEGIN
1881
				SELECT '4' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, N'Đơn vị gửi phiếu phê duyệt phiếu đề nghị tạm ứng số: ' + ISNULL(@p_REQ_PAY_CODE,'') + N' thành công. Vui lòng đợi trưởng đơn vị phê duyệt phiếu' ErrorDesc
1882
				RETURN '4'
1883
			END
1884
			--SELECT '4' as Result, @p_REQ_PAY_ID AS REQ_PAY_ID, N'Gửi phê duyệt thành công' ErrorDesc
1885
			--RETURN '4'
1886
		END
1887
		-- FIX PHONG HO LOI LIEN QUAN DEN VIEC TAI KHOAN TAM UNG BI SAI
1888
		----DECLARE  @REQ_PAY_ID varchar(15), @l_REF_ID varchar(15)
1889
		----DECLARE cursorProduct CURSOR LOCAL FOR
1890
		----SELECT REQ_PAY_ID,REF_ID FROM TR_REQ_ADVANCE_PAYMENT A WHERE A.REQ_TYPE ='I'
1891
		----Open cursorProduct
1892
		----FETCH NEXT FROM cursorProduct INTO @REQ_PAY_ID, @l_REF_ID
1893
		----WHILE @@FETCH_STATUS = 0
1894
		----BEGIN
1895
		----   UPDATE TR_REQ_ADVANCE_PAYMENT SET RECEIVER_DEBIT =(SELECT TOP 1 ISNULL(ACC_NUM,'') FROM CM_ACCOUNT_PAY WHERE REF_ID =@l_REF_ID AND ACC_TYPE ='ADV_PAY' ) WHERE REQ_PAY_ID =@REQ_PAY_ID
1896
		----FETCH NEXT FROM cursorProduct INTO  @REQ_PAY_ID, @l_REF_ID
1897
		----END
1898
-- END VALIDATE SEND APPROVE
1899

    
1900
	SELECT '0' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, '' ErrorDesc
1901
	RETURN '0'
1902
ABORT:
1903
BEGIN
1904
		ROLLBACK TRANSACTION
1905
		SELECT '-1' as Result, '' REQ_PAY_ID, '' ErrorDesc
1906
		RETURN '-1'
1907
End