Project

General

Profile

1.0 HOAN TAT CHU TRUONG 0008 2021 TTR 0692103.txt

Luc Tran Van, 03/12/2021 08:45 AM

 
1
DECLARE @REQ_ID VARCHAR(15)
2
SET @REQ_ID =(SELECT REQ_ID FROM PL_REQUEST_DOC WHERE REQ_CODE ='0008/2021/TTr-0692103')
3
SELECT * FROM PL_REQUEST_PROCESS WHERE REQ_ID =@REQ_ID
4
DELETE FROM PL_REQUEST_PROCESS WHERE REQ_ID =@REQ_ID AND PROCESS_ID ='TGD'
5
UPDATE PL_REQUEST_PROCESS SET PARENT_PROCESS_ID ='PTGDK_TT', STATUS='C'  WHERE PROCESS_ID ='APPROVE' AND REQ_ID =@REQ_ID
6
UPDATE PL_REQUEST_DOC SET PROCESS_ID ='APPROVE' WHERE REQ_ID =@REQ_ID
7
----
8
EXEC PL_REQ_DOC_UPDATE_AFTER_APPROVE @REQ_ID
9
EXEC PL_REQ_DOC_Ins_To_TR_REQ_DOC @REQ_ID
10
UPDATE TR_REQ_ADVANCE_PAYMENT SET REQ_TEMP_AMT =25000000 WHERE REQ_PAY_CODE ='NBO.2021.000128'
11
¿
12
ALTER PROCEDURE [dbo].[TR_REQ_ADVANCE_PAYMENT_Ins]
13
@p_REQ_PAY_ID	varchar(15)= NULL,
14
@p_REQ_PAY_CODE	varchar(50)	= NULL,
15
@p_REQ_DT VARCHAR(10)= NULL,
16
@p_BRANCH_ID	varchar(15)	= NULL,
17
@p_DEP_ID	varchar(15)	= NULL,
18
@p_REQ_REASON	nvarchar(MAX)	= NULL,
19
@p_REQ_TYPE	varchar(15)	= NULL,
20
@P_REQ_ENTRIES nvarchar(MAX)	= NULL,
21
@p_REQ_DESCRIPTION	nvarchar(MAX)	= NULL,
22
@p_REF_ID	varchar(15)	= NULL,
23
@p_RECEIVER_PO	nvarchar(250)	= NULL,
24
@p_RECEIVER_DEBIT	nvarchar(250)	= NULL,
25
@p_REQ_PAY_TYPE	varchar(15)	= NULL,
26
@p_REQ_TYPE_CURRENCY	nvarchar(50)	= NULL,
27
@p_REQ_AMT	decimal(18, 0)	= NULL,
28
@p_REQ_TEMP_AMT	decimal(18, 0)	= NULL,
29
@p_MAKER_ID	varchar(15)	= NULL,
30
@p_CREATE_DT	varchar(25)	= NULL,
31
@p_EDITOR_ID	varchar(15)	= NULL,
32
@p_AUTH_STATUS	varchar(1)	= NULL,
33
@p_CHECKER_ID	varchar(15)	= NULL,
34
@p_APPROVE_DT	varchar(25)	= NULL,
35
@p_CREATE_DT_KT	varchar(25)	= NULL,
36
@p_MAKER_ID_KT	varchar(15)	= NULL,
37
@p_AUTH_STATUS_KT	varchar(1)	= NULL,
38
@p_CHECKER_ID_KT	varchar(1)	= NULL,
39
@p_APPROVE_DT_KT  varchar(25)= null,
40
@p_CONFIRM_NOTE	nvarchar(500)	= NULL,
41
@p_BRANCH_CREATE	varchar(15)	= NULL,
42
@p_NOTES	varchar(15)	= NULL,
43
@p_RECORD_STATUS	varchar(1)	= NULL,
44
@p_TRANSFER_MAKER	nvarchar(50)	= NULL,
45
@p_TRANSFER_DT	varchar(25)	= NULL,
46
@p_TRASFER_USER_RECIVE	varchar(15)	= NULL,
47
@p_PROCESS	varchar(15)	= NULL,
48
@p_PAY_PHASE VARCHAR(15)= NULL,
49
@p_DVDM_ID VARCHAR(15) = NULL,
50
@p_RATE DECIMAL(18,0)= NULL,
51
@p_RECIVER_MONEY VARCHAR(15) = NULL,
52
@p_IS_PERIOD VARCHAR(5) = NULL,
53
@p_TYPE_FUNCTION VARCHAR(15) = NULL,
54
@p_XMP_TEMP XML = NULL
55
AS
56
--Validation is here
57
/*
58
DECLARE @ERRORSYS NVARCHAR(15) = '' 
59
  IF ( NOT EXISTS ( SELECT * FROM ASS_COLLECT WHERE ))
60
	 SET @ERRORSYS = ''
61
IF @ERRORSYS <> '' 
62
BEGIN
63
	SELECT ErrorCode Result, ''  CAR_ID, ErrorDesc ErrorDesc FROM SYS_ERROR WHERE ErrorCode = @ERRORSYS
64
	RETURN '0'
65
END 
66
*/
67
	--DECLARE @ERRORSYS NVARCHAR(15) = '' 
68
	--IF EXISTS(SELECT * FROM TR_PO_MASTER WHERE REF_ID  = @p_REF_ID )
69
	--BEGIN
70
	--	SET @ERRORSYS = 'ASSC-00005'
71
	--	SELECT ErrorCode Result, '' COLLECT_ID, ErrorDesc ErrorDesc FROM SYS_ERROR WHERE ErrorCode = @ERRORSYS
72
	--	RETURN '0'
73
	--END
74
	IF(@p_REQ_TYPE ='I')
75
	BEGIN
76
		DECLARE @AMT_AD_PAY DECIMAL(18,0) =0
77
		DECLARE @AMT_AD_PAY_BACK DECIMAL(18,0) =0
78
		DECLARE @AMT_AD_PAY_REMAIN DECIMAL(18,0) =0
79
		SET @AMT_AD_PAY = (SELECT SUM(REQ_AMT*ISNULL(RATE,1)) FROM TR_REQ_ADVANCE_PAYMENT WHERE REF_ID=@p_MAKER_ID AND AUTH_STATUS_KT='A' AND REQ_TYPE ='I')
80
		SET @AMT_AD_PAY_BACK = (SELECT SUM(D.AMT_USE) +SUM(D.AMT_REVERT) - SUM (D.AMT_ADD)
81
					FROM TR_REQ_PAYMENT_DT D
82
					LEFT JOIN TR_REQ_ADVANCE_PAYMENT X ON D.PAY_ADV_ID = X.REQ_PAY_ID  AND D.AUTH_STATUS_KT ='A'
83
					WHERE X.REF_ID =@p_REF_ID)
84
	 SET @AMT_AD_PAY_REMAIN =ISNULL(@AMT_AD_PAY,0) -ISNULL(@AMT_AD_PAY_BACK,0)
85
	 SET @p_REQ_TEMP_AMT =ISNULL(@AMT_AD_PAY_REMAIN,0)
86
	 END
87
BEGIN TRANSACTION
88
	-- LUCTV 17H51 BO SUNG LAY SO TIEN DA TAM UNG CUA NHAN VIEN --
89
		--SET @AMT_DO =(SELECT * FROM [dbo].TR_RE)
90
	--THIEUVQ 281119---
91
		DECLARE @REC_DEBIT_AUTO VARCHAR(15),@ROLE_KI_NHAY VARCHAR(50)
92
		SET @REC_DEBIT_AUTO =(SELECT TOP 1 ACC_NUM FROM CM_ACCOUNT_PAY WHERE REF_ID = @p_REF_ID)
93
		--IF (@p_REQ_TYPE='I')
94
		--BEGIN
95
		--	--SET @p_REF_ID = @p_MAKER_ID
96
		--	--IF(NOT EXISTS(SELECT * FROM CM_ACCOUNT_PAY WHERE ACC_NUM = @p_RECEIVER_DEBIT))
97
		--	--BEGIN
98
		--	--	SET @p_RECEIVER_DEBIT = @p_RECEIVER_DEBIT+''
99
		--	--END
100
		--	--ELSE
101
		--	--BEGIN
102
		--	--	IF(EXISTS(SELECT * FROM CM_ACCOUNT_PAY WHERE ACC_NUM = @p_RECEIVER_DEBIT AND REF_ID != @p_REF_ID ) AND @p_TYPE_FUNCTION ='SEND')
103
		--	--	BEGIN
104
		--	--		SET @p_RECEIVER_DEBIT =(SELECT ACC_NUM FROM CM_ACCOUNT_PAY WHERE ACC_NUM = @p_RECEIVER_DEBIT)
105
		--	--	END
106
		--	--END
107
		--	IF(@p_RECEIVER_DEBIT IS NOT NULL AND @p_RECEIVER_DEBIT <>'')
108
		--	BEGIN
109
		--		IF(@REC_DEBIT_AUTO IS NOT NULL AND @REC_DEBIT_AUTO <>''  AND @REC_DEBIT_AUTO <> @p_RECEIVER_DEBIT)
110
		--		BEGIN
111
		--			SET @p_RECEIVER_DEBIT =@REC_DEBIT_AUTO
112
		--		END
113
		--		--IF(EXISTS(SELECT * FROM CM_ACCOUNT_PAY WHERE REF_ID <> @p_REF_ID AND ACC_NUM =@p_RECEIVER_DEBIT))
114
		--		--BEGIN
115
		--		--	ROLLBACK TRANSACTION
116
		--		--	SELECT '-1' Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Tài khoản tạm ứng này đã tồn tại và thuộc về nhân viên khác' ErrorDesc
117
		--		--	RETURN '-1'
118
		--		--END
119
		--	END
120
		--	ELSE
121
		--	BEGIN
122
		--		SET @p_RECEIVER_DEBIT =(SELECT TOP 1 ACC_NUM FROM CM_ACCOUNT_PAY WHERE REF_ID =@p_REF_ID) 
123
		--	END
124

    
125
		--END
126
		EXEC [dbo].[ADVANCE_CODE_GenKey] 'TR_REQ_ADVANCE_PAYMENT', '',@p_REQ_TYPE, @p_REQ_PAY_CODE out
127
	--END--
128
		IF @p_REQ_PAY_CODE IS NULL OR @p_REQ_PAY_CODE =''
129
		BEGIN
130
			ROLLBACK TRANSACTION
131
			SELECT '-1' Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Mã số phiếu không được để trống' ErrorDesc
132
			RETURN '-1'
133
		END
134
		IF (@p_REQ_TYPE='I' AND (@p_RECEIVER_DEBIT IS NULL OR @p_RECEIVER_DEBIT ='') AND @p_TYPE_FUNCTION ='SEND')
135
		BEGIN
136
			ROLLBACK TRANSACTION
137
			SELECT '-1' Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Tài khoản nhân viên tạm ứng không được để trống' ErrorDesc
138
			RETURN '-1'
139
		END
140
		IF EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_CODE  = @p_REQ_PAY_CODE )
141
		BEGIN
142
			ROLLBACK TRANSACTION
143
			SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Số phiếu tạm ứng đã tồn tại trong hệ thống' ErrorDesc
144
			RETURN '-1'
145
		END
146
		IF(LEN(ISNULL(@p_RECEIVER_DEBIT,''))>15 AND @p_REQ_TYPE ='I')
147
		BEGIN
148
				ROLLBACK TRANSACTION
149
				SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Tài khoản tạm ứng này không được vượt quá 15 kí tự' ErrorDesc
150
				RETURN '-1'
151
		END
152
		-- START 19-11-2019
153
		-- LUCTV BO SUNG VALIDATE TRONG QUA TRINH TEST SAU UAT- KIEM TRA NEU DOT THANH TOAN CHUA CO THI KHONG DUOC THEM MOI
154
		--IF(@p_REQ_TYPE='P' AND (@p_PAY_PHASE IS NULL OR @p_PAY_PHASE =''))
155
		--BEGIN
156
		--	ROLLBACK TRANSACTION
157
		--	SELECT '-1' as Result, '' REQ_PAY_ID, N'Đợt thanh toán không được phép để trống' ErrorDesc
158
		--	RETURN '-1'
159
		--END
160
		---- NEU THANH TOAN XU LY NO THI NHAN VIEN NHAN TIEN TAM UNG KHONG DUOC PHEP TRONG
161
		--IF(@p_REQ_TYPE='D' AND (@p_RECEIVER_DEBIT IS NULL OR @p_RECEIVER_DEBIT =''))
162
		--BEGIN
163
		--	ROLLBACK TRANSACTION
164
		--	SELECT '-1' as Result, '' REQ_PAY_ID, N'Nhân viên nhận tạm ứng không được phép để trống' ErrorDesc
165
		--	RETURN '-1'
166
		--END
167
		-- SO TIEN THANH TOÁN PHAI LON HON KHONG
168
		IF(@p_REQ_AMT <=0)
169
		BEGIN
170
			ROLLBACK TRANSACTION
171
			SELECT '-1' as Result, '' REQ_PAY_ID,'' AS REQ_PAY_CODE, N'Số tiền tạm ứng phải lớn hơn 0' ErrorDesc
