Project

General

Profile

PAY_KT_UPD.txt

Luc Tran Van, 11/22/2022 01:48 PM

 
1
ALTER PROCEDURE [dbo].[TR_REQ_PAYMENT_KT_Upd]
2
@p_REQ_PAY_ID	varchar(15)= NULL,
3
@p_REQ_PAY_CODE	varchar(50)	= NULL,
4
@p_REQ_DT VARCHAR(20)= NULL,
5
@p_BRANCH_ID	varchar(15)	= NULL,
6
@p_DEP_ID	varchar(15)	= NULL,
7
@p_REQ_REASON	nvarchar(MAX)	= NULL,
8
@p_REQ_TYPE	varchar(15)	= NULL,
9
@P_REQ_ENTRIES nvarchar(MAX)	= NULL,
10
@p_REQ_DESCRIPTION	nvarchar(MAX)	= NULL,
11
@p_REF_ID	varchar(15)	= NULL,
12
@p_RECEIVER_PO	nvarchar(250)	= NULL,
13
@p_REQ_PAY_TYPE	varchar(15)	= NULL,
14
@p_REQ_TYPE_CURRENCY	nvarchar(50)	= NULL,
15
@p_RATE	DECIMAL(18,2) = NULL,
16
@p_REQ_AMT	decimal(18, 0)	= NULL,
17
@p_REQ_TEMP_AMT	decimal(18, 0)	= NULL,
18
@p_MAKER_ID	varchar(15)	= NULL,
19
@p_CREATE_DT	varchar(25)	= NULL,
20
@p_EDITOR_ID	varchar(15)	= NULL,
21
@p_AUTH_STATUS	varchar(1)	= NULL,
22
@p_CHECKER_ID	varchar(15)	= NULL,
23
@p_APPROVE_DT	varchar(25)	= NULL,
24
@p_CREATE_DT_KT	varchar(25)	= NULL,
25
@p_MAKER_ID_KT	varchar(15)	= NULL,
26
@p_AUTH_STATUS_KT	varchar(1)	= NULL,
27
@p_CHECKER_ID_KT	varchar(1)	= NULL,
28
@p_APPROVE_DT_KT  varchar(25)= null,
29
@p_CONFIRM_NOTE	nvarchar(500)	= NULL,
30
@p_BRANCH_CREATE	varchar(15)	= NULL,
31
@p_NOTES	varchar(15)	= NULL,
32
@p_RECORD_STATUS	varchar(1)	= NULL,
33
@p_TRANSFER_MAKER	nvarchar(50)	= NULL,
34
@p_TRANSFER_DT	varchar(25)	= NULL,
35
@p_TRASFER_USER_RECIVE	varchar(15)	= NULL,
36
@p_PROCESS	varchar(15)	= NULL,
37
@p_PAY_PHASE VARCHAR(15) = NULL,
38
@p_IS_SEND_APPR VARCHAR(15) = NULL,
39
@p_XMP_TEMP_DATA_ENTRIES XML = NULL,
40
@p_XMP_TEMP_INVOICE XML = NULL,
41
@p_XMP_TEMP_VAT_INVOICE XML = NULL,
42
--doanptt 14/03/2022
43
@p_XMP_TEMP_DATA_TRANSFER_OUTSIDE_TRANS XML = NULL,
44
@p_XMP_TEMP_DATA_TRANSFER_OUTSIDE_REC XML = NULL
45
AS
46

    
47
-- BEGIN VALIDATE UPDATE
48
	IF (NOT EXISTS (SELECT * FROM PL_REQUEST_PROCESS_CHILD WHERE REQ_ID = @p_REQ_PAY_ID AND TLNAME =@p_MAKER_ID_KT AND TYPE_JOB = 'XL'))
49
	BEGIN
50
		SELECT '-1' as Result, '' REQ_PAY_ID, N'Bạn không được phép cập nhật phiếu đề nghị thanh toán này. Phiếu đề nghị thanh toán đang được điều phối cho giao dịch viên khác xử lý' ErrorDesc
51
		RETURN '-1'
52
	END
53
	IF ((SELECT AUTH_STATUS FROM TR_REQ_PAYMENT WHERE REQ_PAY_ID = @p_REQ_PAY_ID) ='R')
54
	BEGIN
55
		SELECT '-1' Result,'' REQ_PAY_ID,N'Phiếu đề nghị thanh toán đang được trả về đơn vị. Vui lòng chờ đơn vị cập nhật thông tin và duyệt lại!' ErrorDesc
56
		RETURN '-1'
57
	END
58
	IF(EXISTS(SELECT * FROM TR_REQ_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND AUTH_STATUS_KT = 'A'))
59
	BEGIN
60
		SELECT '-1' as Result, '' REQ_PAY_ID, N'Phiếu đề nghị thanh toán đã được phê duyệt thành công trước đó!' ErrorDesc
61
		RETURN '-1'
62
	END
63
	IF(EXISTS(SELECT * FROM TR_REQ_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND AUTH_STATUS_KT = 'P'))
64
	BEGIN
65
		SELECT '-1' as Result, '' REQ_PAY_ID, N'Phiếu đề nghị thanh toán đã được gửi phê duyệt kế toán thành công trước đó! Vui lòng đợi KSV xử lý phiếu' ErrorDesc
66
		RETURN '-1'
67
	END
68
	IF(EXISTS(SELECT * FROM TR_REQ_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND AUTH_STATUS_KT = 'S'))
69
	BEGIN
70
		SELECT '-1' as Result, '' REQ_PAY_ID, N'Phiếu đề nghị thanh toán đang được đề xuất từ chối! Vui lòng đợi KSV xử lý phiếu' ErrorDesc
71
		RETURN '-1'
72
	END
73
-- END VALIDATE UPDATE
74

    
75
	DECLARE @ENTRY_PAIR varchar(20),@DR_CR varchar(20),@ACCT VARCHAR(50), @ACCT_NAME VARCHAR(500), @AMT decimal(18,2),@CURRENCY VARCHAR(15), @EXC_RATE DECIMAL(18,0),
76
		@BRANCH_ID VARCHAR(15), @DEP_ID VARCHAR(15),@TRN_DESC nvarchar(255),@GL_CODE VARCHAR(100), @BRANCH_CODE VARCHAR(15), @DEP_CODE VARCHAR(15)
77
	DECLARE @VAT decimal(18, 0) =NULL, @TRANS_NO nvarchar(50)=NULL, @TRANS_DT VARCHAR(20)=NULL,@INVOICE_SIGN nvarchar(50) = NULL,@INVOICE_NO_SIGN nvarchar(50)=null,
78
		@INVOICE_NO nvarchar(50) = NULL,@INVOICE_DT VARCHAR(20) = NULL,@SELLER nvarchar(250) = NULL,@TAX_NO nvarchar(15) = NULL,@GOODS_NAME nvarchar(250) = NULL,
79
		@PRICE decimal(18, 0) = NULL,@TAX decimal(18, 0) = NULL,@NOTES NVARCHAR(MAX) = NULL,@VAT_RATE decimal(18,2),
80
		@ACC_NO VARCHAR(25),@ACC_NAME NVARCHAR(250),@ISSUED_BY NVARCHAR(250),@ISSUED_DT VARCHAR(20),@RATE DECIMAL(18,2),@PRICE_KT DECIMAL(18,2) =0,@TOTAL_AMT_KT DECIMAL(18,2) =0,@VAT_KT DECIMAL(18,2) =0,
81
		@TYPE_VAT VARCHAR(15),@TYPE_FUNC VARCHAR(15), @IS_TRANSFER_EXTERNAL VARCHAR(15)
82
	DECLARE @hdoc INT;
83
	DECLARE @hdocInvoice INT;
84
	DECLARE @hdocVATInvoice INT;
85
	EXEC sp_xml_preparedocument @hdoc OUTPUT, @p_XMP_TEMP_DATA_ENTRIES;
86
	EXEC sp_xml_preparedocument @hdocInvoice OUTPUT, @p_XMP_TEMP_INVOICE;
87
	EXEC sp_xml_preparedocument @hdocVATInvoice OUTPUT, @p_XMP_TEMP_VAT_INVOICE;
88
	
89
	--hoa don khong co VAT
90
	DECLARE XmlData CURSOR FOR
91
	SELECT * FROM OPENXML(@hdocInvoice, '/Root/XmlData', 2)
