Project

General

Profile

advance_ins_upd.txt

Luc Tran Van, 01/18/2023 08:01 AM

 
1

    
2
ALTER   PROCEDURE [dbo].[TR_REQ_ADVANCE_PAYMENT_Ins]
3
@p_REQ_PAY_ID	varchar(15)= NULL,
4
@p_REQ_PAY_CODE	varchar(50)	= NULL,
5
@p_REQ_DT VARCHAR(10)= NULL,
6
@p_BRANCH_ID	varchar(15)	= NULL,
7
@p_DEP_ID	varchar(15)	= NULL,
8
@p_REQ_REASON	nvarchar(MAX)	= NULL,
9
@p_REQ_TYPE	varchar(15)	= NULL,
10
@P_REQ_ENTRIES nvarchar(MAX)	= NULL,
11
@p_REQ_DESCRIPTION	nvarchar(MAX)	= NULL,
12
@p_REF_ID	varchar(15)	= NULL,
13
@p_RECEIVER_PO	nvarchar(250)	= NULL,
14
@p_RECEIVER_DEBIT	nvarchar(250)	= NULL,
15
@p_REQ_PAY_TYPE	varchar(15)	= NULL,
16
@p_REQ_TYPE_CURRENCY	nvarchar(50)	= NULL,
17
@p_REQ_AMT	decimal(18, 0)	= NULL,
18
@p_REQ_TEMP_AMT	decimal(18, 0)	= NULL,
19
@p_MAKER_ID	varchar(15)	= NULL,
20
@p_CREATE_DT	varchar(25)	= NULL,
21
@p_EDITOR_ID	varchar(15)	= NULL,
22
@p_AUTH_STATUS	varchar(1)	= NULL,
23
@p_CHECKER_ID	varchar(15)	= NULL,
24
@p_APPROVE_DT	varchar(25)	= NULL,
25
@p_CREATE_DT_KT	varchar(25)	= NULL,
26
@p_MAKER_ID_KT	varchar(15)	= NULL,
27
@p_AUTH_STATUS_KT	varchar(1)	= NULL,
28
@p_CHECKER_ID_KT	varchar(1)	= NULL,
29
@p_APPROVE_DT_KT  varchar(25)= null,
30
@p_CONFIRM_NOTE	nvarchar(500)	= NULL,
31
@p_BRANCH_CREATE	varchar(15)	= NULL,
32
@p_NOTES	varchar(15)	= NULL,
33
@p_RECORD_STATUS	varchar(1)	= NULL,
34
@p_TRANSFER_MAKER	nvarchar(50)	= NULL,
35
@p_TRANSFER_DT	varchar(25)	= NULL,
36
@p_TRASFER_USER_RECIVE	varchar(15)	= NULL,
37
@p_PROCESS	varchar(15)	= NULL,
38
@p_PAY_PHASE VARCHAR(15)= NULL,
39
@p_DVDM_ID VARCHAR(15) = NULL,
40
@p_RATE DECIMAL(18,0)= NULL,
41
@p_PAY_AMT DECIMAL(18,0)= NULL,
42
@p_RECIVER_MONEY VARCHAR(15) = NULL,
43
@p_IS_PERIOD VARCHAR(5) = NULL,
44
@p_TYPE_FUNCTION VARCHAR(15) = NULL,
45
--doanptt 19/01/2022
46
@p_XMP_TEMP XML = NULL,
47
@p_XMP_CUS XML = NULL,
48
@p_XMP_PAY_ATTACH XML = NULL,
49
@p_XMP_PAY_INVOICE XML = NULL,
50
@p_XMP_ADVANCE_DT_2 XML = NULL,
51
@p_XMP_PAY_SCHEDULE XML = NULL,
52
@p_XMP_PAY_PERIOD XML = NULL,
53
@p_XMP_PAY_METHOD XML = NULL,
54
@p_XMP_PAY_BUDGET XML = NULL,
55
@p_XMP_ADVANCE_DT XML = NULL
56
AS
57
	IF(@p_REQ_TYPE ='I')
58
	BEGIN
59
		DECLARE @AMT_AD_PAY DECIMAL(18,0) =0
60
		DECLARE @AMT_AD_PAY_BACK DECIMAL(18,0) =0
61
		DECLARE @AMT_AD_PAY_REMAIN DECIMAL(18,0) =0
62
		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')
63
		SET @AMT_AD_PAY_BACK = (SELECT SUM(D.AMT_USE) +SUM(D.AMT_REVERT) - SUM (D.AMT_ADD)
64
					FROM TR_REQ_PAYMENT_DT D
65
					LEFT JOIN TR_REQ_ADVANCE_PAYMENT X ON D.PAY_ADV_ID = X.REQ_PAY_ID  AND D.AUTH_STATUS_KT ='A'
66
					WHERE X.REF_ID =@p_REF_ID)
67
	 SET @AMT_AD_PAY_REMAIN =ISNULL(@AMT_AD_PAY,0) -ISNULL(@AMT_AD_PAY_BACK,0)
68
	 SET @p_REQ_TEMP_AMT =ISNULL(@AMT_AD_PAY_REMAIN,0)
69
	 END
70
BEGIN TRANSACTION
71
	-- LUCTV 17H51 BO SUNG LAY SO TIEN DA TAM UNG CUA NHAN VIEN --
72
		--SET @AMT_DO =(SELECT * FROM [dbo].TR_RE)
73
	--THIEUVQ 281119---
74
		DECLARE @REC_DEBIT_AUTO VARCHAR(15),@ROLE_KI_NHAY VARCHAR(50)
75
		SET @REC_DEBIT_AUTO =(SELECT TOP 1 ACC_NUM FROM CM_ACCOUNT_PAY WHERE REF_ID = @p_REF_ID)
76
		
77
-- doanptt 19/01/2022 Khai báo lưới danh sách 
78
	DECLARE @hdocCus INT, @hdocPayAtach INT, @hdocPO INT, 
79
	@hdocSchedule INT, @hdocPeriod INT, @hdocPayMethod INT, @hdocPayBudget INT, @hdocRecurring INT
80

    
81
	-- THONG TIN KHACH HANG
82
	EXEC sp_xml_preparedocument @hdocCus OUTPUT, @p_XMP_CUS;
83
	-- HOP DONG, CHUNG TU DINH KEM
84
	EXEC sp_xml_preparedocument @hdocPayAtach OUTPUT, @p_XMP_PAY_ATTACH;
85
	-- THONG TIN PO/ HOP DONG
86
	EXEC sp_xml_preparedocument @hdocPO OUTPUT, @p_XMP_ADVANCE_DT_2;
87
	-- DANH SACH CAC DOT THANH TOAN PO/ HOP DONG
88
	EXEC sp_xml_preparedocument @hdocSchedule OUTPUT, @p_XMP_PAY_SCHEDULE;
89
	-- THONG TIN HOP DONG DINH KY
90
	EXEC sp_xml_preparedocument @hdocRecurring OUTPUT, @p_XMP_ADVANCE_DT;
91
	-- THONG TIN DINH KY TAM UNG
92
	EXEC sp_xml_preparedocument @hdocPeriod OUTPUT, @p_XMP_PAY_PERIOD;
93
	-- THONG TIN PHUONG THUC THANH TOAN
94
	EXEC sp_xml_preparedocument @hdocPayMethod OUTPUT, @p_XMP_PAY_METHOD;
95
	-- THONG TIN HANG MUC NGAN SACH VA CHI PHI
96
	EXEC sp_xml_preparedocument @hdocPayBudget OUTPUT, @p_XMP_PAY_BUDGET;
97

    
98
-- BEGIN VALIDATE CAC DANH SACH
99
	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))))
100
	BEGIN
101
		ROLLBACK TRANSACTION
102
		SELECT '-1' Result, '' REQ_PAY_ID, N'Danh sách PO/ hợp đồng không được để trống' ErrorDesc
103
		RETURN '-1'
104
	END
105
	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))))
106
	BEGIN
107
		ROLLBACK TRANSACTION
108
		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
109
		RETURN '-1'
110
	END
111

    
112
	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))))
113
	BEGIN
114
		ROLLBACK TRANSACTION
115
		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
116
		RETURN '-1'
117
	END
118

    
119
	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))))
120
	BEGIN
121
		ROLLBACK TRANSACTION
122
		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
123
		RETURN '-1'
124
	END
125

    
126
	IF(@p_REQ_TYPE = 'D' AND NOT EXISTS(SELECT * FROM OPENXML(@hdocCus, '/Root/XmlDataCus', 2) WITH(CONTRACT_ID varchar(15))))
127
	BEGIN
128
		ROLLBACK TRANSACTION
129
		SELECT '-1' Result, '' REQ_PAY_ID, N'Danh sách khách hàng không được để trống' ErrorDesc
130
		RETURN '-1'
131
	END
132
-- END VALIDATE CAC DANH SACH
133
		
134
	SET  @ROLE_KI_NHAY =(SELECT TOP 1 RoleName FROM TL_USER WHERE TLNANME =@p_TRASFER_USER_RECIVE)
135
	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'))
136
	BEGIN
137
		PRINT @ROLE_KI_NHAY
138
	END
139
	ELSE
140
	BEGIN
141
		SET @ROLE_KI_NHAY =(SELECT TOP 1 RoleName FROM TL_USER_V2 WHERE TLNANME =@p_TRASFER_USER_RECIVE)
142
		IF(@ROLE_KI_NHAY IS NULL OR @ROLE_KI_NHAY ='')
143
		BEGIN
144
				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))
145
		END
146
	END
147
	--SET @ROLE_KI_NHAY =(SELECT RoleName FROM TL_USER_V2 WHERE TLNANME =@p_TRASFER_USER_RECIVE)
148
	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')
149
	BEGIN
150
		ROLLBACK TRANSACTION
151
		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
152
		RETURN '-1'
153
	END
154

    
155
-- BEGIN THEM PHIEU DE NGHI TAM UNG
156
	EXEC [dbo].[ADVANCE_CODE_GenKey] 'TR_REQ_ADVANCE_PAYMENT', '',@p_REQ_TYPE, @p_REQ_PAY_CODE out
157
	IF @p_REQ_PAY_CODE IS NULL OR @p_REQ_PAY_CODE =''
158
	BEGIN
159
		ROLLBACK TRANSACTION
160
		SELECT '-1' Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Mã số phiếu không được để trống' ErrorDesc
161
		RETURN '-1'
162
	END
163
		
164
	IF EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_CODE  = @p_REQ_PAY_CODE )
165
	BEGIN
166
		ROLLBACK TRANSACTION
167
		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
168
		RETURN '-1'
169
	END
170
		
171
	IF(@p_REQ_AMT <=0)
172
	BEGIN
173
		ROLLBACK TRANSACTION
174
		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
175
		RETURN '-1'
176
	END
177
	EXEC SYS_CodeMasters_Gen 'TR_REQ_ADVANCE_PAMENT', @p_REQ_PAY_ID out
178
	IF @p_REQ_PAY_ID='' OR @p_REQ_PAY_ID IS NULL GOTO ABORT
179
	INSERT INTO [dbo].[TR_REQ_ADVANCE_PAYMENT]
180
        ([REQ_PAY_ID]
181
        ,[REQ_PAY_CODE]
182
        ,[BRANCH_ID],[REQ_DT],
183
        [DEP_ID]
184
        ,[REQ_REASON]
185
        ,[REQ_TYPE],REQ_ENTRIES,
186
        [REQ_DESCRIPTION]
187
        ,REF_ID,
188
		RECEIVER_PO, RECEIVER_DEBIT
189
        ,[REQ_PAY_TYPE]
190
        ,[REQ_TYPE_CURRENCY]
191
        ,[REQ_AMT]
192
        ,[REQ_TEMP_AMT]
193
        ,[MAKER_ID]
194
        ,[CREATE_DT]
195
        ,[EDITOR_ID]
196
        ,[AUTH_STATUS]
197
        ,[CHECKER_ID]
198
        ,[APPROVE_DT]
199
        ,[CREATE_DT_KT]
200
        ,[MAKER_ID_KT]
201
        ,[AUTH_STATUS_KT]
202
        ,[CHECKER_ID_KT]
203
		,[APPROVE_DT_KT]
204
        ,[CONFIRM_NOTES]
205
        ,[BRANCH_CREATE]
206
        ,[NOTES],RECORD_STATUS,TRANSFER_MAKER,TRANSFER_DT,TRASFER_USER_RECIVE,PROCESS,PAY_PHASE,DVDM_ID,RATE,RECIVER_MONEY,IS_PERIOD, PAY_AMT)
207
		VALUES
208
        (@p_REQ_PAY_ID,
209
		@p_REQ_PAY_CODE,
210
		@p_BRANCH_ID,CONVERT(DATE,GETDATE(),103),
211
		@p_DEP_ID,
212
		@p_REQ_REASON,
213
		@p_REQ_TYPE,
214
		@P_REQ_ENTRIES,
215
		@p_REQ_DESCRIPTION,
216
		@p_REF_ID,
217
		@p_RECEIVER_PO,
218
		@p_RECEIVER_DEBIT,
219
		@p_REQ_PAY_TYPE,
220
		@p_REQ_TYPE_CURRENCY,
221
		@p_REQ_AMT,
222
		@p_REQ_TEMP_AMT,
223
		@p_MAKER_ID,
224
		GETDATE(),
225
		@p_EDITOR_ID,
226
		'E',
227
		NULL,
228
		NULL,
229
		NULL,
230
		NULL,
231
		NULL,
232
		NULL,
233
		NULL,
234
		NULL,
235
		@p_BRANCH_CREATE,
236
		@p_NOTES,'1',
237
		@p_TRANSFER_MAKER,
238
		NULL,
239
		@p_TRASFER_USER_RECIVE,
240
		NULL,@p_PAY_PHASE,@p_DVDM_ID,@p_RATE,@p_RECIVER_MONEY,@p_IS_PERIOD, @p_PAY_AMT)