172
			RETURN '-1'
173
		END
174
		-----
175
		---- KIEM TRA NEU CHUA CHON KHOI PHE DUYET THI TU DONG CHUYEN VÊ KHOI TAI CHINH
176
		--IF(@p_DVDM_ID IS NULL OR @p_DVDM_ID ='')
177
		--BEGIN
178
		--	SET @p_DVDM_ID = (SELECT TOP 1 DVDM_ID FROM CM_DVDM WHERE DVDM_NAME ='KHOI TAI CHINH')
179
		--END
180
		--
181
		--KIEM TRA NEU TAI KHOAN NHAN VIEN TAM UNG NEU CHUA TON TAI TRONG HE THONG THI BAO LOI
182
		--IF(NOT EXISTS(SELECT * FROM CM_ACCOUNT_PAY WHERE REF_ID =@p_REF_ID) AND @p_REQ_TYPE='I')
183
		--BEGIN
184
		--	INSERT INTO CM_ACCOUNT_PAY (REF_ID,ACC_TYPE,ACC_NUM,ACC_NAME,FUNTION,MAKER_ID,AUTH_STATUS,CREATE_DT,TK_GL,TK_GL_NAME) VALUES (@p_REF_ID,'ADV_PAY',@p_RECEIVER_DEBIT,'TK TAM UNG CUA NHAN VIEN ' +@p_REF_ID,'I',@p_MAKER_ID,'U',GETDATE(),'361200001','TAM UNG DE HOAT DONG NGHIEP VU')
185
		--END
186
		--ELSE
187
		--BEGIN
188
		--	IF(((SELECT TOP 1 ACC_NUM FROM CM_ACCOUNT_PAY WHERE REF_ID =@p_REF_ID)<>@p_RECEIVER_DEBIT) AND @p_REQ_TYPE='I')
189
		--	BEGIN
190
		--		ROLLBACK TRANSACTION
191
		--		SELECT '-1' as Result, '' REQ_PAY_ID, '' AS REQ_PAY_CODE, N'Tài khoản tạm ứng của nhân viên đã tồn tại trong hệ thống! Bạn không được phép chỉnh sửa' ErrorDesc
192
		--		RETURN '-1'
193
		--	END
194
		--END
195
		
196
		--SET @ROLE_KI_NHAY =(SELECT RoleName FROM TL_USER_V2 WHERE TLNANME =@p_TRASFER_USER_RECIVE)
197
		--IF(@ROLE_KI_NHAY IS NOT NULL AND @ROLE_KI_NHAY <> '' AND @ROLE_KI_NHAY IN ('TP','GDDV','KTT','TPTC','TC'))
198
		--BEGIN
199
		--	ROLLBACK TRANSACTION
200
		--	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
201
		--	RETURN '-1'
202
		--END
203
		--DECLARE @ROLE_KI_NHAY VARCHAR(50)
204
		IF(NOT EXISTS(SELECT * FROM CM_ACCOUNT_PAY WHERE ACC_NUM =@p_RECEIVER_DEBIT AND REF_ID =  @p_REF_ID) AND @p_REQ_TYPE='I')
205
		BEGIN
206
				ROLLBACK TRANSACTION
207
				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
208
				RETURN '-1'
209
		END
210
		SET  @ROLE_KI_NHAY =(SELECT TOP 1 RoleName FROM TL_USER WHERE TLNANME =@p_TRASFER_USER_RECIVE)
211
		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'))
212
		BEGIN
213
		PRINT @ROLE_KI_NHAY
214
		END
215
		ELSE
216
		BEGIN
217
		SET @ROLE_KI_NHAY =(SELECT TOP 1 RoleName FROM TL_USER_V2 WHERE TLNANME =@p_TRASFER_USER_RECIVE)
218
		IF(@ROLE_KI_NHAY IS NULL OR @ROLE_KI_NHAY ='')
219
		BEGIN
220
				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))
221
		END
222
		END
223
		--SET @ROLE_KI_NHAY =(SELECT RoleName FROM TL_USER_V2 WHERE TLNANME =@p_TRASFER_USER_RECIVE)
224
		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')
225
		BEGIN
226
			ROLLBACK TRANSACTION
227
			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
228
			RETURN '-1'
229
		END
230
		EXEC SYS_CodeMasters_Gen 'TR_REQ_ADVANCE_PAMENT', @p_REQ_PAY_ID out
231
		IF @p_REQ_PAY_ID='' OR @p_REQ_PAY_ID IS NULL GOTO ABORT
232
		INSERT INTO [dbo].[TR_REQ_ADVANCE_PAYMENT]
233
           ([REQ_PAY_ID]
234
           ,[REQ_PAY_CODE]
235
           ,[BRANCH_ID],[REQ_DT],
236
           [DEP_ID]
237
           ,[REQ_REASON]
238
           ,[REQ_TYPE],REQ_ENTRIES,
239
            [REQ_DESCRIPTION]
240
           ,REF_ID,
241
			RECEIVER_PO, RECEIVER_DEBIT
242
           ,[REQ_PAY_TYPE]
243
           ,[REQ_TYPE_CURRENCY]
244
           ,[REQ_AMT]
245
           ,[REQ_TEMP_AMT]
246
           ,[MAKER_ID]
247
           ,[CREATE_DT]
248
           ,[EDITOR_ID]
249
           ,[AUTH_STATUS]
250
           ,[CHECKER_ID]
251
           ,[APPROVE_DT]
252
           ,[CREATE_DT_KT]
253
           ,[MAKER_ID_KT]
254
           ,[AUTH_STATUS_KT]
255
           ,[CHECKER_ID_KT]
256
		   ,[APPROVE_DT_KT]
257
           ,[CONFIRM_NOTES]
258
           ,[BRANCH_CREATE]
259
           ,[NOTES],RECORD_STATUS,TRANSFER_MAKER,TRANSFER_DT,TRASFER_USER_RECIVE,PROCESS,PAY_PHASE,DVDM_ID,RATE,RECIVER_MONEY,IS_PERIOD)
260
			VALUES
261
           (@p_REQ_PAY_ID,
262
			@p_REQ_PAY_CODE,
263
			@p_BRANCH_ID,CONVERT(DATE,GETDATE(),103),
264
			@p_DEP_ID,
265
			@p_REQ_REASON,
266
			@p_REQ_TYPE,
267
			@P_REQ_ENTRIES,
268
			@p_REQ_DESCRIPTION,
269
			@p_REF_ID,
270
			@p_RECEIVER_PO,
271
			@p_RECEIVER_DEBIT,
272
			@p_REQ_PAY_TYPE,
273
			@p_REQ_TYPE_CURRENCY,
274
			@p_REQ_AMT,
275
			@p_REQ_TEMP_AMT,
276
			@p_MAKER_ID,
277
			GETDATE(),
278
			@p_EDITOR_ID,
279
			'E',
280
			NULL,
281
			NULL,
282
			NULL,
283
			NULL,
284
			NULL,
285
			NULL,
286
			NULL,
287
			NULL,
288
			@p_BRANCH_CREATE,
289
			@p_NOTES,'1',
290
			@p_TRANSFER_MAKER,
291
			NULL,
292
			@p_TRASFER_USER_RECIVE,
293
			@p_PROCESS,@p_PAY_PHASE,@p_DVDM_ID,@p_RATE,@p_RECIVER_MONEY,@p_IS_PERIOD)
294
			IF @@Error <> 0 GOTO ABORT
295
		--- INSERT VÀO BẢNG DETAIL NÊU TẠM ỨNG LÀ TẠM ỨNG THANH TOÁN
296
			DECLARE @hdoc INT
297
			EXEC sp_xml_preparedocument @hdoc OUTPUT, @p_XMP_TEMP;
298
			
299
			-- KIEM TRA NEU TAM UNG THANH TOAN
300
			IF((@p_REQ_TYPE='P' AND (@p_IS_PERIOD <>'Y' OR @p_IS_PERIOD IS NULL)) OR @p_REQ_TYPE='D')
301
			BEGIN
302
				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),
303
				@AMT_REMAIN_SCHEDULE decimal(18,0),@REQ_AD_DT varchar(20),@PROCESS varchar(15),@PAY_ID VARCHAR(15),
304
				@REF_ID VARCHAR(15),@REQ_PAY_DESC NVARCHAR(500), @REQ_PAY_ENTRIES NVARCHAR(250),@CURRENCY VARCHAR(15),@RATE DECIMAL(18,0),@CUST_ID VARCHAR(15), @EMP_ID VARCHAR(15),
305
				@AMT_PAY_REAL DECIMAL(18,2), @IS_CLOSED VARCHAR(1)= NULL,@INDEX_NS INT =0,@REASON NVARCHAR(1000), @REF_TYPE VARCHAR(15)
306
				DECLARE @TYPE_COST VARCHAR(5) , @FR_LEVEL INT  ,@TO_LEVEL INT
307
				DECLARE XmlDataPO CURSOR FOR
308
				SELECT *
309
				FROM
310
				OPENXML(@hdoc, '/Root/XmlDataPO', 2)
311
				WITH(REF_ID varchar(15),IS_CLOSED VARCHAR(1),REF_TYPE VARCHAR(15))
312
				OPEN XmlDataPO;
313
				DECLARE @INDEX_PO INT =0
314
				SET @INDEX_PO = 0
315
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
316
				WHILE @@fetch_status=0 
317
				BEGIN
318
					SET @INDEX_PO = @INDEX_PO +1
319
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
320
					--IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND REQ_PAY_ID IN (SELECT REQ_PAY_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS_KT<>'A' OR AUTH_STATUS_KT IS NULL) AND REQ_PAY_ID <>@p_REQ_PAY_ID))
321
					--BEGIN
322
					--	ROLLBACK TRANSACTION
323
					--	SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO/ hợp đồng số '+(SELECT PO_CODE FROM TR_PO_MASTER WHERE PO_ID = @REF_ID)+N' đang được tạm ứng. Vui lòng đợi giao dịch hoàn tất' ErrorDesc
324
					--	RETURN '-1'
325
					--END
326
					---- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
327
					--IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND REQ_PAY_ID IN (SELECT REQ_PAY_ID FROM TR_REQ_PAYMENT WHERE AUTH_STATUS_KT<>'A' OR AUTH_STATUS_KT IS NULL)))
328
					--BEGIN
329
					--	ROLLBACK TRANSACTION
330
					--	SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO/ hợp đồng số '+(SELECT PO_CODE FROM TR_PO_MASTER WHERE PO_ID = @REF_ID)+N' đang được thanh toán. Vui lòng đợi giao dịch hoàn tất' ErrorDesc
331
					--	RETURN '-1'
332
					--END
333
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
334
					-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
335
					IF(@p_TYPE_FUNCTION ='SEND')
336
					BEGIN
337
							
338
				
339
					IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND TYPE ='C' AND REQ_PAY_ID 
340
					IN (SELECT REQ_PAY_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS_KT<>'A' OR AUTH_STATUS_KT IS NULL)))
341
					BEGIN
342
						ROLLBACK TRANSACTION
343
						SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': Hợp đồng số '+
344
						(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
345
						RETURN '-1'
346
					END
347
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
348
					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))
349
					BEGIN
350
						ROLLBACK TRANSACTION
351
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': Hợp đồng số '+
352
						(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
353
						RETURN '-1'
354
					END
355
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
356
					IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND TYPE ='P' AND REQ_PAY_ID 
357
					IN (SELECT REQ_PAY_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS_KT<>'A' OR AUTH_STATUS_KT IS NULL)))
358
					BEGIN
359
						ROLLBACK TRANSACTION
360
						SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO số '+
361
						(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
362
						RETURN '-1'
363
					END
364
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
365
					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))
366
					BEGIN
367
						ROLLBACK TRANSACTION
