Project

General

Profile

TR_REQ_ADVANCE_PAYMENT_UPD.txt

Luc Tran Van, 04/27/2022 10:55 AM

 
1

    
2

    
3
ALTER PROCEDURE [dbo].[TR_REQ_ADVANCE_PAYMENT_Upd]
4
@p_REQ_PAY_ID	varchar(15)= NULL,
5
@p_REQ_PAY_CODE	varchar(50)	= NULL,
6
@p_REQ_DT VARCHAR(20)= NULL,
7
@p_BRANCH_ID	varchar(15)	= NULL,
8
@p_DEP_ID	varchar(15)	= NULL,
9
@p_REQ_REASON	nvarchar(MAX)	= NULL,
10
@p_REQ_TYPE	varchar(15)	= NULL,
11
@P_REQ_ENTRIES nvarchar(MAX)	= NULL,
12
@p_REQ_DESCRIPTION	nvarchar(MAX)	= NULL,
13
@p_REF_ID	varchar(15)	= NULL,
14
@p_RECEIVER_PO	nvarchar(250)	= NULL,
15
@p_RECEIVER_DEBIT	nvarchar(250)	= NULL,
16
@p_REQ_PAY_TYPE	varchar(15)	= NULL,
17
@p_REQ_TYPE_CURRENCY	nvarchar(50)	= NULL,
18
@p_REQ_AMT	decimal(18, 0)	= NULL,
19
@p_REQ_TEMP_AMT	decimal(18, 0)	= NULL,
20
@p_MAKER_ID	varchar(15)	= NULL,
21
@p_CREATE_DT	varchar(25)	= NULL,
22
@p_EDITOR_ID	varchar(15)	= NULL,
23
@p_AUTH_STATUS	varchar(1)	= NULL,
24
@p_CHECKER_ID	varchar(15)	= NULL,
25
@p_APPROVE_DT	varchar(25)	= NULL,
26
@p_CREATE_DT_KT	varchar(25)	= NULL,
27
@p_MAKER_ID_KT	varchar(15)	= NULL,
28
@p_AUTH_STATUS_KT	varchar(1)	= NULL,
29
@p_CHECKER_ID_KT	varchar(1)	= NULL,
30
@p_APPROVE_DT_KT  varchar(25)= null,
31
@p_CONFIRM_NOTE	nvarchar(500)	= NULL,
32
@p_BRANCH_CREATE	varchar(15)	= NULL,
33
@p_NOTES	varchar(15)	= NULL,
34
@p_RECORD_STATUS	varchar(1)	= NULL,
35
@p_TRANSFER_MAKER	nvarchar(50)	= NULL,
36
@p_TRANSFER_DT	varchar(25)	= NULL,
37
@p_TRASFER_USER_RECIVE	varchar(15)	= NULL,
38
@p_PROCESS	varchar(15)	= NULL,
39
@p_PAY_PHASE VARCHAR(15)= NULL,
40
@p_DVDM_ID VARCHAR(15)= NULL,
41
@p_RATE DECIMAL(18,0) =0,
42
@p_RECIVER_MONEY VARCHAR(15)= NULL,
43
@p_TYPE_FUNCTION VARCHAR(15) = NULL,
44
@p_IS_PERIOD VARCHAR(5) = NULL,
45
@p_PAY_AMT DECIMAL(18,0)= NULL,
46
--doanptt 19/01/2022
47
@p_XMP_TEMP XML = NULL,
48
@p_XMP_CUS XML = NULL,
49
@p_XMP_PAY_ATTACH XML = NULL,
50
@p_XMP_PAY_INVOICE XML = NULL,
51
@p_XMP_ADVANCE_DT_2 XML = NULL,
52
@p_XMP_PAY_SCHEDULE XML = NULL,
53
@p_XMP_PAY_PERIOD XML = NULL,
54
@p_XMP_PAY_METHOD XML = NULL,
55
@p_XMP_PAY_BUDGET XML = NULL,
56
@p_XMP_ADVANCE_DT XML = NULL
57
AS
58
--Validation is here
59

    
60
	IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT where AUTH_STATUS = 'U' AND REQ_PAY_ID = @p_REQ_PAY_ID ))
61
	BEGIN
62
		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
63
		RETURN '-1'
64
	END
65
/*
66
DECLARE @ERRORSYS NVARCHAR(15) = '' 
67
  IF ( NOT EXISTS ( SELECT * FROM ASS_COLLECT WHERE ))
68
	 SET @ERRORSYS = ''
69
IF @ERRORSYS <> '' 
70
BEGIN
71
	SELECT ErrorCode Result, ''  CAR_ID, ErrorDesc ErrorDesc FROM SYS_ERROR WHERE ErrorCode = @ERRORSYS
72
	RETURN '0'
73
END 
74
*/
75
	--Luanlt-2019/10/15 Disable Validation
76
	--DECLARE @ERRORSYS NVARCHAR(15) = '' 
77
	--IF EXISTS(SELECT * FROM TR_PO_MASTER WHERE REF_ID  = @p_REF_ID )
78
	--BEGIN
79
	--	SET @ERRORSYS = 'ASSC-00005'
80
	--	SELECT ErrorCode Result, '' REQ_PAY_ID, ErrorDesc ErrorDesc FROM SYS_ERROR WHERE ErrorCode = @ERRORSYS
81
	--	RETURN '-1'
82
	--END
83

    
84
	DECLARE @BRANCH_TYPE_CR VARCHAR(15), @ROLE_KI_NHAY VARCHAR(50)
85
	--SET @ROLE_KI_NHAY =(SELECT RoleName FROM TL_USER_V2 WHERE TLNANME =@p_TRASFER_USER_RECIVE)
86
	--IF(@ROLE_KI_NHAY IS NOT NULL AND @ROLE_KI_NHAY <> '' AND @ROLE_KI_NHAY IN ('TP','GDDV','KTT','TPTC','TC'))
87
	--BEGIN
88
	--	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
89
	--	RETURN '-1'
90
	--END
91
		SET  @ROLE_KI_NHAY =(SELECT TOP 1 RoleName FROM TL_USER WHERE TLNANME =@p_TRASFER_USER_RECIVE)
92
		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'))
93
		BEGIN
94
		PRINT @ROLE_KI_NHAY
95
		END
96
		ELSE
97
		BEGIN
98
		SET @ROLE_KI_NHAY =(SELECT TOP 1 RoleName FROM TL_USER_V2 WHERE TLNANME =@p_TRASFER_USER_RECIVE)
99
		IF(@ROLE_KI_NHAY IS NULL OR @ROLE_KI_NHAY ='')
100
		BEGIN
101
				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))
102
		END
103
		END
104
		--SET @ROLE_KI_NHAY =(SELECT RoleName FROM TL_USER_V2 WHERE TLNANME =@p_TRASFER_USER_RECIVE)
105
		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')
106
		BEGIN
107
			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
108
			RETURN '-1'
109
		END
110
	SET @BRANCH_TYPE_CR =(SELECT TOP 1 BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID =@p_BRANCH_CREATE)
111
	DECLARE @ACC_NUM VARCHAR(15)