241
		IF @@Error <> 0 GOTO ABORT
242
-- END THEM PHIEU DE NGHI TAM UNG
243

    
244
--- BEGIN INSERT VÀO BẢNG DETAIL NÊU TẠM ỨNG LÀ TẠM ỨNG THANH TOÁN
245
		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),
246
		@AMT_REMAIN_SCHEDULE decimal(18,0),@REQ_AD_DT varchar(20),@PROCESS varchar(15),@PAY_ID VARCHAR(15),
247
		@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),
248
		@AMT_PAY_REAL DECIMAL(18,2), @IS_CLOSED VARCHAR(1)= NULL,@INDEX_NS INT =0,@REASON NVARCHAR(1000), @REF_TYPE VARCHAR(15)
249
		DECLARE @TYPE_COST VARCHAR(5) , @FR_LEVEL INT  ,@TO_LEVEL INT
250

    
251
-- KIEM TRA NEU TAM UNG THANH TOAN
252
	IF((@p_REQ_TYPE='P' AND (@p_IS_PERIOD <>'Y' OR @p_IS_PERIOD IS NULL)) OR @p_REQ_TYPE='D')
253
	BEGIN
254
		DECLARE XmlDataPO CURSOR FOR
255
		SELECT *
256
		FROM OPENXML(@hdocPO, '/Root/XmlDataPO', 2)
257
		WITH(REF_ID varchar(15),IS_CLOSED VARCHAR(1),REF_TYPE VARCHAR(15))
258
		OPEN XmlDataPO;
259
		DECLARE @INDEX_PO INT =0
260
		SET @INDEX_PO = 0
261
		FETCH NEXT FROM XmlDataPO INTO @REF_ID, @IS_CLOSED, @REF_TYPE
262
		WHILE @@fetch_status=0 
263
		BEGIN
264
			SET @INDEX_PO = @INDEX_PO +1
265
			-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
266
			--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))
267
			--BEGIN
268
			--	ROLLBACK TRANSACTION
269
			--	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
270
			--	RETURN '-1'
271
			--END
272
			---- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
273
			--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)))
274
			--BEGIN
275
			--	ROLLBACK TRANSACTION
276
			--	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
277
			--	RETURN '-1'
278
			--END
279
			-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
280
			-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
281
			IF(@p_TYPE_FUNCTION ='SEND')
282
			BEGIN
283
				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_ADVANCE_PAYMENT WHERE AUTH_STATUS_KT<>'A' OR AUTH_STATUS_KT IS NULL)))
284
				BEGIN
285
					ROLLBACK TRANSACTION
286
					SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': Hợp đồng số '+
287
					(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
288
					RETURN '-1'
289
				END
290
				-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
291
				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))
292
				BEGIN
293
					ROLLBACK TRANSACTION
294
					SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': Hợp đồng số '+
295
					(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
296
					RETURN '-1'
297
				END
298
				-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
299
				IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND TYPE ='P' AND REQ_PAY_ID 
300
				IN (SELECT REQ_PAY_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS_KT<>'A' OR AUTH_STATUS_KT IS NULL)))
301
				BEGIN
302
					ROLLBACK TRANSACTION
303
					SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO số '+
304
					(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
305
					RETURN '-1'
306
				END
307
				-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
308
				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))
309
				BEGIN
310
					ROLLBACK TRANSACTION
311
					SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO số '+
312
					(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
313
					RETURN '-1'
314
				END
315
			END
316

    
317
			DECLARE @REQ_PAYDTID VARCHAR(15);
318
			EXEC SYS_CodeMasters_Gen 'TR_REQ_ADVANCE_DT', @REQ_PAYDTID OUT;
319
			IF @REQ_PAYDTID='' OR @REQ_PAYDTID IS NULL GOTO ABORT;
320
			INSERT INTO TR_REQ_ADVANCE_DT (REQ_PAYDTID,REQ_PAY_ID,REF_ID,TYPE,MAKER_ID,CREATE_DT,IS_CLOSED,REF_TYPE) VALUES
321
			(@REQ_PAYDTID,@p_REQ_PAY_ID,@REF_ID,'ADV_PAY',@p_MAKER_ID,GETDATE(),@IS_CLOSED,'P')
322
		IF @@error<>0 GOTO ABORT;
323
		FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
324
		END
325
		CLOSE XmlDataPO;
326
		DEALLOCATE XmlDataPO;
327
		--- CUSOR DANH SACH LICH THANH TOAN PO - HD	
328
		DECLARE XmlDataSchedule CURSOR FOR
329
		SELECT *
330
		FROM OPENXML(@hdocSchedule, '/Root/XmlDataSchedule',2)
331
		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),
332
		AMT_REMAIN_SCHEDULE decimal(18,0),REQ_AD_DT varchar(20),PROCESS varchar(15), PAY_ID VARCHAR(15),REF_ID VARCHAR(15),
333
		REQ_PAY_DESC NVARCHAR(500), REQ_PAY_ENTRIES NVARCHAR(250),CURRENCY VARCHAR(15),RATE DECIMAL(18,0),AMT_PAY_REAL DECIMAL(18,2))
334
		OPEN XmlDataSchedule
335

    
336
		FETCH NEXT FROM XmlDataSchedule INTO @PO_ID,@TERM_PAY,@AMT_PAY_SCHEDULE,@REQ_ADV_ID_SCHE,@AMT_ADVANCE_SCHEDULE,@AMT_PAY_DO,
337
		@AMT_REMAIN_SCHEDULE,@REQ_AD_DT,@PROCESS,@PAY_ID,@REF_ID,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@CURRENCY,@RATE,@AMT_PAY_REAL
338
		WHILE @@fetch_status=0 
339
		BEGIN
340
			DECLARE @p_REQ_PAY_SCHEDULE_ID VARCHAR(15);
341
			EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_SCHEDULE', @p_REQ_PAY_SCHEDULE_ID OUT;
342
			IF @p_REQ_PAY_SCHEDULE_ID='' OR @p_REQ_PAY_SCHEDULE_ID IS NULL GOTO ABORT;
343
			INSERT INTO TR_REQ_PAY_SCHEDULE(
344
			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,
345
			CREATE_DT,AUTH_STATUS_KT,PAYMENT_STATUS,TRN_TYPE,REF_ID,REQ_PAY_DESC,REQ_PAY_ENTRIES,CURRENCY,RATE,AMT_PAY_REAL)
346
			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,
347
			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)
348
		IF @@error<>0 GOTO ABORT;
349
		FETCH NEXT FROM XmlDataSchedule INTO @PO_ID,@TERM_PAY,@AMT_PAY_SCHEDULE,@REQ_ADV_ID_SCHE,@AMT_ADVANCE_SCHEDULE,@AMT_PAY_DO,
350
		@AMT_REMAIN_SCHEDULE,@REQ_AD_DT,@PROCESS,@PAY_ID,@REF_ID,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@CURRENCY,@RATE,@AMT_PAY_REAL
351
		END
352
		CLOSE XmlDataSchedule;
353
		DEALLOCATE XmlDataSchedule;
354
	END
355
--- END TẠM ỨNG THANH TOÁN
356
--- BEGIN TẠM ỨNG HĐ ĐỊNH KỲ
357
	IF(@p_REQ_TYPE = 'P' AND @p_IS_PERIOD='Y')
358
	BEGIN
359
			DECLARE @END_DT VARCHAR(20)
360
			DECLARE XmlDataRecurring CURSOR FOR
361
			SELECT * FROM
362
			OPENXML(@hdocRecurring, '/Root/XmlDataRecurring', 2)
363
			WITH(CONTRACT_ID varchar(15),IS_CLOSED VARCHAR(1),REF_TYPE VARCHAR(15), END_DT VARCHAR(20))
364
			OPEN XmlDataRecurring;
365
			SET @INDEX_PO = 0
366
			FETCH NEXT FROM XmlDataRecurring INTO @REF_ID,@IS_CLOSED,@REF_TYPE, @END_DT
367
			WHILE @@fetch_status=0 
368
			BEGIN
369
				SET @INDEX_PO = @INDEX_PO +1
370
				DECLARE @REQ_PAYDTID_C VARCHAR(15);
371
				EXEC SYS_CodeMasters_Gen 'TR_REQ_ADVANCE_DT', @REQ_PAYDTID_C OUT;
372
				IF @REQ_PAYDTID_C='' OR @REQ_PAYDTID_C IS NULL GOTO ABORT;
373
				INSERT INTO TR_REQ_ADVANCE_DT (REQ_PAYDTID,REQ_PAY_ID,REF_ID,TYPE,MAKER_ID,CREATE_DT,IS_CLOSED,REF_TYPE, END_DT) 
374
				VALUES (@REQ_PAYDTID_C,@p_REQ_PAY_ID,@REF_ID,'ADV_PAY',@p_MAKER_ID,GETDATE(),@IS_CLOSED,'C', CONVERT(DATE,@END_DT,103))
375
			IF @@error<>0 GOTO ABORT;
376
			FETCH NEXT FROM XmlDataRecurring INTO @REF_ID,@IS_CLOSED,@REF_TYPE, @END_DT
377
			END
378
			CLOSE XmlDataRecurring;
379
			DEALLOCATE XmlDataRecurring;
380
			--- CUSOR DANH SACH LICH THANH TOAN PO - HD	
381
		----------------------------
382
		--INSERT FROM PERIOD	
383
			DECLARE XmlDataPeriod CURSOR FOR
384
			SELECT * FROM OPENXML(@hdocPeriod, '/Root/XmlDataPeriod', 2)
385
			WITH(CONTRACT_ID varchar(15),PAY_DT_REAL VARCHAR(20),PAY_TYPE VARCHAR(5),
386
			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))
387
			OPEN XmlDataPeriod;
388
			DECLARE @CONTRACT_ID varchar(15),@PAY_DT_REAL VARCHAR(20),@PAY_TYPE VARCHAR(5),
389
			@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),
390
			@REASON_TTDK NVARCHAR(2000)
391
			FETCH NEXT FROM XmlDataPeriod INTO @CONTRACT_ID ,@PAY_DT_REAL ,@PAY_TYPE ,
392
			@OLD_INDEX ,@NEW_INDEX ,@AMT_PAY_PERIOD,@CURRENCY, @RATE,@FROM_DATE,@TO_DATE,@PAY_PHASE,@REASON_TTDK, @END_DT
393
			WHILE @@fetch_status=0 
394
			BEGIN
395
				-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
396
				IF(@p_TYPE_FUNCTION ='SEND')
397
				BEGIN
398
					
399
					IF(EXISTS(SELECT CONTRACT_ID 
400
					FROM TR_CONTRACT 
401
					WHERE CONTRACT_ID = @REF_ID
402
					AND IS_CLOSED='Y' ))
403
					BEGIN
404
						ROLLBACK TRANSACTION
405
						SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Thông tin thanh toán hợp đồng định kì: Tạm ứng hợp đồng định kì đã đóng' ErrorDesc
406
						RETURN '-1'
407
					END
408
					IF(@NEW_INDEX <=@OLD_INDEX AND @NEW_INDEX >0 AND @OLD_INDEX >0  )
409
					BEGIN
410
						ROLLBACK TRANSACTION
411
						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ì: Chỉ số mới phải lớn hơn chỉ số cũ' ErrorDesc
412
						RETURN '-1'
413
					END
414
					-- NEU LÀ DINH KI THI HD PHAI KHAC NULL
415
					IF(@CONTRACT_ID IS NULL OR @CONTRACT_ID ='' )
416
					BEGIN
417
						ROLLBACK TRANSACTION
418
						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
419
						RETURN '-1'
420
					END
421
					-- KIEM TRA CHI TIET HOP DONG PHAI NAM TRONG DANH SACH CAC HOP DONG
422
					IF(@CONTRACT_ID IS NOT NULL AND  @CONTRACT_ID <> '' )
423
					BEGIN
424
						IF(NOT EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND REF_ID =@CONTRACT_ID))
425
						ROLLBACK TRANSACTION
426
						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
427
						RETURN '-1'
428
					END
429
				END
430
				DECLARE @PERIOD_ID VARCHAR(15);
431
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_PERIOD', @PERIOD_ID OUT;
432
				IF @PERIOD_ID='' OR @PERIOD_ID IS NULL GOTO ABORT;
433
				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, 
434
				TO_DATE,AD_PAY_ID,PROCESS,PAY_PHASE,REASON)
435
				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',@CURRENCY, @RATE,
436
				CONVERT(DATE,@FROM_DATE,103),CONVERT(DATE,@TO_DATE,103),@p_REQ_PAY_ID,'0',@PAY_PHASE,@REASON_TTDK)
437
		IF @@error<>0 GOTO ABORT;
438
		FETCH NEXT FROM XmlDataPeriod INTO @CONTRACT_ID ,@PAY_DT_REAL ,@PAY_TYPE ,
439
			@OLD_INDEX ,@NEW_INDEX ,@AMT_PAY_PERIOD,@CURRENCY, @RATE,@FROM_DATE,@TO_DATE,@PAY_PHASE,@REASON_TTDK, @END_DT