368
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO số '+
369
						(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
370
						RETURN '-1'
371
					END
372
					END
373
					DECLARE @REQ_PAYDTID VARCHAR(15);
374
					EXEC SYS_CodeMasters_Gen 'TR_REQ_ADVANCE_DT', @REQ_PAYDTID OUT;
375
					IF @REQ_PAYDTID='' OR @REQ_PAYDTID IS NULL GOTO ABORT;
376
					INSERT INTO TR_REQ_ADVANCE_DT (REQ_PAYDTID,REQ_PAY_ID,REF_ID,TYPE,MAKER_ID,CREATE_DT,IS_CLOSED,REF_TYPE) VALUES
377
					(@REQ_PAYDTID,@p_REQ_PAY_ID,@REF_ID,'ADV_PAY',@p_MAKER_ID,GETDATE(),@IS_CLOSED,@REF_TYPE)
378
				IF @@error<>0 GOTO ABORT;
379
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
380
				END
381
				CLOSE XmlDataPO;
382
				DEALLOCATE XmlDataPO;
383
				--- CUSOR DANH SACH LICH THANH TOAN PO - HD	
384
				DECLARE XmlDataSchedule CURSOR FOR
385
				SELECT *
386
				FROM
387
				OPENXML(@hdoc, 'Root/XmlDataSchedule',2)
388
				WITH(PO_ID varchar(15),TERM_PAY varchar(15),AMT_PAY_SCHEDULE decimal(18,0),REQ_ADV_ID varchar(15),AMT_ADVANCE_SCHEDULE decimal(18,0), AMT_PAY_DO decimal(18,0),
389
				AMT_REMAIN_SCHEDULE decimal(18,0),REQ_AD_DT varchar(20),PROCESS varchar(15), PAY_ID VARCHAR(15),REF_ID VARCHAR(15),
390
				REQ_PAY_DESC NVARCHAR(500), REQ_PAY_ENTRIES NVARCHAR(250),CURRENCY VARCHAR(15),RATE DECIMAL(18,0),AMT_PAY_REAL DECIMAL(18,2))
391
				OPEN XmlDataSchedule
392
				FETCH NEXT FROM XmlDataSchedule INTO @PO_ID,@TERM_PAY,@AMT_PAY_SCHEDULE,@REQ_ADV_ID_SCHE,@AMT_ADVANCE_SCHEDULE,@AMT_PAY_DO,
393
				@AMT_REMAIN_SCHEDULE,@REQ_AD_DT,@PROCESS,@PAY_ID,@REF_ID,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@CURRENCY,@RATE,@AMT_PAY_REAL
394
				WHILE @@fetch_status=0 
395
				BEGIN
396
					DECLARE @p_REQ_PAY_SCHEDULE_ID VARCHAR(15);
397
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_SCHEDULE', @p_REQ_PAY_SCHEDULE_ID OUT;
398
					IF @p_REQ_PAY_SCHEDULE_ID='' OR @p_REQ_PAY_SCHEDULE_ID IS NULL GOTO ABORT;
399
					INSERT INTO TR_REQ_PAY_SCHEDULE(
400
					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,
401
					CREATE_DT,AUTH_STATUS_KT,PAYMENT_STATUS,TRN_TYPE,REF_ID,REQ_PAY_DESC,REQ_PAY_ENTRIES,CURRENCY,RATE,AMT_PAY_REAL)
402
					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,
403
					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)
404
				--- END KHAI BAO CURSOR
405
				IF @@error<>0 GOTO ABORT;
406
				FETCH NEXT FROM XmlDataSchedule INTO @PO_ID,@TERM_PAY,@AMT_PAY_SCHEDULE,@REQ_ADV_ID_SCHE,@AMT_ADVANCE_SCHEDULE,@AMT_PAY_DO,
407
				@AMT_REMAIN_SCHEDULE,@REQ_AD_DT,@PROCESS,@PAY_ID,@REF_ID,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@CURRENCY,@RATE,@AMT_PAY_REAL
408
				END
409
				CLOSE XmlDataSchedule;
410
				DEALLOCATE XmlDataSchedule;
411
			END
412
		--- END TẠM ỨNG THANH TOÁN
413
		--- TẠM ỨNG HĐ ĐỊNH KỲ
414
		IF(@p_REQ_TYPE = 'P' AND @p_IS_PERIOD='Y')
415
		BEGIN
416
				
417
				DECLARE XmlDataPO CURSOR FOR
418
				SELECT *
419
				FROM
420
				OPENXML(@hdoc, '/Root/XmlDataPO', 2)
421
				WITH(REF_ID varchar(15),IS_CLOSED VARCHAR(1),REF_TYPE VARCHAR(15))
422
				OPEN XmlDataPO;
423
				SET @INDEX_PO = 0
424
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
425
				WHILE @@fetch_status=0 
426
				BEGIN
427
					SET @INDEX_PO = @INDEX_PO +1
428
					DECLARE @REQ_PAYDTID_C VARCHAR(15);
429
					EXEC SYS_CodeMasters_Gen 'TR_REQ_ADVANCE_DT', @REQ_PAYDTID_C OUT;
430
					IF @REQ_PAYDTID_C='' OR @REQ_PAYDTID_C IS NULL GOTO ABORT;
431
					INSERT INTO TR_REQ_ADVANCE_DT (REQ_PAYDTID,REQ_PAY_ID,REF_ID,TYPE,MAKER_ID,CREATE_DT,IS_CLOSED,REF_TYPE) VALUES
432
					(@REQ_PAYDTID_C,@p_REQ_PAY_ID,@REF_ID,'ADV_PAY',@p_MAKER_ID,GETDATE(),@IS_CLOSED,@REF_TYPE)
433
				IF @@error<>0 GOTO ABORT;
434
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
435
				END
436
				CLOSE XmlDataPO;
437
				DEALLOCATE XmlDataPO;
438
				--- CUSOR DANH SACH LICH THANH TOAN PO - HD	
439
			----------------------------
440
			--INSERT FROM PERIOD	
441
				DECLARE XmlDataPeriod CURSOR FOR
442
				SELECT *
443
				FROM
444
				OPENXML(@hdoc, '/Root/XmlDataPeriod', 2)
445
				WITH(CONTRACT_ID varchar(15),PAY_DT_REAL VARCHAR(20),PAY_TYPE VARCHAR(5),
446
				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))
447
				OPEN XmlDataPeriod;
448
				DECLARE @CONTRACT_ID varchar(15),@PAY_DT_REAL VARCHAR(20),@PAY_TYPE VARCHAR(5),
449
				@OLD_INDEX DECIMAL(18,0),@NEW_INDEX DECIMAL(18,0),@AMT_PAY_PERIOD DECIMAL(18,2),@FROM_DATE VARCHAR(20),@TO_DATE VARCHAR(20),@PAY_PHASE NVARCHAR(250),@REASON_TTDK NVARCHAR(2000)
450
				FETCH NEXT FROM XmlDataPeriod INTO @CONTRACT_ID ,@PAY_DT_REAL ,@PAY_TYPE ,
451
				@OLD_INDEX ,@NEW_INDEX ,@AMT_PAY_PERIOD,@CURRENCY, @RATE,@FROM_DATE,@TO_DATE,@PAY_PHASE,@REASON_TTDK
452
				WHILE @@fetch_status=0 
453
				BEGIN
454
					-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
455
					IF(@p_TYPE_FUNCTION ='SEND')
456
					BEGIN
457
					
458
						IF(EXISTS(SELECT CONTRACT_ID 
459
						FROM TR_CONTRACT 
460
						WHERE CONTRACT_ID = @REF_ID
461
						AND IS_CLOSED='Y' ))
462
						BEGIN
463
							ROLLBACK TRANSACTION
464
							SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Tạm ứng hợp đồng định kì đã đóng' ErrorDesc
465
							RETURN '-1'
466
						END
467

    
468
					
469
					IF(@NEW_INDEX <=@OLD_INDEX AND @NEW_INDEX >0 AND @OLD_INDEX >0  )
470
					BEGIN
471
						ROLLBACK TRANSACTION
472
						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
473
						RETURN '-1'
474
					END
475
					END
476
					DECLARE @PERIOD_ID VARCHAR(15);
477
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_PERIOD', @PERIOD_ID OUT;
478
					IF @PERIOD_ID='' OR @PERIOD_ID IS NULL GOTO ABORT;
479
					INSERT INTO TR_REQ_PAY_PERIOD(PERIOD_ID,REQ_PAY_ID,PAY_TYPE, CONTRACT_ID,PAY_DT_REAL,OLD_INDEX,NEW_INDEX,AMT_PAY,AUTH_STATUS_KT,CURRENCY,RATE,FROM_DATE, TO_DATE,AD_PAY_ID,PROCESS,PAY_PHASE,REASON)
480
					VALUES (@PERIOD_ID,@p_REQ_PAY_ID,'ADV_PAY',@CONTRACT_ID,CONVERT(DATE,@PAY_DT_REAL,103),
481
				@OLD_INDEX ,@NEW_INDEX ,@AMT_PAY_PERIOD,'U',@CURRENCY, @RATE,CONVERT(DATE,@FROM_DATE,103),CONVERT(DATE,@TO_DATE,103),@p_REQ_PAY_ID,'0',@PAY_PHASE,@REASON_TTDK)
482
			IF @@error<>0 GOTO ABORT;
483
			FETCH NEXT FROM XmlDataPeriod INTO @CONTRACT_ID ,@PAY_DT_REAL ,@PAY_TYPE ,
484
				@OLD_INDEX ,@NEW_INDEX ,@AMT_PAY_PERIOD,@CURRENCY, @RATE,@FROM_DATE,@TO_DATE,@PAY_PHASE,@REASON_TTDK
485
			END
486
			CLOSE XmlDataPeriod;
487
			DEALLOCATE XmlDataPeriod;
488
			-- VALIDATE SO TIEN
489
			--IF(@p_REQ_AMT >= @TOTAL_SCHEDULE_AMT)
490
			--BEGIN
491
			--	ROLLBACK TRANSACTION
492
			--	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
493
			--	RETURN '-1'
494
			--END
495
			----
496
		END
497
		---- END TẠM ỨNG HỢP ĐỒNG ĐỊNH KÌ
498
		--- INSERT PHƯƠNG THỨC THANH TOÁN
499
		----MethodCursor
500
			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),
501
					@ACC_NO VARCHAR(50), @ACC_NAME NVARCHAR(200), @ISSED_BY NVARCHAR(250), @ISSUED_DT VARCHAR(20),@CHECK_IN VARCHAR(15)
502
			DECLARE XmlDataMethod CURSOR FOR
503
			SELECT *
504
			FROM
505
			OPENXML(@hdoc, 'Root/XmlDataMethod',2)
506
			WITH(RECEIVE_ID varchar(15),RECEIVE_NAME nvarchar(100),REQ_PAY_REASON nvarchar(MAX),TOTAL_AMT decimal(18,2),REQ_PAY_TYPE varchar(1),
507
			REQ_PAY_DESC nvarchar(MAX),REQ_PAY_ENTRIES nvarchar(MAX),ACC_NO VARCHAR(50), 
508
			ACC_NAME NVARCHAR(200), ISSUED_BY NVARCHAR(250), ISSUED_DT VARCHAR(20),CURRENCY VARCHAR(15),RATE DECIMAL(18,0),CHECK_IN VARCHAR(15))
509
			OPEN XmlDataMethod
510
			FETCH NEXT FROM XmlDataMethod 
511
			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
512
			WHILE @@fetch_status=0 
513
			BEGIN
514
				IF(@REQ_PAY_TYPE <>'1')
515
				BEGIN
516
					SET @ISSUED_DT = NULL
517
				END
518
				DECLARE @p_REQ_PAY_METHOD_ID VARCHAR(15);
519
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_METHOD', @p_REQ_PAY_METHOD_ID OUT;
520
				IF @p_REQ_PAY_METHOD_ID='' OR @p_REQ_PAY_METHOD_ID IS NULL GOTO ABORT;
521
				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,
522
				CREATE_DT,ACC_NO,ACC_NAME,ISSUED_BY,ISSUED_DT,CURRENCY,RATE,CHECK_IN)
523
				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,'',
524
				@p_MAKER_ID,GETDATE(),@ACC_NO,@ACC_NAME,@ISSED_BY, CONVERT(DATE, @ISSUED_DT, 103),@CURRENCY,@RATE,@CHECK_IN)
525
			IF @@error<>0 GOTO ABORT;
526
			FETCH NEXT FROM XmlDataMethod 
527
			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
528
			END
529
			CLOSE XmlDataMethod;
530
			DEALLOCATE XmlDataMethod
531
		----END INSERT PHƯƠNG THỨC THANH TOÁN
532
		----INSERT VAO BANG DS KHACH HANG
533
			DECLARE XmlDataCus CURSOR FOR
534
			SELECT *
535
			FROM
536
			OPENXML(@hdoc, '/Root/XmlDataCus', 2)
537
			WITH(CUS_ID varchar(15), EMP_ID VARCHAR(15), AMT_PAY_DO DECIMAL(18,2),CURRENCY VARCHAR(15),RATE DECIMAL(18,0))
538
			OPEN XmlDataCus;
539
			FETCH NEXT FROM XmlDataCus INTO @CUST_ID, @EMP_ID,@AMT_PAY_DO,@CURRENCY,@RATE
540
				WHILE @@fetch_status=0 
541
				BEGIN		
542
					INSERT INTO TR_REQ_ADVANCE_CUS(REQ_PAY_ID,CUST_ID,EMP_ID,AMT_PAY_DO,CURRENCY,RATE,MAKER_ID,CREATE_DT)
543
					VALUES (@p_REQ_PAY_ID, @CUST_ID, @EMP_ID,@AMT_PAY_DO,@CURRENCY,@RATE,@p_MAKER_ID,GETDATE())
544
				--- END KHAI BAO CURSOR
545
				IF @@error<>0 GOTO ABORT;
546
				FETCH NEXT FROM XmlDataCus INTO  @CUST_ID, @EMP_ID,@AMT_PAY_DO,@CURRENCY,@RATE
547
				END
548
				CLOSE XmlDataCus;
549
				DEALLOCATE XmlDataCus;
550
		----END
551
			-- HANG MUC CHI PHI VA NGAN SACH
552
			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)
553
			DECLARE XmlDataGood CURSOR FOR
554
			SELECT *
555
			FROM
556
			OPENXML(@hdoc, 'Root/XmlDataGood',2) 
557
			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(5) , FR_LEVEL INT  ,TO_LEVEL INT)
558
			OPEN XmlDataGood