112
	SET @ACC_NUM = (SELECT TOP 1 ACC_NUM FROM CM_ACCOUNT_PAY WHERE REF_ID =@p_REF_ID)
113
	IF @p_REQ_PAY_CODE IS NULL OR @p_REQ_PAY_CODE =''
114
	BEGIN
115
		SELECT '-1' Result, '' REQ_PAY_ID, N'Mã số phiếu không được để trống' ErrorDesc
116
		RETURN '-1'
117
	END
118
	
119
	IF EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_CODE = @p_REQ_PAY_CODE AND REQ_PAY_ID <> @p_REQ_PAY_ID)
120
	BEGIN
121
		SELECT '-1' Result, '' REQ_PAY_ID, N'Mã số phiếu đã tồn tại trong hệ thống' ErrorDesc
122
		RETURN '-1'
123
	END
124

    
125
------------------------------------------------------------------------------------ start validate phần master ------------------------------------------------------------------------------------------------------
126
	IF(@p_TYPE_FUNCTION = 'SEND')
127
	BEGIN
128
		IF (@p_BRANCH_ID IS NULL OR @p_BRANCH_ID ='')
129
		BEGIN
130
			SELECT '-1' Result, '' REQ_PAY_ID, N'Đơn vị yêu cầu không được để trống' ErrorDesc
131
			RETURN '-1'
132
		END
133
		IF (@p_DEP_ID IS NULL OR @p_DEP_ID ='')
134
		BEGIN
135
			SELECT '-1' Result, '' REQ_PAY_ID, N'Phòng ban đề nghị không được để trống' ErrorDesc
136
			RETURN '-1'
137
		END
138
		IF (@p_REQ_TYPE IS NULL OR @p_REQ_TYPE ='')
139
		BEGIN
140
			SELECT '-1' Result, '' REQ_PAY_ID, N'Loại phiếu yêu cầu không được để trống' ErrorDesc
141
			RETURN '-1'
142
		END
143
		IF (@p_REQ_REASON IS NULL OR @p_REQ_REASON ='')
144
		BEGIN
145
			SELECT '-1' Result, '' REQ_PAY_ID, N'Lý do tạm ứng không được để trống' ErrorDesc
146
			RETURN '-1'
147
		END
148
		IF (@p_REQ_AMT IS NULL OR @p_REQ_AMT = 0)
149
		BEGIN
150
			SELECT '-1' Result, '' REQ_PAY_ID, N'Số tiền tạm ứng phải lớn hơn không' ErrorDesc
151
			RETURN '-1'
152
		END
153
		IF (@p_BRANCH_ID IS NULL OR @p_BRANCH_ID ='')
154
		BEGIN
155
			SELECT '-1' Result, '' REQ_PAY_ID, N'Đơn vị không được để trống' ErrorDesc
156
			RETURN '-1'
157
		END
158

    
159
		
160
		IF (@p_RECIVER_MONEY IS NOT NULL AND @p_RECIVER_MONEY ='' AND @p_REQ_TYPE = 'D')
161
		BEGIN
162
			SELECT '-1' Result, '' REQ_PAY_ID, N'Người nhận tiền tạm ứng không được để trống' ErrorDesc
163
			RETURN '-1'
164
		END
165

    
166
		IF(@p_REQ_TYPE='I')
167
		BEGIN
168
			IF((@p_RECEIVER_DEBIT IS NULL OR @p_RECEIVER_DEBIT = ''))
169
			BEGIN
170
						SELECT '-1' as Result, '111' REQ_PAY_ID, N'Tài khoản người đề nghị tạm ứng không được để trống'  ErrorDesc
171
						RETURN '-1'
172
			END
173
			IF(NOT EXISTS(SELECT * FROM CM_ACCOUNT_PAY WHERE ACC_NUM =@p_RECEIVER_DEBIT AND REF_ID =  @p_REF_ID))
174
			BEGIN
175
						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
176
						RETURN '-1'
177
			END
178
			IF(LEN(ISNULL(@p_RECEIVER_DEBIT,''))>15)
179
			BEGIN
180
						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
181
						RETURN '-1'
182
			END
183
		END
184

    
185
		
186
			
187
			
188
	END
189
------------------------------------------------------------------------------------ end validate phần master ------------------------------------------------------------------------------------------------------
190

    
191

    
192
-- doanptt 19/01/2022 Khai báo lưới danh sách 
193
DECLARE @hdocTemp INT, @hdocCus INT, @hdocPayAtach INT, @hdocPayInvoice INT, @hdocPayAcvanceDT2 INT, 
194
@hdocPaySchedule INT, @hdocPayPeriod INT, @hdocPayMethod INT, @hdocPayBudget INT, @hdocPayAcvanceDT INT
195

    
196
		EXEC sp_xml_preparedocument @hdocTemp OUTPUT, @p_XMP_TEMP;
197
		EXEC sp_xml_preparedocument @hdocCus OUTPUT, @p_XMP_CUS;
198
		EXEC sp_xml_preparedocument @hdocPayAtach OUTPUT, @p_XMP_PAY_ATTACH;
199
		--EXEC sp_xml_preparedocument @hdocPayInvoice OUTPUT, @p_XMP_PAY_INVOICE;
200
		EXEC sp_xml_preparedocument @hdocPayAcvanceDT2 OUTPUT, @p_XMP_ADVANCE_DT_2;
201
		EXEC sp_xml_preparedocument @hdocPaySchedule OUTPUT, @p_XMP_PAY_SCHEDULE;
202
		EXEC sp_xml_preparedocument @hdocPayAcvanceDT OUTPUT, @p_XMP_ADVANCE_DT;
203
		EXEC sp_xml_preparedocument @hdocPayPeriod OUTPUT, @p_XMP_PAY_PERIOD;
204
		EXEC sp_xml_preparedocument @hdocPayMethod OUTPUT, @p_XMP_PAY_METHOD;
205
		EXEC sp_xml_preparedocument @hdocPayBudget OUTPUT, @p_XMP_PAY_BUDGET;
206

    
207
		-------------------------------------------------------------- start validate các lưới -----------------------------------------------------------------------
208
		IF(@p_REQ_TYPE = 'P' AND @p_IS_PERIOD='Y' AND NOT EXISTS(SELECT * FROM OPENXML(@hdocPayAcvanceDT, '/Root/XmlDataRecurring', 2) WITH(CONTRACT_ID varchar(15))))
209
		BEGIN
210
			SELECT '-1' Result, '' REQ_PAY_ID, N'Danh sách hợp đồng định kì không được phép để trống' ErrorDesc
211
			RETURN '-1'
212
		END
213

    
214
		IF(@p_REQ_TYPE = 'P' AND @p_IS_PERIOD='Y' AND NOT EXISTS(SELECT * FROM OPENXML(@hdocPayPeriod, '/Root/XmlDataPeriod', 2) WITH(CONTRACT_ID varchar(15))))
215
		BEGIN
216
			SELECT '-1' Result, '' REQ_PAY_ID, N'Danh sách lịch thanh toán định kì không được phép để trống' ErrorDesc