92
			WITH(TRANS_NO nvarchar(50),TRANS_DT VARCHAR(20),INVOICE_SIGN nvarchar(50),INVOICE_NO_SIGN nvarchar(50), INVOICE_NO nvarchar(50),INVOICE_DT VARCHAR(20) ,SELLER nvarchar(250),TAX_NO nvarchar(15),
93
			GOODS_NAME nvarchar(250), PRICE decimal(18,0),TAX decimal(18, 0),VAT decimal(18,0),NOTE NVARCHAR(MAX),VAT_RATE decimal(18,2),CURRENCY VARCHAR(15), RATE DECIMAL(18,2),PRICE_KT DECIMAL(18,0),
94
			VAT_KT DECIMAL(18,2),TOTAL_AMT_KT DECIMAL(18,2),TYPE_VAT VARCHAR(15), TYPE_FUNC VARCHAR(15))
95

    
96
	OPEN XmlData
97
	DECLARE @INDEX INT  =0, @INDEX_IV INT =0, @INDEX_VAT INT =0
98

    
99
	BEGIN TRANSACTION
100
		-- KHAI BAO CAC BUOC DUYET- XAC NHAN
101
		DECLARE @LEVEL_JOB VARCHAR(5), @LEVEL_JOB_PREV INT
102
		SET @LEVEL_JOB =(SELECT LEVEL_JOB FROM PL_REQUEST_PROCESS_CHILD WHERE REQ_ID =@p_REQ_PAY_ID AND TLNAME=@p_MAKER_ID_KT AND STATUS_JOB='C')
103
		SET @LEVEL_JOB_PREV = CONVERT(INT,@LEVEL_JOB) -1
104

    
105
------------------------------------------------------------------------- BEGIN LUOI HACH TOAN -----------------------------------------------------------------------
106
		IF(@p_XMP_TEMP_DATA_ENTRIES IS NOT NULL)
107
		BEGIN
108
			-- hach toan
109
			DECLARE XmlDataEntries CURSOR FOR
110
			SELECT * FROM OPENXML(@hdoc, '/Root/XmlDataEntries', 2)
111
					WITH(ENTRY_PAIR varchar(20),DR_CR varchar(20),ACCT VARCHAR(50), ACCT_NAME VARCHAR(500), AMT decimal(18,2),CURRENCY VARCHAR(15), EXC_RATE DECIMAL(18,0),
112
					BRANCH_ID VARCHAR(15), DEP_ID VARCHAR(15),TRN_DESC nvarchar(1000),GL_CODE VARCHAR(100), IS_TRANSFER_EXTERNAL VARCHAR(15))
113
			OPEN XmlDataEntries;
114

    
115
			UPDATE TR_REQ_PAYMENT 
116
			SET AUTH_STATUS_KT ='U', CREATE_DT_KT = GETDATE(),MAKER_ID_KT =@p_MAKER_ID_KT,CHECKER_ID_KT=NULL,APPROVE_DT_KT = NULL, CONFIRM_NOTE=@p_CONFIRM_NOTE
117
			WHERE REQ_PAY_ID =@p_REQ_PAY_ID
118

    
119
			DELETE FROM TR_REQ_PAY_ENTRIES WHERE REQ_PAY_ID = @p_REQ_PAY_ID
120
			IF @@Error <> 0 GOTO ABORT
121
			DECLARE @DR_CR_NAME NVARCHAR(50),@ACC_NAME_FN NVARCHAR(500)
122
			FETCH NEXT FROM XmlDataEntries INTO @ENTRY_PAIR ,@DR_CR,@ACCT, @ACCT_NAME, @AMT ,@CURRENCY, @EXC_RATE,@BRANCH_ID, @DEP_ID,@TRN_DESC,@GL_CODE, @IS_TRANSFER_EXTERNAL
123
			WHILE @@fetch_status=0 
124
			BEGIN
125

    
126
				IF(@EXC_RATE IS NULL)
127
				BEGIN
128
					SET @EXC_RATE = 1
129
				END
130

    
131
				SET @INDEX = @INDEX +1
132
				SET @GL_CODE = RIGHT(@GL_CODE,9)
133
				IF(ISNULL(@ACC_NAME, '') = '' AND ISNULL(@GL_CODE, '') <> '')
134
				BEGIN
135
					SET @ACC_NAME = STUFF(@GL_CODE, LEN(@GL_CODE)-8, 9, '')
136
				END
137
				SET @ACC_NAME =UPPER(dbo.fChuyenCoDauThanhKhongDau(@ACCT_NAME))
138

    
139
				IF(@DR_CR='D')
140
				BEGIN
141
					SET @DR_CR_NAME =N'Nợ'
142
				END
143
				ELSE
144
				BEGIN
145
					SET @DR_CR_NAME =N'Có'
146
				END
147

    
148
				SET @BRANCH_CODE =(SELECT TOP 1 BRANCH_CODE FROM CM_BRANCH WHERE BRANCH_ID =@BRANCH_ID)
149
				SET @DEP_CODE =(SELECT TOP 1 DEP_CODE FROM CM_DEPARTMENT WHERE DEP_ID =@DEP_ID)
150
	
151
				IF(@p_IS_SEND_APPR = 'Y')
152
				BEGIN
153
					IF(@ENTRY_PAIR IS NULL OR @ENTRY_PAIR ='')
154
					BEGIN
155
						ROLLBACK TRANSACTION
156
						CLOSE XmlDataEntries;
157
						DEALLOCATE XmlDataEntries;
158
						SELECT '-1' as Result, '' REQ_PAY_ID, N'Lưới hạch toán, dòng: '+ CONVERT(VARCHAR(5),@INDEX) + N' Mã bút toán không được phép để trống' ErrorDesc
159
						RETURN '-1'
160
					END
161

    
162
					IF(@DR_CR IS NULL OR @DR_CR ='')
163
					BEGIN
164
						ROLLBACK TRANSACTION
165
						CLOSE XmlDataEntries;
166
						DEALLOCATE XmlDataEntries;
167
						SELECT '-1' as Result, '' REQ_PAY_ID, N'Lưới hạch toán, dòng: '+ CONVERT(VARCHAR(5),@INDEX) + N' Nợ/có không được phép để trống' ErrorDesc
168
						RETURN '-1'
169
					END
170

    
171
					IF(@ACCT IS NULL OR @ACCT ='')
172
					BEGIN
173
						ROLLBACK TRANSACTION
174
						CLOSE XmlDataEntries;
175
						DEALLOCATE XmlDataEntries;
176
						SELECT '-1' as Result, '' REQ_PAY_ID, N'Lưới hạch toán, dòng: '+ CONVERT(VARCHAR(5),@INDEX) + N' Số tài khoản không được phép để trống' ErrorDesc
177
						RETURN '-1'
178
					END
179

    
180
					IF(@ACCT_NAME IS NULL OR @ACCT_NAME ='')
181
					BEGIN
182
						ROLLBACK TRANSACTION
183
						CLOSE XmlDataEntries;
184
						DEALLOCATE XmlDataEntries;
185
						SELECT '-1' as Result, '' REQ_PAY_ID, N'Lưới hạch toán, dòng: '+ CONVERT(VARCHAR(5),@INDEX) + N' Tên tài khoản hạch toán chưa đúng. Vui lòng bấm vào nút Check GL & Check CASA để đồng bộ tài khoản từ Core' ErrorDesc
186
						RETURN '-1'
187
					END
188

    
189
					IF(@AMT IS NULL OR @AMT < 0)
190
					BEGIN
191
					ROLLBACK TRANSACTION
192
							CLOSE XmlDataEntries;	
193
							DEALLOCATE XmlDataEntries;
194
							SELECT '-1' as Result, '' REQ_PAY_ID, N'Lưới hạch toán, dòng: '+ CONVERT(VARCHAR(5),@INDEX) + N' Số tiền hạch toán phải lớn hơn 0'  ErrorDesc
195
							RETURN '-1'
196
					END
197

    
198
					IF(@BRANCH_ID IS NULL OR @BRANCH_ID ='')
199
					BEGIN
200
						ROLLBACK TRANSACTION
201
						CLOSE XmlDataEntries;
202
						DEALLOCATE XmlDataEntries;
203
						SELECT '-1' as Result, '' REQ_PAY_ID, N'Lưới hạch toán, dòng: '+ CONVERT(VARCHAR(5),@INDEX) + N' Đơn vị nhận không được phép để trống' ErrorDesc