559
			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
560
			WHILE @@fetch_status=0 BEGIN
561
				--- KIEM TRA NEU NGAN SACH SU DUNG THUC THE LON HON NGAN SACH CON LAI
562
				SET @INDEX_NS = @INDEX_NS +1
563
				-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
564
				--IF(@p_TYPE_FUNCTION ='SEND')
565
				--BEGIN
566
				--IF((@AMT_EXE  > @AMT_REMAIN_GD))
567
				--BEGIN
568
				--		ROLLBACK TRANSACTION
569
				--		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
570
				--		RETURN '-1'
571
				--END
572
				--END
573
				IF(@p_TYPE_FUNCTION ='SEND')
574
				BEGIN
575
				IF(ISNULL(@AMT_EXE,0) =0)
576
				BEGIN
577
					ROLLBACK TRANSACTION
578
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_NS)+ N': Ngân sách sử dụng thực tế phải lớn hơn không.' ErrorDesc
579
						RETURN '-1'
580
				END
581
				IF((@AMT_EXE  > @AMT_REMAIN_GD) AND ((SELECT GD_TYPE_ID FROM CM_GOODS WHERE GD_ID =@GD_ID) ='NS'))
582
				BEGIN
583
						ROLLBACK TRANSACTION
584
						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
585
						RETURN '-1'
586
				END		
587
			END
588
				DECLARE @p_BUDGET_ID VARCHAR(15);
589
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_BUDGET', @p_BUDGET_ID OUT;
590
				IF @p_BUDGET_ID='' OR @p_BUDGET_ID IS NULL GOTO ABORT;
591
				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) 
592
				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)
593
			IF @@error<>0 GOTO ABORT;
594
			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
595
			END;
596
		CLOSE XmlDataGood;
597
		DEALLOCATE XmlDataGood;
598
		--- END INSERT NGAN SACH
599
		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)
600
		DECLARE XmlAttach CURSOR FOR
601
		SELECT *
602
		FROM
603
		OPENXML(@hdoc, 'Root/XmlAttach',2) 
604
		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))
605
		OPEN XmlAttach
606
		--INSERT CHUNG TU DINH KEM
607
				FETCH NEXT FROM XmlAttach INTO @ATTACH_ID,@CON_ID,@CONT_CODE,@NOTES_ATT,@CON_DESC,@CON_TYPE,@AMT_ATT,@REF_DT
608
				WHILE @@fetch_status=0 
609
				BEGIN
610
					IF (@REF_DT='')
611
					BEGIN
612
						SET @REF_DT = NULL
613
					END
614
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_ATTACH', @ATTACH_ID OUT;
615
					IF @ATTACH_ID='' OR @ATTACH_ID IS NULL GOTO ABORT;
616
					INSERT INTO TR_REQ_PAY_ATTACH(ATTACH_ID,REQ_PAY_ID,REF_ID,REF_CODE,NOTES,[DESCRIPTION],[TYPE],AMT,REF_DT) VALUES
617
					(@ATTACH_ID,@p_REQ_PAY_ID,@CON_ID,@CONT_CODE,@NOTES_ATT,@CON_DESC,@CON_TYPE,@AMT_ATT, CONVERT(DATE, @REF_DT,103))
618
				IF @@error<>0 GOTO ABORT;
619
				FETCH NEXT FROM XmlAttach INTO @ATTACH_ID,@CON_ID,@CONT_CODE,@NOTES_ATT,@CON_DESC,@CON_TYPE,@AMT_ATT,@REF_DT
620
				END
621
				CLOSE XmlAttach;
622
				DEALLOCATE XmlAttach;
623
		----END
624
		--- BAT DAU VALIDATE
625
		IF(@p_TYPE_FUNCTION ='SEND')
626
		BEGIN
627
			DECLARE @SUM_PTTT DECIMAL(18,0), @SUM_NS DECIMAL(18,0),@SUM_LICH_TT DECIMAL(18,0)
628
			SET @SUM_PTTT =(SELECT SUM(TOTAL_AMT * ISNULL(RATE,1)) FROM  TR_REQ_PAY_METHOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
629
			IF(EXISTS(SELECT * FROM TR_REQ_PAY_SCHEDULE WHERE REQ_PAY_ID =@p_REQ_PAY_ID) AND @p_REQ_TYPE ='D')
630
			BEGIN
631
				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)
632
				IF(@p_REQ_AMT*ISNULL(@p_RATE,1) != ISNULL(@SUM_LICH_TT,0))
633
				BEGIN
634
					ROLLBACK TRANSACTION
635
					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
636
					RETURN '-1'
637
				END
638
			END
639
			IF(EXISTS(SELECT * FROM TR_REQ_PAY_BUDGET WHERE REQ_PAY_ID =@p_REQ_PAY_ID))
640
			BEGIN
641
				SET @SUM_NS =(SELECT SUM(AMT_EXE * ISNULL(RATE,1)) FROM  TR_REQ_PAY_BUDGET WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
642
				IF(@p_REQ_AMT*ISNULL(@p_RATE,1) != ISNULL(@SUM_PTTT,0))
643
				BEGIN
644
					ROLLBACK TRANSACTION
645
					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
646
					RETURN '-1'
647
				END
648
			END
649
			ELSE
650
			IF(@p_REQ_AMT*ISNULL(@p_RATE,1) != ISNULL(@SUM_PTTT,0))
651
			BEGIN
652
				ROLLBACK TRANSACTION
653
				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
654
				RETURN '-1'
655
			END
656
			
657
		END
658
		----END
659
		--- INSERT SẴN VÀO BẢNG TR_REQUEST_PROCESS
660
			IF(@p_REQ_TYPE ='I')
661
			BEGIN
662
				DECLARE @tmp table(ROLE_ID VARCHAR(25),BRANCH_ID varchar(15),AMT DECIMAL(18,0))
663
				IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE) ='HS')
664
				BEGIN
665
					--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'
666
					IF EXISTS(SELECT * FROM CM_DEPARTMENT WHERE (DEP_CODE LIKE '%06908%' OR DEP_CODE ='0690605' OR DEP_CODE ='0690405') AND DEP_ID =@p_DEP_ID)
667
					BEGIN
668
						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'
669
					END
670
					ELSE IF EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06910%' AND DEP_ID =@p_DEP_ID)
671
					BEGIN
672
						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'
673
					END
674
					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)
675
					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) 
676
					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))
677
					BEGIN
678
						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')
679
					END
680
					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)
681
					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) 
682
					OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06922%' AND DEP_ID =@p_DEP_ID))
683
					BEGIN
684
						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'
685
					END
686
					ELSE
687
					BEGIN
688
						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'
689
					END
690
				END
691
				ELSE
692
				BEGIN
693
					IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE) ='CN')
694
					BEGIN
695
						--- BAO GOM DON VI & 3 CAP DUYET CUA HOI SO
696
						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'
697
						--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'
698
					END
699
					ELSE IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE) ='PGD')
700
					BEGIN
701
						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'
702
						--AND BRANCH_ID =(SELECT FATHER_ID FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE)AND BRANCH_ID = @p_BRANCH_CREATE
703
						--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'
704
					END
705
				END
706
				DECLARE @ROLE_ID VARCHAR(20), @BRANCH_ID VARCHAR(20), @INDEX INT =0, @SL_ROLE INT =0,@LIMIT_VALUE DECIMAL(18,0)
707
				SET @SL_ROLE = (SELECT COUNT(*) FROM @tmp)
708
				DECLARE @ISLEAF VARCHAR(1) = 'Y', @PARENT_ID VARCHAR(10) = '', @STATUS VARCHAR(1) = 'C', @NOTES NVARCHAR(500)
709
				DECLARE CUR_PR CURSOR FOR  SELECT A.ROLE_ID, A.BRANCH_ID,A.AMT FROM @tmp A ORDER BY A.AMT ASC
710
				OPEN CUR_PR
711
				FETCH NEXT FROM CUR_PR INTO @ROLE_ID,@BRANCH_ID,@LIMIT_VALUE
712
				WHILE @@FETCH_STATUS =0 --AND @STOP=0
713
				BEGIN								
714
					SET @INDEX= @INDEX+1
715
					IF @INDEX = @SL_ROLE
716
						SET @ISLEAF = 'Y'
717
					ELSE
718
						SET @ISLEAF = 'N'
719
					SET @NOTES = (SELECT N'Đợi '+ ROLE_DESC + N' phê duyệt' FROM TL_SYSROLE WHERE ROLE_ID = @ROLE_ID)
720

    
721
					IF(@INDEX=1 )
722
					BEGIN		
723
						SET @PARENT_ID = NULL
724
						SET @STATUS = 'C'							
725
						--INSERT INTO TR_REQUEST_PROCESS VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),'C',@ROLE_ID,@BRANCH_ID,NULL,NULL,NULL,@ISLEAF)
726
					END				
727
					ELSE 
728
					BEGIN
729
						SET @PARENT_ID = CONVERT(VARCHAR(5),@INDEX -1)
730
						SET @STATUS = 'U'
731
					END
732
						IF(@LIMIT_VALUE >= @p_REQ_AMT)
733
						BEGIN
734
							INSERT INTO dbo.PL_REQUEST_PROCESS
735
							(
736
								REQ_ID,
737
								PROCESS_ID,
738
								STATUS,
739
								ROLE_USER,
740
								BRANCH_ID,
741
								CHECKER_ID,
742
								APPROVE_DT,
743
								PARENT_PROCESS_ID,
744
								IS_LEAF, COST_ID, DVDM_ID, NOTES
745
							)
746
							VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),@STATUS,@ROLE_ID,@BRANCH_ID,NULL,NULL, @PARENT_ID,'Y', '',@p_DVDM_ID,@NOTES)
747
							--INSERT INTO PL_REQUEST_PROCESS VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),@STATUS,@ROLE_ID,@BRANCH_ID,NULL,NULL, @PARENT_ID,'Y')
748
							--IF(@ROLE_ID <> 'TKTGD' AND @ROLE_ID <> 'TKHDQT')
749
							--BEGIN
750
								BREAK;
751
							--END
752
						END
753
						ELSE
754
							INSERT INTO PL_REQUEST_PROCESS (
755
								REQ_ID,
756
								PROCESS_ID,
757
								STATUS,
758
								ROLE_USER,
759
								BRANCH_ID,
760
								CHECKER_ID,
761
								APPROVE_DT,
762
								PARENT_PROCESS_ID,
763
								IS_LEAF, COST_ID, DVDM_ID, NOTES
764
							) VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),@STATUS,@ROLE_ID,@BRANCH_ID,NULL,NULL, @PARENT_ID,@ISLEAF, '', @p_DVDM_ID, @NOTES)
765
					--END
766
					
767
					FETCH NEXT FROM CUR_PR INTO @ROLE_ID,@BRANCH_ID,@LIMIT_VALUE
768
				END
769
				CLOSE CUR_PR
770
				DEALLOCATE CUR_PR
771
			END
772
			--- CAP NHAT THANG CUOI CUNG LA Y
773
			--UPDATE TR_REQUEST_PROCESS SET IS_LEAF='Y' WHERE ID = (SELECT MAX(ID) FROM TR_REQUEST_PROCESS WHERE REQ_ID = @p_REQ_PAY_ID)
774
		COMMIT TRANSACTION
775
		IF(@p_TYPE_FUNCTION ='SEND')-- BAT DAU GUI PHE DUYET
776
		BEGIN
777
				--ROLLBACK TRANSACTION
778
				-- CAP NHAT TINH TRANG DUYET KE TOAN LA DANG XU LY 
779
				--UPDATE TR_REQ_ADVANCE_PAYMENT SET AUTH_STATUS ='U' WHERE REQ_PAY_ID =@p_REQ_PAY_ID
780
				--INSERT INTO dbo.PL_PROCESS(REQ_ID,PROCESS_ID,CHECKER_ID,APPROVE_DT,PROCESS_DESC,NOTES)
781
				--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')
782
				--SELECT '4' as Result, @p_REQ_PAY_ID AS REQ_PAY_ID, N'Gửi phê duyệt thành công' ErrorDesc
783
				--RETURN '4'
784
				DECLARE @SUM_TEMP_PAY DECIMAL, @SUM_PAY DECIMAL
785
				IF (@p_REQ_TYPE ='I')
786
				BEGIN
787
					SET @SUM_TEMP_PAY = (SELECT SUM(REQ_AMT*ISNULL(RATE,1)) 
788
					FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_TYPE=@p_REQ_TYPE AND REF_ID =@p_REF_ID AND AUTH_STATUS ='A' AND  REQ_TYPE ='I')
789
					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')
790
					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
791
				END
792
				IF(@p_TYPE_FUNCTION ='SEND') -- KIEM TRA NEU 2 BIEN XML KHAC NULL TUC LA DANG TRONG QUA TRINH LUU NHAP
793
				BEGIN
794
				DECLARE @BRANCH_TYPE_CR VARCHAR(15)
795
				SET @BRANCH_TYPE_CR =(SELECT TOP 1 BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID =@p_BRANCH_CREATE)
796
				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')
797
				BEGIN
798
					DECLARE @USER_TP VARCHAR(15) =''