217
			RETURN '-1'
218
		END
219

    
220
		IF(@p_REQ_TYPE = 'P' AND @p_IS_PERIOD='N' AND NOT EXISTS(SELECT * FROM OPENXML(@hdocPayAcvanceDT2, '/Root/XmlDataPO', 2) WITH(CONTRACT_ID varchar(15))))
221
		BEGIN
222
			SELECT '-1' Result, '' REQ_PAY_ID, N'Danh sách PO/ hợp đồng không được để trống' ErrorDesc
223
			RETURN '-1'
224
		END
225

    
226
		IF(@p_REQ_TYPE = 'D' AND NOT EXISTS(SELECT * FROM OPENXML(@hdocCus, '/Root/XmlDataCus', 2) WITH(CONTRACT_ID varchar(15))))
227
		BEGIN
228
			SELECT '-1' Result, '' REQ_PAY_ID, N'Danh sách khách hàng không được để trống' ErrorDesc
229
			RETURN '-1'
230
		END
231
		-------------------------------------------------------------- end validate các lưới -----------------------------------------------------------------------
232
	
233
	-- 19-11-2019 LUCTV BO SUNG VALIDATE TRONG QUA TRINH TEST SAU KHI UAT
234
	-- NEU TAM UNG CHO NHA CUNG CAP THI DOT THANH TOAN KHONG DUOC PHEP NULL
235
	-- SO TIEN THANH TOÁN PHAI LON HON KHONG
236
		IF(@p_REQ_AMT <=0)
237
		BEGIN	
238
			SELECT '-1' as Result, '' REQ_PAY_ID, N'Số tiền tạm ứng phải lớn hơn 0' ErrorDesc
239
			RETURN '-1'
240
		END
241
	 -- END VALIDATE TRONG QUA TRINH TEST UAT
242
		BEGIN TRANSACTION
243
		--IF(@p_DVDM_ID IS NULL OR @p_DVDM_ID ='')
244
		--BEGIN
245
		--	SET @p_DVDM_ID = (SELECT TOP 1 DVDM_ID FROM CM_DVDM WHERE DVDM_NAME ='KHOI TAI CHINH')
246
		--END
247
		UPDATE TR_REQ_ADVANCE_PAYMENT SET 
248
		REF_ID = @p_REF_ID,
249
		DEP_ID= @p_DEP_ID,REQ_REASON = @p_REQ_REASON, REQ_PAY_TYPE = @p_REQ_PAY_TYPE,
250
		REQ_AMT = @p_REQ_AMT,
251
		NOTES= @p_NOTES,
252
		REQ_TYPE= @p_REQ_TYPE,REQ_DESCRIPTION = @p_REQ_DESCRIPTION,RECEIVER_PO =@p_RECEIVER_PO, RECEIVER_DEBIT= @p_RECEIVER_DEBIT,
253
		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,
254
		AUTH_STATUS='E', DVDM_ID=@p_DVDM_ID, RATE =@p_RATE,REQ_TYPE_CURRENCY =@p_REQ_TYPE_CURRENCY, RECIVER_MONEY= @p_RECIVER_MONEY, 
255
		TRASFER_USER_RECIVE =@p_TRASFER_USER_RECIVE,IS_PERIOD =@p_IS_PERIOD, PAY_AMT = @p_PAY_AMT
256
		WHERE REQ_PAY_ID =@p_REQ_PAY_ID
257
		IF @@Error <> 0 GOTO ABORT
258
		--- INSERT VÀO BẢNG DETAIL NÊU TẠM ỨNG LÀ TẠM ỨNG THANH TOÁN
259
			
260
			-- KIEM TRA NEU TAM UNG THANH TOAN
261
			IF((@p_REQ_TYPE='P' AND (@p_IS_PERIOD <>'Y' OR @p_IS_PERIOD IS NULL)) OR @p_REQ_TYPE='D')
262
			BEGIN
263
				DELETE FROM TR_REQ_ADVANCE_DT WHERE REQ_PAY_ID=@p_REQ_PAY_ID
264
				DELETE FROM TR_REQ_PAY_SCHEDULE WHERE REQ_PAY_ID=@p_REQ_PAY_ID
265
				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),
266
				@AMT_REMAIN_SCHEDULE decimal(18,0),@REQ_AD_DT varchar(20),@PROCESS varchar(15),@PAY_ID VARCHAR(15),
267
				@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),
268
				@EMP_ID VARCHAR(15),@AMT_PAY_REAL DECIMAL(18,2),@CHECK_IN VARCHAR(15),@IS_CLOSED VARCHAR(1)= NULL,@INDEX_NS INT =0,@REASON NVARCHAR(1000),@REF_TYPE VARCHAR(15)
269
				DECLARE @TYPE_COST VARCHAR(25), @FR_LEVEL INT ,@TO_LEVEL INT
270
				DECLARE XmlDataPO CURSOR FOR
271
				SELECT *
272
				FROM
273
				OPENXML(@hdocPayAcvanceDT2, '/Root/XmlDataPO', 2)--Thông tin PO/ hợp đồng
274
				WITH(REF_ID varchar(15),IS_CLOSED VARCHAR(1),REF_TYPE VARCHAR(15))
275
				OPEN XmlDataPO;
276
				DECLARE @INDEX_PO INT =0
277
				SET @INDEX_PO = 0
278
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
279
				WHILE @@fetch_status=0 
280
				BEGIN
281
					SET @INDEX_PO = @INDEX_PO +1
282
					-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
283
					IF(@p_TYPE_FUNCTION ='SEND')
284
					BEGIN
285
					
286
					
287
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
288
					IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND TYPE ='C' AND REQ_PAY_ID 
289
					IN (SELECT REQ_PAY_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS_KT<>'A' OR AUTH_STATUS_KT IS NULL)))
290
					BEGIN
291
						ROLLBACK TRANSACTION
292
						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ố '+
293
						(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
294
						RETURN '-1'
295
					END
296
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
297
					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))
298
					BEGIN
299
						ROLLBACK TRANSACTION
300
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': Hợp đồng số '+
301
						(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
302
						RETURN '-1'
303
					END
304
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
305
					IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REF_ID =@REF_ID AND TYPE ='P' AND REQ_PAY_ID 
306
					IN (SELECT REQ_PAY_ID FROM TR_REQ_ADVANCE_PAYMENT WHERE AUTH_STATUS_KT<>'A' OR AUTH_STATUS_KT IS NULL)))
307
					BEGIN
308
						ROLLBACK TRANSACTION
309
						SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO số '+
310
						(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
311
						RETURN '-1'
312
					END
313
					-- KIEM TRA NEU CO PO NAO DO DANG THUC HIEN THANH TOAN HOAC TAM UNG THI PHAI THONG BAO CHO HOAN TAT GIAO DICH
314
					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))
315
					BEGIN
316
						ROLLBACK TRANSACTION
317
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO số '+
318
						(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
319
						RETURN '-1'
320
					END
321
					--- KIEM TRA XEM PO NAY DUOC THANH TOAN HAY CHUA
322
					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' )))
323
					BEGIN
324
						ROLLBACK TRANSACTION
325
						SELECT '-1' as Result, '' REQ_PAY_ID,''  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_PO)+ N': PO số '+