440
		END
441
		CLOSE XmlDataPeriod;
442
		DEALLOCATE XmlDataPeriod;
443
		-- VALIDATE SO TIEN
444
		--IF(@p_REQ_AMT >= @TOTAL_SCHEDULE_AMT)
445
		--BEGIN
446
		--	ROLLBACK TRANSACTION
447
		--	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
448
		--	RETURN '-1'
449
		--END
450
		----
451
	END
452
---- END TẠM ỨNG HỢP ĐỒNG ĐỊNH KÌ
453
--- BEGIN INSERT PHƯƠNG THỨC THANH TOÁN
454
	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),
455
	@ACC_NO VARCHAR(50), @ACC_NAME NVARCHAR(200), @ISSED_BY NVARCHAR(250), @ISSUED_DT VARCHAR(20),@CHECK_IN VARCHAR(15),
456
	@TYPE_TRANSFER VARCHAR(15), @BANKCODE_NAPAS VARCHAR(20), @BANKCODE VARCHAR(20), @BANKNAME NVARCHAR(250), @SUB_ISSUED_BY NVARCHAR(250), @RECEIVER_DEBIT VARCHAR(20)
457
	DECLARE @INDEX_PAY_METHOD DECIMAL(18,0) = 0;
458

    
459
	DECLARE XmlDataMethod CURSOR FOR
460
	SELECT * 
461
	FROM OPENXML(@hdocPayMethod, '/Root/XmlDataMethod',2)
462
	WITH(RECEIVE_ID varchar(15),RECEIVE_NAME nvarchar(100),REQ_PAY_REASON nvarchar(MAX),TOTAL_AMT decimal(18,2),REQ_PAY_TYPE varchar(1),
463
	REQ_PAY_DESC nvarchar(MAX),REQ_PAY_ENTRIES nvarchar(MAX),ACC_NO VARCHAR(50), 
464
	ACC_NAME NVARCHAR(200), ISSUED_BY NVARCHAR(250), ISSUED_DT VARCHAR(20),CURRENCY VARCHAR(15),RATE DECIMAL(18,0),CHECK_IN VARCHAR(15),
465
	TYPE_TRANSFER VARCHAR(15), BANKCODE_NAPAS VARCHAR(20), BANKCODE VARCHAR(20), BANKNAME VARCHAR(250), SUB_ISSUED_BY VARCHAR(250), RECEIVER_DEBIT VARCHAR(20))
466
	OPEN XmlDataMethod
467

    
468
	FETCH NEXT FROM XmlDataMethod 
469
	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,
470
	@TYPE_TRANSFER, @BANKCODE_NAPAS, @BANKCODE, @BANKNAME, @SUB_ISSUED_BY, @RECEIVER_DEBIT
471
	WHILE @@fetch_status=0 
472
	BEGIN
473
		SET @INDEX_PAY_METHOD = @INDEX_PAY_METHOD + 1;
474
				---------------------------start validate ------------------------------
475
		IF(@p_TYPE_FUNCTION ='SEND')
476
		BEGIN
477
			IF(@ACC_NO IS NULL OR @ACC_NO = '')
478
			BEGIN
479
				ROLLBACK TRANSACTION
480
				SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Lưới phương thức thanh toán, dòng ' + CAST(@INDEX_PAY_METHOD AS NVARCHAR(255)) + N': Số tài khoản không được để trống'  ErrorDesc
481
				RETURN '-1'
482
			END
483
			IF(@ACC_NAME IS NULL OR @ACC_NAME = '')
484
			BEGIN
485
				ROLLBACK TRANSACTION
486
				SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Lưới phương thức thanh toán, dòng ' + CAST(@INDEX_PAY_METHOD AS NVARCHAR(255)) + N': Tên tài khoản không được để trống'  ErrorDesc
487
				RETURN '-1'
488
			END
489
			IF(@ISSED_BY IS NULL OR @ISSED_BY = '')
490
			BEGIN
491
				ROLLBACK TRANSACTION
492
				SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Lưới phương thức thanh toán, dòng ' + CAST(@INDEX_PAY_METHOD AS NVARCHAR(255)) + N': Tên ngân hàng/ nơi cấp CMND không được để trống'  ErrorDesc
493
				RETURN '-1'
494
			END
495
			IF(@REQ_PAY_TYPE = '1' AND (@ISSUED_DT IS NULL OR @ISSUED_DT = ''))
496
			BEGIN
497
				ROLLBACK TRANSACTION
498
				SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Lưới 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
499
				RETURN '-1'
500
			END
501
		END
502
				-----------------------------end validate ----------------------------
503
		IF(@REQ_PAY_TYPE <>'1')
504
		BEGIN
505
			SET @ISSUED_DT = NULL
506
		END
507
		DECLARE @p_REQ_PAY_METHOD_ID VARCHAR(15);
508
		EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_METHOD', @p_REQ_PAY_METHOD_ID OUT;
509
		IF @p_REQ_PAY_METHOD_ID='' OR @p_REQ_PAY_METHOD_ID IS NULL GOTO ABORT;
510
		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,
511
		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)
512
		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,'',
513
		@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)
514
	IF @@error<>0 GOTO ABORT;
515
	FETCH NEXT FROM XmlDataMethod 
516
	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,
517
	@TYPE_TRANSFER, @BANKCODE_NAPAS, @BANKCODE, @BANKNAME, @SUB_ISSUED_BY, @RECEIVER_DEBIT
518
	END
519
	CLOSE XmlDataMethod;
520
	DEALLOCATE XmlDataMethod
521
----END INSERT PHƯƠNG THỨC THANH TOÁN
522

    
523
---- BEGIN INSERT VAO BANG DS KHACH HANG
524
	DECLARE XmlDataCus CURSOR FOR
525
	SELECT *
526
	FROM OPENXML(@hdocCus, '/Root/XmlDataCus', 2)
527
	WITH(CUST_ID varchar(15), EMP_ID VARCHAR(15), AMT_PAY_DO DECIMAL(18,2),CURRENCY VARCHAR(15),RATE DECIMAL(18,0))
528
	OPEN XmlDataCus;
529

    
530
	FETCH NEXT FROM XmlDataCus INTO @CUST_ID, @EMP_ID,@AMT_PAY_DO,@CURRENCY,@RATE
531
	WHILE @@fetch_status=0 
532
	BEGIN
533
		INSERT INTO TR_REQ_ADVANCE_CUS(REQ_PAY_ID,CUST_ID,EMP_ID,AMT_PAY_DO,CURRENCY,RATE,MAKER_ID,CREATE_DT)
534
		VALUES (@p_REQ_PAY_ID, @CUST_ID, @EMP_ID,@AMT_PAY_DO,@CURRENCY,@RATE,@p_MAKER_ID,GETDATE())
535
	IF @@error<>0 GOTO ABORT;
536
	FETCH NEXT FROM XmlDataCus INTO  @CUST_ID, @EMP_ID,@AMT_PAY_DO,@CURRENCY,@RATE
537
	END
538
	CLOSE XmlDataCus;
539
	DEALLOCATE XmlDataCus;
540
---- BEGIN INSERT VAO BANG DS KHACH HANG
541

    
542
-- BEGIN HANG MUC NGAN SACH VA CHI PHI
543
	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)
544
	DECLARE XmlDataGood CURSOR FOR
545
	SELECT * FROM
546
	OPENXML(@hdocPayBudget, '/Root/XmlDataGood',2) 
547
	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)
548
	OPEN XmlDataGood
549

    
550
	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
551
	WHILE @@fetch_status=0 
552
	BEGIN
553
		SET @INDEX_NS = @INDEX_NS +1
554
		IF(@p_TYPE_FUNCTION ='SEND')
555
		BEGIN
556
			IF(ISNULL(@AMT_EXE,0) =0)
557
			BEGIN
558
				ROLLBACK TRANSACTION
559
				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 0.' ErrorDesc
560
				RETURN '-1'
561
			END
562
			IF((@AMT_EXE  > @AMT_REMAIN_GD) AND ((SELECT GD_TYPE_ID FROM CM_GOODS WHERE GD_ID =@GD_ID) ='NS'))
563
			BEGIN
564
				ROLLBACK TRANSACTION
565
				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
566
				RETURN '-1'
567
			END		
568
		END
569
		DECLARE @p_BUDGET_ID VARCHAR(15);
570
		EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_BUDGET', @p_BUDGET_ID OUT;
571
		IF @p_BUDGET_ID='' OR @p_BUDGET_ID IS NULL GOTO ABORT;
572
		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) 
573
		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)
574
	IF @@error<>0 GOTO ABORT;
575
	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
576
	END;
577
	CLOSE XmlDataGood;
578
	DEALLOCATE XmlDataGood;
579
--- END HANG MUC NGAN SACH VA CHI PHI
580

    
581
-- BEGIN INSERT CHUNG TU DINH KEM
582
	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)
583
	DECLARE XmlAttach CURSOR FOR
584
	SELECT * 
585
	FROM OPENXML(@hdocPayAtach, '/Root/XmlAttach',2) 
586
	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))
587
	OPEN XmlAttach
588
	FETCH NEXT FROM XmlAttach INTO @ATTACH_ID,@CON_ID,@CONT_CODE,@NOTES_ATT,@CON_DESC,@CON_TYPE,@AMT_ATT,@REF_DT, @LICENSE_DT
589
	WHILE @@fetch_status=0 
590
	BEGIN
591
		IF (@REF_DT='')
592
		BEGIN
593
			SET @REF_DT = NULL
594
		END
595
		EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_ATTACH', @ATTACH_ID OUT;
596
		IF @ATTACH_ID='' OR @ATTACH_ID IS NULL GOTO ABORT;
597
		INSERT INTO TR_REQ_PAY_ATTACH(ATTACH_ID,REQ_PAY_ID,REF_ID,REF_CODE,NOTES,[DESCRIPTION],[TYPE],AMT,REF_DT, LICENSE_DT) VALUES
598
		(@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))
599
	IF @@error<>0 GOTO ABORT;
600
	FETCH NEXT FROM XmlAttach INTO @ATTACH_ID,@CON_ID,@CONT_CODE,@NOTES_ATT,@CON_DESC,@CON_TYPE,@AMT_ATT,@REF_DT, @LICENSE_DT
601
	END
602
	CLOSE XmlAttach;
603
	DEALLOCATE XmlAttach;
604
-- END INSERT CHUNG TU DINH KEM
605

    
606
--- BAT DAU VALIDATE
607
	IF(@p_TYPE_FUNCTION ='SEND')
608
	BEGIN
609
		DECLARE @SUM_PTTT DECIMAL(18,0), @SUM_NS DECIMAL(18,0),@SUM_LICH_TT DECIMAL(18,0)
610
		SET @SUM_PTTT =(SELECT SUM(TOTAL_AMT * ISNULL(RATE,1)) FROM  TR_REQ_PAY_METHOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
611
		IF(EXISTS(SELECT * FROM TR_REQ_PAY_SCHEDULE WHERE REQ_PAY_ID =@p_REQ_PAY_ID) AND @p_REQ_TYPE ='D')
612
		BEGIN
613
			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)
614
			IF(@p_REQ_AMT*ISNULL(@p_RATE,1) != ISNULL(@SUM_LICH_TT,0))
615
			BEGIN
616
				ROLLBACK TRANSACTION
617
				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
618
				RETURN '-1'
619
			END
620
		END
621
		IF(EXISTS(SELECT * FROM TR_REQ_PAY_BUDGET WHERE REQ_PAY_ID =@p_REQ_PAY_ID))
622
		BEGIN
623
			SET @SUM_NS =(SELECT SUM(AMT_EXE * ISNULL(RATE,1)) FROM  TR_REQ_PAY_BUDGET WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
624
			IF(@p_REQ_AMT*ISNULL(@p_RATE,1) != ISNULL(@SUM_PTTT,0))
625
			BEGIN
626
				ROLLBACK TRANSACTION
627
				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
628
				RETURN '-1'
629
			END
630
		END
631
		ELSE
632
		IF(@p_REQ_AMT*ISNULL(@p_RATE,1) != ISNULL(@SUM_PTTT,0))
633
		BEGIN
634
			ROLLBACK TRANSACTION
635
			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
636
			RETURN '-1'
637
		END
638
			
639
	END
640
---- END VALIDATE
641
		--- INSERT SẴN VÀO BẢNG TR_REQUEST_PROCESS
642
	IF(@p_REQ_TYPE ='I')
643
	BEGIN
644
		DECLARE @tmp table(ROLE_ID VARCHAR(25),BRANCH_ID varchar(15),AMT DECIMAL(18,0))
645
		IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE) ='HS')
646
		BEGIN
647
			--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'
648
			IF EXISTS(SELECT * FROM CM_DEPARTMENT WHERE (DEP_CODE LIKE '%06908%' OR DEP_CODE ='0690605' OR DEP_CODE LIKE'06906%') AND DEP_ID =@p_DEP_ID) --- LUCTV 14.10.22 BO SUNG THEM PHONG BAN
649
			BEGIN
650
				-- KHOI TAI CHINH SE KHONG CO PTGD NUA MA CHI CO KDK - LUCTV 29032021
651
				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'
652
				--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'
653
			END
654
			ELSE IF EXISTS(SELECT * FROM CM_DEPARTMENT WHERE (DEP_CODE LIKE '%06910%' OR DEP_CODE ='0690405') AND DEP_ID =@p_DEP_ID)
655
			BEGIN
656
				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'
657
			END
658
			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)
659
			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) 
660
			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)