799
					--SET @USER_TP =(SELECT TOP 1 TLNANME FROM TL_USER WHERE SECUR_CODE =@p_DEP_ID 
800
					--		AND (RoleName IN ('GDDV','TPTC','TC','KTT') OR RoleName IN (SELECT ROLE_OLD FROM TL_SYS_ROLE_MAPPING WHERE ROLE_NEW ='GDDV')))
801
					IF(@USER_TP IS NULL OR @USER_TP ='')
802
					BEGIN
803
						SET @USER_TP = (SELECT TOP 1 TLNANME FROM TL_USER_V2 WHERE SECUR_CODE =@p_DEP_ID 
804
							AND (RoleName IN ('GDDV','TPTC','TC','KTT')))
805
					END
806
					UPDATE TR_REQ_ADVANCE_PAYMENT SET TRASFER_USER_RECIVE =@USER_TP WHERE REQ_PAY_ID =@p_REQ_PAY_ID
807
				END
808
				--ELSE 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 ='PGD' AND @p_REQ_TYPE ='I')
809
				--BEGIN
810
				--	DECLARE @USER_TPGD VARCHAR(15) =''
811
				--	SET @USER_TPGD =(SELECT TOP 1 TLNANME FROM TL_USER WHERE SECUR_CODE =@p_DEP_ID AND RoleName IN ('TPGD'))
812
				--	--SET @USER_TPGD =(SELECT TOP 1 TLNANME FROM TL_USER WHERE SECUR_CODE =@p_DEP_ID AND (RoleName IN ('TPGD') OR
813
				--	--RoleName IN (SELECT ROLE_OLD FROM TL_SYS_ROLE_MAPPING WHERE ROLE_NEW ='TPGD')))
814
				--	IF(@USER_TPGD IS NULL OR @USER_TPGD ='')
815
				--	BEGIN
816
				--		SET @USER_TPGD = (SELECT TOP 1 TLNANME FROM TL_USER_V2 WHERE TLSUBBRID =@p_BRANCH_CREATE 
817
				--			AND RoleName ='TPGD')
818
				--	END
819
				--	UPDATE TR_REQ_ADVANCE_PAYMENT SET TRASFER_USER_RECIVE =@USER_TPGD WHERE REQ_PAY_ID =@p_REQ_PAY_ID
820
				--END
821
				IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID  =@p_REQ_PAY_ID AND AUTH_STATUS='U'))
822
				BEGIN
823
					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
824
					RETURN '-1'
825
				END
826
				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')
827
				BEGIN
828
					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
829
					RETURN '-1'
830
				END
831
				-- CAP NHAT TINH TRANG DUYET KE TOAN LA DANG XU LY 
832
				UPDATE TR_REQ_ADVANCE_PAYMENT SET AUTH_STATUS ='U', PROCESS = NULL WHERE REQ_PAY_ID =@p_REQ_PAY_ID
833
				UPDATE PL_REQUEST_PROCESS SET ROLE_USER ='GDDV' WHERE REQ_ID =@p_REQ_PAY_ID AND ROLE_USER ='PGD'
834
				UPDATE PL_REQUEST_PROCESS SET ROLE_USER ='TPGD' WHERE REQ_ID =@p_REQ_PAY_ID AND ROLE_USER ='PPGD'
835
				INSERT INTO dbo.PL_PROCESS(REQ_ID,PROCESS_ID,CHECKER_ID,APPROVE_DT,PROCESS_DESC,NOTES)
836
				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')
837
				IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE (TRASFER_USER_RECIVE <> '' OR TRASFER_USER_RECIVE IS NOT NULL) AND REQ_PAY_ID =@p_REQ_PAY_ID))
838
				BEGIN
839
					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
840
					RETURN '4'
841
				END
842
				ELSE
843
				BEGIN
844
					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
845
					RETURN '4'
846
				END
847
			END
848
		END
849
		SELECT '0' as Result, @p_REQ_PAY_ID  REQ_PAY_ID,@p_REQ_PAY_CODE AS REQ_PAY_CODE, '' ErrorDesc
850
		RETURN '0'
851
ABORT:
852
BEGIN
853
		ROLLBACK TRANSACTION
854
		SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, '' ErrorDesc
855
		RETURN '-1'
856
End
857
¿
858

    
859
ALTER PROCEDURE [dbo].[TR_REQ_ADVANCE_PAYMENT_Upd]
860
@p_REQ_PAY_ID	varchar(15)= NULL,
861
@p_REQ_PAY_CODE	varchar(50)	= NULL,
862
@p_REQ_DT VARCHAR(20)= NULL,
863
@p_BRANCH_ID	varchar(15)	= NULL,
864
@p_DEP_ID	varchar(15)	= NULL,
865
@p_REQ_REASON	nvarchar(MAX)	= NULL,
866
@p_REQ_TYPE	varchar(15)	= NULL,
867
@P_REQ_ENTRIES nvarchar(MAX)	= NULL,
868
@p_REQ_DESCRIPTION	nvarchar(MAX)	= NULL,
869
@p_REF_ID	varchar(15)	= NULL,
870
@p_RECEIVER_PO	nvarchar(250)	= NULL,
871
@p_RECEIVER_DEBIT	nvarchar(250)	= NULL,
872
@p_REQ_PAY_TYPE	varchar(15)	= NULL,
873
@p_REQ_TYPE_CURRENCY	nvarchar(50)	= NULL,
874
@p_REQ_AMT	decimal(18, 0)	= NULL,
875
@p_REQ_TEMP_AMT	decimal(18, 0)	= NULL,
876
@p_MAKER_ID	varchar(15)	= NULL,
877
@p_CREATE_DT	varchar(25)	= NULL,
878
@p_EDITOR_ID	varchar(15)	= NULL,
879
@p_AUTH_STATUS	varchar(1)	= NULL,
880
@p_CHECKER_ID	varchar(15)	= NULL,
881
@p_APPROVE_DT	varchar(25)	= NULL,
882
@p_CREATE_DT_KT	varchar(25)	= NULL,
883
@p_MAKER_ID_KT	varchar(15)	= NULL,
884
@p_AUTH_STATUS_KT	varchar(1)	= NULL,
885
@p_CHECKER_ID_KT	varchar(1)	= NULL,
886
@p_APPROVE_DT_KT  varchar(25)= null,
887
@p_CONFIRM_NOTE	nvarchar(500)	= NULL,
888
@p_BRANCH_CREATE	varchar(15)	= NULL,
889
@p_NOTES	varchar(15)	= NULL,
890
@p_RECORD_STATUS	varchar(1)	= NULL,
891
@p_TRANSFER_MAKER	nvarchar(50)	= NULL,
892
@p_TRANSFER_DT	varchar(25)	= NULL,
893
@p_TRASFER_USER_RECIVE	varchar(15)	= NULL,
894
@p_PROCESS	varchar(15)	= NULL,
895
@p_PAY_PHASE VARCHAR(15)= NULL,
896
@p_DVDM_ID VARCHAR(15)= NULL,
897
@p_RATE DECIMAL(18,0) =0,
898
@p_RECIVER_MONEY VARCHAR(15)= NULL,
899
@p_XMP_TEMP XML = NULL,
900
@p_TYPE_FUNCTION VARCHAR(15) = NULL,
901
@p_IS_PERIOD VARCHAR(5) = NULL
902
AS
903
--Validation is here
904
/*
905
DECLARE @ERRORSYS NVARCHAR(15) = '' 
906
  IF ( NOT EXISTS ( SELECT * FROM ASS_COLLECT WHERE ))
907
	 SET @ERRORSYS = ''
908
IF @ERRORSYS <> '' 
909
BEGIN
910
	SELECT ErrorCode Result, ''  CAR_ID, ErrorDesc ErrorDesc FROM SYS_ERROR WHERE ErrorCode = @ERRORSYS
911
	RETURN '0'
912
END 
913
*/
914
	--Luanlt-2019/10/15 Disable Validation
915
	--DECLARE @ERRORSYS NVARCHAR(15) = '' 
916
	--IF EXISTS(SELECT * FROM TR_PO_MASTER WHERE REF_ID  = @p_REF_ID )
917
	--BEGIN
918
	--	SET @ERRORSYS = 'ASSC-00005'
919
	--	SELECT ErrorCode Result, '' REQ_PAY_ID, ErrorDesc ErrorDesc FROM SYS_ERROR WHERE ErrorCode = @ERRORSYS
920
	--	RETURN '-1'
921
	--END
922

    
923
	DECLARE @BRANCH_TYPE_CR VARCHAR(15), @ROLE_KI_NHAY VARCHAR(50)
924
	--SET @ROLE_KI_NHAY =(SELECT RoleName FROM TL_USER_V2 WHERE TLNANME =@p_TRASFER_USER_RECIVE)
925
	--IF(@ROLE_KI_NHAY IS NOT NULL AND @ROLE_KI_NHAY <> '' AND @ROLE_KI_NHAY IN ('TP','GDDV','KTT','TPTC','TC'))
926
	--BEGIN
927
	--	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
928
	--	RETURN '-1'
929
	--END
930
		SET  @ROLE_KI_NHAY =(SELECT TOP 1 RoleName FROM TL_USER WHERE TLNANME =@p_TRASFER_USER_RECIVE)
931
		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'))
932
		BEGIN
933
		PRINT @ROLE_KI_NHAY
934
		END
935
		ELSE
936
		BEGIN
937
		SET @ROLE_KI_NHAY =(SELECT TOP 1 RoleName FROM TL_USER_V2 WHERE TLNANME =@p_TRASFER_USER_RECIVE)
938
		IF(@ROLE_KI_NHAY IS NULL OR @ROLE_KI_NHAY ='')
939
		BEGIN
940
				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))
941
		END
942
		END
943
		--SET @ROLE_KI_NHAY =(SELECT RoleName FROM TL_USER_V2 WHERE TLNANME =@p_TRASFER_USER_RECIVE)
944
		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')
945
		BEGIN
946
			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
947
			RETURN '-1'
948
		END
949
	SET @BRANCH_TYPE_CR =(SELECT TOP 1 BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID =@p_BRANCH_CREATE)
950
	DECLARE @ACC_NUM VARCHAR(15)
951
	SET @ACC_NUM = (SELECT TOP 1 ACC_NUM FROM CM_ACCOUNT_PAY WHERE REF_ID =@p_REF_ID)
952
	IF @p_REQ_PAY_CODE IS NULL OR @p_REQ_PAY_CODE =''
953
	BEGIN
954
		SELECT '-1' Result, '' REQ_PAY_ID, N'Mã số phiếu không được để trống' ErrorDesc
955
		RETURN '-1'
956
	END
957
	IF (@p_REQ_TYPE='I' AND (@p_RECEIVER_DEBIT IS NULL OR @p_RECEIVER_DEBIT =''))
958
	BEGIN
959
		SELECT '-1' Result, '' REQ_PAY_ID, N'Tài khoản nhân viên tạm ứng không được để trống' ErrorDesc
960
		RETURN '-1'
961
	END
962
	IF EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_CODE = @p_REQ_PAY_CODE AND REQ_PAY_ID <> @p_REQ_PAY_ID)
963
	BEGIN
964
		SELECT '-1' Result, '' REQ_PAY_ID, N'Mã số phiếu đã tồn tại trong hệ thống' ErrorDesc
965
		RETURN '-1'
966
	END
967
	--IF(((SELECT TOP 1 ACC_NUM FROM CM_ACCOUNT_PAY WHERE REF_ID =@p_REF_ID)<>@p_RECEIVER_DEBIT) AND @p_REQ_TYPE='I')
968
	--IF(@ACC_NUM <>@p_RECEIVER_DEBIT AND @p_REQ_TYPE='I' AND LEN(ISNULL(@ACC_NUM,''))>0)
969
	--BEGIN
970
	--	SELECT '-1' as Result, '' REQ_PAY_ID, N'Tài khoản tạm ứng của nhân viên đã tồn tại trong hệ thống! Bạn không được phép chỉnh sửa' ErrorDesc
971
	--	RETURN '-1'
972
	--END
973
	--IF(NOT EXISTS(SELECT * FROM CM_ACCOUNT_PAY WHERE REF_ID =@p_REF_ID) AND @p_REQ_TYPE='I')
974
	--	BEGIN
975
	--		INSERT INTO CM_ACCOUNT_PAY (REF_ID,ACC_TYPE,ACC_NUM,ACC_NAME,FUNTION,MAKER_ID,AUTH_STATUS,CREATE_DT,TK_GL,TK_GL_NAME) VALUES (@p_REF_ID,'ADV_PAY',@p_RECEIVER_DEBIT,'TK TAM UNG CUA NHAN VIEN ' +@p_REF_ID,'I',@p_MAKER_ID,'U',GETDATE(),'361200001','TAM UNG DE HOAT DONG NGHIEP VU')
976
	--	END
977
	--ELSE
978
	--	BEGIN
979
	--		IF(@ACC_NUM <>@p_RECEIVER_DEBIT AND @p_REQ_TYPE='I' AND LEN(ISNULL(@ACC_NUM,''))>0)
980
	--		BEGIN
981
	--			--ROLLBACK TRANSACTION