326
						(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
327
						RETURN '-1'
328
					END
329
					END
330
					DECLARE @REQ_PAYDTID VARCHAR(15);
331
					EXEC SYS_CodeMasters_Gen 'TR_REQ_ADVANCE_DT', @REQ_PAYDTID OUT;
332
					IF @REQ_PAYDTID='' OR @REQ_PAYDTID IS NULL GOTO ABORT;
333
					INSERT INTO TR_REQ_ADVANCE_DT (REQ_PAYDTID,REQ_PAY_ID,REF_ID,TYPE,MAKER_ID,CREATE_DT,IS_CLOSED,REF_TYPE) VALUES
334
					(@REQ_PAYDTID,@p_REQ_PAY_ID,@REF_ID,'ADV_PAY',@p_MAKER_ID,GETDATE(),@IS_CLOSED,@REF_TYPE)
335
				IF @@error<>0 GOTO ABORT;
336
				FETCH NEXT FROM XmlDataPO INTO @REF_ID,@IS_CLOSED,@REF_TYPE
337
				END
338
				CLOSE XmlDataPO;
339
				DEALLOCATE XmlDataPO;
340
				--- CUSOR DANH SACH LICH THANH TOAN PO - HD	
341
				DECLARE XmlDataSchedule CURSOR FOR
342
				SELECT *
343
				FROM
344
				OPENXML(@hdocPaySchedule, '/Root/XmlDataSchedule',2)
345
				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),
346
				AMT_REMAIN_SCHEDULE decimal(18,0),REQ_AD_DT varchar(20),PROCESS varchar(15), PAY_ID VARCHAR(15),REF_ID VARCHAR(15),
347
				REQ_PAY_DESC NVARCHAR(500), REQ_PAY_ENTRIES NVARCHAR(250),CURRENCY VARCHAR(15),RATE DECIMAL(18,0),AMT_PAY_REAL DECIMAL(18,2))
348
				OPEN XmlDataSchedule
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
				WHILE @@fetch_status=0 
352
				BEGIN
353
					DECLARE @p_REQ_PAY_SCHEDULE_ID VARCHAR(15);
354
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_SCHEDULE', @p_REQ_PAY_SCHEDULE_ID OUT;
355
					IF @p_REQ_PAY_SCHEDULE_ID='' OR @p_REQ_PAY_SCHEDULE_ID IS NULL GOTO ABORT;
356
					INSERT INTO TR_REQ_PAY_SCHEDULE(
357
					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,
358
					CREATE_DT,AUTH_STATUS_KT,PAYMENT_STATUS,TRN_TYPE,REF_ID,REQ_PAY_DESC,REQ_PAY_ENTRIES,CURRENCY,RATE, AMT_PAY_REAL)
359
					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,
360
					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)
361
				--- END KHAI BAO CURSOR
362
				IF @@error<>0 GOTO ABORT;
363
				FETCH NEXT FROM XmlDataSchedule INTO @PO_ID,@TERM_PAY,@AMT_PAY_SCHEDULE,@REQ_ADV_ID_SCHE,@AMT_ADVANCE_SCHEDULE,@AMT_PAY_DO,
364
				@AMT_REMAIN_SCHEDULE,@REQ_AD_DT,@PROCESS,@PAY_ID,@REF_ID,@REQ_PAY_DESC,@REQ_PAY_ENTRIES,@CURRENCY,@RATE,@AMT_PAY_REAL
365
				END
366
				CLOSE XmlDataSchedule;
367
				DEALLOCATE XmlDataSchedule;
368
			END
369
		--- END TẠM ỨNG THANH TOÁN
370
		---- TẠM ỨNG HĐ ĐỊNH KÌ
371
			IF(@p_REQ_TYPE = 'P' AND @p_IS_PERIOD='Y')
372
			BEGIN
373
				DELETE FROM TR_REQ_ADVANCE_DT WHERE REQ_PAY_ID =@p_REQ_PAY_ID
374
				DELETE FROM TR_REQ_PAY_PERIOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID
375
				DECLARE @DELIVERY_DT VARCHAR(20)
376
				DECLARE XmlDataRecurring CURSOR FOR
377
				SELECT *
378
				FROM
379
				OPENXML(@hdocPayAcvanceDT, '/Root/XmlDataRecurring', 2)
380
				WITH(CONTRACT_ID varchar(15),IS_CLOSED VARCHAR(1),REF_TYPE VARCHAR(15), DELIVERY_DT VARCHAR(20))
381
				OPEN XmlDataRecurring;
382
				SET @INDEX_PO = 0
383
				FETCH NEXT FROM XmlDataRecurring INTO @REF_ID,@IS_CLOSED,@REF_TYPE
384
				WHILE @@fetch_status=0 
385
				BEGIN
386
					SET @INDEX_PO = @INDEX_PO +1
387
					DECLARE @REQ_PAYDTID_C VARCHAR(15);
388
					EXEC SYS_CodeMasters_Gen 'TR_REQ_ADVANCE_DT', @REQ_PAYDTID_C OUT;
389
					IF @REQ_PAYDTID_C='' OR @REQ_PAYDTID_C IS NULL GOTO ABORT;
390
					INSERT INTO TR_REQ_ADVANCE_DT (REQ_PAYDTID,REQ_PAY_ID,REF_ID,TYPE,MAKER_ID,CREATE_DT,IS_CLOSED,REF_TYPE, DELIVERY_DT) 
391
					VALUES(@REQ_PAYDTID_C,@p_REQ_PAY_ID,@REF_ID,'ADV_PAY',@p_MAKER_ID,GETDATE(),@IS_CLOSED,@REF_TYPE, CONVERT(DATE,@DELIVERY_DT,103))
392
				IF @@error<>0 GOTO ABORT;
393
				FETCH NEXT FROM XmlDataRecurring INTO @REF_ID,@IS_CLOSED,@REF_TYPE, @DELIVERY_DT
394
				END
395
				CLOSE XmlDataRecurring;
396
				DEALLOCATE XmlDataRecurring;
397
				--- CUSOR DANH SACH LICH THANH TOAN PO - HD	
398
			----------------------------
399
			--INSERT FROM PERIOD	
400
				DECLARE XmlDataPeriod CURSOR FOR
401
				SELECT *
402
				FROM
403
				OPENXML(@hdocPayPeriod, '/Root/XmlDataPeriod', 2)
404
				WITH(CONTRACT_ID varchar(15),PAY_DT_REAL VARCHAR(20),PAY_TYPE VARCHAR(5),
405
				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) )
406
				OPEN XmlDataPeriod;
407
				DECLARE @CONTRACT_ID varchar(15),@PAY_DT_REAL VARCHAR(20),@PAY_TYPE VARCHAR(5), @OLD_INDEX DECIMAL(18,0),@NEW_INDEX DECIMAL(18,0),
408
				@AMT_PAY_PERIOD DECIMAL(18,2),@FROM_DATE VARCHAR(20),@TO_DATE VARCHAR(20),@PAY_PHASE NVARCHAR(250), @REASON_TTDK NVARCHAR(2000)