661
			OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%799%' AND DEP_ID =@p_DEP_ID)
662
			OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%899%' AND DEP_ID =@p_DEP_ID))
663
			BEGIN
664
				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')
665
			END
666
			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)
667
			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) 
668
			OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06922%' AND DEP_ID =@p_DEP_ID))
669
			BEGIN
670
				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'
671
			END
672
			ELSE
673
			BEGIN
674
				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'
675
			END
676
		END
677
		ELSE
678
		BEGIN
679
			IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE) ='CN')
680
			BEGIN
681
				--- BAO GOM DON VI & 3 CAP DUYET CUA HOI SO
682
				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'
683
				--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'
684
			END
685
			ELSE IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE) ='PGD')
686
			BEGIN
687
				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'
688
				--AND BRANCH_ID =(SELECT FATHER_ID FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE)AND BRANCH_ID = @p_BRANCH_CREATE
689
				--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'
690
			END
691
		END
692
		DECLARE @ROLE_ID VARCHAR(20), @BRANCH_ID VARCHAR(20), @INDEX INT =0, @SL_ROLE INT =0,@LIMIT_VALUE DECIMAL(18,0)
693
		SET @SL_ROLE = (SELECT COUNT(*) FROM @tmp)
694
		DECLARE @ISLEAF VARCHAR(1) = 'Y', @PARENT_ID VARCHAR(10) = '', @STATUS VARCHAR(1) = 'C', @NOTES NVARCHAR(500)
695
		DECLARE CUR_PR CURSOR FOR  SELECT A.ROLE_ID, A.BRANCH_ID,A.AMT FROM @tmp A ORDER BY A.AMT ASC
696
		OPEN CUR_PR
697
		FETCH NEXT FROM CUR_PR INTO @ROLE_ID,@BRANCH_ID,@LIMIT_VALUE
698
		WHILE @@FETCH_STATUS =0 --AND @STOP=0
699
		BEGIN								
700
			SET @INDEX= @INDEX+1
701
			IF @INDEX = @SL_ROLE
702
				SET @ISLEAF = 'Y'
703
			ELSE
704
				SET @ISLEAF = 'N'
705
			SET @NOTES = (SELECT N'Đợi '+ ROLE_DESC + N' phê duyệt' FROM TL_SYSROLE WHERE ROLE_ID = @ROLE_ID)
706

    
707
			IF(@INDEX=1 )
708
			BEGIN		
709
				SET @PARENT_ID = NULL
710
				SET @STATUS = 'C'							
711
				--INSERT INTO TR_REQUEST_PROCESS VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),'C',@ROLE_ID,@BRANCH_ID,NULL,NULL,NULL,@ISLEAF)
712
			END				
713
			ELSE 
714
			BEGIN
715
				SET @PARENT_ID = CONVERT(VARCHAR(5),@INDEX -1)
716
				SET @STATUS = 'U'
717
			END
718
				IF(@LIMIT_VALUE >= @p_REQ_AMT)
719
				BEGIN
720
					INSERT INTO dbo.PL_REQUEST_PROCESS
721
					(
722
						REQ_ID,
723
						PROCESS_ID,
724
						STATUS,
725
						ROLE_USER,
726
						BRANCH_ID,
727
						CHECKER_ID,
728
						APPROVE_DT,
729
						PARENT_PROCESS_ID,
730
						IS_LEAF, COST_ID, DVDM_ID, NOTES
731
					)
732
					VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),@STATUS,@ROLE_ID,@BRANCH_ID,NULL,NULL, @PARENT_ID,'Y', '',@p_DVDM_ID,@NOTES)
733
					--INSERT INTO PL_REQUEST_PROCESS VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),@STATUS,@ROLE_ID,@BRANCH_ID,NULL,NULL, @PARENT_ID,'Y')
734
					IF(@ROLE_ID <> 'TKTGD' AND @ROLE_ID <> 'TKHDQT')
735
					BEGIN
736
						BREAK;
737
					END
738
				END
739
				ELSE
740
					INSERT INTO PL_REQUEST_PROCESS (
741
						REQ_ID,
742
						PROCESS_ID,
743
						STATUS,
744
						ROLE_USER,
745
						BRANCH_ID,
746
						CHECKER_ID,
747
						APPROVE_DT,
748
						PARENT_PROCESS_ID,
749
						IS_LEAF, COST_ID, DVDM_ID, NOTES
750
					) VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),@STATUS,@ROLE_ID,@BRANCH_ID,NULL,NULL, @PARENT_ID,@ISLEAF, '', @p_DVDM_ID, @NOTES)
751
			--END
752
					
753
			FETCH NEXT FROM CUR_PR INTO @ROLE_ID,@BRANCH_ID,@LIMIT_VALUE
754
		END
755
		CLOSE CUR_PR
756
		DEALLOCATE CUR_PR
757
	END
758
			--- CAP NHAT THANG CUOI CUNG LA Y
759
			--UPDATE TR_REQUEST_PROCESS SET IS_LEAF='Y' WHERE ID = (SELECT MAX(ID) FROM TR_REQUEST_PROCESS WHERE REQ_ID = @p_REQ_PAY_ID)
760
COMMIT TRANSACTION
761
	IF(@p_TYPE_FUNCTION ='SEND')-- BAT DAU GUI PHE DUYET
762
	BEGIN
763
		DECLARE @SUM_TEMP_PAY DECIMAL, @SUM_PAY DECIMAL
764
		DECLARE @BRANCH_TYPE_CR VARCHAR(15)
765
		IF (@p_REQ_TYPE ='I')
766
		BEGIN
767
			SET @SUM_TEMP_PAY = (SELECT SUM(REQ_AMT*ISNULL(RATE,1)) 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')
768
			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')
769
			UPDATE TR_REQ_ADVANCE_PAYMENT 
770
			SET REQ_TEMP_AMT = ISNULL(@SUM_TEMP_PAY,0) - ISNULL(@SUM_PAY,0), 
771
			RECEIVER_DEBIT =(	SELECT TOP 1 ISNULL(ACC_NUM,'') 
772
								FROM CM_ACCOUNT_PAY 
773
								WHERE REF_ID =@p_REF_ID AND ACC_TYPE ='ADV_PAY' 
774
							) 
775
			WHERE  REQ_PAY_ID =@p_REQ_PAY_ID AND REQ_TYPE ='I'
776
		END
777
		SET @BRANCH_TYPE_CR =(SELECT TOP 1 BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID =@p_BRANCH_CREATE)
778
		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')
779
		BEGIN
780
			DECLARE @USER_TP VARCHAR(15) =''
781
			--SET @USER_TP =(SELECT TOP 1 TLNANME FROM TL_USER WHERE SECUR_CODE =@p_DEP_ID 
782
			--		AND (RoleName IN ('GDDV','TPTC','TC','KTT') OR RoleName IN (SELECT ROLE_OLD FROM TL_SYS_ROLE_MAPPING WHERE ROLE_NEW ='GDDV')))
783
			IF(@USER_TP IS NULL OR @USER_TP ='')
784
			BEGIN
785
				SET @USER_TP = (SELECT TOP 1 TLNANME FROM TL_USER_V2 WHERE SECUR_CODE =@p_DEP_ID 
786
					AND (RoleName IN ('GDDV','TPTC','TC','KTT')))
787
			END
788
			UPDATE TR_REQ_ADVANCE_PAYMENT SET TRASFER_USER_RECIVE =@USER_TP WHERE REQ_PAY_ID =@p_REQ_PAY_ID
789
		END
790
		IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID  =@p_REQ_PAY_ID AND AUTH_STATUS='U'))
791
		BEGIN
792
			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
793
			RETURN '-1'
794
		END
795
		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')
796
		BEGIN
797
			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
798
			RETURN '-1'
799
		END
800
		-- CAP NHAT TINH TRANG DUYET KE TOAN LA DANG XU LY 
801
		UPDATE TR_REQ_ADVANCE_PAYMENT SET AUTH_STATUS ='U', PROCESS = NULL WHERE REQ_PAY_ID =@p_REQ_PAY_ID
802
		UPDATE PL_REQUEST_PROCESS SET ROLE_USER ='GDDV' WHERE REQ_ID =@p_REQ_PAY_ID AND ROLE_USER ='PGD'
803
		UPDATE PL_REQUEST_PROCESS SET ROLE_USER ='TPGD' WHERE REQ_ID =@p_REQ_PAY_ID AND ROLE_USER ='PPGD'
804
		INSERT INTO dbo.PL_PROCESS(REQ_ID,PROCESS_ID,CHECKER_ID,APPROVE_DT,PROCESS_DESC,NOTES)
805
		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')
806
		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))
807
		BEGIN
808
			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
809
			RETURN '4'
810
		END
811
		ELSE
812
		BEGIN
813
			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
814
			RETURN '4'
815
		END
816
	END
817
	-- FIX PHONG HO LOI LIEN QUAN DEN VIEC TAI KHOAN TAM UNG BI SAI
818
	DECLARE  @REQ_PAY_ID varchar(15), @l_REF_ID varchar(15)
819
	DECLARE cursorProduct CURSOR LOCAL FOR
820
	SELECT REQ_PAY_ID,REF_ID FROM TR_REQ_ADVANCE_PAYMENT A WHERE A.REQ_TYPE ='I'
821
	Open cursorProduct
822
	FETCH NEXT FROM cursorProduct INTO @REQ_PAY_ID, @l_REF_ID
823
	WHILE @@FETCH_STATUS = 0
824
	BEGIN
825
		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
826
	FETCH NEXT FROM cursorProduct INTO  @REQ_PAY_ID, @l_REF_ID
827
	END
828
	SELECT '0' as Result, @p_REQ_PAY_ID  REQ_PAY_ID,@p_REQ_PAY_CODE AS REQ_PAY_CODE, N'Thêm mới thành công' ErrorDesc
829
	RETURN '0'
830
ABORT:
831
BEGIN
832
		ROLLBACK TRANSACTION
833
		SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, '' ErrorDesc
834
		RETURN '-1'
835
End
836

    
837
GO
838
ALTER   PROCEDURE [dbo].[TR_REQ_ADVANCE_PAYMENT_Upd]
839
@p_REQ_PAY_ID	varchar(15)= NULL,
840
@p_REQ_PAY_CODE	varchar(50)	= NULL,
841
@p_REQ_DT VARCHAR(20)= NULL,
842
@p_BRANCH_ID	varchar(15)	= NULL,
843
@p_DEP_ID	varchar(15)	= NULL,
844
@p_REQ_REASON	nvarchar(MAX)	= NULL,
845
@p_REQ_TYPE	varchar(15)	= NULL,
846
@P_REQ_ENTRIES nvarchar(MAX)	= NULL,
847
@p_REQ_DESCRIPTION	nvarchar(MAX)	= NULL,
848
@p_REF_ID	varchar(15)	= NULL,
849
@p_RECEIVER_PO	nvarchar(250)	= NULL,
850
@p_RECEIVER_DEBIT	nvarchar(250)	= NULL,
851
@p_REQ_PAY_TYPE	varchar(15)	= NULL,
852
@p_REQ_TYPE_CURRENCY	nvarchar(50)	= NULL,
853
@p_REQ_AMT	decimal(18, 0)	= NULL,
854
@p_REQ_TEMP_AMT	decimal(18, 0)	= NULL,
855
@p_MAKER_ID	varchar(15)	= NULL,
856
@p_CREATE_DT	varchar(25)	= NULL,
857
@p_EDITOR_ID	varchar(15)	= NULL,
858
@p_AUTH_STATUS	varchar(1)	= NULL,
859
@p_CHECKER_ID	varchar(15)	= NULL,
860
@p_APPROVE_DT	varchar(25)	= NULL,
861
@p_CREATE_DT_KT	varchar(25)	= NULL,
862
@p_MAKER_ID_KT	varchar(15)	= NULL,
863
@p_AUTH_STATUS_KT	varchar(1)	= NULL,
864
@p_CHECKER_ID_KT	varchar(1)	= NULL,
865
@p_APPROVE_DT_KT  varchar(25)= null,
866
@p_CONFIRM_NOTE	nvarchar(500)	= NULL,
867
@p_BRANCH_CREATE	varchar(15)	= NULL,
868
@p_NOTES	varchar(15)	= NULL,
869
@p_RECORD_STATUS	varchar(1)	= NULL,
870
@p_TRANSFER_MAKER	nvarchar(50)	= NULL,
871
@p_TRANSFER_DT	varchar(25)	= NULL,
872
@p_TRASFER_USER_RECIVE	varchar(15)	= NULL,
873
@p_PROCESS	varchar(15)	= NULL,
874
@p_PAY_PHASE VARCHAR(15)= NULL,
875
@p_DVDM_ID VARCHAR(15)= NULL,
876
@p_RATE DECIMAL(18,0) =0,
877
@p_RECIVER_MONEY VARCHAR(15)= NULL,
878
@p_TYPE_FUNCTION VARCHAR(15) = NULL,
879
@p_IS_PERIOD VARCHAR(5) = NULL,
880
@p_PAY_AMT DECIMAL(18,0)= NULL,
881
--doanptt 19/01/2022
882
@p_XMP_TEMP XML = NULL,
883
@p_XMP_CUS XML = NULL,
884
@p_XMP_PAY_ATTACH XML = NULL,
885
@p_XMP_PAY_INVOICE XML = NULL,
886
@p_XMP_ADVANCE_DT_2 XML = NULL,
887
@p_XMP_PAY_SCHEDULE XML = NULL,
888
@p_XMP_PAY_PERIOD XML = NULL,
889
@p_XMP_PAY_METHOD XML = NULL,
890
@p_XMP_PAY_BUDGET XML = NULL,
891
@p_XMP_ADVANCE_DT XML = NULL
892
AS
893
-- Begin Validation update
894
	IF(@p_TYPE_FUNCTION <> 'SEND')