204
						RETURN '-1'
205
					END
206

    
207
					IF(@TRN_DESC IS NULL OR @TRN_DESC ='')
208
					BEGIN
209
						ROLLBACK TRANSACTION
210
						CLOSE XmlDataEntries;
211
						DEALLOCATE XmlDataEntries;
212
						SELECT '-1' as Result, '' REQ_PAY_ID, N'Lưới hạch toán, dòng: '+ CONVERT(VARCHAR(5),@INDEX) + N' Diễn giải hạch toán không được phép để trống' ErrorDesc
213
						RETURN '-1'
214
					END
215

    
216
					IF(@ACCT IS NOT NULL AND @ACCT <> '' AND LEFT(@ACCT,1) IN ('7','8') AND (@DEP_ID IS NULL OR @DEP_ID ='') AND LEN(@ACCT) < 13)
217
					BEGIN
218
						ROLLBACK TRANSACTION
219
						CLOSE XmlDataEntries;
220
						DEALLOCATE XmlDataEntries;
221
						SELECT '-1' as Result, '' REQ_PAY_ID, N'Lưới hạch toán, dòng: '+ CONVERT(VARCHAR(5),@INDEX) + N' Tài khoản hạch toán đầu số 7 & 8 vui lòng chọn mã phòng ban' ErrorDesc
222
						RETURN '-1'
223
					END
224

    
225
					IF(@GL_CODE IS NULL OR @GL_CODE ='')
226
					BEGIN
227
						IF (LEN(@ACCT) >9 AND ((SELECT ISNULL(TK_GL,'') FROM CM_ACCOUNT WHERE ACC_NO =@ACCT) ='' OR (SELECT ISNULL(TK_GL_NAME,'') FROM CM_ACCOUNT WHERE ACC_NO =@ACCT) =''))
228
						BEGIN
229
							ROLLBACK TRANSACTION
230
							CLOSE XmlDataEntries;
231
							DEALLOCATE XmlDataEntries;
232
							SELECT '-1' as Result, '' REQ_PAY_ID, N'Lưới hạch toán, dòng: '+ CONVERT(VARCHAR(5),@INDEX) + N' Tài khoản CASA chưa có thông tin GL Mapping. Vui lòng bấm vào nút Kiểm tra tài khoản để đồng bộ tài khoản từ Core' ErrorDesc
233
							RETURN '-1'
234
						END
235
					END
236

    
237
					IF(@ACCT IS NOT NULL AND @ACCT <> '' AND LEFT(@ACCT,1) IN ('7','8') AND (@DEP_ID IS NULL OR @DEP_ID ='') AND LEN(@ACCT) < 13)
238
					BEGIN
239
						ROLLBACK TRANSACTION
240
						CLOSE XmlDataEntries;
241
						DEALLOCATE XmlDataEntries;
242
						SELECT '-1' as Result, '' REQ_PAY_ID, N'Lưới hạch toán, dòng: '+ CONVERT(VARCHAR(5),@INDEX) + N' Tài khoản hạch toán đầu số 7 & 8 vui lòng chọn mã phòng ban' ErrorDesc
243
						RETURN '-1'
244
					END
245

    
246
					IF(@DEP_ID IS NOT NULL AND @DEP_ID <> '' AND (LEFT(@DEP_CODE,3) <> @BRANCH_CODE))
247
						BEGIN
248
						ROLLBACK TRANSACTION
249
								CLOSE XmlDataEntries;	
250
								DEALLOCATE XmlDataEntries;
251
								SELECT '-1' as Result, '' REQ_PAY_ID, N'Lưới hạch toán, dòng: '+ CONVERT(VARCHAR(5),@INDEX) + N' Vui lòng chọn mã phòng ban khớp với mã đơn vị tương ứng với 3 kí tự đầu của tài khoản CASA'  ErrorDesc
252
								RETURN '-1'
253
						END
254

    
255
					-- NEU HACH TOAN CASA THI 3 KI TU DAU PHAI KHOP VOI BRANCH CODE CUA DON VI CHIU CHI PHI
256
					IF(LEN(@ACCT) >9 AND (SUBSTRING(@ACCT,1,3) <> (SELECT ISNULL(BRANCH_CODE,'') FROM CM_BRANCH WHERE BRANCH_ID = @BRANCH_ID)))
257
					BEGIN
258
						ROLLBACK TRANSACTION
259
						CLOSE XmlDataEntries;	
260
						DEALLOCATE XmlDataEntries;
261
						SELECT '-1' as Result, '' REQ_PAY_ID, N'Lưới hạch toán, dòng: '+ CONVERT(VARCHAR(5),@INDEX) + N'Nếu bạn đang hạch toán CASA trong hệ thống. Vui lòng chọn mã đơn vị khớp với mã đơn vị tương ứng với 3 kí tự đầu của tài  khoản CASA'  ErrorDesc
262
						RETURN '-1'
263
					END
264

    
265
					--IF(NOT EXISTS(SELECT * FROM TR_REQ_PAY_INVOICE WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND ISNULL(TAX,0) >0 AND ISNULL(VAT,0) >0 AND TYPE_FUNC ='KT'))
266
					--BEGIN
267
					--	IF(@ACCT ='353200002' OR @ACCT ='353200001')
268
					--	BEGIN
269
					--		SELECT '-1' as Result, '' REQ_PAY_ID, N'Lưới hạch toán, dòng: '+ CONVERT(VARCHAR(5),@INDEX) + N'Bạn không được phép hạch toán tài khoản 353200002,353200001 giao dịch không chứa các hóa đơn có VAT do kế toán lưu trữ '  ErrorDesc
270
					--		RETURN '-1'
271
					--	END
272
					--END select * from TR_REQ_PAY_ENTRIES
273

    
274
					--doanptt 20/04/2022
275
					IF(@ACCT = '353200002')
276
					BEGIN
277
						IF(NOT EXISTS(SELECT * FROM OPENXML(@hdocVATInvoice, '/Root/XmlVATInvoice', 2)))
278
						BEGIN
279
							ROLLBACK TRANSACTION
280
							CLOSE XmlDataEntries;	
281
							DEALLOCATE XmlDataEntries;
282
							SELECT '-1' as Result, '' REQ_PAY_ID, N'Lưới hạch toán, dòng '+ CONVERT(VARCHAR(5),@INDEX) + N': Lưới hóa đơn đính kèm không có hóa đơn chứa VAT. Vui lòng xóa tài khoản nợ 353200002 trước khi gửi phê duyệt'  ErrorDesc
283
							RETURN '-1'
284
						END
285
					END
286
					--LUCTV 19-07-2021: MỖI MÃ BÚT TOÁN PHẢI THEO NGUYÊN TẮC 1 NỢ NHIỀU CÓ HOẶC 1 CÓ NHIỀU NỢ
287
					IF((SELECT COUNT (*) FROM TR_REQ_PAY_ENTRIES WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND ENTRY_PAIR =@ENTRY_PAIR AND DR_CR ='D') >1 AND 
288
							(SELECT COUNT (*) FROM TR_REQ_PAY_ENTRIES WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND ENTRY_PAIR =@ENTRY_PAIR AND DR_CR ='C') >1)
289
					BEGIN
290
						ROLLBACK TRANSACTION
291
						CLOSE XmlDataEntries;	
292
						DEALLOCATE XmlDataEntries;
293
						SELECT '-1' as Result, '' REQ_PAY_ID, N'Mã bút toán số '+ @ENTRY_PAIR+ N': Sai cấu trúc Nợ Có (1 Nợ nhiều Có hoặc 1 Có nhiều Nợ, không được phép Nhiều Có - Nhiều Nợ)'  ErrorDesc
294
						RETURN '-1'
295
					END