982
	--			SELECT '-1' as Result, '' REQ_PAY_ID, N'Tài khoản tạm ứng của nhân viên đã tồn tại trong hệ thống! Bạn không được phép chỉnh sửa' ErrorDesc
983
	--			RETURN '-1'
984
	--		END
985
	--END
986
	--IF(NOT EXISTS(SELECT * FROM CM_ACCOUNT_PAY WHERE ACC_NUM =@p_RECEIVER_DEBIT AND REF_ID = @p_REF_ID AND @p_REQ_TYPE='I'))
987
	--BEGIN
988

    
989
	--			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
990
	--			RETURN '-1'
991
	--END
992
	IF(NOT EXISTS(SELECT * FROM CM_ACCOUNT_PAY WHERE ACC_NUM =@p_RECEIVER_DEBIT AND REF_ID =  @p_REF_ID) AND @p_REQ_TYPE='I')
993
	BEGIN
994
				ROLLBACK TRANSACTION
995
				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
996
				RETURN '-1'
997
	END
998
	IF(LEN(ISNULL(@p_RECEIVER_DEBIT,''))>15 AND @p_REQ_TYPE ='I')
999
	BEGIN
1000
				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
1001
				RETURN '-1'
1002
	END
1003
	-- 19-11-2019 LUCTV BO SUNG VALIDATE TRONG QUA TRINH TEST SAU KHI UAT
1004
	-- NEU TAM UNG CHO NHA CUNG CAP THI DOT THANH TOAN KHONG DUOC PHEP NULL
1005
	-- SO TIEN THANH TOÁN PHAI LON HON KHONG
1006
		IF(@p_REQ_AMT <=0)
1007
		BEGIN	
1008
			SELECT '-1' as Result, '' REQ_PAY_ID, N'Số tiền tạm ứng phải lớn hơn 0' ErrorDesc
1009
			RETURN '-1'
1010
		END
1011
	 -- END VALIDATE TRONG QUA TRINH TEST UAT
1012
		BEGIN TRANSACTION
1013
		--IF(@p_DVDM_ID IS NULL OR @p_DVDM_ID ='')
1014
		--BEGIN
1015
		--	SET @p_DVDM_ID = (SELECT TOP 1 DVDM_ID FROM CM_DVDM WHERE DVDM_NAME ='KHOI TAI CHINH')
1016
		--END
1017
		UPDATE TR_REQ_ADVANCE_PAYMENT SET 
1018
		REF_ID = @p_REF_ID,
1019
		DEP_ID= @p_DEP_ID,REQ_REASON = @p_REQ_REASON, REQ_PAY_TYPE = @p_REQ_PAY_TYPE,
1020
		REQ_AMT = @p_REQ_AMT,
1021
		NOTES= @p_NOTES,
1022
		REQ_TYPE= @p_REQ_TYPE,REQ_DESCRIPTION = @p_REQ_DESCRIPTION,RECEIVER_PO =@p_RECEIVER_PO, RECEIVER_DEBIT= @p_RECEIVER_DEBIT,
1023
		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,
1024
		AUTH_STATUS='E', DVDM_ID=@p_DVDM_ID, RATE =@p_RATE,REQ_TYPE_CURRENCY =@p_REQ_TYPE_CURRENCY, RECIVER_MONEY= @p_RECIVER_MONEY, TRASFER_USER_RECIVE =@p_TRASFER_USER_RECIVE,IS_PERIOD =@p_IS_PERIOD
1025
		WHERE REQ_PAY_ID =@p_REQ_PAY_ID
1026
		IF @@Error <> 0 GOTO ABORT
1027
		--- INSERT VÀO BẢNG DETAIL NÊU TẠM ỨNG LÀ TẠM ỨNG THANH TOÁN
1028
			DECLARE @hdoc INT
1029
			EXEC sp_xml_preparedocument @hdoc OUTPUT, @p_XMP_TEMP;
1030
			
1031
			-- KIEM TRA NEU TAM UNG THANH TOAN
1032
			IF((@p_REQ_TYPE='P' AND (@p_IS_PERIOD <>'Y' OR @p_IS_PERIOD IS NULL)) OR @p_REQ_TYPE='D')
1033
			BEGIN
1034
				DELETE FROM TR_REQ_ADVANCE_DT WHERE REQ_PAY_ID=@p_REQ_PAY_ID
1035
				DELETE FROM TR_REQ_PAY_SCHEDULE WHERE REQ_PAY_ID=@p_REQ_PAY_ID
1036
				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),
1037
				@AMT_REMAIN_SCHEDULE decimal(18,0),@REQ_AD_DT varchar(20),@PROCESS varchar(15),@PAY_ID VARCHAR(15),
1038
				@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),
1039
				@EMP_ID VARCHAR(15),@AMT_PAY_REAL DECIMAL(18,2),@CHECK_IN VARCHAR(15),@IS_CLOSED VARCHAR(1)= NULL,@INDEX_NS INT =0,@REASON NVARCHAR(1000),@REF_TYPE VARCHAR(15)
1040
				DECLARE @TYPE_COST VARCHAR(25), @FR_LEVEL INT ,@TO_LEVEL INT
1041
				DECLARE XmlDataPO CURSOR FOR
1042
				SELECT *
1043
				FROM
1044
				OPENXML(@hdoc, '/Root/XmlDataPO', 2)
1045
				WITH(REF_ID varchar(15),IS_CLOSED VARCHAR(1),REF_TYPE VARCHAR(15))
1046
				OPEN XmlDataPO;
1047
				DECLARE @INDEX_PO INT =0
1048
				SET @INDEX_PO = 0
1049
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
1050
				WHILE @@fetch_status=0 
1051
				BEGIN
1052
					SET @INDEX_PO = @INDEX_PO +1
1053
					-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
1054
					IF(@p_TYPE_FUNCTION ='SEND')
1055
					BEGIN
1056
					
1057
					
1058
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
1059
					IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND TYPE ='C' AND REQ_PAY_ID 
1060
					IN (SELECT REQ_PAY_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS_KT<>'A' OR AUTH_STATUS_KT IS NULL)))
1061
					BEGIN
1062
						ROLLBACK TRANSACTION
1063
						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ố '+
1064
						(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
1065
						RETURN '-1'
1066
					END
1067
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
1068
					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))
1069
					BEGIN
1070
						ROLLBACK TRANSACTION
1071
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': Hợp đồng số '+
1072
						(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
1073
						RETURN '-1'
1074
					END
1075
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
1076
					IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND TYPE ='P' AND REQ_PAY_ID 
1077
					IN (SELECT REQ_PAY_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS_KT<>'A' OR AUTH_STATUS_KT IS NULL)))
1078
					BEGIN
1079
						ROLLBACK TRANSACTION
1080
						SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO số '+
1081
						(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
1082
						RETURN '-1'
1083
					END
1084
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
1085
					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))
1086
					BEGIN
1087
						ROLLBACK TRANSACTION
1088
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO số '+
1089
						(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
1090
						RETURN '-1'
1091
					END
1092
					--- KIEM TRA XEM PO NAY DUOC THANH TOAN HAY CHUA
1093
					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' )))
1094
					BEGIN
1095
						ROLLBACK TRANSACTION
1096
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO số '+
1097
						(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
1098
						RETURN '-1'
1099
					END
1100
					END
1101
					DECLARE @REQ_PAYDTID VARCHAR(15);
1102
					EXEC SYS_CodeMasters_Gen 'TR_REQ_ADVANCE_DT', @REQ_PAYDTID OUT;
1103
					IF @REQ_PAYDTID='' OR @REQ_PAYDTID IS NULL GOTO ABORT;
1104
					INSERT INTO TR_REQ_ADVANCE_DT (REQ_PAYDTID,REQ_PAY_ID,REF_ID,TYPE,MAKER_ID,CREATE_DT,IS_CLOSED,REF_TYPE) VALUES
1105
					(@REQ_PAYDTID,@p_REQ_PAY_ID,@REF_ID,'ADV_PAY',@p_MAKER_ID,GETDATE(),@IS_CLOSED,@REF_TYPE)
1106
				IF @@error<>0 GOTO ABORT;
1107
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
1108
				END
1109
				CLOSE XmlDataPO;
1110
				DEALLOCATE XmlDataPO;
1111
				--- CUSOR DANH SACH LICH THANH TOAN PO - HD	
1112
				DECLARE XmlDataSchedule CURSOR FOR
1113
				SELECT *
1114
				FROM
1115
				OPENXML(@hdoc, 'Root/XmlDataSchedule',2)
1116
				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),
1117
				AMT_REMAIN_SCHEDULE decimal(18,0),REQ_AD_DT varchar(20),PROCESS varchar(15), PAY_ID VARCHAR(15),REF_ID VARCHAR(15),
1118
				REQ_PAY_DESC NVARCHAR(500), REQ_PAY_ENTRIES NVARCHAR(250),CURRENCY VARCHAR(15),RATE DECIMAL(18,0),AMT_PAY_REAL DECIMAL(18,2))
1119
				OPEN XmlDataSchedule
1120
				FETCH NEXT FROM XmlDataSchedule INTO @PO_ID,@TERM_PAY,@AMT_PAY_SCHEDULE,@REQ_ADV_ID_SCHE,@AMT_ADVANCE_SCHEDULE,@AMT_PAY_DO,
1121
				@AMT_REMAIN_SCHEDULE,@REQ_AD_DT,@PROCESS,@PAY_ID,@REF_ID,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@CURRENCY,@RATE,@AMT_PAY_REAL
1122
				WHILE @@fetch_status=0 
1123
				BEGIN
1124
					DECLARE @p_REQ_PAY_SCHEDULE_ID VARCHAR(15);
1125
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_SCHEDULE', @p_REQ_PAY_SCHEDULE_ID OUT;
1126
					IF @p_REQ_PAY_SCHEDULE_ID='' OR @p_REQ_PAY_SCHEDULE_ID IS NULL GOTO ABORT;
1127
					INSERT INTO TR_REQ_PAY_SCHEDULE(
1128
					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,
1129
					CREATE_DT,AUTH_STATUS_KT,PAYMENT_STATUS,TRN_TYPE,REF_ID,REQ_PAY_DESC,REQ_PAY_ENTRIES,CURRENCY,RATE, AMT_PAY_REAL)
1130
					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,
1131
					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)
1132
				--- END KHAI BAO CURSOR
1133
				IF @@error<>0 GOTO ABORT;
1134
				FETCH NEXT FROM XmlDataSchedule INTO @PO_ID,@TERM_PAY,@AMT_PAY_SCHEDULE,@REQ_ADV_ID_SCHE,@AMT_ADVANCE_SCHEDULE,@AMT_PAY_DO,
1135
				@AMT_REMAIN_SCHEDULE,@REQ_AD_DT,@PROCESS,@PAY_ID,@REF_ID,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@CURRENCY,@RATE,@AMT_PAY_REAL
1136
				END
1137
				CLOSE XmlDataSchedule;
1138
				DEALLOCATE XmlDataSchedule;
1139
			END
1140
		--- END TẠM ỨNG THANH TOÁN
1141
		---- TẠM ỨNG HĐ ĐỊNH KÌ
1142
			IF(@p_REQ_TYPE = 'P' AND @p_IS_PERIOD='Y')
1143
			BEGIN
1144
				DELETE FROM TR_REQ_ADVANCE_DT WHERE REQ_PAY_ID =@p_REQ_PAY_ID
1145
				DELETE FROM TR_REQ_PAY_PERIOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID
1146
				DECLARE XmlDataPO CURSOR FOR
1147
				SELECT *
1148
				FROM
1149
				OPENXML(@hdoc, '/Root/XmlDataPO', 2)
1150
				WITH(REF_ID varchar(15),IS_CLOSED VARCHAR(1),REF_TYPE VARCHAR(15))
1151
				OPEN XmlDataPO;
1152
				SET @INDEX_PO = 0
1153
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
1154
				WHILE @@fetch_status=0 
1155
				BEGIN
1156
					SET @INDEX_PO = @INDEX_PO +1
1157
					DECLARE @REQ_PAYDTID_C VARCHAR(15);
1158
					EXEC SYS_CodeMasters_Gen 'TR_REQ_ADVANCE_DT', @REQ_PAYDTID_C OUT;
1159
					IF @REQ_PAYDTID_C='' OR @REQ_PAYDTID_C IS NULL GOTO ABORT;
1160
					INSERT INTO TR_REQ_ADVANCE_DT (REQ_PAYDTID,REQ_PAY_ID,REF_ID,TYPE,MAKER_ID,CREATE_DT,IS_CLOSED,REF_TYPE) VALUES
1161
					(@REQ_PAYDTID_C,@p_REQ_PAY_ID,@REF_ID,'ADV_PAY',@p_MAKER_ID,GETDATE(),@IS_CLOSED,@REF_TYPE)
1162
				IF @@error<>0 GOTO ABORT;
1163
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
1164
				END
1165
				CLOSE XmlDataPO;
1166
				DEALLOCATE XmlDataPO;
1167
				--- CUSOR DANH SACH LICH THANH TOAN PO - HD	
1168
			----------------------------
1169
			--INSERT FROM PERIOD	
1170
				DECLARE XmlDataPeriod CURSOR FOR