895
	BEGIN
896
		IF(NOT EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT where MAKER_ID = @p_MAKER_ID ))
897
		BEGIN
898
			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
899
			RETURN '-1'
900
		END
901
		IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT where AUTH_STATUS = 'U' AND REQ_PAY_ID = @p_REQ_PAY_ID ))
902
		BEGIN
903
			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
904
			RETURN '-1'
905
		END
906
		IF (@p_REQ_PAY_CODE IS NULL OR @p_REQ_PAY_CODE ='')
907
		BEGIN
908
			SELECT '-1' Result, '' REQ_PAY_ID, N'Mã số phiếu không được để trống' ErrorDesc
909
			RETURN '-1'
910
		END
911
		IF (EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_CODE = @p_REQ_PAY_CODE AND REQ_PAY_ID <> @p_REQ_PAY_ID))
912
		BEGIN
913
			SELECT '-1' Result, '' REQ_PAY_ID, N'Mã số phiếu đã tồn tại trong hệ thống' ErrorDesc
914
			RETURN '-1'
915
		END
916
		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, '') <> ''))
917
		BEGIN
918
			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
919
			RETURN '-1'
920
		END
921
	END
922
	
923
-- End Validation update
924

    
925
	DECLARE @BRANCH_TYPE_CR VARCHAR(15), @ROLE_KI_NHAY VARCHAR(50)
926
	SET  @ROLE_KI_NHAY =(SELECT TOP 1 RoleName FROM TL_USER WHERE TLNANME =@p_TRASFER_USER_RECIVE)
927
	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'))
928
	BEGIN
929
		PRINT @ROLE_KI_NHAY
930
	END
931
	ELSE
932
	BEGIN
933
		SET @ROLE_KI_NHAY =(SELECT TOP 1 RoleName FROM TL_USER_V2 WHERE TLNANME =@p_TRASFER_USER_RECIVE)
934
		IF(@ROLE_KI_NHAY IS NULL OR @ROLE_KI_NHAY ='')
935
		BEGIN
936
				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))
937
		END
938
	END
939
	--SET @ROLE_KI_NHAY =(SELECT RoleName FROM TL_USER_V2 WHERE TLNANME =@p_TRASFER_USER_RECIVE)
940
	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')
941
	BEGIN
942
		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
943
		RETURN '-1'
944
	END
945
	SET @BRANCH_TYPE_CR =(SELECT TOP 1 BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID =@p_BRANCH_CREATE)
946
	DECLARE @ACC_NUM VARCHAR(15)
947
	SET @ACC_NUM = (SELECT TOP 1 ACC_NUM FROM CM_ACCOUNT_PAY WHERE REF_ID =@p_REF_ID)
948

    
949
------------------------------------------------------------------------------------ start validate phần master ------------------------------------------------------------------------------------------------------
950
	IF(@p_TYPE_FUNCTION = 'SEND')
951
	BEGIN
952
		IF (@p_BRANCH_ID IS NULL OR @p_BRANCH_ID ='')
953
		BEGIN
954
			SELECT '-1' Result, '' REQ_PAY_ID, N'Đơn vị yêu cầu không được để trống' ErrorDesc
955
			RETURN '-1'
956
		END
957
		IF (@p_DEP_ID IS NULL OR @p_DEP_ID ='')
958
		BEGIN
959
			SELECT '-1' Result, '' REQ_PAY_ID, N'Phòng ban đề nghị không được để trống' ErrorDesc
960
			RETURN '-1'
961
		END
962
		IF (@p_REQ_TYPE IS NULL OR @p_REQ_TYPE ='')
963
		BEGIN
964
			SELECT '-1' Result, '' REQ_PAY_ID, N'Loại phiếu yêu cầu không được để trống' ErrorDesc
965
			RETURN '-1'
966
		END
967
		IF (@p_REQ_REASON IS NULL OR @p_REQ_REASON ='')
968
		BEGIN
969
			SELECT '-1' Result, '' REQ_PAY_ID, N'Lý do tạm ứng không được để trống' ErrorDesc
970
			RETURN '-1'
971
		END
972
		IF (@p_REQ_AMT IS NULL OR @p_REQ_AMT = 0)
973
		BEGIN
974
			SELECT '-1' Result, '' REQ_PAY_ID, N'Số tiền tạm ứng phải lớn hơn không' ErrorDesc
975
			RETURN '-1'
976
		END
977
		IF (@p_BRANCH_ID IS NULL OR @p_BRANCH_ID ='')
978
		BEGIN
979
			SELECT '-1' Result, '' REQ_PAY_ID, N'Đơn vị không được để trống' ErrorDesc
980
			RETURN '-1'
981
		END
982
		IF (@p_RECIVER_MONEY IS NOT NULL AND @p_RECIVER_MONEY ='' AND @p_REQ_TYPE = 'D')
983
		BEGIN
984
			SELECT '-1' Result, '' REQ_PAY_ID, N'Người nhận tiền tạm ứng không được để trống' ErrorDesc
985
			RETURN '-1'
986
		END
987

    
988
		IF(@p_REQ_TYPE='I')
989
		BEGIN
990
			IF((@p_RECEIVER_DEBIT IS NULL OR @p_RECEIVER_DEBIT = ''))
991
			BEGIN
992
				SELECT '-1' as Result, '' REQ_PAY_ID, N'Tài khoản người đề nghị tạm ứng không được để trống'  ErrorDesc
993
				RETURN '-1'
994
			END
995
			IF(NOT EXISTS(SELECT * FROM CM_ACCOUNT_PAY WHERE ACC_NUM =@p_RECEIVER_DEBIT AND REF_ID =  @p_REF_ID))
996
			BEGIN
997
				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
998
				RETURN '-1'
999
			END
1000
			IF(LEN(ISNULL(@p_RECEIVER_DEBIT,''))>15)
1001
			BEGIN
1002
				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
1003
				RETURN '-1'
1004
			END
1005
		END
1006
	END
1007
------------------------------------------------------------------------------------ end validate phần master ------------------------------------------------------------------------------------------------------
1008

    
1009

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

    
1013
	-- THONG TIN KHACH HANG
1014
	EXEC sp_xml_preparedocument @hdocCus OUTPUT, @p_XMP_CUS;
1015
	-- HOP DONG, CHUNG TU DINH KEM
1016
	EXEC sp_xml_preparedocument @hdocPayAtach OUTPUT, @p_XMP_PAY_ATTACH;
1017
	-- THONG TIN PO/ HOP DONG
1018
	EXEC sp_xml_preparedocument @hdocPO OUTPUT, @p_XMP_ADVANCE_DT_2;
1019
	-- DANH SACH CAC DOT THANH TOAN PO/ HOP DONG
1020
	EXEC sp_xml_preparedocument @hdocSchedule OUTPUT, @p_XMP_PAY_SCHEDULE;
1021
	-- THONG TIN HOP DONG DINH KY
1022
	EXEC sp_xml_preparedocument @hdocRecurring OUTPUT, @p_XMP_ADVANCE_DT;
1023
	-- THONG TIN DINH KY TAM UNG
1024
	EXEC sp_xml_preparedocument @hdocPeriod OUTPUT, @p_XMP_PAY_PERIOD;
1025
	-- THONG TIN PHUONG THUC THANH TOAN
1026
	EXEC sp_xml_preparedocument @hdocPayMethod OUTPUT, @p_XMP_PAY_METHOD;
1027
	-- THONG TIN HANG MUC NGAN SACH VA CHI PHI
1028
	EXEC sp_xml_preparedocument @hdocPayBudget OUTPUT, @p_XMP_PAY_BUDGET;
1029

    
1030
		-------------------------------------------------------------- start validate các lưới -----------------------------------------------------------------------
1031
-- BEGIN VALIDATE CAC DANH SACH
1032
	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))))
1033
	BEGIN
1034
		SELECT '-1' Result, '' REQ_PAY_ID, N'Danh sách PO/ hợp đồng không được để trống' ErrorDesc
1035
		RETURN '-1'
1036
	END
1037
	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))))
1038
	BEGIN
1039
		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
1040
		RETURN '-1'
1041
	END
1042

    
1043
	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))))
1044
	BEGIN
1045
		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
1046
		RETURN '-1'
1047
	END
1048

    
1049
	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))))
1050
	BEGIN
1051
		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
1052
		RETURN '-1'
1053
	END
1054

    
1055
	IF(@p_REQ_TYPE = 'D' AND NOT EXISTS(SELECT * FROM OPENXML(@hdocCus, '/Root/XmlDataCus', 2) WITH(CONTRACT_ID varchar(15))))
1056
	BEGIN
1057
		SELECT '-1' Result, '' REQ_PAY_ID, N'Danh sách khách hàng không được để trống' ErrorDesc
1058
		RETURN '-1'
1059
	END
1060
-- END VALIDATE CAC DANH SACH
1061
		-------------------------------------------------------------- end validate các lưới -----------------------------------------------------------------------
1062
	-- SO TIEN THANH TOÁN PHAI LON HON KHONG
1063
	IF(@p_REQ_AMT <=0)
1064
	BEGIN	
1065
		SELECT '-1' as Result, '' REQ_PAY_ID, N'Số tiền tạm ứng phải lớn hơn 0' ErrorDesc
1066
		RETURN '-1'
1067
	END
1068
BEGIN TRANSACTION
1069
		UPDATE TR_REQ_ADVANCE_PAYMENT SET 
1070
		REF_ID = @p_REF_ID,
1071
		DEP_ID= @p_DEP_ID,REQ_REASON = @p_REQ_REASON, REQ_PAY_TYPE = @p_REQ_PAY_TYPE,
1072
		REQ_AMT = @p_REQ_AMT,
1073
		NOTES= @p_NOTES,
1074
		REQ_TYPE= @p_REQ_TYPE,REQ_DESCRIPTION = @p_REQ_DESCRIPTION,RECEIVER_PO =@p_RECEIVER_PO, RECEIVER_DEBIT= @p_RECEIVER_DEBIT,
1075
		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,
1076
		AUTH_STATUS='E', DVDM_ID=@p_DVDM_ID, RATE =@p_RATE,REQ_TYPE_CURRENCY =@p_REQ_TYPE_CURRENCY, RECIVER_MONEY= @p_RECIVER_MONEY, 
1077
		TRASFER_USER_RECIVE =@p_TRASFER_USER_RECIVE,IS_PERIOD =@p_IS_PERIOD, PAY_AMT = @p_PAY_AMT
1078
		WHERE REQ_PAY_ID =@p_REQ_PAY_ID
1079
		IF @@Error <> 0 GOTO ABORT
1080
--- INSERT VÀO BẢNG DETAIL NÊU TẠM ỨNG LÀ TẠM ỨNG THANH TOÁN
1081
		-- KIEM TRA NEU TAM UNG THANH TOAN
1082
		IF((@p_REQ_TYPE='P' AND (@p_IS_PERIOD <>'Y' OR @p_IS_PERIOD IS NULL)) OR @p_REQ_TYPE='D')
1083
		BEGIN
1084
			DELETE FROM TR_REQ_ADVANCE_DT WHERE REQ_PAY_ID=@p_REQ_PAY_ID
1085
			DELETE FROM TR_REQ_PAY_SCHEDULE WHERE REQ_PAY_ID=@p_REQ_PAY_ID
1086
			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),
1087
			@AMT_REMAIN_SCHEDULE decimal(18,0),@REQ_AD_DT varchar(20),@PROCESS varchar(15),@PAY_ID VARCHAR(15),
1088
			@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),
1089
			@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)
1090
			DECLARE @TYPE_COST VARCHAR(25), @FR_LEVEL INT ,@TO_LEVEL INT
1091
			DECLARE XmlDataPO CURSOR FOR
1092
			SELECT *
1093
			FROM OPENXML(@hdocPO, '/Root/XmlDataPO', 2)--Thông tin PO/ hợp đồng
1094
			WITH(REF_ID varchar(15),IS_CLOSED VARCHAR(1),REF_TYPE VARCHAR(15))
1095
			OPEN XmlDataPO;
1096
			DECLARE @INDEX_PO INT =0
1097
			SET @INDEX_PO = 0
1098
			FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
1099
			WHILE @@fetch_status=0 
1100
			BEGIN
1101
				SET @INDEX_PO = @INDEX_PO +1
1102
				-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
1103
				IF(@p_TYPE_FUNCTION ='SEND')
1104
				BEGIN
1105
					
1106
					
1107
				-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
1108
				IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND TYPE ='C' AND REQ_PAY_ID 
1109
				IN (SELECT REQ_PAY_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS_KT<>'A' OR AUTH_STATUS_KT IS NULL)))
1110
				BEGIN
1111
					ROLLBACK TRANSACTION
1112
					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ố '+
1113
					(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
1114
					RETURN '-1'
1115
				END
1116
				-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
1117
				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))
1118
				BEGIN
1119
					ROLLBACK TRANSACTION
1120
					SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': Hợp đồng số '+
1121
					(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
1122
					RETURN '-1'
1123
				END
1124
				-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
1125
				IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND TYPE ='P' AND REQ_PAY_ID 
1126
				IN (SELECT REQ_PAY_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS_KT<>'A' OR AUTH_STATUS_KT IS NULL)))