296
					/*
297
					-- DOANPTT 11/11/22: BỔ SUNG TRƯỜNG HỢP BỊ KHUẤT CHÂN NỢ HOẶC CHÂN CÓ
298
					IF((SELECT COUNT (*) FROM TR_REQ_PAY_ENTRIES WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND ENTRY_PAIR =@ENTRY_PAIR AND DR_CR ='D') >= 1 AND 
299
							(SELECT COUNT (*) FROM TR_REQ_PAY_ENTRIES WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND ENTRY_PAIR =@ENTRY_PAIR AND DR_CR ='C') = 0)
300
					BEGIN
301
						ROLLBACK TRANSACTION
302
						CLOSE XmlDataEntries;	
303
						DEALLOCATE XmlDataEntries;
304
						SELECT '-1' as Result, '' REQ_PAY_ID, N'Mã bút toán số '+ @ENTRY_PAIR+ N': Sai cấu trúc Nợ Có (1 Nợ nhiều Có hoặc 1 Có nhiều Nợ, không được phép Nhiều Nợ - 0 Có)'  ErrorDesc
305
						RETURN '-1'
306
					END
307

    
308
					IF((SELECT COUNT (*) FROM TR_REQ_PAY_ENTRIES WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND ENTRY_PAIR =@ENTRY_PAIR AND DR_CR ='D') = 0 AND 
309
							(SELECT COUNT (*) FROM TR_REQ_PAY_ENTRIES WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND ENTRY_PAIR =@ENTRY_PAIR AND DR_CR ='C') >= 1)
310
					BEGIN
311
						ROLLBACK TRANSACTION
312
						CLOSE XmlDataEntries;	
313
						DEALLOCATE XmlDataEntries;
314
						SELECT '-1' as Result, '' REQ_PAY_ID, N'Mã bút toán số '+ @ENTRY_PAIR+ N': Sai cấu trúc Nợ Có (1 Nợ nhiều Có hoặc 1 Có nhiều Nợ, không được phép Nhiều Có - 0 Nợ)'  ErrorDesc
315
						RETURN '-1'
316
					END
317
					*/
318
					
319

    
320
					
321
				END -- END IF VALIDATE
322
				/*
323
				IF(@ACCT = '353200002')
324
					BEGIN
325
						DECLARE @SUMVAT DECIMAL(18,0) = 0
326
						DECLARE @SUM3532 DECIMAL(18,0) = 0
327
						DECLARE @tmp3532 TABLE(
328
						AMT DECIMAL(18,0),
329
						ACCT VARCHAR(20)
330
						)
331
						INSERT INTO @tmp3532 SELECT * FROM OPENXML(@hdoc, '/Root/XmlDataEntries', 2) WITH(AMT DECIMAL(18, 0), ACCT VARCHAR(20))
332
						SET @SUM3532 = (SELECT SUM(AMT) FROM @tmp3532 WHERE ACCT = '353200002')
333
						SET @SUMVAT = (SELECT SUM(VAT) FROM OPENXML(@hdocVATInvoice, '/Root/XmlVATInvoice', 2) WITH(VAT DECIMAL(18, 0)))
334
						
335
						IF(@SUM3532 <> @SUMVAT)
336
						BEGIN
337
							ROLLBACK TRANSACTION
338
							CLOSE XmlDataEntries;	
339
							DEALLOCATE XmlDataEntries;
340
							SELECT '-1' as Result, '' REQ_PAY_ID, N'Lưới hạch toán dòng ' + CONVERT(VARCHAR(5),@INDEX) + N': Tổng số tiền thuế GTGT ở lưới hóa đơn đính kèm có VAT không bằng tổng số tiền tài khoản nợ 353200002 ở lưới hạch toán : Tổng tiền thuế GTGT: ' + FORMAT(@SUMVAT,'#,#', 'vi-VN') + N',Tổng tiền tài khoản 3532: ' + FORMAT(@SUM3532,'#,#', 'vi-VN')   ErrorDesc
341
							RETURN '-1'
342
						END
343
					END
344
					*/
345
	
346
				DECLARE @p_ET_ID VARCHAR(15);
347
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_ENTRIES', @p_ET_ID OUT;
348
				IF @p_ET_ID='' OR @p_ET_ID IS NULL GOTO ABORT;
349

    
350
				INSERT INTO TR_REQ_PAY_ENTRIES (REQ_PAY_DT_ID,REQ_PAY_ID,ENTRY_PAIR,DR_CR,DR_CR_NAME,ACCT,ACCT_NAME,AMT,BRANCH_ID,DEP_ID,TRN_DESC,TRN_DATE,MAKER_ID_KT, TRN_TYPE, CURRENCY, EXC_RATE, IS_TRANSFER_EXTERNAL)
351
				VALUES (@p_ET_ID,@p_REQ_PAY_ID,@ENTRY_PAIR,@DR_CR,@DR_CR_NAME,@ACCT,@ACCT_NAME, @AMT, @BRANCH_ID, @DEP_ID,@TRN_DESC,GETDATE(),@p_MAKER_ID_KT, 'PAYMENT', 'VND', 1, @IS_TRANSFER_EXTERNAL)
352

    
353
				-- NEU CHUA CO TAI KHOAN THI THEM VO CM_ACCOUNT
354
				IF(NOT EXISTS(SELECT * FROM CM_ACCOUNT WHERE ACC_NO =@ACCT))
355
				BEGIN
356
					INSERT INTO CM_ACCOUNT (ACC_NO, ACC_NAME, TK_GL, TK_GL_NAME, MAKER_ID, CHECKER_ID,CREATE_DT) VALUES
357
					(@ACCT,@ACCT_NAME,@GL_CODE,(SELECT TOP 1 ACC_NAME FROM CM_ACCOUNT WHERE ACC_NO =@GL_CODE),'admin','admin',GETDATE())
358
				END
359
				ELSE
360
				BEGIN
361
					IF(@GL_CODE IS NOT NULL AND @GL_CODE <> '' AND @GL_CODE <> '0')
362
						BEGIN
363
							UPDATE CM_ACCOUNT SET ACC_NAME =@ACC_NAME, TK_GL =@GL_CODE, TK_GL_NAME =(SELECT TOP 1 ACC_NAME FROM CM_ACCOUNT WHERE ACC_NO =@GL_CODE), EDITOR_DT = GETDATE()
364
							WHERE ACC_NO=@ACCT
365
					END
366
					--UPDATE CM_ACCOUNT SET ACC_NAME =@ACCT_NAME, TK_GL =@GL_CODE, TK_GL_NAME =(SELECT TOP 1 ACC_NAME FROM CM_ACCOUNT WHERE ACC_NO =@GL_CODE), CREATE_DT = GETDATE()
367
					--WHERE ACC_NO=@ACCT
368
				END
369
				IF @@error<>0 GOTO ABORT;
370
				FETCH NEXT FROM XmlDataEntries INTO @ENTRY_PAIR ,@DR_CR,@ACCT, @ACCT_NAME, @AMT ,@CURRENCY, @EXC_RATE,@BRANCH_ID, @DEP_ID,@TRN_DESC,@GL_CODE, @IS_TRANSFER_EXTERNAL
371
			END;--END WHILE
372
			CLOSE XmlDataEntries;
373
			DEALLOCATE XmlDataEntries;
374
		END--END LUOI HACH TOAN
375
------------------------------------------------------------------------------------------ END LUOI HACH TOAN --------------------------------------------------------------------
376

    
377
--INSERT XMLDATAENTRIES
378
		-- CAP NHAT TAI KHOAN GL
379

    
380
		--UPDATE TR_REQ_PAY_ENTRIES SET ACCT_NAME = UPPER(dbo.fChuyenCoDauThanhKhongDau(ACCT_NAME)) WHERE REQ_PAY_ID IN (SELECT REQ_PAY_ID FROM PAY_ENTRIES_POST WHERE ISNULL(REF_NO,'') ='')
381
		-- CAP NHAT TAI KHOAN GL
382

    
383
-- INSERT LUOI HOA DON KHONG VAT
384
	
385
		DELETE FROM TR_REQ_PAY_INVOICE WHERE REQ_PAY_ID= @p_REQ_PAY_ID
386
		FETCH NEXT FROM XmlData  INTO @TRANS_NO , @TRANS_DT  ,@INVOICE_SIGN ,@INVOICE_NO_SIGN,@INVOICE_NO ,@INVOICE_DT ,@SELLER ,
387
		@TAX_NO ,@GOODS_NAME ,@PRICE ,@TAX,@VAT,@NOTES,@VAT_RATE,@CURRENCY,@RATE,@PRICE_KT ,@VAT_KT,@TOTAL_AMT_KT,@TYPE_VAT,@TYPE_FUNC
388
		WHILE @@FETCH_STATUS=0 BEGIN
389
			SET @INDEX_IV = @INDEX_IV+1
390
				IF(@TYPE_FUNC ='HC')