1171
				SELECT *
1172
				FROM
1173
				OPENXML(@hdoc, '/Root/XmlDataPeriod', 2)
1174
				WITH(CONTRACT_ID varchar(15),PAY_DT_REAL VARCHAR(20),PAY_TYPE VARCHAR(5),
1175
				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) )
1176
				OPEN XmlDataPeriod;
1177
				DECLARE @CONTRACT_ID varchar(15),@PAY_DT_REAL VARCHAR(20),@PAY_TYPE VARCHAR(5),
1178
				@OLD_INDEX DECIMAL(18,0),@NEW_INDEX DECIMAL(18,0),@AMT_PAY_PERIOD DECIMAL(18,2),@FROM_DATE VARCHAR(20),@TO_DATE VARCHAR(20),@PAY_PHASE NVARCHAR(250), @REASON_TTDK NVARCHAR(2000)
1179
				FETCH NEXT FROM XmlDataPeriod INTO @CONTRACT_ID ,@PAY_DT_REAL ,@PAY_TYPE ,
1180
				@OLD_INDEX ,@NEW_INDEX ,@AMT_PAY_PERIOD,@CURRENCY, @RATE,@FROM_DATE,@TO_DATE,@PAY_PHASE,@REASON_TTDK
1181
				WHILE @@fetch_status=0 
1182
				BEGIN
1183
					-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
1184
					IF(@p_TYPE_FUNCTION ='SEND')
1185
					BEGIN
1186
					
1187
					--IF(EXISTS(SELECT CONTRACT_ID 
1188
					--FROM TR_CONTRACT 
1189
					--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 <>''))
1190
					
1191
					----AND IS_CLOSED='Y' ))
1192
					--BEGIN
1193
					--	ROLLBACK TRANSACTION
1194
					--	SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Tạm ứng hợp đồng định kì đã đóng' ErrorDesc
1195
					--	RETURN '-1'
1196
					--END
1197

    
1198
					IF(@NEW_INDEX <=@OLD_INDEX AND @NEW_INDEX >0 AND @OLD_INDEX >0)
1199
					BEGIN
1200
						ROLLBACK TRANSACTION
1201
						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
1202
						RETURN '-1'
1203
					END
1204
					END
1205
					DECLARE @PERIOD_ID VARCHAR(15);
1206
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_PERIOD', @PERIOD_ID OUT;
1207
					IF @PERIOD_ID='' OR @PERIOD_ID IS NULL GOTO ABORT;
1208
					INSERT INTO TR_REQ_PAY_PERIOD(PERIOD_ID,REQ_PAY_ID,PAY_TYPE, CONTRACT_ID,PAY_DT_REAL,OLD_INDEX,NEW_INDEX,AMT_PAY,AUTH_STATUS_KT,CURRENCY,RATE,FROM_DATE, TO_DATE,AD_PAY_ID,PROCESS,PAY_PHASE, REASON)
1209
					VALUES (@PERIOD_ID,@p_REQ_PAY_ID,'ADV_PAY',@CONTRACT_ID,CONVERT(DATE,@PAY_DT_REAL,103),
1210
				@OLD_INDEX ,@NEW_INDEX ,@AMT_PAY_PERIOD,'U',@CURRENCY, @RATE,CONVERT(DATE,@FROM_DATE,103),CONVERT(DATE,@TO_DATE,103),@p_REQ_PAY_ID,'0',@PAY_PHASE,@REASON_TTDK)
1211
			IF @@error<>0 GOTO ABORT;
1212
			FETCH NEXT FROM XmlDataPeriod INTO @CONTRACT_ID ,@PAY_DT_REAL ,@PAY_TYPE ,
1213
				@OLD_INDEX ,@NEW_INDEX ,@AMT_PAY_PERIOD,@CURRENCY, @RATE,@FROM_DATE,@TO_DATE,@PAY_PHASE,@REASON_TTDK
1214
			END
1215
			CLOSE XmlDataPeriod;
1216
			DEALLOCATE XmlDataPeriod;
1217
			-- VALIDATE SO TIEN
1218
			--IF(@p_REQ_AMT >= @TOTAL_SCHEDULE_AMT)
1219
			--BEGIN
1220
			--	ROLLBACK TRANSACTION
1221
			--	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
1222
			--	RETURN '-1'
1223
			--END
1224
			----
1225
			END
1226
		---- END TẠM ỨNG HĐ ĐỊNH KÌ
1227
		--- INSERT PHƯƠNG THỨC THANH TOÁN
1228
		----MethodCursor
1229
			DELETE FROM TR_REQ_PAY_METHOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID
1230
			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),
1231
					@ACC_NO VARCHAR(50), @ACC_NAME NVARCHAR(250), @ISSED_BY NVARCHAR(250), @ISSUED_DT VARCHAR(20)
1232
			DECLARE XmlDataMethod CURSOR FOR
1233
			SELECT *
1234
			FROM
1235
			OPENXML(@hdoc, 'Root/XmlDataMethod',2)
1236
			WITH(RECEIVE_ID varchar(15),RECEIVE_NAME nvarchar(100),REQ_PAY_REASON nvarchar(MAX),TOTAL_AMT decimal(18,2),REQ_PAY_TYPE varchar(1),
1237
			REQ_PAY_DESC nvarchar(MAX),REQ_PAY_ENTRIES nvarchar(MAX),ACC_NO VARCHAR(50), ACC_NAME NVARCHAR(250), 
1238
			ISSUED_BY NVARCHAR(250), ISSUED_DT VARCHAR(20),CURRENCY VARCHAR(15),RATE DECIMAL(18,0),CHECK_IN VARCHAR(15))
1239
			OPEN XmlDataMethod
1240
			FETCH NEXT FROM XmlDataMethod 
1241
			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 
1242
			WHILE @@fetch_status=0 
1243
			BEGIN
1244
				IF(@REQ_PAY_TYPE<>'1')
1245
				BEGIN
1246
					SET @ISSUED_DT = NULL
1247
				END
1248
				DECLARE @p_REQ_PAY_METHOD_ID VARCHAR(15);
1249
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_METHOD', @p_REQ_PAY_METHOD_ID OUT;
1250
				IF @p_REQ_PAY_METHOD_ID='' OR @p_REQ_PAY_METHOD_ID IS NULL GOTO ABORT;
1251
				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,
1252
				CREATE_DT,ACC_NO,ACC_NAME,ISSUED_BY,ISSUED_DT,CURRENCY,RATE,CHECK_IN)
1253
				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,'',
1254
				@p_MAKER_ID,GETDATE(),@ACC_NO,@ACC_NAME,@ISSED_BY, CONVERT(DATE, @ISSUED_DT, 103),@CURRENCY,@RATE,@CHECK_IN)
1255
			IF @@error<>0 GOTO ABORT;
1256
			FETCH NEXT FROM XmlDataMethod 
1257
			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
1258
			END
1259
			CLOSE XmlDataMethod;
1260
			DEALLOCATE XmlDataMethod
1261
		----END INSERT PHƯƠNG THỨC THANH TOÁN
1262
		----INSERT VAO BANG DS KHACH HANG
1263
			DELETE FROM TR_REQ_ADVANCE_CUS WHERE REQ_PAY_ID = @p_REQ_PAY_ID
1264
			DECLARE XmlDataCus CURSOR FOR
1265
			SELECT *
1266
			FROM
1267
			OPENXML(@hdoc, '/Root/XmlDataCus', 2)
1268
			WITH(CUS_ID varchar(15), EMP_ID VARCHAR(15), AMT_PAY_DO decimal(18,2),CURRENCY VARCHAR(15),RATE DECIMAL(18,0))
1269
			OPEN XmlDataCus;
1270
			FETCH NEXT FROM XmlDataCus INTO @CUST_ID, @EMP_ID,@AMT_PAY_DO,@CURRENCY,@RATE
1271
				WHILE @@fetch_status=0 
1272
				BEGIN		
1273
					INSERT INTO TR_REQ_ADVANCE_CUS(REQ_PAY_ID,CUST_ID,EMP_ID,AMT_PAY_DO,CURRENCY,RATE,MAKER_ID,CREATE_DT)
1274
					VALUES (@p_REQ_PAY_ID, @CUST_ID, @EMP_ID,@AMT_PAY_DO,@CURRENCY,@RATE,@p_MAKER_ID,GETDATE())
1275
				--- END KHAI BAO CURSOR
1276
				IF @@error<>0 GOTO ABORT;
1277
				FETCH NEXT FROM XmlDataCus INTO  @CUST_ID, @EMP_ID,@AMT_PAY_DO,@CURRENCY,@RATE
1278
				END
1279
				CLOSE XmlDataCus;
1280
				DEALLOCATE XmlDataCus;
1281
		----END
1282
		-- HANG MUC CHI PHI VA NGAN SACH
1283
			DELETE FROM TR_REQ_PAY_BUDGET WHERE REQ_PAY_ID =@p_REQ_PAY_ID
1284
			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)
1285
			DECLARE XmlDataGood CURSOR FOR
1286
			SELECT *
1287
			FROM
1288
			OPENXML(@hdoc, 'Root/XmlDataGood',2) 
1289
			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)
1290
			OPEN XmlDataGood
1291
			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
1292
			WHILE @@fetch_status=0 BEGIN
1293
				--- KIEM TRA NEU NGAN SACH SU DUNG THUC THE LON HON NGAN SACH CON LAI
1294
				SET @INDEX_NS = @INDEX_NS +1
1295
				-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
1296
				--IF(@p_TYPE_FUNCTION ='SEND')
1297
				--BEGIN
1298
				--IF((@AMT_EXE  > @AMT_REMAIN_GD))
1299
				--BEGIN
1300
				--		ROLLBACK TRANSACTION
1301
				--		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
1302
				--		RETURN '-1'
1303
				--END	
1304
				--END
1305
				IF(@p_TYPE_FUNCTION ='SEND')
1306
				BEGIN
1307
				IF(ISNULL(@AMT_EXE,0) =0)
1308
				BEGIN
1309
					ROLLBACK TRANSACTION
1310
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_NS)+ N': Ngân sách sử dụng thực tế phải lớn hơn không.' ErrorDesc
1311
						RETURN '-1'
1312
				END
1313
				--IF((@AMT_EXE  > @AMT_REMAIN_GD) AND ((SELECT GD_TYPE_ID FROM CM_GOODS WHERE GD_ID =@GD_ID) ='NS'))
1314
				--BEGIN
1315
				--		ROLLBACK TRANSACTION
1316
				--		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
1317
				--		RETURN '-1'
1318
				--END		
1319
			END
1320
				DECLARE @p_BUDGET_ID VARCHAR(15);
1321
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_BUDGET', @p_BUDGET_ID OUT;
1322
				IF @p_BUDGET_ID='' OR @p_BUDGET_ID IS NULL GOTO ABORT;
1323
				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) 
1324
				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)
1325
			IF @@error<>0 GOTO ABORT;
1326
			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
1327
			END;
1328
		CLOSE XmlDataGood;
1329
		DEALLOCATE XmlDataGood;
1330
		--- END INSERT NGAN SACH
1331
		DELETE FROM TR_REQ_PAY_ATTACH WHERE REQ_PAY_ID =@p_REQ_PAY_ID
1332
		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)
1333
		DECLARE XmlAttach CURSOR FOR
1334
		SELECT *
1335
		FROM
1336
		OPENXML(@hdoc, 'Root/XmlAttach',2) 
1337
		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))
1338
		OPEN XmlAttach
1339
		--INSERT CHUNG TU DINH KEM
1340
				FETCH NEXT FROM XmlAttach INTO @ATTACH_ID,@CON_ID,@CONT_CODE,@NOTES_ATT,@CON_DESC,@CON_TYPE,@AMT_ATT,@REF_DT
1341
				WHILE @@fetch_status=0 
1342
				BEGIN
1343
					IF (@REF_DT='')
1344
					BEGIN
1345
						SET @REF_DT = NULL
1346
					END
1347
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_ATTACH', @ATTACH_ID OUT;
1348
					IF @ATTACH_ID='' OR @ATTACH_ID IS NULL GOTO ABORT;
1349
					INSERT INTO TR_REQ_PAY_ATTACH(ATTACH_ID,REQ_PAY_ID,REF_ID,REF_CODE,NOTES,[DESCRIPTION],[TYPE],AMT,REF_DT) VALUES
1350
					(@ATTACH_ID,@p_REQ_PAY_ID,@CON_ID,@CONT_CODE,@NOTES_ATT,@CON_DESC,@CON_TYPE,@AMT_ATT, CONVERT(DATE, @REF_DT,103))
1351
				IF @@error<>0 GOTO ABORT;
1352
				FETCH NEXT FROM XmlAttach INTO @ATTACH_ID,@CON_ID,@CONT_CODE,@NOTES_ATT,@CON_DESC,@CON_TYPE,@AMT_ATT,@REF_DT
1353
				END
1354
				CLOSE XmlAttach;
1355
				DEALLOCATE XmlAttach;
1356
		----END
1357
		--- BAT DAU VALIDATE
1358
		IF(@p_TYPE_FUNCTION ='SEND')
1359
		BEGIN