1127
				BEGIN
1128
					ROLLBACK TRANSACTION
1129
					SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO số '+
1130
					(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
1131
					RETURN '-1'
1132
				END
1133
				-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
1134
				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))
1135
				BEGIN
1136
					ROLLBACK TRANSACTION
1137
					SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO số '+
1138
					(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
1139
					RETURN '-1'
1140
				END
1141
				--- KIEM TRA XEM PO NAY DUOC THANH TOAN HAY CHUA
1142
				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' )))
1143
				BEGIN
1144
					ROLLBACK TRANSACTION
1145
					SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO số '+
1146
					(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
1147
					RETURN '-1'
1148
				END
1149
				END
1150
				DECLARE @REQ_PAYDTID VARCHAR(15);
1151
				EXEC SYS_CodeMasters_Gen 'TR_REQ_ADVANCE_DT', @REQ_PAYDTID OUT;
1152
				IF @REQ_PAYDTID='' OR @REQ_PAYDTID IS NULL GOTO ABORT;
1153

    
1154
				IF(LEFT(@REF_ID, 3) = 'TRC')
1155
				BEGIN
1156
					INSERT INTO TR_REQ_ADVANCE_DT (REQ_PAYDTID,REQ_PAY_ID,REF_ID,TYPE,MAKER_ID,CREATE_DT,IS_CLOSED,REF_TYPE) VALUES
1157
					(@REQ_PAYDTID,@p_REQ_PAY_ID,@REF_ID,'ADV_PAY',@p_MAKER_ID,GETDATE(),@IS_CLOSED,'C')
1158
				END
1159
				ELSE
1160
				BEGIN
1161
					INSERT INTO TR_REQ_ADVANCE_DT (REQ_PAYDTID,REQ_PAY_ID,REF_ID,TYPE,MAKER_ID,CREATE_DT,IS_CLOSED,REF_TYPE) VALUES
1162
					(@REQ_PAYDTID,@p_REQ_PAY_ID,@REF_ID,'ADV_PAY',@p_MAKER_ID,GETDATE(),@IS_CLOSED,'P')
1163
				END
1164
			IF @@error<>0 GOTO ABORT;
1165
			FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
1166
			END
1167
			CLOSE XmlDataPO;
1168
			DEALLOCATE XmlDataPO;
1169
			--- CUSOR DANH SACH LICH THANH TOAN PO - HD	
1170
			DECLARE XmlDataSchedule CURSOR FOR
1171
			SELECT *
1172
			FROM
1173
			OPENXML(@hdocSchedule, '/Root/XmlDataSchedule',2)
1174
			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),
1175
			AMT_REMAIN_SCHEDULE decimal(18,0),REQ_AD_DT varchar(20),PROCESS varchar(15), PAY_ID VARCHAR(15),REF_ID VARCHAR(15),
1176
			REQ_PAY_DESC NVARCHAR(500), REQ_PAY_ENTRIES NVARCHAR(250),CURRENCY VARCHAR(15),RATE DECIMAL(18,0),AMT_PAY_REAL DECIMAL(18,2))
1177
			OPEN XmlDataSchedule
1178
			FETCH NEXT FROM XmlDataSchedule INTO @PO_ID,@TERM_PAY,@AMT_PAY_SCHEDULE,@REQ_ADV_ID_SCHE,@AMT_ADVANCE_SCHEDULE,@AMT_PAY_DO,
1179
			@AMT_REMAIN_SCHEDULE,@REQ_AD_DT,@PROCESS,@PAY_ID,@REF_ID,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@CURRENCY,@RATE,@AMT_PAY_REAL
1180
			WHILE @@fetch_status=0 
1181
			BEGIN
1182
				DECLARE @p_REQ_PAY_SCHEDULE_ID VARCHAR(15);
1183
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_SCHEDULE', @p_REQ_PAY_SCHEDULE_ID OUT;
1184
				IF @p_REQ_PAY_SCHEDULE_ID='' OR @p_REQ_PAY_SCHEDULE_ID IS NULL GOTO ABORT;
1185
				INSERT INTO TR_REQ_PAY_SCHEDULE(
1186
				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,
1187
				CREATE_DT,AUTH_STATUS_KT,PAYMENT_STATUS,TRN_TYPE,REF_ID,REQ_PAY_DESC,REQ_PAY_ENTRIES,CURRENCY,RATE, AMT_PAY_REAL)
1188
				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,
1189
				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)
1190
			--- END KHAI BAO CURSOR
1191
			IF @@error<>0 GOTO ABORT;
1192
			FETCH NEXT FROM XmlDataSchedule INTO @PO_ID,@TERM_PAY,@AMT_PAY_SCHEDULE,@REQ_ADV_ID_SCHE,@AMT_ADVANCE_SCHEDULE,@AMT_PAY_DO,
1193
			@AMT_REMAIN_SCHEDULE,@REQ_AD_DT,@PROCESS,@PAY_ID,@REF_ID,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@CURRENCY,@RATE,@AMT_PAY_REAL
1194
			END
1195
			CLOSE XmlDataSchedule;
1196
			DEALLOCATE XmlDataSchedule;
1197
		END
1198
--- END TẠM ỨNG THANH TOÁN
1199

    
1200
---- BEGIN TẠM ỨNG HĐ ĐỊNH KÌ
1201
			IF(@p_REQ_TYPE = 'P' AND @p_IS_PERIOD='Y')
1202
			BEGIN
1203
				DELETE FROM TR_REQ_ADVANCE_DT WHERE REQ_PAY_ID =@p_REQ_PAY_ID
1204
				DELETE FROM TR_REQ_PAY_PERIOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID
1205
				DECLARE @END_DT VARCHAR(20)
1206
				DECLARE XmlDataRecurring CURSOR FOR
1207
				SELECT *
1208
				FROM OPENXML(@hdocRecurring, '/Root/XmlDataRecurring', 2)
1209
				WITH(CONTRACT_ID varchar(15),IS_CLOSED VARCHAR(1),REF_TYPE VARCHAR(15), END_DT VARCHAR(20))
1210
				OPEN XmlDataRecurring;
1211
				SET @INDEX_PO = 0
1212
				FETCH NEXT FROM XmlDataRecurring INTO @REF_ID,@IS_CLOSED,@REF_TYPE, @END_DT
1213
				WHILE @@fetch_status=0 
1214
				BEGIN
1215
					SET @INDEX_PO = @INDEX_PO +1
1216
					DECLARE @REQ_PAYDTID_C VARCHAR(15);
1217
					EXEC SYS_CodeMasters_Gen 'TR_REQ_ADVANCE_DT', @REQ_PAYDTID_C OUT;
1218
					IF @REQ_PAYDTID_C='' OR @REQ_PAYDTID_C IS NULL GOTO ABORT;
1219
					INSERT INTO TR_REQ_ADVANCE_DT (REQ_PAYDTID,REQ_PAY_ID,REF_ID,TYPE,MAKER_ID,CREATE_DT,IS_CLOSED,REF_TYPE, END_DT) 
1220
					VALUES(@REQ_PAYDTID_C,@p_REQ_PAY_ID,@REF_ID,'ADV_PAY',@p_MAKER_ID,GETDATE(),@IS_CLOSED,'C', CONVERT(DATE,@END_DT,103))
1221
				IF @@error<>0 GOTO ABORT;
1222
				FETCH NEXT FROM XmlDataRecurring INTO @REF_ID,@IS_CLOSED,@REF_TYPE, @END_DT
1223
				END
1224
				CLOSE XmlDataRecurring;
1225
				DEALLOCATE XmlDataRecurring;
1226
				--- CUSOR DANH SACH LICH THANH TOAN PO - HD	
1227
			----------------------------
1228
			--INSERT FROM PERIOD	
1229
				DECLARE XmlDataPeriod CURSOR FOR
1230
				SELECT *
1231
				FROM
1232
				OPENXML(@hdocPeriod, '/Root/XmlDataPeriod', 2)
1233
				WITH(CONTRACT_ID varchar(15),PAY_DT_REAL VARCHAR(20),PAY_TYPE VARCHAR(5),
1234
				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) )
1235
				OPEN XmlDataPeriod;
1236
				DECLARE @CONTRACT_ID varchar(15),@PAY_DT_REAL VARCHAR(20),@PAY_TYPE VARCHAR(5), @OLD_INDEX DECIMAL(18,0),@NEW_INDEX DECIMAL(18,0),
1237
				@AMT_PAY_PERIOD DECIMAL(18,2),@FROM_DATE VARCHAR(20),@TO_DATE VARCHAR(20),@PAY_PHASE NVARCHAR(250), @REASON_TTDK NVARCHAR(2000)
1238
				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
1239
				WHILE @@fetch_status=0 
1240
				BEGIN
1241
					-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
1242
					IF(@p_TYPE_FUNCTION ='SEND')
1243
					BEGIN
1244
					
1245
					--IF(EXISTS(SELECT CONTRACT_ID 
1246
					--FROM TR_CONTRACT 
1247
					--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 <>''))
1248
					
1249
					----AND IS_CLOSED='Y' ))
1250
					--BEGIN
1251
					--	ROLLBACK TRANSACTION
1252
					--	SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Tạm ứng hợp đồng định kì đã đóng' ErrorDesc
1253
					--	RETURN '-1'
1254
					--END
1255

    
1256
					IF(@NEW_INDEX <=@OLD_INDEX AND @NEW_INDEX >0 AND @OLD_INDEX >0)
1257
					BEGIN
1258
						ROLLBACK TRANSACTION
1259
						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
1260
						RETURN '-1'
1261
					END
1262
					-- NEU LÀ DINH KI THI HD PHAI KHAC NULL
1263
						IF(@CONTRACT_ID IS NULL OR @CONTRACT_ID ='' )
1264
						BEGIN
1265
							ROLLBACK TRANSACTION
1266
							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
1267
							RETURN '-1'
1268
						END
1269
					-- KIEM TRA CHI TIET HOP DONG PHAI NAM TRONG DANH SACH CAC HOP DONG
1270
						IF(@CONTRACT_ID IS NOT NULL AND  @CONTRACT_ID <> '' )
1271
						BEGIN
1272
							IF(NOT EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND REF_ID =@CONTRACT_ID))
1273
							BEGIN
1274
								ROLLBACK TRANSACTION
1275
								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
1276
								RETURN '-1'
1277
							END
1278
						END
1279
					END
1280
					DECLARE @PERIOD_ID VARCHAR(15);
1281
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_PERIOD', @PERIOD_ID OUT;
1282
					IF @PERIOD_ID='' OR @PERIOD_ID IS NULL GOTO ABORT;
1283
					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, 
1284
					TO_DATE,AD_PAY_ID,PROCESS,PAY_PHASE, REASON)
1285
					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',
1286
					@CURRENCY, @RATE,CONVERT(DATE,@FROM_DATE,103),CONVERT(DATE,@TO_DATE,103),@p_REQ_PAY_ID,'0',@PAY_PHASE,@REASON_TTDK)
1287
				IF @@error<>0 GOTO ABORT;
1288
				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
1289
			END
1290
			CLOSE XmlDataPeriod;
1291
			DEALLOCATE XmlDataPeriod;
1292
			-- VALIDATE SO TIEN
1293
			--IF(@p_REQ_AMT >= @TOTAL_SCHEDULE_AMT)
1294
			--BEGIN
1295
			--	ROLLBACK TRANSACTION
1296
			--	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
1297
			--	RETURN '-1'
1298
			--END
1299
			----
1300
			END
1301
---- END TẠM ỨNG HĐ ĐỊNH KÌ
1302

    
1303
--- INSERT PHƯƠNG THỨC THANH TOÁN
1304
		DELETE FROM TR_REQ_PAY_METHOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID
1305
		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),
1306
				@ACC_NO VARCHAR(50), @ACC_NAME NVARCHAR(250), @ISSED_BY NVARCHAR(250), @ISSUED_DT VARCHAR(20),
1307
				@TYPE_TRANSFER VARCHAR(15), @BANKCODE_NAPAS VARCHAR(20), @BANKCODE VARCHAR(20), @BANKNAME VARCHAR(250), @SUB_ISSUED_BY VARCHAR(250), @RECEIVER_DEBIT VARCHAR(20)
1308
		DECLARE @INDEX_PAY_METHOD DECIMAL(18,0) = 0;
1309
		DECLARE XmlDataMethod CURSOR FOR
1310
		SELECT *
1311
		FROM
1312
		OPENXML(@hdocPayMethod, '/Root/XmlDataMethod',2)
1313
		WITH(RECEIVE_ID varchar(15),RECEIVE_NAME nvarchar(100),REQ_PAY_REASON nvarchar(MAX),TOTAL_AMT decimal(18,2),REQ_PAY_TYPE varchar(1),
1314
		REQ_PAY_DESC nvarchar(MAX),REQ_PAY_ENTRIES nvarchar(MAX),ACC_NO VARCHAR(50), ACC_NAME NVARCHAR(250), 
1315
		ISSUED_BY NVARCHAR(250), ISSUED_DT VARCHAR(20),CURRENCY VARCHAR(15),RATE DECIMAL(18,0),CHECK_IN VARCHAR(15),
1316
		TYPE_TRANSFER VARCHAR(15), BANKCODE_NAPAS VARCHAR(20), BANKCODE VARCHAR(20), BANKNAME NVARCHAR(250), SUB_ISSUED_BY NVARCHAR(250), RECEIVER_DEBIT NVARCHAR(20))