391
				BEGIN
392
					IF(EXISTS(SELECT * FROM TR_REQ_PAY_INVOICE WHERE INVOICE_NO =@INVOICE_NO AND INVOICE_NO_SIGN = @INVOICE_NO_SIGN AND INVOICE_SIGN =@INVOICE_SIGN AND 
393
					TAX_NO =@TAX_NO AND TAX =@TAX AND TYPE_FUNC ='HC' AND AUTH_STATUS <>'D' AND REQ_PAY_ID IN (SELECT REQ_PAY_ID FROM TR_REQ_PAYMENT WHERE AUTH_STATUS NOT IN ('E','D') AND MAKER_ID NOT IN (SELECT TLNANME FROM TL_USER WHERE RoleName ='DISABLE' OR AUTH_STATUS ='U'))))
394
					BEGIN
395
						ROLLBACK TRANSACTION
396
						CLOSE XmlData;
397
						DEALLOCATE XmlData;
398
						SELECT '-1' as Result, '' REQ_PAY_ID,N'Thông tin hóa đơn đính kèm, dòng ' + CONVERT(VARCHAR(5),@INDEX_IV)+N': Số hóa đơn '+ @INVOICE_NO +N' đã tồn tại trong hệ thống' ErrorDesc
399
						RETURN '-1'
400
					END	
401
				END
402
			DECLARE @p_REQ_INV_ID VARCHAR(15);
403
			EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_INVOICE', @p_REQ_INV_ID OUT;
404
			IF @p_REQ_INV_ID='' OR @p_REQ_INV_ID IS NULL GOTO ABORT;
405

    
406
		INSERT INTO TR_REQ_PAY_INVOICE(REQ_PAYDT_ID,REQ_PAY_ID,TRANS_NO,TRANS_DT,INVOICE_SIGN,INVOICE_NO,INVOICE_DT,SELLER,TAX_NO,GOODS_NAME,PRICE,TAX,VAT,NOTE, MAKER_ID,CREATE_DT,EDITOR_ID,
407
		AUTH_STATUS,CHECKER_ID,APPROVE_DT, CREATE_DT_KT,MAKER_ID_KT,AUTH_STATUS_KT,CHECKER_ID_KT,APPROVE_DT_KT,RECORD_STATUS,INVOICE_NO_SIGN, VAT_RATE,CURRENCY,RATE,PRICE_KT ,VAT_KT,TOTAL_AMT_KT,TYPE_VAT,TYPE_FUNC) 
408
		VALUES (@p_REQ_INV_ID,@p_REQ_PAY_ID , @TRANS_NO , CONVERT(DATE,@TRANS_DT,103)  ,@INVOICE_SIGN ,@INVOICE_NO ,CONVERT(DATE,@INVOICE_DT,103) ,@SELLER ,@TAX_NO ,@GOODS_NAME ,@PRICE ,@TAX,@VAT,@NOTES,
409
		@p_MAKER_ID,GETDATE(),NULL,'U',NULL,NULL,GETDATE(),@p_MAKER_ID_KT,'U',NULL,NULL,'1',@INVOICE_NO_SIGN,@VAT_RATE, @p_REQ_TYPE_CURRENCY, @p_RATE,@PRICE_KT ,@VAT_KT,@TOTAL_AMT_KT,@TYPE_VAT,'HC')
410
		
411
		IF @@error<>0 GOTO ABORT;
412
		FETCH NEXT FROM XmlData 
413
		INTO @TRANS_NO , @TRANS_DT,@INVOICE_SIGN,@INVOICE_NO_SIGN,@INVOICE_NO ,@INVOICE_DT ,@SELLER ,@TAX_NO ,@GOODS_NAME ,@PRICE ,
414
		@TAX,@VAT,@NOTES,@VAT_RATE,@CURRENCY,@RATE,@PRICE_KT ,@VAT_KT,@TOTAL_AMT_KT,@TYPE_VAT,@TYPE_FUNC
415
		END;
416
		CLOSE XmlData;
417
		DEALLOCATE XmlData;
418

    
419
-- BEGIN HOA DON CO VAT
420
		IF(@p_XMP_TEMP_VAT_INVOICE IS NOT NULL)
421
		BEGIN
422
			-- hoa don co VAT
423
			DECLARE XmlVATInvoice CURSOR FOR
424
			SELECT *
425
			FROM
426
			OPENXML(@hdocVATInvoice, '/Root/XmlVATInvoice', 2)
427
			WITH(TRANS_NO nvarchar(50),TRANS_DT VARCHAR(20),INVOICE_SIGN nvarchar(50),INVOICE_NO_SIGN nvarchar(50),
428
				 INVOICE_NO nvarchar(50),INVOICE_DT VARCHAR(20) ,SELLER nvarchar(250),TAX_NO nvarchar(15),GOODS_NAME nvarchar(250) ,
429
				 PRICE decimal(18,0),TAX decimal(18, 0),VAT decimal(18,0),NOTE NVARCHAR(MAX),VAT_RATE decimal(18,2),CURRENCY VARCHAR(15), RATE DECIMAL(18,2),PRICE_KT DECIMAL(18,0),VAT_KT DECIMAL(18,2),TOTAL_AMT_KT DECIMAL(18,2),TYPE_VAT VARCHAR(15), TYPE_FUNC VARCHAR(15))
430
			OPEN XmlVATInvoice
431

    
432
			-- CAP NHAT HOA DON CO VAT
433
			FETCH NEXT FROM XmlVATInvoice  INTO @TRANS_NO , @TRANS_DT  ,@INVOICE_SIGN ,@INVOICE_NO_SIGN,@INVOICE_NO ,@INVOICE_DT ,@SELLER ,
434
			@TAX_NO ,@GOODS_NAME ,@PRICE ,@TAX,@VAT,@NOTES,@VAT_RATE,@CURRENCY,@RATE,@PRICE_KT ,@VAT_KT,@TOTAL_AMT_KT,@TYPE_VAT,@TYPE_FUNC
435
			WHILE @@fetch_status=0 BEGIN
436
				SET @INDEX_VAT = @INDEX_VAT+1
437
				--IF(@TYPE_FUNC ='KT')
438
				--BEGIN
439
					IF(EXISTS(SELECT REQ_PAYDT_ID FROM TR_REQ_PAY_INVOICE 
440
									   WHERE INVOICE_NO =@INVOICE_NO 
441
											AND INVOICE_NO_SIGN = @INVOICE_NO_SIGN 
442
											AND INVOICE_SIGN =@INVOICE_SIGN 
443
											AND TAX_NO =@TAX_NO 
444
											AND TAX =@TAX 
445
											AND TYPE_FUNC = 'KT' 
446
											AND AUTH_STATUS <>'D' 
447
											AND REQ_PAY_ID IN (SELECT REQ_PAY_ID FROM TR_REQ_PAYMENT WHERE AUTH_STATUS NOT IN ('E','D') AND MAKER_ID NOT IN (SELECT TLNANME FROM TL_USER WHERE RoleName ='DISABLE' OR AUTH_STATUS ='U'))
448
							  )
449
					   )
450
					BEGIN
451
						ROLLBACK TRANSACTION
452
						CLOSE XmlVATInvoice;
453
						DEALLOCATE XmlVATInvoice;
454
						SELECT '-1' as Result, '' REQ_PAY_ID,N'Thông tin hóa đơn đính kèm có VAT, dòng ' + CONVERT(VARCHAR(5),@INDEX_VAT)+N': Số hóa đơn '+ @INVOICE_NO +N' đã tồn tại trong hệ thống' ErrorDesc
455
						RETURN '-1'
456
					END	
457
				--END
458
				--doanptt 20/04/2022
459
				/*
460
				IF(NOT EXISTS(SELECT * FROM OPENXML(@hdoc, '/Root/XmlDataEntries', 2) WITH(DR_CR varchar(20),ACCT VARCHAR(50), ACCT_NAME VARCHAR(500), AMT decimal(18,2))  WHERE ACCT = '353200002'))
461
				BEGIN
462
					ROLLBACK TRANSACTION
463
					CLOSE XmlVATInvoice;	
464
					DEALLOCATE XmlVATInvoice;
465
					SELECT '-1' as Result, '' REQ_PAY_ID, N'Lưới hóa đơn đính kèm có VAT, nhưng lưới hạch toán không có tài khoản nợ 353200002. Vui lòng thêm tài khoản nợ 353200002 trước khi gửi phê duyệt'  ErrorDesc
466
					RETURN '-1'
467
				END
468
				*/