1360
			DECLARE @SUM_PTTT DECIMAL(18,0), @SUM_NS DECIMAL(18,0),@SUM_LICH_TT DECIMAL(18,0)
1361
			SET @SUM_PTTT =(SELECT SUM(TOTAL_AMT * ISNULL(RATE,1)) FROM  TR_REQ_PAY_METHOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
1362
			IF(EXISTS(SELECT * FROM TR_REQ_PAY_SCHEDULE WHERE REQ_PAY_ID =@p_REQ_PAY_ID) AND @p_REQ_TYPE ='D')
1363
			BEGIN
1364
				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)
1365
				IF(@p_REQ_AMT*ISNULL(@p_RATE,1) != ISNULL(@SUM_LICH_TT,0))
1366
				BEGIN
1367
					ROLLBACK TRANSACTION
1368
					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
1369
					RETURN '-1'
1370
				END
1371
			END
1372
			IF(EXISTS(SELECT * FROM TR_REQ_PAY_BUDGET WHERE REQ_PAY_ID =@p_REQ_PAY_ID))
1373
			BEGIN
1374
				SET @SUM_NS =(SELECT SUM(AMT_EXE * ISNULL(RATE,1)) FROM  TR_REQ_PAY_BUDGET WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
1375
				IF(@p_REQ_AMT*ISNULL(@p_RATE,1) != ISNULL(@SUM_PTTT,0))
1376
				BEGIN
1377
					ROLLBACK TRANSACTION
1378
					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
1379
					RETURN '-1'
1380
				END
1381
			END
1382
			ELSE
1383
			IF(@p_REQ_AMT*ISNULL(@p_RATE,1) != ISNULL(@SUM_PTTT,0))
1384
			BEGIN
1385
				ROLLBACK TRANSACTION
1386
				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
1387
				RETURN '-1'
1388
			END
1389
			
1390
		END
1391
		----END
1392
		IF(@p_REQ_TYPE ='I')
1393
			BEGIN
1394
				DELETE FROM PL_REQUEST_PROCESS WHERE REQ_ID = @p_REQ_PAY_ID
1395
				DECLARE @tmp table(ROLE_ID VARCHAR(25),BRANCH_ID varchar(15),AMT decimal(18,2))
1396
				IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE) ='HS')
1397
				BEGIN
1398
					--DECLARE @DEP_CODE VARCHAR(15)
1399
					--SET @DEP_CODE =(SELECT * FROM CM_DEPARTMENT WHERE DEP_ID =@p_DEP_ID)
1400
					IF EXISTS(SELECT * FROM CM_DEPARTMENT WHERE (DEP_CODE LIKE '%06908%' OR DEP_CODE ='0690605' OR DEP_CODE ='0690405') AND DEP_ID =@p_DEP_ID)
1401
					BEGIN
1402
						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
1403
					END
1404
					ELSE IF EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06910%' AND DEP_ID =@p_DEP_ID)
1405
					BEGIN
1406
						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
1407
					END
1408
					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)
1409
					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) 
1410
					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))
1411
					BEGIN
1412
						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
1413
					END
1414
					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)
1415
					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) 
1416
					OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06922%' AND DEP_ID =@p_DEP_ID))
1417
					BEGIN
1418
						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
1419
					END
1420
					ELSE
1421
					BEGIN
1422
						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
1423
					END
1424
				END
1425
				ELSE
1426
				BEGIN
1427
				IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE) ='CN')
1428
					BEGIN
1429
						--- BAO GOM DON VI & 3 CAP DUYET CUA HOI SO
1430
						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' 
1431
						--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'
1432
				END
1433
				ELSE IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE) ='PGD')
1434
					BEGIN
1435
						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'
1436
						--BRANCH_ID =(SELECT FATHER_ID FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE)
1437
						--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'
1438
				END
1439
				END
1440
				DECLARE @ROLE_ID VARCHAR(20), @BRANCH_ID VARCHAR(20), @INDEX INT =0, @SL_ROLE INT =0,@LIMIT_VALUE DECIMAL(18,0)
1441
				SET @SL_ROLE = (SELECT COUNT(*) FROM @tmp)
1442
				DECLARE @ISLEAF VARCHAR(1) = 'Y', @PARENT_ID VARCHAR(10) = '', @STATUS VARCHAR(1) = 'C', @NOTES NVARCHAR(500)
1443
				DECLARE CUR_PR CURSOR FOR  SELECT A.ROLE_ID, A.BRANCH_ID,A.AMT FROM @tmp A ORDER BY A.AMT ASC
1444
				OPEN CUR_PR
1445
				FETCH NEXT FROM CUR_PR INTO @ROLE_ID,@BRANCH_ID,@LIMIT_VALUE
1446
				WHILE @@FETCH_STATUS =0 --AND @STOP=0
1447
				BEGIN								
1448
					SET @INDEX= @INDEX+1
1449
					IF @INDEX = @SL_ROLE
1450
						SET @ISLEAF = 'Y'
1451
					ELSE
1452
						SET @ISLEAF = 'N'
1453
					SET @NOTES = (SELECT N'Đợi '+ ROLE_DESC + N' phê duyệt' FROM TL_SYSROLE WHERE ROLE_ID = @ROLE_ID)
1454

    
1455
					IF(@INDEX=1 )
1456
					BEGIN		
1457
						SET @PARENT_ID = NULL
1458
						SET @STATUS = 'C'							
1459
						--INSERT INTO TR_REQUEST_PROCESS VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),'C',@ROLE_ID,@BRANCH_ID,NULL,NULL,NULL,@ISLEAF)
1460
					END				
1461
					ELSE 
1462
					BEGIN
1463
						SET @PARENT_ID = CONVERT(VARCHAR(5),@INDEX -1)
1464
						SET @STATUS = 'U'
1465
					END
1466
						IF(@LIMIT_VALUE >= @p_REQ_AMT)
1467
						BEGIN
1468
							INSERT INTO dbo.PL_REQUEST_PROCESS
1469
							(
1470
								REQ_ID,
1471
								PROCESS_ID,
1472
								STATUS,
1473
								ROLE_USER,
1474
								BRANCH_ID,
1475
								CHECKER_ID,
1476
								APPROVE_DT,
1477
								PARENT_PROCESS_ID,
1478
								IS_LEAF, COST_ID, DVDM_ID, NOTES
1479
							)
1480
							VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),@STATUS,@ROLE_ID,@BRANCH_ID,NULL,NULL, @PARENT_ID,'Y', '',@p_DVDM_ID,@NOTES)
1481
							--INSERT INTO PL_REQUEST_PROCESS VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),@STATUS,@ROLE_ID,@BRANCH_ID,NULL,NULL, @PARENT_ID,'Y')
1482
							--IF(@ROLE_ID <> 'TKTGD' AND @ROLE_ID <> 'TKHDQT')
1483
							--BEGIN
1484
								BREAK;
1485
							--END
1486
						END
1487
						ELSE
1488
							INSERT INTO PL_REQUEST_PROCESS (
1489
								REQ_ID,
1490
								PROCESS_ID,
1491
								STATUS,
1492
								ROLE_USER,
1493
								BRANCH_ID,
1494
								CHECKER_ID,
1495
								APPROVE_DT,
1496
								PARENT_PROCESS_ID,
1497
								IS_LEAF, COST_ID, DVDM_ID, NOTES
1498
							) VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),@STATUS,@ROLE_ID,@BRANCH_ID,NULL,NULL, @PARENT_ID,@ISLEAF, '', @p_DVDM_ID, @NOTES)
1499
					--END
1500
					
1501
					FETCH NEXT FROM CUR_PR INTO @ROLE_ID,@BRANCH_ID,@LIMIT_VALUE
1502
				END
1503
				CLOSE CUR_PR
1504
				DEALLOCATE CUR_PR
1505
			END
1506
COMMIT TRANSACTION
1507
		IF(@p_TYPE_FUNCTION ='SEND')-- BAT DAU GUI PHE DUYET
1508
		BEGIN
1509
				
1510
				--ROLLBACK TRANSACTION
1511
				-- CAP NHAT TINH TRANG DUYET KE TOAN LA DANG XU LY 
1512
				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')
1513
				BEGIN
1514
					DECLARE @USER_TP VARCHAR(15) =''
1515
					--SET @USER_TP =(SELECT TOP 1 TLNANME FROM TL_USER WHERE SECUR_CODE =@p_DEP_ID 
1516
					--		AND (RoleName IN ('GDDV','TPTC','TC','KTT') OR RoleName IN (SELECT ROLE_OLD FROM TL_SYS_ROLE_MAPPING WHERE ROLE_NEW ='GDDV')))
1517
					IF(@USER_TP IS NULL OR @USER_TP ='')
1518
					BEGIN
1519
						SET @USER_TP = (SELECT TOP 1 TLNANME FROM TL_USER_V2 WHERE SECUR_CODE =@p_DEP_ID 
1520
							AND (RoleName IN ('TBP','PP')))
1521
					END
1522
					UPDATE TR_REQ_ADVANCE_PAYMENT SET TRASFER_USER_RECIVE =@USER_TP WHERE REQ_PAY_ID =@p_REQ_PAY_ID
1523
				END
1524
				DECLARE @SUM_TEMP_PAY DECIMAL, @SUM_PAY DECIMAL
1525
				IF (@p_REQ_TYPE ='I')
1526
				BEGIN
1527
					SET @SUM_TEMP_PAY = (SELECT SUM(REQ_AMT*ISNULL(RATE,1)) 
1528
					FROM TR_REQ_ADVANCE_PAYMENT WHERE  REF_ID =@p_REF_ID AND AUTH_STATUS ='A' AND  REQ_TYPE ='I')
1529
					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')
1530
					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
1531
				END
1532
				--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 ='PGD' AND @p_REQ_TYPE ='I')
1533
				--BEGIN
1534
				--	DECLARE @USER_TPGD VARCHAR(15) =''
1535
				--	SET @USER_TPGD =(SELECT TOP 1 TLNANME FROM TL_USER WHERE SECUR_CODE =@p_DEP_ID AND (RoleName IN ('TPGD')))
1536
				--	IF(@USER_TPGD IS NULL OR @USER_TPGD ='')
1537
				--	BEGIN
1538
				--		SET @USER_TPGD = (SELECT TOP 1 TLNANME FROM TL_USER_V2 WHERE TLSUBBRID =@p_BRANCH_CREATE 
1539
				--			AND RoleName ='TPGD')
1540
				--	END
1541
				--	UPDATE TR_REQ_ADVANCE_PAYMENT SET TRASFER_USER_RECIVE =@USER_TPGD WHERE REQ_PAY_ID =@p_REQ_PAY_ID
1542
				--END
1543
				DECLARE @SUM_THANH_TOAN DECIMAL(18,0) =0, @SUM_PHUONG_THUC DECIMAL(18,0) =0
1544
				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)
1545
				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)
1546
				IF(ROUND(@SUM_THANH_TOAN,0) <> ROUND(@SUM_PHUONG_THUC,0))
1547
				BEGIN
1548
					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
1549
					RETURN '-1'
1550
				END
1551
				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')
1552
				BEGIN
1553
					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
1554
					RETURN '-1'
1555
				END
1556
				IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID  =@p_REQ_PAY_ID AND AUTH_STATUS='U'))
1557
				BEGIN
1558
					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
1559
					RETURN '-1'
1560
				END
1561
				--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')))
1562
				--BEGIN
1563
				--	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
1564
				--	RETURN '-1'
1565
				--END
1566
				UPDATE TR_REQ_ADVANCE_PAYMENT SET AUTH_STATUS ='U',CREATE_DT = GETDATE() WHERE REQ_PAY_ID =@p_REQ_PAY_ID
1567
				UPDATE PL_REQUEST_PROCESS SET ROLE_USER ='GDDV' WHERE REQ_ID =@p_REQ_PAY_ID AND ROLE_USER ='PGD'
1568
				UPDATE PL_REQUEST_PROCESS SET ROLE_USER ='TPGD' WHERE REQ_ID =@p_REQ_PAY_ID AND ROLE_USER ='PPGD'
1569
				INSERT INTO dbo.PL_PROCESS(REQ_ID,PROCESS_ID,CHECKER_ID,APPROVE_DT,PROCESS_DESC,NOTES)
1570
				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')
1571
				IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE (TRASFER_USER_RECIVE <> '' OR TRASFER_USER_RECIVE IS NOT NULL) AND REQ_PAY_ID =@p_REQ_PAY_ID))
1572
				BEGIN
1573
					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
1574
					RETURN '4'
1575
				END
1576
				ELSE
1577
				BEGIN
1578
					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
1579
					RETURN '4'
1580
				END
1581
				--SELECT '4' as Result, @p_REQ_PAY_ID AS REQ_PAY_ID, N'Gửi phê duyệt thành công' ErrorDesc
1582
				--RETURN '4'
1583
		END
1584
		
1585
	SELECT '0' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, '' ErrorDesc
1586
	RETURN '0'
1587
ABORT:
1588
BEGIN
1589
		ROLLBACK TRANSACTION
1590
		SELECT '-1' as Result, '' REQ_PAY_ID, '' ErrorDesc
1591
		RETURN '-1'
1592
End