1317
		OPEN XmlDataMethod
1318
		FETCH NEXT FROM XmlDataMethod 
1319
		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 
1320
		WHILE @@fetch_status=0 
1321
		BEGIN
1322
			SET @INDEX_PAY_METHOD = @INDEX_PAY_METHOD + 1;
1323
				---------------------------start validate ------------------------------
1324
				IF(@p_TYPE_FUNCTION ='SEND')
1325
				BEGIN
1326
					IF(@ACC_NO IS NULL OR @ACC_NO = '')
1327
					BEGIN
1328
						ROLLBACK TRANSACTION
1329
						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
1330
						RETURN '-1'
1331
					END
1332

    
1333
					IF((@BANKCODE IS NULL OR @BANKCODE = '') AND @CHECK_IN = 'O')
1334
					BEGIN
1335
						ROLLBACK TRANSACTION
1336
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Thông tin phương thức thanh toán, dòng ' + CONVERT(VARCHAR(5),@INDEX_PAY_METHOD)+N': Loại tài khoản là ngoài hệ thống! Vui lòng chọn lại Tên ngân hàng/nơi cấp CMND từ danh sách!' ErrorDesc
1337
						RETURN '-1'
1338
					END
1339

    
1340
					IF(@ACC_NAME IS NULL OR @ACC_NAME = '')
1341
					BEGIN
1342
						ROLLBACK TRANSACTION
1343
						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
1344
						RETURN '-1'
1345
					END
1346
					IF(@ISSED_BY IS NULL OR @ISSED_BY = '')
1347
					BEGIN
1348
						ROLLBACK TRANSACTION
1349
						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
1350
						RETURN '-1'
1351
					END
1352
					IF(@REQ_PAY_REASON IS NULL OR @REQ_PAY_REASON = '')
1353
					BEGIN
1354
						ROLLBACK TRANSACTION
1355
						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
1356
						RETURN '-1'
1357
					END
1358
					IF(@TOTAL_AMT_METHOD IS NULL OR @TOTAL_AMT_METHOD = 0)
1359
					BEGIN
1360
						ROLLBACK TRANSACTION
1361
						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
1362
						RETURN '-1'
1363
					END
1364
					IF(@REQ_PAY_TYPE = '1' AND (@ISSUED_DT IS NULL OR @ISSUED_DT = ''))
1365
					BEGIN
1366
						ROLLBACK TRANSACTION
1367
						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
1368
						RETURN '-1'
1369
					END
1370
						
1371
				END
1372
				-----------------------------end validate ----------------------------
1373
			IF(@REQ_PAY_TYPE<>'1')
1374
			BEGIN
1375
				SET @ISSUED_DT = NULL
1376
			END
1377
			DECLARE @p_REQ_PAY_METHOD_ID VARCHAR(15);
1378
			EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_METHOD', @p_REQ_PAY_METHOD_ID OUT;
1379
			IF @p_REQ_PAY_METHOD_ID='' OR @p_REQ_PAY_METHOD_ID IS NULL GOTO ABORT;
1380
			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,
1381
			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)
1382
			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,'',
1383
			@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)
1384
		IF @@error<>0 GOTO ABORT;
1385
		FETCH NEXT FROM XmlDataMethod 
1386
		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
1387
		END
1388
		CLOSE XmlDataMethod;
1389
		DEALLOCATE XmlDataMethod
1390
----END INSERT PHƯƠNG THỨC THANH TOÁN
1391

    
1392
---- BEGIN INSERT VAO BANG DS KHACH HANG
1393
		DELETE FROM TR_REQ_ADVANCE_CUS WHERE REQ_PAY_ID = @p_REQ_PAY_ID
1394
		DECLARE XmlDataCus CURSOR FOR
1395
		SELECT *
1396
		FROM
1397
		OPENXML(@hdocCus, '/Root/XmlDataCus', 2)
1398
		WITH(CUST_ID varchar(15), EMP_ID VARCHAR(15), AMT_PAY_DO decimal(18,2),CURRENCY VARCHAR(15),RATE DECIMAL(18,0))
1399
		OPEN XmlDataCus;
1400

    
1401
		FETCH NEXT FROM XmlDataCus INTO @CUST_ID, @EMP_ID,@AMT_PAY_DO,@CURRENCY,@RATE
1402
		WHILE @@fetch_status=0 
1403
		BEGIN		
1404
			INSERT INTO TR_REQ_ADVANCE_CUS(REQ_PAY_ID,CUST_ID,EMP_ID,AMT_PAY_DO,CURRENCY,RATE,MAKER_ID,CREATE_DT)
1405
			VALUES (@p_REQ_PAY_ID, @CUST_ID, @EMP_ID,@AMT_PAY_DO,@CURRENCY,@RATE,@p_MAKER_ID,GETDATE())
1406
		--- END KHAI BAO CURSOR
1407
		IF @@error<>0 GOTO ABORT;
1408
		FETCH NEXT FROM XmlDataCus INTO  @CUST_ID, @EMP_ID,@AMT_PAY_DO,@CURRENCY,@RATE
1409
		END
1410
		CLOSE XmlDataCus;
1411
		DEALLOCATE XmlDataCus;
1412
---- END INSERT VAO BANG DS KHACH HANG
1413

    
1414
-- BEGIN HANG MUC NGAN SACH VA CHI PHI
1415
		DELETE FROM TR_REQ_PAY_BUDGET WHERE REQ_PAY_ID =@p_REQ_PAY_ID
1416
		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
1417
		DECLARE XmlDataGood CURSOR LOCAL FOR
1418
		SELECT *
1419
		FROM
1420
		OPENXML(@hdocPayBudget, '/Root/XmlDataGood',2) 
1421
		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)
1422
		OPEN XmlDataGood
1423
		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
1424
		WHILE @@fetch_status=0 
1425
		BEGIN
1426
			--- KIEM TRA NEU NGAN SACH SU DUNG THUC THE LON HON NGAN SACH CON LAI
1427
			SET @INDEX_NS = @INDEX_NS +1
1428
			-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
1429
			--IF(@p_TYPE_FUNCTION ='SEND')
1430
			--BEGIN
1431
			--IF((@AMT_EXE  > @AMT_REMAIN_GD))
1432
			--BEGIN
1433
			--		ROLLBACK TRANSACTION
1434
			--		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
1435
			--		RETURN '-1'
1436
			--END	
1437
			--END
1438
			IF(@p_TYPE_FUNCTION ='SEND')
1439
			BEGIN
1440
			IF(ISNULL(@AMT_EXE,0) =0)
1441
			BEGIN
1442
					ROLLBACK TRANSACTION
1443
					CLOSE XmlDataGood;
1444
					DEALLOCATE XmlDataGood;
1445
					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
1446
					RETURN '-1'
1447
			END
1448
			--		ROLLBACK TRANSACTION
1449
			--		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
1450
			--		RETURN '-1'
1451
			--END		
1452
		END
1453
			DECLARE @p_BUDGET_ID VARCHAR(15);
1454
			EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_BUDGET', @p_BUDGET_ID OUT;
1455
			IF @p_BUDGET_ID='' OR @p_BUDGET_ID IS NULL GOTO ABORT;
1456
			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) 
1457
			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)
1458
		IF @@error<>0 GOTO ABORT;
1459
		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
1460
		END;
1461
		CLOSE XmlDataGood;
1462
		DEALLOCATE XmlDataGood;
1463
--- END HANG MUC NGAN SACH VA CHI PHI
1464

    
1465
-- BEGIN INSERT CHUNG TU DINH KEM
1466
		DELETE FROM TR_REQ_PAY_ATTACH WHERE REQ_PAY_ID =@p_REQ_PAY_ID
1467
		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)
1468
		DECLARE XmlAttach CURSOR FOR
1469
		SELECT *
1470
		FROM
1471
		OPENXML(@hdocPayAtach, '/Root/XmlAttach',2) 
1472
		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))
1473
		OPEN XmlAttach
1474
			FETCH NEXT FROM XmlAttach INTO @ATTACH_ID,@CON_ID,@CONT_CODE,@NOTES_ATT,@CON_DESC,@CON_TYPE,@AMT_ATT,@REF_DT, @LICENSE_DT
1475
			WHILE @@fetch_status=0 
1476
			BEGIN
1477
				IF (@REF_DT='')
1478
				BEGIN
1479
					SET @REF_DT = NULL
1480
				END
1481
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_ATTACH', @ATTACH_ID OUT;
1482
				IF @ATTACH_ID='' OR @ATTACH_ID IS NULL GOTO ABORT;
1483
				INSERT INTO TR_REQ_PAY_ATTACH(ATTACH_ID,REQ_PAY_ID,REF_ID,REF_CODE,NOTES,[DESCRIPTION],[TYPE],AMT,REF_DT, LICENSE_DT) VALUES
1484
				(@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))
1485
		IF @@error<>0 GOTO ABORT;
1486
		FETCH NEXT FROM XmlAttach INTO @ATTACH_ID,@CON_ID,@CONT_CODE,@NOTES_ATT,@CON_DESC,@CON_TYPE,@AMT_ATT,@REF_DT, @LICENSE_DT
1487
		END
1488
		CLOSE XmlAttach;
1489
		DEALLOCATE XmlAttach;
1490
-- BEGIN INSERT CHUNG TU DINH KEM
1491

    
1492
--- BAT DAU VALIDATE
1493
		IF(@p_TYPE_FUNCTION ='SEND')
1494
		BEGIN
1495
			DECLARE @SUM_PTTT DECIMAL(18,0), @SUM_NS DECIMAL(18,0),@SUM_LICH_TT DECIMAL(18,0)
1496
			SET @SUM_PTTT =(SELECT SUM(TOTAL_AMT * ISNULL(RATE,1)) FROM  TR_REQ_PAY_METHOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
1497
			IF(EXISTS(SELECT * FROM TR_REQ_PAY_SCHEDULE WHERE REQ_PAY_ID =@p_REQ_PAY_ID) AND @p_REQ_TYPE ='D')
1498
			BEGIN
1499
				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)
1500
				IF(@p_REQ_AMT*ISNULL(@p_RATE,1) != ISNULL(@SUM_LICH_TT,0))
1501
				BEGIN
1502
					ROLLBACK TRANSACTION
1503
					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
1504
					RETURN '-1'
1505
				END
1506
			END
1507
			IF(EXISTS(SELECT * FROM TR_REQ_PAY_BUDGET WHERE REQ_PAY_ID =@p_REQ_PAY_ID))
1508
			BEGIN
1509
				SET @SUM_NS =(SELECT SUM(AMT_EXE * ISNULL(RATE,1)) FROM  TR_REQ_PAY_BUDGET WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
1510
				IF(@p_REQ_AMT*ISNULL(@p_RATE,1) != ISNULL(@SUM_NS,0))
1511
				BEGIN
1512
					ROLLBACK TRANSACTION
1513
					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
1514
					RETURN '-1'
1515
				END
1516
			END
1517
			ELSE
1518
				IF(@p_REQ_AMT*ISNULL(@p_RATE,1) != ISNULL(@SUM_PTTT,0))
1519
				BEGIN
1520
					ROLLBACK TRANSACTION
1521
					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
1522
					RETURN '-1'
1523
				END
1524
			
1525
		END
1526
		----END
1527
		IF(@p_REQ_TYPE ='I')
1528
		BEGIN
1529
			DELETE FROM PL_REQUEST_PROCESS WHERE REQ_ID = @p_REQ_PAY_ID
1530
			DECLARE @tmp table(ROLE_ID VARCHAR(25),BRANCH_ID varchar(15),AMT decimal(18,2))
1531
	-- BEGIN SELECT CAC CAP PHE DUYET --
1532
	-- HOI SO
1533
			IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE) ='HS')
1534
			BEGIN
1535
			-- KHOI TAI CHINH
1536
				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
1537
				BEGIN
1538
					-- KHOI TAI CHINH SE KHONG CO PTGD NUA MA CHI CO GDK - LUCTV 29032021
1539
					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'
1540
					--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'
1541
					--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
1542
				END
1543
			-- KHOI HO TRO
1544
				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, DO GDK HO TRO CO HAN MUC RIENG KHAC VOI CAC GDK KHAC
1545
				BEGIN
1546
					-- KHOI HO TRO SE KHONG CO PTGD NUA MA CHI CO KDK - LUCTV 29032021
1547
					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'
1548
					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')
1549
				END
1550
			-- PHONG TRUYEN THONG VA THUONG HIEU
1551
				ELSE IF EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE ='0690405' AND DEP_ID =@p_DEP_ID) 
1552
				BEGIN
1553
						-- KHOI TAI CHINH SE KHONG CO PTGD NUA MA CHI CO KDK - LUCTV 29032021
1554
					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'
1555
					--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'
1556
					--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
1557
				END
1558
			-- KHOI VAN HANH
1559
				ELSE IF EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06910%' AND DEP_ID =@p_DEP_ID)
1560
				BEGIN
1561
					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
1562
				END
1563
			-- KHONG CO TGD VA PTGD
1564
				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)
1565
				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) 
1566
				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)
1567
				OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%799%' AND DEP_ID =@p_DEP_ID)
1568
				OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%899%' AND DEP_ID =@p_DEP_ID))
1569
				BEGIN
1570
					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
1571
				END
1572
			-- KHOI QUAN LY RUI RO, KHOI CNTT,...