469
					
470
				DECLARE @p_REQ_INV_VAT_ID VARCHAR(15);
471
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_INVOICE', @p_REQ_INV_VAT_ID OUT;
472
				IF @p_REQ_INV_VAT_ID='' OR @p_REQ_INV_VAT_ID IS NULL GOTO ABORT;
473
				INSERT INTO TR_REQ_PAY_INVOICE(REQ_PAYDT_ID,REQ_PAY_ID,TRANS_NO,TRANS_DT,INVOICE_SIGN,INVOICE_NO,INVOICE_DT,SELLER,TAX_NO,GOODS_NAME,PRICE,TAX,VAT,NOTE, MAKER_ID,CREATE_DT,EDITOR_ID,
474
				AUTH_STATUS,CHECKER_ID,APPROVE_DT, CREATE_DT_KT,MAKER_ID_KT,AUTH_STATUS_KT,CHECKER_ID_KT,APPROVE_DT_KT,RECORD_STATUS,INVOICE_NO_SIGN,VAT_RATE,CURRENCY,RATE,PRICE_KT ,VAT_KT,
475
				TOTAL_AMT_KT,TYPE_VAT,TYPE_FUNC) 
476
				VALUES (@p_REQ_INV_VAT_ID,@p_REQ_PAY_ID , @TRANS_NO , CONVERT(DATE,@TRANS_DT,103)  ,@INVOICE_SIGN ,@INVOICE_NO ,CONVERT(DATE,@INVOICE_DT,103) ,@SELLER ,@TAX_NO ,@GOODS_NAME ,@PRICE ,
477
				@TAX,@VAT,@NOTES, @p_MAKER_ID,GETDATE(),NULL,'U',NULL,NULL,GETDATE(),@p_MAKER_ID_KT,'U',NULL,NULL,'1',@INVOICE_NO_SIGN,@VAT_RATE, @p_REQ_TYPE_CURRENCY, @p_RATE,@PRICE_KT ,@VAT_KT,@TOTAL_AMT_KT,
478
				@TYPE_VAT,'KT')
479
			IF @@error<>0 GOTO ABORT;
480

    
481
			FETCH NEXT FROM XmlVATInvoice 
482
			INTO @TRANS_NO , @TRANS_DT,@INVOICE_SIGN,@INVOICE_NO_SIGN,@INVOICE_NO ,@INVOICE_DT ,@SELLER ,@TAX_NO ,@GOODS_NAME ,@PRICE ,
483
			@TAX,@VAT,@NOTES,@VAT_RATE,@CURRENCY,@RATE,@PRICE_KT ,@VAT_KT,@TOTAL_AMT_KT,@TYPE_VAT,@TYPE_FUNC
484
			END;
485
			CLOSE XmlVATInvoice;
486
			DEALLOCATE XmlVATInvoice;
487
		END
488
-- END HOA DON CO VAT
489

    
490

    
491
-- doanptt 12/03/2022 thêm lưới chuyển tiền ngoài hệ thống - đơn vị chuyển
492
	DECLARE @hdocOutsideTrans INT
493
	EXEC sp_xml_preparedocument @hdocOutsideTrans OUTPUT, @p_XMP_TEMP_DATA_TRANSFER_OUTSIDE_TRANS;
494

    
495
	DECLARE  @MAKER_ID_KT VARCHAR(15), @TYPE_TRANSFER_ID VARCHAR(15), @PRODUCT_ID VARCHAR(15), @OBJECT_TRANSFER_ID VARCHAR(15), 
496
				@ACC_NO_TRANSFER VARCHAR(255), @BRANCH_TRANSFER_ID VARCHAR(15), @BRANCH_TRANFSER_NAME NVARCHAR(255)
497
-- BEGIN INSERT đơn vị chuyển
498
				DELETE FROM TR_REQ_PAY_TRANS_OUTSIDE_TRANS WHERE REQ_PAY_ID = @p_REQ_PAY_ID
499
				DECLARE XmlDataOutsideTrans CURSOR LOCAL FOR
500
				SELECT * FROM OPENXML(@hdocOutsideTrans, 'Root/XmlDataTransferOutside',2) 
501
				WITH(MAKER_ID VARCHAR(15), TYPE_TRANSFER_ID VARCHAR(15), PRODUCT_ID VARCHAR(15), OBJECT_TRANSFER_ID VARCHAR(15), BRANCH_ID VARCHAR(15), 
502
				ACC_NO_TRANSFER VARCHAR(255), BRANCH_TRANSFER_ID VARCHAR(15), CURRENCY VARCHAR(15), BRANCH_TRANFSER_NAME NVARCHAR(255))
503
				OPEN XmlDataOutsideTrans
504

    
505

    
506
				FETCH NEXT FROM XmlDataOutsideTrans INTO @MAKER_ID_KT , @TYPE_TRANSFER_ID, @PRODUCT_ID, @OBJECT_TRANSFER_ID, @BRANCH_ID, 
507
				@ACC_NO_TRANSFER, @BRANCH_TRANSFER_ID, @CURRENCY, @BRANCH_TRANFSER_NAME
508
				WHILE @@fetch_status=0 
509
				BEGIN
510
					
511
					--IF(@p_REQ_PAY_ID <> NULL)
512
					--BEGIN
513
						DECLARE @p_TR_REQ_TRANS_OUTSIDE_ID VARCHAR(15);
514
						EXEC SYS_CodeMasters_Gen 'TR_REQ_OUTSIDE_TRANS', @p_TR_REQ_TRANS_OUTSIDE_ID OUT;
515
						IF @p_TR_REQ_TRANS_OUTSIDE_ID='' OR @p_TR_REQ_TRANS_OUTSIDE_ID IS NULL GOTO ABORT;
516
						INSERT INTO TR_REQ_PAY_TRANS_OUTSIDE_TRANS(TR_REQ_TRANS_OUTSIDE_ID ,REQ_PAY_ID ,MAKER_ID , CREATE_DT , AUTH_STATUS, AUTH_STATUS_KT , 
517
						BRANCH_TRANFSER_NAME,TYPE_TRANSFER_ID , PRODUCT_ID , OBJECT_TRANSFER_ID , BRANCH_ID, ACC_NO_TRANSFER , BRANCH_TRANSFER_ID)
518
						VALUES (@p_TR_REQ_TRANS_OUTSIDE_ID ,@p_REQ_PAY_ID ,@p_MAKER_ID_KT , GETDATE(), NULL , NULL, 
519
						@BRANCH_TRANFSER_NAME, @TYPE_TRANSFER_ID , @PRODUCT_ID , @OBJECT_TRANSFER_ID , @BRANCH_ID, @ACC_NO_TRANSFER , @BRANCH_TRANSFER_ID)
520
					--END
521

    
522
					IF @@error<>0 GOTO ABORT;
523
					FETCH NEXT FROM XmlDataOutsideTrans INTO @MAKER_ID_KT , @TYPE_TRANSFER_ID, @PRODUCT_ID, @OBJECT_TRANSFER_ID, @BRANCH_ID, 
524
					@ACC_NO_TRANSFER, @BRANCH_TRANSFER_ID, @CURRENCY, @BRANCH_TRANFSER_NAME
525
				END;
526
				CLOSE XmlDataOutsideTrans;
527
				DEALLOCATE XmlDataOutsideTrans;
528
--- END INSERT đơn vị chuyển
529

    
530
-- doanptt 12/03/2022 thêm lưới chuyển tiền ngoài hệ thống - đơn vị nhận
531
-- BEGIN INSERT đơn vị nhận
532
	DECLARE @hdocOutsideRec INT
533
	EXEC sp_xml_preparedocument @hdocOutsideRec OUTPUT, @p_XMP_TEMP_DATA_TRANSFER_OUTSIDE_REC;
534

    
535
	DECLARE @CHANEL_PAYMENT_ID VARCHAR(15), @CITAD1_ID VARCHAR(15), @BANK_RECEIVE_ID VARCHAR(250), @OBJECT_RECEIVE_ID VARCHAR(15), 