409
				FETCH NEXT FROM XmlDataPeriod INTO @CONTRACT_ID ,@PAY_DT_REAL ,@PAY_TYPE ,
410
				@OLD_INDEX ,@NEW_INDEX ,@AMT_PAY_PERIOD,@CURRENCY, @RATE,@FROM_DATE,@TO_DATE,@PAY_PHASE,@REASON_TTDK
411
				WHILE @@fetch_status=0 
412
				BEGIN
413
					-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
414
					IF(@p_TYPE_FUNCTION ='SEND')
415
					BEGIN
416
					
417
					--IF(EXISTS(SELECT CONTRACT_ID 
418
					--FROM TR_CONTRACT 
419
					--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 <>''))
420
					
421
					----AND IS_CLOSED='Y' ))
422
					--BEGIN
423
					--	ROLLBACK TRANSACTION
424
					--	SELECT '-1' as Result, '' REQ_PAY_ID, ''  AS REQ_PAY_CODE,N'Tạm ứng hợp đồng định kì đã đóng' ErrorDesc
425
					--	RETURN '-1'
426
					--END
427

    
428
					IF(@NEW_INDEX <=@OLD_INDEX AND @NEW_INDEX >0 AND @OLD_INDEX >0)
429
					BEGIN
430
						ROLLBACK TRANSACTION
431
						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
432
						RETURN '-1'
433
					END
434
					-- NEU LÀ DINH KI THI HD PHAI KHAC NULL
435
						IF(@CONTRACT_ID IS NULL OR @CONTRACT_ID ='' )
436
						BEGIN
437
							ROLLBACK TRANSACTION
438
							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
439
							RETURN '-1'
440
						END
441
					-- KIEM TRA CHI TIET HOP DONG PHAI NAM TRONG DANH SACH CAC HOP DONG
442
						IF(@CONTRACT_ID IS NOT NULL AND  @CONTRACT_ID <> '' )
443
						BEGIN
444
							IF(NOT EXISTS(SELECT * FROM TR_REQ_ADVANCE_DT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND REF_ID =@CONTRACT_ID))
445
							BEGIN
446
								ROLLBACK TRANSACTION
447
								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
448
								RETURN '-1'
449
							END
450
						END
451
					END
452
					DECLARE @PERIOD_ID VARCHAR(15);
453
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_PERIOD', @PERIOD_ID OUT;
454
					IF @PERIOD_ID='' OR @PERIOD_ID IS NULL GOTO ABORT;
455
					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, 
456
					TO_DATE,AD_PAY_ID,PROCESS,PAY_PHASE, REASON)
457
					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',
458
					@CURRENCY, @RATE,CONVERT(DATE,@FROM_DATE,103),CONVERT(DATE,@TO_DATE,103),@p_REQ_PAY_ID,'0',@PAY_PHASE,@REASON_TTDK)
459
				IF @@error<>0 GOTO ABORT;
460
				FETCH NEXT FROM XmlDataPeriod INTO @CONTRACT_ID ,@PAY_DT_REAL ,@PAY_TYPE , @OLD_INDEX ,@NEW_INDEX ,@AMT_PAY_PERIOD,@CURRENCY, @RATE,@FROM_DATE,
461
				@TO_DATE,@PAY_PHASE,@REASON_TTDK
462
			END
463
			CLOSE XmlDataPeriod;
464
			DEALLOCATE XmlDataPeriod;
465
			-- VALIDATE SO TIEN
466
			--IF(@p_REQ_AMT >= @TOTAL_SCHEDULE_AMT)
467
			--BEGIN
468
			--	ROLLBACK TRANSACTION
469
			--	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
470
			--	RETURN '-1'
471
			--END
472
			----
473
			END
474
		---- END TẠM ỨNG HĐ ĐỊNH KÌ
475
		--- INSERT PHƯƠNG THỨC THANH TOÁN
476
		----MethodCursor
477
			DELETE FROM TR_REQ_PAY_METHOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID
478
			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),
479
					@ACC_NO VARCHAR(50), @ACC_NAME NVARCHAR(250), @ISSED_BY NVARCHAR(250), @ISSUED_DT VARCHAR(20)
480
			DECLARE @INDEX_PAY_METHOD DECIMAL(18,0) = 0;
481
			DECLARE XmlDataMethod CURSOR FOR
482
			SELECT *
483
			FROM
484
			OPENXML(@hdocPayMethod, '/Root/XmlDataMethod',2)
485
			WITH(RECEIVE_ID varchar(15),RECEIVE_NAME nvarchar(100),REQ_PAY_REASON nvarchar(MAX),TOTAL_AMT decimal(18,2),REQ_PAY_TYPE varchar(1),
486
			REQ_PAY_DESC nvarchar(MAX),REQ_PAY_ENTRIES nvarchar(MAX),ACC_NO VARCHAR(50), ACC_NAME NVARCHAR(250), 
487
			ISSUED_BY NVARCHAR(250), ISSUED_DT VARCHAR(20),CURRENCY VARCHAR(15),RATE DECIMAL(18,0),CHECK_IN VARCHAR(15))
488
			OPEN XmlDataMethod
489
			FETCH NEXT FROM XmlDataMethod 
490
			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 
491
			WHILE @@fetch_status=0 
492
			BEGIN
493
				SET @INDEX_PAY_METHOD = @INDEX_PAY_METHOD + 1;
494
					---------------------------start validate ------------------------------
495
					IF(@p_TYPE_FUNCTION ='SEND')
496
					BEGIN
497
						IF(@ACC_NO IS NULL OR @ACC_NO = '')
498
						BEGIN
499
							ROLLBACK TRANSACTION
500
							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
501
							RETURN '-1'
502
						END
503
						IF(@ACC_NAME IS NULL OR @ACC_NAME = '')
504
						BEGIN
505
							ROLLBACK TRANSACTION
506
							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
507
							RETURN '-1'
508
						END
509
						IF(@ISSED_BY IS NULL OR @ISSED_BY = '')
510
						BEGIN
511
							ROLLBACK TRANSACTION
512
							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
513
							RETURN '-1'
514
						END
515
						IF(@REQ_PAY_TYPE IS NULL OR @REQ_PAY_TYPE = '')
516
						BEGIN
517
							IF(@ISSUED_DT IS NULL OR @ISSUED_DT = '')
518
							BEGIN
519
								ROLLBACK TRANSACTION
520
								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'  ErrorDesc
521
								RETURN '-1'
522
							END
523
							
524
						END
525
						IF(@REQ_PAY_REASON IS NULL OR @REQ_PAY_REASON = '')
526
						BEGIN
527
							ROLLBACK TRANSACTION
528
							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
529
							RETURN '-1'
530
						END
531
						IF(@TOTAL_AMT_METHOD IS NULL OR @TOTAL_AMT_METHOD = 0)
532
						BEGIN
533
							ROLLBACK TRANSACTION
534
							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
535
							RETURN '-1'
536
						END
537
						
538
					END
539
					-----------------------------end validate ----------------------------