1573
				ELSE IF (EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06907%' AND DEP_ID =@p_DEP_ID) -- KHOI QUAN LY RUI RO
1574
				OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06909%' AND DEP_ID =@p_DEP_ID) -- KHOI CNTT
1575
				OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06911%' AND DEP_ID =@p_DEP_ID) -- KHOI THAM DINH TIN DUNG
1576
				OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06921%' AND DEP_ID =@p_DEP_ID) -- KHOI KHCN - KHACH HANG CA NHAN
1577
				OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06922%' AND DEP_ID =@p_DEP_ID)) -- KHOI KHOI KHDN & DINH CHE
1578
				BEGIN
1579
					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
1580
				END
1581
			-- CON LAI
1582
				ELSE
1583
				BEGIN
1584
					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
1585
				END
1586
			END
1587
	-- CN & PGD
1588
			ELSE
1589
			BEGIN
1590
			-- ROLE GDDV HOAC KIEM NHIEM GDDV
1591
				IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE) ='CN')
1592
				BEGIN
1593
						--- BAO GOM DON VI & 3 CAP DUYET CUA HOI SO
1594
						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' 
1595
						--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'
1596
				END
1597
			-- ROLE TPGD HOAC KIEM NHIEM TPGD
1598
				ELSE IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE) ='PGD')
1599
				BEGIN
1600
						INSERT INTO @tmp  SELECT A.ROLE_ID, A.BRANCH_ID,A.LIMIT_VALUE FROM TL_SYSROLE_LIMIT A WHERE A.LIMIT_TYPE='ADV_PAY' AND BRANCH_ID =@p_BRANCH_CREATE AND ROLE_ID ='TPGD'
1601
						--BRANCH_ID =(SELECT FATHER_ID FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE)
1602
						--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'
1603
				END
1604
			END
1605
	-- END SELECT CAC CAP PHE DUYET --
1606

    
1607
			DECLARE @ROLE_ID VARCHAR(20), @BRANCH_ID VARCHAR(20), @INDEX INT =0, @SL_ROLE INT =0,@LIMIT_VALUE DECIMAL(18,0)
1608
			SET @SL_ROLE = (SELECT COUNT(*) FROM @tmp)
1609
			DECLARE @ISLEAF VARCHAR(1) = 'Y', @PARENT_ID VARCHAR(10) = '', @STATUS VARCHAR(1) = 'C', @NOTES NVARCHAR(500)
1610
	-- BEGIN THEM CAC CAP PHE DUYET VAO TABLE PL_REQUEST_PROCESS --
1611
			DECLARE CUR_PR CURSOR FOR  SELECT A.ROLE_ID, A.BRANCH_ID,A.AMT FROM @tmp A ORDER BY A.AMT ASC -- SAP XEP LAI CAC CAP DUYET THEO HAN MUC PHE DUYET
1612
			OPEN CUR_PR
1613
			FETCH NEXT FROM CUR_PR INTO @ROLE_ID,@BRANCH_ID,@LIMIT_VALUE
1614
			WHILE @@FETCH_STATUS =0 --AND @STOP=0
1615
			BEGIN
1616
				-- DOANPTT 261022: DONG NHAT PROCESS GIUA DON VI VA HOI SO
1617
			-- HOI SO
1618
				IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE) ='HS')
1619
				BEGIN
1620
					SET @INDEX= @INDEX+1
1621

    
1622
					IF @INDEX = @SL_ROLE
1623
					SET @ISLEAF = 'Y'
1624
					ELSE
1625
					SET @ISLEAF = 'N'
1626
					SET @NOTES = (SELECT N'Đợi '+ ROLE_DESC + N' phê duyệt' FROM TL_SYSROLE WHERE ROLE_ID = @ROLE_ID)
1627

    
1628
					IF(@INDEX=1 )
1629
					BEGIN		
1630
						SET @PARENT_ID = NULL
1631
						SET @STATUS = 'C'							
1632
					END				
1633
					ELSE 
1634
					BEGIN
1635
						SET @PARENT_ID = CONVERT(VARCHAR(5),@INDEX -1)
1636
						SET @STATUS = 'U'
1637
					END
1638
				END
1639
			-- CN & PGD
1640
				ELSE
1641
				BEGIN
1642
					SET @INDEX= 0
1643
					IF @INDEX = @SL_ROLE - 1
1644
					SET @ISLEAF = 'Y'
1645
					ELSE
1646
					SET @ISLEAF = 'N'
1647
					SET @NOTES = (SELECT N'Đợi '+ ROLE_DESC + N' phê duyệt' FROM TL_SYSROLE WHERE ROLE_ID = @ROLE_ID)
1648

    
1649
					IF(@INDEX = 0 )
1650
					BEGIN		
1651
						SET @PARENT_ID = NULL
1652
						SET @STATUS = 'C'							
1653
					END				
1654
					ELSE 
1655
					BEGIN
1656
						SET @PARENT_ID = CONVERT(VARCHAR(5),@INDEX -1)
1657
						SET @STATUS = 'U'
1658
					END
1659
				END
1660
				/*
1661
				IF(@ROLE_ID = 'TKTGD')
1662
				BEGIN
1663
					SET @INDEX = 3
1664
				END
1665
				*/
1666
				IF(@LIMIT_VALUE >= @p_REQ_AMT)
1667
				BEGIN
1668
					INSERT INTO dbo.PL_REQUEST_PROCESS(
1669
					REQ_ID,
1670
					PROCESS_ID,
1671
					STATUS,
1672
					ROLE_USER,
1673
					BRANCH_ID,
1674
					CHECKER_ID,
1675
					APPROVE_DT,
1676
					PARENT_PROCESS_ID,
1677
					IS_LEAF, COST_ID, DVDM_ID, NOTES
1678
					)
1679
					VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),@STATUS,@ROLE_ID,@BRANCH_ID,NULL,NULL, @PARENT_ID,'Y', '',@p_DVDM_ID,@NOTES)
1680
					--INSERT INTO PL_REQUEST_PROCESS VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),@STATUS,@ROLE_ID,@BRANCH_ID,NULL,NULL, @PARENT_ID,'Y','')
1681
					IF(@ROLE_ID <> 'TKTGD' AND @ROLE_ID <> 'TKHDQT')
1682
					BEGIN
1683
						BREAK;
1684
					END
1685
				END
1686
				ELSE
1687
				BEGIN
1688
					INSERT INTO PL_REQUEST_PROCESS (
1689
					REQ_ID,
1690
					PROCESS_ID,
1691
					STATUS,
1692
					ROLE_USER,
1693
					BRANCH_ID,
1694
					CHECKER_ID,
1695
					APPROVE_DT,
1696
					PARENT_PROCESS_ID,
1697
					IS_LEAF, COST_ID, DVDM_ID, NOTES
1698
					) 
1699
					VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),@STATUS,@ROLE_ID,@BRANCH_ID,NULL,NULL, @PARENT_ID,@ISLEAF, '', @p_DVDM_ID, @NOTES)
1700
				END
1701
					
1702
				FETCH NEXT FROM CUR_PR INTO @ROLE_ID,@BRANCH_ID,@LIMIT_VALUE
1703
			END
1704
			CLOSE CUR_PR
1705
			DEALLOCATE CUR_PR
1706
		END
1707
COMMIT TRANSACTION
1708
-- BEIGN VALIDATE SEND APPROVE
1709
		IF(@p_TYPE_FUNCTION ='SEND')-- BAT DAU GUI PHE DUYET
1710
		BEGIN
1711
			IF(@p_MAKER_ID <> (SELECT TOP 1 MAKER_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID = @p_REQ_PAY_ID))
1712
			BEGIN
1713
				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
1714
				RETURN '-1'
1715
			END
1716
			IF(NOT EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT where MAKER_ID = @p_MAKER_ID ))
1717
			BEGIN
1718
				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
1719
				RETURN '-1'
1720
			END
1721
			IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT where AUTH_STATUS = 'U' AND REQ_PAY_ID = @p_REQ_PAY_ID ))
1722
			BEGIN
1723
				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
1724
				RETURN '-1'
1725
			END
1726
			IF (@p_REQ_PAY_CODE IS NULL OR @p_REQ_PAY_CODE ='')
1727
			BEGIN
1728
				SELECT '-1' Result, '' REQ_PAY_ID, N'Mã số phiếu không được để trống' ErrorDesc
1729
				RETURN '-1'
1730
			END
1731
			IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND AUTH_STATUS <> 'E' AND ISNULL(AUTH_STATUS, '') <> ''))
1732
			BEGIN
1733
				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
1734
				RETURN '-1'
1735
			END
1736
			--ROLLBACK TRANSACTION
1737
			-- CAP NHAT TINH TRANG DUYET KE TOAN LA DANG XU LY 
1738
			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')
1739
			BEGIN
1740
				DECLARE @USER_TP VARCHAR(15) =''
1741
				--SET @USER_TP =(SELECT TOP 1 TLNANME FROM TL_USER WHERE SECUR_CODE =@p_DEP_ID 
1742
				--		AND (RoleName IN ('GDDV','TPTC','TC','KTT') OR RoleName IN (SELECT ROLE_OLD FROM TL_SYS_ROLE_MAPPING WHERE ROLE_NEW ='GDDV')))
1743
				IF(@USER_TP IS NULL OR @USER_TP ='')
1744
				BEGIN
1745
					SET @USER_TP = (SELECT TOP 1 TLNANME FROM TL_USER_V2 WHERE SECUR_CODE =@p_DEP_ID 
1746
						AND (RoleName IN ('TBP','PP')))
1747
				END
1748
				--UPDATE TR_REQ_ADVANCE_PAYMENT SET TRASFER_USER_RECIVE =@USER_TP WHERE REQ_PAY_ID =@p_REQ_PAY_ID
1749
			END
1750
			DECLARE @SUM_TEMP_PAY DECIMAL, @SUM_PAY DECIMAL
1751
			IF (@p_REQ_TYPE ='I')
1752
			BEGIN
1753
				SET @SUM_TEMP_PAY = (SELECT SUM(REQ_AMT*ISNULL(RATE,1)) 
1754
				FROM TR_REQ_ADVANCE_PAYMENT WHERE  REF_ID =@p_REF_ID AND AUTH_STATUS ='A' AND  REQ_TYPE ='I')
1755
				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')
1756
				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
1757
			END
1758
			DECLARE @SUM_THANH_TOAN DECIMAL(18,0) =0, @SUM_PHUONG_THUC DECIMAL(18,0) =0
1759
			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)
1760
			--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)
1761
			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 AND TYPE_TRANSFER ='A') -
1762
			(SELECT ISNULL(SUM(TOTAL_AMT * ISNULL(RATE,1)),0) FROM TR_REQ_PAY_METHOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND TYPE_TRANSFER ='R')
1763
			IF(ROUND(@SUM_THANH_TOAN,0) <> ROUND(@SUM_PHUONG_THUC,0))
1764
			BEGIN
1765
				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
1766
				RETURN '-1'
1767
			END
1768
			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')
1769
			BEGIN
1770
				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
1771
				RETURN '-1'
1772
			END
1773

    
1774
				
1775
			--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')))
1776
			--BEGIN
1777
			--	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
1778
			--	RETURN '-1'
1779
			--END
1780
			UPDATE TR_REQ_ADVANCE_PAYMENT SET AUTH_STATUS ='U',CREATE_DT = GETDATE() WHERE REQ_PAY_ID =@p_REQ_PAY_ID
1781
			UPDATE PL_REQUEST_PROCESS SET ROLE_USER ='GDDV' WHERE REQ_ID =@p_REQ_PAY_ID AND ROLE_USER ='PGD'
1782
			UPDATE PL_REQUEST_PROCESS SET ROLE_USER ='TPGD' WHERE REQ_ID =@p_REQ_PAY_ID AND ROLE_USER ='PPGD'
1783
			INSERT INTO dbo.PL_PROCESS(REQ_ID,PROCESS_ID,CHECKER_ID,APPROVE_DT,PROCESS_DESC,NOTES)
1784
			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')
1785
			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))
1786
			BEGIN
1787
				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
1788
				RETURN '4'
1789
			END
1790
			ELSE
1791
			BEGIN
1792
				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
1793
				RETURN '4'
1794
			END
1795
			--SELECT '4' as Result, @p_REQ_PAY_ID AS REQ_PAY_ID, N'Gửi phê duyệt thành công' ErrorDesc
1796
			--RETURN '4'
1797
		END
1798
		-- FIX PHONG HO LOI LIEN QUAN DEN VIEC TAI KHOAN TAM UNG BI SAI
1799
		----DECLARE  @REQ_PAY_ID varchar(15), @l_REF_ID varchar(15)
1800
		----DECLARE cursorProduct CURSOR LOCAL FOR
1801
		----SELECT REQ_PAY_ID,REF_ID FROM TR_REQ_ADVANCE_PAYMENT A WHERE A.REQ_TYPE ='I'
1802
		----Open cursorProduct
1803
		----FETCH NEXT FROM cursorProduct INTO @REQ_PAY_ID, @l_REF_ID
1804
		----WHILE @@FETCH_STATUS = 0
1805
		----BEGIN
1806
		----   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
1807
		----FETCH NEXT FROM cursorProduct INTO  @REQ_PAY_ID, @l_REF_ID
1808
		----END
1809
-- END VALIDATE SEND APPROVE
1810

    
1811
	SELECT '0' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, '' ErrorDesc
1812
	RETURN '0'
1813
ABORT:
1814
BEGIN
1815
		ROLLBACK TRANSACTION
1816
		SELECT '-1' as Result, '' REQ_PAY_ID, '' ErrorDesc
1817
		RETURN '-1'
1818
End