536
				@BRANCH_RECEIVE_ID VARCHAR(15), @BRANCH_RECEIVE_NAME NVARCHAR(255), @ACC_NO_RECEIVE VARCHAR(255), @TRADE_AMT DECIMAL(18, 0), @TRADE_DESC NVARCHAR(120), @SUB_BANK_RECEIVE_NAME nvarchar(MAX), @REF_NO VARCHAR(50)
537
-- INSERT đơn vị nhận
538
				DELETE FROM TR_REQ_PAY_TRANS_OUTSIDE_REC WHERE REQ_PAY_ID = @p_REQ_PAY_ID
539

    
540
				DECLARE XmlDataOutsideRec CURSOR LOCAL FOR
541
				SELECT * FROM OPENXML(@hdocOutsideRec, 'Root/XmlDataTransferOutside',2) 
542
				WITH(MAKER_ID VARCHAR(15), CHANEL_PAYMENT_ID VARCHAR(15), CITAD1_ID VARCHAR(15), BANK_RECEIVE_ID VARCHAR(250), OBJECT_RECEIVE_ID VARCHAR(15), 
543
				BRANCH_RECEIVE_ID VARCHAR(15), BRANCH_RECEIVE_NAME NVARCHAR(255), ACC_NO_RECEIVE VARCHAR(255), TRADE_AMT DECIMAL(18, 0), TRADE_DESC NVARCHAR(120), SUB_BANK_RECEIVE_NAME nvarchar(MAX),  
544
				ENTRY_PAIR varchar(20), REF_NO varchar(20)) 
545
				OPEN XmlDataOutsideRec
546

    
547
				FETCH NEXT FROM XmlDataOutsideRec INTO @MAKER_ID_KT, @CHANEL_PAYMENT_ID, @CITAD1_ID, @BANK_RECEIVE_ID, @OBJECT_RECEIVE_ID, 
548
				@BRANCH_RECEIVE_ID, @BRANCH_RECEIVE_NAME, @ACC_NO_RECEIVE, @TRADE_AMT, @TRADE_DESC, @SUB_BANK_RECEIVE_NAME, @ENTRY_PAIR, @REF_NO
549
				WHILE @@fetch_status=0 
550
				BEGIN
551

    
552
					DECLARE @p_REQ_TRANS_OUTSIDE_REC_ID VARCHAR(15);
553
					EXEC SYS_CodeMasters_Gen 'TR_REQ_OUTSIDE_REC', @p_REQ_TRANS_OUTSIDE_REC_ID OUT;
554
					IF @p_REQ_TRANS_OUTSIDE_REC_ID='' OR @p_REQ_TRANS_OUTSIDE_REC_ID IS NULL GOTO ABORT;
555

    
556
					INSERT INTO TR_REQ_PAY_TRANS_OUTSIDE_REC(REQ_TRANS_OUTSIDE_REC_ID, REQ_PAY_ID, MAKER_ID, CREATE_DT, AUTH_STATUS, AUTH_STATUS_KT,
557
					CHANEL_PAYMENT_ID, CITAD1_ID, BANK_RECEIVE_ID, OBJECT_RECEIVE_ID, BRANCH_RECEIVE_ID, BRANCH_RECEIVE_NAME, ACC_NO_RECEIVE, TRADE_AMT, TRADE_DESC, SUB_BANK_RECEIVE_NAME, ENTRY_PAIR, REF_NO)
558
					VALUES (@p_REQ_TRANS_OUTSIDE_REC_ID, @p_REQ_PAY_ID, @p_MAKER_ID_KT, GETDATE(), NULL, NULL,
559
					@CHANEL_PAYMENT_ID, @CITAD1_ID, @BANK_RECEIVE_ID, @OBJECT_RECEIVE_ID, @BRANCH_RECEIVE_ID, @BRANCH_RECEIVE_NAME, @ACC_NO_RECEIVE, @TRADE_AMT, @TRADE_DESC, @SUB_BANK_RECEIVE_NAME, @ENTRY_PAIR, @REF_NO)
560
					IF @@error<>0 GOTO ABORT;
561
					FETCH NEXT FROM XmlDataOutsideRec INTO  @MAKER_ID_KT, @CHANEL_PAYMENT_ID, @CITAD1_ID, @BANK_RECEIVE_ID, @OBJECT_RECEIVE_ID, 
562
					@BRANCH_RECEIVE_ID, @BRANCH_RECEIVE_NAME, @ACC_NO_RECEIVE, @TRADE_AMT, @TRADE_DESC, @SUB_BANK_RECEIVE_NAME, @ENTRY_PAIR, @REF_NO
563
				END;
564
				CLOSE XmlDataOutsideRec;
565
				DEALLOCATE XmlDataOutsideRec;
566
--- END INSERT đơn vị nhận		
567

    
568
		--- Luu log chinh sua select * from TR_REQ_PAY_INVOICE
569
		INSERT INTO TR_REQ_PAY_INVOICE_LOG SELECT * FROM TR_REQ_PAY_INVOICE WHERE REQ_PAY_ID =@p_REQ_PAY_ID
570
		-----
571
	--- BAT DAU CAP NHAT XAC DINH CAC BUOC DUYET SAU KHI KE TOAN CAP NHAT THONG TIN
572

    
573
	COMMIT TRANSACTION
574

    
575
-- BEGIN VALIDATE SEND APRROVE
576
	IF(@p_IS_SEND_APPR = 'Y')
577
	BEGIN
578
	-- BEGIN VALIDATE RIGHT
579
		IF (NOT EXISTS (SELECT * FROM PL_REQUEST_PROCESS_CHILD WHERE REQ_ID = @p_REQ_PAY_ID AND TLNAME =@p_MAKER_ID_KT AND TYPE_JOB = 'XL'))
580
		BEGIN
581
			SELECT '-1' as Result, '' REQ_PAY_ID, N'Bạn không được phép gửi phê duyêt phiếu đề nghị thanh toán này. Phiếu đề nghị thanh toán đang được điều phối cho giao dịch viên khác xử lý' ErrorDesc
582
			RETURN '-1'
583
		END
584
		IF ((SELECT AUTH_STATUS FROM TR_REQ_PAYMENT WHERE REQ_PAY_ID = @p_REQ_PAY_ID) ='R')
585
		BEGIN
586
			SELECT '-1' Result,'' REQ_PAY_ID,N'Phiếu đề nghị thanh toán đang được trả về đơn vị. Vui lòng chờ đơn vị cập nhật thông tin và duyệt lại!' ErrorDesc
587
			RETURN '-1'
588
		END
589
		IF ( EXISTS (SELECT AUTH_STATUS FROM TR_REQ_PAYMENT WHERE REQ_PAY_ID = @p_REQ_PAY_ID AND AUTH_STATUS <> 'A'))
590
		BEGIN
591
			SELECT '-1' Result,'' REQ_PAY_ID,N'Phiếu đề nghị tạm ứng đang ở cấp độ đơn vị. Vui lòng chờ đơn vị cập nhật thông tin và duyệt lại!' ErrorDesc
592
			RETURN '-1'
593
		END
594
		IF(EXISTS(SELECT * FROM TR_REQ_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND AUTH_STATUS_KT = 'A'))
595
		BEGIN
596
			SELECT '-1' as Result, '' REQ_PAY_ID, N'Phiếu đề nghị thanh toán đã được phê duyệt thành công trước đó!' ErrorDesc
597
			RETURN '-1'
598
		END
599
		IF(EXISTS(SELECT * FROM TR_REQ_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND AUTH_STATUS_KT = 'P'))
600
		BEGIN
601
			SELECT '-1' as Result, '' REQ_PAY_ID, N'Phiếu đề nghị thanh toán đã được gửi phê duyệt kế toán thành công trước đó! Vui lòng đợi KSV xử lý phiếu' ErrorDesc
602
			RETURN '-1'
603
		END
604
		IF(EXISTS(SELECT * FROM TR_REQ_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND AUTH_STATUS_KT = 'S'))
605
		BEGIN
606
			SELECT '-1' as Result, '' REQ_PAY_ID, N'Phiếu đề nghị thanh toán đang được đề xuất từ chối! Vui lòng đợi KSV xử lý phiếu' ErrorDesc
607
			RETURN '-1'
608
		END
609
	-- END VALIDATE RIGHT
610

    
611
		DECLARE @SUMVAT DECIMAL(18,0) = 0
612
		DECLARE @SUM3532 DECIMAL(18,0) = 0
613
		DECLARE @tmp3532 TABLE(
614
		AMT DECIMAL(18,0),
615
		ACCT VARCHAR(20)
616
		)