540
				IF(@REQ_PAY_TYPE<>'1')
541
				BEGIN
542
					SET @ISSUED_DT = NULL
543
				END
544
				DECLARE @p_REQ_PAY_METHOD_ID VARCHAR(15);
545
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_METHOD', @p_REQ_PAY_METHOD_ID OUT;
546
				IF @p_REQ_PAY_METHOD_ID='' OR @p_REQ_PAY_METHOD_ID IS NULL GOTO ABORT;
547
				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,
548
				CREATE_DT,ACC_NO,ACC_NAME,ISSUED_BY,ISSUED_DT,CURRENCY,RATE,CHECK_IN)
549
				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,'',
550
				@p_MAKER_ID,GETDATE(),@ACC_NO,@ACC_NAME,@ISSED_BY, CONVERT(DATE, @ISSUED_DT, 103),@CURRENCY,@RATE,@CHECK_IN)
551
			IF @@error<>0 GOTO ABORT;
552
			FETCH NEXT FROM XmlDataMethod 
553
			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
554
			END
555
			CLOSE XmlDataMethod;
556
			DEALLOCATE XmlDataMethod
557
		----END INSERT PHƯƠNG THỨC THANH TOÁN
558
		----INSERT VAO BANG DS KHACH HANG
559
			DELETE FROM TR_REQ_ADVANCE_CUS WHERE REQ_PAY_ID = @p_REQ_PAY_ID
560
			DECLARE XmlDataCus CURSOR FOR
561
			SELECT *
562
			FROM
563
			OPENXML(@hdocCus, '/Root/XmlDataCus', 2)
564
			WITH(CUST_ID varchar(15), EMP_ID VARCHAR(15), AMT_PAY_DO decimal(18,2),CURRENCY VARCHAR(15),RATE DECIMAL(18,0))
565
			OPEN XmlDataCus;
566

    
567
			FETCH NEXT FROM XmlDataCus INTO @CUST_ID, @EMP_ID,@AMT_PAY_DO,@CURRENCY,@RATE
568
				WHILE @@fetch_status=0 
569
				BEGIN		
570
					INSERT INTO TR_REQ_ADVANCE_CUS(REQ_PAY_ID,CUST_ID,EMP_ID,AMT_PAY_DO,CURRENCY,RATE,MAKER_ID,CREATE_DT)
571
					VALUES (@p_REQ_PAY_ID, @CUST_ID, @EMP_ID,@AMT_PAY_DO,@CURRENCY,@RATE,@p_MAKER_ID,GETDATE())
572
				--- END KHAI BAO CURSOR
573
				IF @@error<>0 GOTO ABORT;
574
				FETCH NEXT FROM XmlDataCus INTO  @CUST_ID, @EMP_ID,@AMT_PAY_DO,@CURRENCY,@RATE
575
				END
576
				CLOSE XmlDataCus;
577
				DEALLOCATE XmlDataCus;
578
		----END
579
		-- HANG MUC CHI PHI VA NGAN SACH
580
			DELETE FROM TR_REQ_PAY_BUDGET WHERE REQ_PAY_ID =@p_REQ_PAY_ID
581
			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)
582
			DECLARE XmlDataGood CURSOR LOCAL FOR
583
			SELECT *
584
			FROM
585
			OPENXML(@hdocPayBudget, '/Root/XmlDataGood',2) 
586
			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)
587
			OPEN XmlDataGood
588
			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
589
			WHILE @@fetch_status=0 BEGIN
590
				--- KIEM TRA NEU NGAN SACH SU DUNG THUC THE LON HON NGAN SACH CON LAI
591
				SET @INDEX_NS = @INDEX_NS +1
592
				-- KHI NAO BAM GUI PHE DUYET THI MOI CHECK VALIDATE
593
				--IF(@p_TYPE_FUNCTION ='SEND')
594
				--BEGIN
595
				--IF((@AMT_EXE  > @AMT_REMAIN_GD))
596
				--BEGIN
597
				--		ROLLBACK TRANSACTION
598
				--		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
599
				--		RETURN '-1'
600
				--END	
601
				--END
602
				IF(@p_TYPE_FUNCTION ='SEND')
603
				BEGIN
604
				IF(ISNULL(@AMT_EXE,0) =0)
605
				BEGIN
606
					ROLLBACK TRANSACTION
607
						SELECT '-1' as Result, @p_REQ_PAY_ID REQ_PAY_ID,@p_REQ_PAY_CODE  AS REQ_PAY_CODE, N'Dòng '+ CONVERT(VARCHAR(5),@INDEX_NS)+ N': Ngân sách sử dụng thực tế phải lớn hơn không.' ErrorDesc
608
						RETURN '-1'
609
				END
610
				--IF((@AMT_EXE  > @AMT_REMAIN_GD) AND ((SELECT GD_TYPE_ID FROM CM_GOODS WHERE GD_ID =@GD_ID) ='NS'))
611
				--BEGIN
612
				--		ROLLBACK TRANSACTION
613
				--		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
614
				--		RETURN '-1'
615
				--END		
616
			END
617
				DECLARE @p_BUDGET_ID VARCHAR(15);
618
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_BUDGET', @p_BUDGET_ID OUT;
619
				IF @p_BUDGET_ID='' OR @p_BUDGET_ID IS NULL GOTO ABORT;
620
				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) 
621
				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)
622
			IF @@error<>0 GOTO ABORT;
623
			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
624
			END;
625
		CLOSE XmlDataGood;
626
		DEALLOCATE XmlDataGood;
627
		--- END INSERT NGAN SACH
628
		DELETE FROM TR_REQ_PAY_ATTACH WHERE REQ_PAY_ID =@p_REQ_PAY_ID
629
		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)
630
		DECLARE XmlAttach CURSOR FOR
631
		SELECT *
632
		FROM
633
		OPENXML(@hdocPayAtach, '/Root/XmlAttach',2) 
634
		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))
635
		OPEN XmlAttach
636
		--INSERT CHUNG TU DINH KEM
637
				FETCH NEXT FROM XmlAttach INTO @ATTACH_ID,@CON_ID,@CONT_CODE,@NOTES_ATT,@CON_DESC,@CON_TYPE,@AMT_ATT,@REF_DT
638
				WHILE @@fetch_status=0 
639
				BEGIN
640
					IF (@REF_DT='')
641
					BEGIN
642
						SET @REF_DT = NULL
643
					END
644
					EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_ATTACH', @ATTACH_ID OUT;
645
					IF @ATTACH_ID='' OR @ATTACH_ID IS NULL GOTO ABORT;
646
					INSERT INTO TR_REQ_PAY_ATTACH(ATTACH_ID,REQ_PAY_ID,REF_ID,REF_CODE,NOTES,[DESCRIPTION],[TYPE],AMT,REF_DT) VALUES
647
					(@ATTACH_ID,@p_REQ_PAY_ID,@CON_ID,@CONT_CODE,@NOTES_ATT,@CON_DESC,@CON_TYPE,@AMT_ATT, CONVERT(DATE, @REF_DT,103))
648
				IF @@error<>0 GOTO ABORT;
649
				FETCH NEXT FROM XmlAttach INTO @ATTACH_ID,@CON_ID,@CONT_CODE,@NOTES_ATT,@CON_DESC,@CON_TYPE,@AMT_ATT,@REF_DT
650
				END
651
				CLOSE XmlAttach;
652
				DEALLOCATE XmlAttach;
653
		----END
654
		--- BAT DAU VALIDATE
655
		IF(@p_TYPE_FUNCTION ='SEND')
656
		BEGIN
657
			DECLARE @SUM_PTTT DECIMAL(18,0), @SUM_NS DECIMAL(18,0),@SUM_LICH_TT DECIMAL(18,0)
658
			SET @SUM_PTTT =(SELECT SUM(TOTAL_AMT * ISNULL(RATE,1)) FROM  TR_REQ_PAY_METHOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
659
			IF(EXISTS(SELECT * FROM TR_REQ_PAY_SCHEDULE WHERE REQ_PAY_ID =@p_REQ_PAY_ID) AND @p_REQ_TYPE ='D')
660
			BEGIN
661
				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)
662
				IF(@p_REQ_AMT*ISNULL(@p_RATE,1) != ISNULL(@SUM_LICH_TT,0))
663
				BEGIN
664
					ROLLBACK TRANSACTION
665
					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
666
					RETURN '-1'
667
				END
668
			END
669
			IF(EXISTS(SELECT * FROM TR_REQ_PAY_BUDGET WHERE REQ_PAY_ID =@p_REQ_PAY_ID))
670
			BEGIN
671
				SET @SUM_NS =(SELECT SUM(AMT_EXE * ISNULL(RATE,1)) FROM  TR_REQ_PAY_BUDGET WHERE REQ_PAY_ID =@p_REQ_PAY_ID)
672
				IF(@p_REQ_AMT*ISNULL(@p_RATE,1) != ISNULL(@SUM_NS,0))
673
				BEGIN
674
					ROLLBACK TRANSACTION
675
					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
676
					RETURN '-1'
677
				END
678
			END
679
			ELSE
680
			IF(@p_REQ_AMT*ISNULL(@p_RATE,1) != ISNULL(@SUM_PTTT,0))
681
			BEGIN
682
				ROLLBACK TRANSACTION
683
				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
684
				RETURN '-1'
685
			END
686
			
687
		END
688
		----END
689
		IF(@p_REQ_TYPE ='I')
690
			BEGIN
691
				DELETE FROM PL_REQUEST_PROCESS WHERE REQ_ID = @p_REQ_PAY_ID
692
				DECLARE @tmp table(ROLE_ID VARCHAR(25),BRANCH_ID varchar(15),AMT decimal(18,2))
693
				IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE) ='HS')
694
				BEGIN
695
					--DECLARE @DEP_CODE VARCHAR(15)
696
					--SET @DEP_CODE =(SELECT * FROM CM_DEPARTMENT WHERE DEP_ID =@p_DEP_ID)
697
					IF EXISTS(SELECT * FROM CM_DEPARTMENT WHERE (DEP_CODE LIKE '%06908%' OR DEP_CODE ='0690605') AND DEP_ID =@p_DEP_ID)
698
					BEGIN
699
							-- KHOI TAI CHINH SE KHONG CO PTGD NUA MA CHI CO KDK - LUCTV 29032021
700
						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'
701
						--INSERT INTO @tmp  SELECT A.ROLE_ID, A.BRANCH_ID,A.LIMIT_VALUE FROM TL_SYSROLE_LIMIT A WHERE A.LIMIT_TYPE='ADV_PAY'AND BRANCH_ID ='DV0001' AND A.ROLE_ID <>'GDK'
702
						--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
703
					END
704
					IF EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE ='0690405' AND DEP_ID =@p_DEP_ID)
705
					BEGIN
706
							-- KHOI TAI CHINH SE KHONG CO PTGD NUA MA CHI CO KDK - LUCTV 29032021
707
						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'
708
						--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'
709
						--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
710
					END
711
					ELSE IF EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06910%' AND DEP_ID =@p_DEP_ID)
712
					BEGIN
713
						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
714
					END
715
					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)
716
					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) 
717
					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)
718
					OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%799%' AND DEP_ID =@p_DEP_ID)
719
					OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%899%' AND DEP_ID =@p_DEP_ID))
720
					BEGIN
721
						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
722
					END
723
					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)
724
					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) 
725
					OR EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_CODE LIKE '%06922%' AND DEP_ID =@p_DEP_ID))
726
					BEGIN
727
						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
728
					END
729
					ELSE
730
					BEGIN
731
						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
732
					END
733
				END
734
				ELSE
735
				BEGIN
736
				IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE) ='CN')
737
					BEGIN
738
						--- BAO GOM DON VI & 3 CAP DUYET CUA HOI SO
739
						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' 
740
						--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'
741
				END
742
				ELSE IF((SELECT BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE) ='PGD')
743
					BEGIN
744
						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'
745
						--BRANCH_ID =(SELECT FATHER_ID FROM CM_BRANCH WHERE BRANCH_ID= @p_BRANCH_CREATE)
746
						--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'
747
				END
748
				END
749
				DECLARE @ROLE_ID VARCHAR(20), @BRANCH_ID VARCHAR(20), @INDEX INT =0, @SL_ROLE INT =0,@LIMIT_VALUE DECIMAL(18,0)
750
				SET @SL_ROLE = (SELECT COUNT(*) FROM @tmp)
751
				DECLARE @ISLEAF VARCHAR(1) = 'Y', @PARENT_ID VARCHAR(10) = '', @STATUS VARCHAR(1) = 'C', @NOTES NVARCHAR(500)
752
				DECLARE CUR_PR CURSOR FOR  SELECT A.ROLE_ID, A.BRANCH_ID,A.AMT FROM @tmp A ORDER BY A.AMT ASC
753
				OPEN CUR_PR
754
				FETCH NEXT FROM CUR_PR INTO @ROLE_ID,@BRANCH_ID,@LIMIT_VALUE
755
				WHILE @@FETCH_STATUS =0 --AND @STOP=0
756
				BEGIN								
757
					SET @INDEX= @INDEX+1
758
					IF @INDEX = @SL_ROLE
759
						SET @ISLEAF = 'Y'
760
					ELSE
761
						SET @ISLEAF = 'N'
762
					SET @NOTES = (SELECT N'Đợi '+ ROLE_DESC + N' phê duyệt' FROM TL_SYSROLE WHERE ROLE_ID = @ROLE_ID)
763

    
764
					IF(@INDEX=1 )
765
					BEGIN		
766
						SET @PARENT_ID = NULL
767
						SET @STATUS = 'C'							
768
						--INSERT INTO TR_REQUEST_PROCESS VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),'C',@ROLE_ID,@BRANCH_ID,NULL,NULL,NULL,@ISLEAF)
769
					END				
770
					ELSE 
771
					BEGIN
772
						SET @PARENT_ID = CONVERT(VARCHAR(5),@INDEX -1)
773
						SET @STATUS = 'U'
774
					END