617
		INSERT INTO @tmp3532 SELECT * FROM OPENXML(@hdoc, '/Root/XmlDataEntries', 2) WITH(AMT DECIMAL(18, 0), ACCT VARCHAR(20))
618
		IF(EXISTS(SELECT * FROM @tmp3532 WHERE ACCT = '353200002'))
619
		BEGIN
620
			SET @SUM3532 = (SELECT SUM(AMT) FROM @tmp3532 WHERE ACCT = '353200002')
621
			SET @SUMVAT = (SELECT SUM(VAT) FROM OPENXML(@hdocVATInvoice, '/Root/XmlVATInvoice', 2) WITH(VAT DECIMAL(18, 0)))
622
						
623
			IF(@SUM3532 <> @SUMVAT)
624
			BEGIN
625
				SELECT '-1' as Result, '' REQ_PAY_ID, N'Lưới hạch toán dòng ' + CONVERT(VARCHAR(5),@INDEX) + N': Tổng số tiền thuế GTGT ở lưới hóa đơn đính kèm có VAT không bằng tổng số tiền tài khoản nợ 353200002 ở lưới hạch toán : Tổng tiền thuế GTGT: ' + FORMAT(@SUMVAT,'#,#', 'vi-VN') + N',Tổng tiền tài khoản 3532: ' + FORMAT(@SUM3532,'#,#', 'vi-VN')   ErrorDesc
626
				RETURN '-1'
627
			END
628
		END
629
		
630

    
631
		DECLARE  @REQ_PAY_ID varchar(15), @ET_ID varchar(15), @AMT_ET DECIMAL(18,0), @ACC_ET varchar(25), @DRCR_ET varchar(25), @SUM_ET DECIMAL(18,0) = 0
632
		DECLARE cursorProduct CURSOR LOCAL FOR SELECT REQ_PAY_ID,ENTRY_PAIR,AMT,ACCT,DR_CR FROM TR_REQ_PAY_ENTRIES A WHERE A.REQ_PAY_ID =@p_REQ_PAY_ID
633
		Open cursorProduct
634

    
635
		FETCH NEXT FROM cursorProduct INTO @REQ_PAY_ID , @ET_ID, @AMT_ET, @ACC_ET , @DRCR_ET
636
		WHILE @@FETCH_STATUS = 0
637
		BEGIN
638
			IF(@DRCR_ET='C' AND EXISTS(SELECT * FROM TR_REQ_PAY_METHOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND ACC_NO =@ACC_ET))
639
			BEGIN
640
				SET @SUM_ET =(SELECT SUM(AMT) FROM TR_REQ_PAY_ENTRIES WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND DR_CR ='C' AND ACCT =@ACC_ET)
641
				IF(ISNULL(@SUM_ET,0) <> (SELECT SUM(TOTAL_AMT) FROM TR_REQ_PAY_METHOD WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND ACC_NO =@ACC_ET))
642
				BEGIN
643
					SELECT '-1' as Result, '' REQ_PAY_ID, N' Số tiền hạch toán có của tài khoản: '+@ACC_ET + N' phải bằng với số tiền trên phương thức thanh toán của tài khoản đó là: '+FORMAT((SELECT ISNULL(SUM(TOTAL_AMT),0) FROM TR_REQ_PAY_METHOD WHERE ACC_NO =@ACC_ET AND REQ_PAY_ID =@p_REQ_PAY_ID),'#,###')  ErrorDesc
644
					RETURN '-1'
645
				END
646
			END
647
			-- KIEM TRA SO TIEN NO CO
648
			IF (ISNULL((SELECT SUM(AMT) FROM TR_REQ_PAY_ENTRIES WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND DR_CR ='C' AND ENTRY_PAIR =@ET_ID),0) <> ISNULL((SELECT SUM(AMT) FROM TR_REQ_PAY_ENTRIES WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND DR_CR ='D' AND ENTRY_PAIR =@ET_ID),0))
649
			BEGIN
650
				SELECT '-1' as Result, '' REQ_PAY_ID, N'Mã bút toán: ' + @ET_ID + N' Số tiền bút toán Nợ phải bằng với số tiền bút toán Có'  ErrorDesc
651
				RETURN '-1'
652
			END
653

    
654
			FETCH NEXT FROM cursorProduct INTO  @REQ_PAY_ID , @ET_ID, @AMT_ET, @ACC_ET , @DRCR_ET
655
		END
656

    
657
		IF(EXISTS(SELECT * FROM TR_REQ_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND AUTH_STATUS_KT = 'S'))
658
		BEGIN
659
			SELECT '-1' as Result, '' REQ_PAY_ID, N'Phiếu đề nghị thanh toán đang được được đề xuất từ chối! Vui lòng đợi KSV xử lý phiếu' ErrorDesc
660
			RETURN '-1'
661
		END
662

    
663
		IF(EXISTS(SELECT * FROM TR_REQ_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND AUTH_STATUS_KT = 'P'))
664
		BEGIN
665
			SELECT '-1' as Result, '' REQ_PAY_ID, N'Phiếu đề nghị thanh toán đã được gửi phê duyệt thành công trước đó! Vui lòng đợi KSV xử lý phiếu' ErrorDesc
666
			RETURN '-1'
667
		END
668

    
669
		-- CHAN NEU CHI CO 1 BUT NO 1 BUT CO THI KHONG DUOC DI TIEP
670
		IF(EXISTS(SELECT * FROM TR_REQ_PAY_ENTRIES WHERE REQ_PAY_ID =@p_REQ_PAY_ID))
671
		BEGIN
672
			DECLARE  @SUM_CR DECIMAL(18,2), @SUM_DR DECIMAL(18,2)
673
			SET @SUM_CR =ISNULL((SELECT SUM(AMT*ISNULL(EXC_RATE,1)) FROM TR_REQ_PAY_ENTRIES WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND DR_CR ='C'),0)
674
			SET @SUM_DR =ISNULL((SELECT SUM(AMT*ISNULL(EXC_RATE,1)) FROM TR_REQ_PAY_ENTRIES WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND DR_CR ='D'),0)
675
			IF(@SUM_CR <> @SUM_DR)
676
			BEGIN
677
				SELECT '-1' as Result, '' REQ_PAY_ID, N'Tổng hạch toán nợ phải bằng tổng hạch toán có' ErrorDesc
678
				RETURN '-1'
679
			END
680
		END
681

    
682
		UPDATE PL_REQUEST_PROCESS_CHILD SET STATUS_JOB ='P' WHERE REQ_ID=@p_REQ_PAY_ID AND TLNAME=@p_MAKER_ID_KT
683
		UPDATE PL_REQUEST_PROCESS_CHILD SET STATUS_JOB ='C' WHERE REQ_ID=@p_REQ_PAY_ID AND LEVEL_JOB = CONVERT(VARCHAR(5),@LEVEL_JOB_PREV)
684
		-- CAP NHAT TINH TRANG DUYET KE TOAN LA DANG XU LY
685
		UPDATE TR_REQ_PAYMENT SET AUTH_STATUS_KT='P',CREATE_DT_KT = GETDATE() WHERE REQ_PAY_ID=@p_REQ_PAY_ID
686
		INSERT INTO dbo.PL_PROCESS(REQ_ID,PROCESS_ID,CHECKER_ID,APPROVE_DT,PROCESS_DESC,NOTES)
687
		VALUES(@p_REQ_PAY_ID,'SEND',@p_MAKER_ID_KT,GETDATE(), N'Giao dịch viên gửi phê duyệt',N'Giao dịch viên cập nhật thông tin')
688
		SELECT '4' as Result, '' REQ_PAY_ID, N'Phiếu đề nghị thanh toán số: '+(SELECT REQ_PAY_CODE FROM TR_REQ_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID)+N' đã được gửi phê duyệt thành công! Vui lòng đợi kiểm soát viên phê duyệt phiếu' ErrorDesc
689
		RETURN '4'
690
	END
691
-- END VALIDATE SEND APPROVE
692

    
693
SELECT '0' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, '' ErrorDesc
694
RETURN '0'
695
ABORT:
696
BEGIN
697
		ROLLBACK TRANSACTION
698
		SELECT '-1' as Result, '' REQ_PAY_ID, '' ErrorDesc
699
		RETURN '-1'
700
End