775
						IF(@LIMIT_VALUE >= @p_REQ_AMT)
776
						BEGIN
777
							INSERT INTO dbo.PL_REQUEST_PROCESS
778
							(
779
								REQ_ID,
780
								PROCESS_ID,
781
								STATUS,
782
								ROLE_USER,
783
								BRANCH_ID,
784
								CHECKER_ID,
785
								APPROVE_DT,
786
								PARENT_PROCESS_ID,
787
								IS_LEAF, COST_ID, DVDM_ID, NOTES
788
							)
789
							VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),@STATUS,@ROLE_ID,@BRANCH_ID,NULL,NULL, @PARENT_ID,'Y', '',@p_DVDM_ID,@NOTES)
790
							--INSERT INTO PL_REQUEST_PROCESS VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),@STATUS,@ROLE_ID,@BRANCH_ID,NULL,NULL, @PARENT_ID,'Y','')
791
							IF(@ROLE_ID <> 'TKTGD' AND @ROLE_ID <> 'TKHDQT')
792
							BEGIN
793
								BREAK;
794
							END
795
						END
796
						ELSE
797
							INSERT INTO PL_REQUEST_PROCESS (
798
								REQ_ID,
799
								PROCESS_ID,
800
								STATUS,
801
								ROLE_USER,
802
								BRANCH_ID,
803
								CHECKER_ID,
804
								APPROVE_DT,
805
								PARENT_PROCESS_ID,
806
								IS_LEAF, COST_ID, DVDM_ID, NOTES
807
							) VALUES (@p_REQ_PAY_ID,CONVERT(VARCHAR(5), @INDEX),@STATUS,@ROLE_ID,@BRANCH_ID,NULL,NULL, @PARENT_ID,@ISLEAF, '', @p_DVDM_ID, @NOTES)
808
					--END
809
					
810
					FETCH NEXT FROM CUR_PR INTO @ROLE_ID,@BRANCH_ID,@LIMIT_VALUE
811
				END
812
				CLOSE CUR_PR
813
				DEALLOCATE CUR_PR
814
			END
815
COMMIT TRANSACTION
816
		IF(@p_TYPE_FUNCTION ='SEND')-- BAT DAU GUI PHE DUYET
817
		BEGIN
818

    
819
				--ROLLBACK TRANSACTION
820
				-- CAP NHAT TINH TRANG DUYET KE TOAN LA DANG XU LY 
821
				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')
822
				BEGIN
823
					DECLARE @USER_TP VARCHAR(15) =''
824
					--SET @USER_TP =(SELECT TOP 1 TLNANME FROM TL_USER WHERE SECUR_CODE =@p_DEP_ID 
825
					--		AND (RoleName IN ('GDDV','TPTC','TC','KTT') OR RoleName IN (SELECT ROLE_OLD FROM TL_SYS_ROLE_MAPPING WHERE ROLE_NEW ='GDDV')))
826
					IF(@USER_TP IS NULL OR @USER_TP ='')
827
					BEGIN
828
						SET @USER_TP = (SELECT TOP 1 TLNANME FROM TL_USER_V2 WHERE SECUR_CODE =@p_DEP_ID 
829
							AND (RoleName IN ('TBP','PP')))
830
					END
831
					--UPDATE TR_REQ_ADVANCE_PAYMENT SET TRASFER_USER_RECIVE =@USER_TP WHERE REQ_PAY_ID =@p_REQ_PAY_ID
832
				END
833
				DECLARE @SUM_TEMP_PAY DECIMAL, @SUM_PAY DECIMAL
834
				IF (@p_REQ_TYPE ='I')
835
				BEGIN
836
					SET @SUM_TEMP_PAY = (SELECT SUM(REQ_AMT*ISNULL(RATE,1)) 
837
					FROM TR_REQ_ADVANCE_PAYMENT WHERE  REF_ID =@p_REF_ID AND AUTH_STATUS ='A' AND  REQ_TYPE ='I')
838
					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')
839
					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
840
				END
841
				DECLARE @SUM_THANH_TOAN DECIMAL(18,0) =0, @SUM_PHUONG_THUC DECIMAL(18,0) =0
842
				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)
843
				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)
844
				IF(ROUND(@SUM_THANH_TOAN,0) <> ROUND(@SUM_PHUONG_THUC,0))
845
				BEGIN
846
					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
847
					RETURN '-1'
848
				END
849
				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')
850
				BEGIN
851
					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
852
					RETURN '-1'
853
				END
854
				IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT where AUTH_STATUS = 'U' AND REQ_PAY_ID = @p_REQ_PAY_ID ))
855
				BEGIN
856
					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
857
					RETURN '-1'
858
				END
859

    
860
				
861
				--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')))
862
				--BEGIN
863
				--	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
864
				--	RETURN '-1'
865
				--END
866
				UPDATE TR_REQ_ADVANCE_PAYMENT SET AUTH_STATUS ='U',CREATE_DT = GETDATE() WHERE REQ_PAY_ID =@p_REQ_PAY_ID
867
				UPDATE PL_REQUEST_PROCESS SET ROLE_USER ='GDDV' WHERE REQ_ID =@p_REQ_PAY_ID AND ROLE_USER ='PGD'
868
				UPDATE PL_REQUEST_PROCESS SET ROLE_USER ='TPGD' WHERE REQ_ID =@p_REQ_PAY_ID AND ROLE_USER ='PPGD'
869
				INSERT INTO dbo.PL_PROCESS(REQ_ID,PROCESS_ID,CHECKER_ID,APPROVE_DT,PROCESS_DESC,NOTES)
870
				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')
871
				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))
872
				BEGIN
873
					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
874
					RETURN '4'
875
				END
876
				ELSE
877
				BEGIN
878
					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
879
					RETURN '4'
880
				END
881
				--SELECT '4' as Result, @p_REQ_PAY_ID AS REQ_PAY_ID, N'Gửi phê duyệt thành công' ErrorDesc
882
				--RETURN '4'
883
		END
884
		-- FIX PHONG HO LOI LIEN QUAN DEN VIEC TAI KHOAN TAM UNG BI SAI
885
		----DECLARE  @REQ_PAY_ID varchar(15), @l_REF_ID varchar(15)
886
		----DECLARE cursorProduct CURSOR LOCAL FOR
887
		----SELECT REQ_PAY_ID,REF_ID FROM TR_REQ_ADVANCE_PAYMENT A WHERE A.REQ_TYPE ='I'
888
		----Open cursorProduct
889
		----FETCH NEXT FROM cursorProduct INTO @REQ_PAY_ID, @l_REF_ID
890
		----WHILE @@FETCH_STATUS = 0
891
		----BEGIN
892
		----   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
893
		----FETCH NEXT FROM cursorProduct INTO  @REQ_PAY_ID, @l_REF_ID
894
		----END
895
	SELECT '0' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, '' ErrorDesc
896
	RETURN '0'
897
ABORT:
898
BEGIN
899
		ROLLBACK TRANSACTION
900
		SELECT '-1' as Result, '' REQ_PAY_ID, '' ErrorDesc
901
		RETURN '-1'
902
End
903