Project

General

Profile

PAY_KT_UPD.txt

Luc Tran Van, 11/22/2022 02:56 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),@GL_CODE_ACCNO VARCHAR(20), @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),GL_CODE_ACCNO VARCHAR(20), 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, @GL_CODE_ACCNO, @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 @ACC_NAME =UPPER(dbo.fChuyenCoDauThanhKhongDau(@ACCT_NAME))
133
				SET @GL_CODE = RIGHT(@GL_CODE,9)
134
				IF(ISNULL(@ACCT, '') = '' AND ISNULL(@GL_CODE_ACCNO, '') <> '')
135
				BEGIN
136
					SET @ACCT = @GL_CODE_ACCNO
137
				END
138
				IF(ISNULL(@ACCT_NAME, '') = '' AND ISNULL(@GL_CODE, '') <> '')
139
				BEGIN
140
					SET @ACC_NAME = STUFF(@GL_CODE, LEN(@GL_CODE)-8, 9, '')
141
					SET @ACCT_NAME = STUFF(@GL_CODE, LEN(@GL_CODE)-8, 9, '')
142
				END
143
				PRINT 'ACC_NAME: ' + @ACC_NAME
144

    
145
				IF(@DR_CR='D')
146
				BEGIN
147
					SET @DR_CR_NAME =N'Nợ'
148
				END
149
				ELSE
150
				BEGIN
151
					SET @DR_CR_NAME =N'Có'
152
				END
153

    
154
				SET @BRANCH_CODE =(SELECT TOP 1 BRANCH_CODE FROM CM_BRANCH WHERE BRANCH_ID =@BRANCH_ID)
155
				SET @DEP_CODE =(SELECT TOP 1 DEP_CODE FROM CM_DEPARTMENT WHERE DEP_ID =@DEP_ID)
156
	
157
				IF(@p_IS_SEND_APPR = 'Y')
158
				BEGIN
159
					IF(@ENTRY_PAIR IS NULL OR @ENTRY_PAIR ='')
160
					BEGIN
161
						ROLLBACK TRANSACTION
162
						CLOSE XmlDataEntries;
163
						DEALLOCATE XmlDataEntries;
164
						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
165
						RETURN '-1'
166
					END
167

    
168
					IF(@DR_CR IS NULL OR @DR_CR ='')
169
					BEGIN
170
						ROLLBACK TRANSACTION
171
						CLOSE XmlDataEntries;
172
						DEALLOCATE XmlDataEntries;
173
						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
174
						RETURN '-1'
175
					END
176

    
177
					IF(@ACCT IS NULL OR @ACCT ='')
178
					BEGIN
179
						ROLLBACK TRANSACTION
180
						CLOSE XmlDataEntries;
181
						DEALLOCATE XmlDataEntries;
182
						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
183
						RETURN '-1'
184
					END
185

    
186
					IF(@ACCT_NAME IS NULL OR @ACCT_NAME ='')
187
					BEGIN
188
						ROLLBACK TRANSACTION
189
						CLOSE XmlDataEntries;
190
						DEALLOCATE XmlDataEntries;
191
						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
192
						RETURN '-1'
193
					END
194

    
195
					IF(@AMT IS NULL OR @AMT < 0)
196
					BEGIN
197
					ROLLBACK TRANSACTION
198
							CLOSE XmlDataEntries;	
199
							DEALLOCATE XmlDataEntries;
200
							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
201
							RETURN '-1'
202
					END
203

    
204
					IF(@BRANCH_ID IS NULL OR @BRANCH_ID ='')
205
					BEGIN
206
						ROLLBACK TRANSACTION
207
						CLOSE XmlDataEntries;
208
						DEALLOCATE XmlDataEntries;
209
						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
210
						RETURN '-1'
211
					END
212

    
213
					IF(@TRN_DESC IS NULL OR @TRN_DESC ='')
214
					BEGIN
215
						ROLLBACK TRANSACTION
216
						CLOSE XmlDataEntries;
217
						DEALLOCATE XmlDataEntries;
218
						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
219
						RETURN '-1'
220
					END
221

    
222
					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)
223
					BEGIN
224
						ROLLBACK TRANSACTION
225
						CLOSE XmlDataEntries;
226
						DEALLOCATE XmlDataEntries;
227
						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
228
						RETURN '-1'
229
					END
230

    
231
					IF(@GL_CODE IS NULL OR @GL_CODE ='')
232
					BEGIN
233
						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) =''))
234
						BEGIN
235
							ROLLBACK TRANSACTION
236
							CLOSE XmlDataEntries;
237
							DEALLOCATE XmlDataEntries;
238
							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
239
							RETURN '-1'
240
						END
241
					END
242

    
243
					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)
244
					BEGIN
245
						ROLLBACK TRANSACTION
246
						CLOSE XmlDataEntries;
247
						DEALLOCATE XmlDataEntries;
248
						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
249
						RETURN '-1'
250
					END
251

    
252
					IF(@DEP_ID IS NOT NULL AND @DEP_ID <> '' AND (LEFT(@DEP_CODE,3) <> @BRANCH_CODE))
253
						BEGIN
254
						ROLLBACK TRANSACTION
255
								CLOSE XmlDataEntries;	
256
								DEALLOCATE XmlDataEntries;
257
								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
258
								RETURN '-1'
259
						END
260

    
261
					-- NEU HACH TOAN CASA THI 3 KI TU DAU PHAI KHOP VOI BRANCH CODE CUA DON VI CHIU CHI PHI
262
					IF(LEN(@ACCT) >9 AND (SUBSTRING(@ACCT,1,3) <> (SELECT ISNULL(BRANCH_CODE,'') FROM CM_BRANCH WHERE BRANCH_ID = @BRANCH_ID)))
263
					BEGIN
264
						ROLLBACK TRANSACTION
265
						CLOSE XmlDataEntries;	
266
						DEALLOCATE XmlDataEntries;
267
						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
268
						RETURN '-1'
269
					END
270

    
271
					--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'))
272
					--BEGIN
273
					--	IF(@ACCT ='353200002' OR @ACCT ='353200001')
274
					--	BEGIN
275
					--		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
276
					--		RETURN '-1'
277
					--	END
278
					--END select * from TR_REQ_PAY_ENTRIES
279

    
280
					--doanptt 20/04/2022
281
					IF(@ACCT = '353200002')
282
					BEGIN
283
						IF(NOT EXISTS(SELECT * FROM OPENXML(@hdocVATInvoice, '/Root/XmlVATInvoice', 2)))
284
						BEGIN
285
							ROLLBACK TRANSACTION
286
							CLOSE XmlDataEntries;	
287
							DEALLOCATE XmlDataEntries;
288
							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
289
							RETURN '-1'
290
						END
291
					END
292
					--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Ợ
293
					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 
294
							(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)
295
					BEGIN
296
						ROLLBACK TRANSACTION
297
						CLOSE XmlDataEntries;	
298
						DEALLOCATE XmlDataEntries;
299
						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
300
						RETURN '-1'
301
					END
302
					/*
303
					-- DOANPTT 11/11/22: BỔ SUNG TRƯỜNG HỢP BỊ KHUẤT CHÂN NỢ HOẶC CHÂN CÓ
304
					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 
305
							(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)
306
					BEGIN
307
						ROLLBACK TRANSACTION
308
						CLOSE XmlDataEntries;	
309
						DEALLOCATE XmlDataEntries;
310
						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
311
						RETURN '-1'
312
					END
313

    
314
					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 
315
							(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)
316
					BEGIN
317
						ROLLBACK TRANSACTION
318
						CLOSE XmlDataEntries;	
319
						DEALLOCATE XmlDataEntries;
320
						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
321
						RETURN '-1'
322
					END
323
					*/
324
					
325

    
326
					
327
				END -- END IF VALIDATE
328
				/*
329
				IF(@ACCT = '353200002')
330
					BEGIN
331
						DECLARE @SUMVAT DECIMAL(18,0) = 0
332
						DECLARE @SUM3532 DECIMAL(18,0) = 0
333
						DECLARE @tmp3532 TABLE(
334
						AMT DECIMAL(18,0),
335
						ACCT VARCHAR(20)
336
						)
337
						INSERT INTO @tmp3532 SELECT * FROM OPENXML(@hdoc, '/Root/XmlDataEntries', 2) WITH(AMT DECIMAL(18, 0), ACCT VARCHAR(20))
338
						SET @SUM3532 = (SELECT SUM(AMT) FROM @tmp3532 WHERE ACCT = '353200002')
339
						SET @SUMVAT = (SELECT SUM(VAT) FROM OPENXML(@hdocVATInvoice, '/Root/XmlVATInvoice', 2) WITH(VAT DECIMAL(18, 0)))
340
						
341
						IF(@SUM3532 <> @SUMVAT)
342
						BEGIN
343
							ROLLBACK TRANSACTION
344
							CLOSE XmlDataEntries;	
345
							DEALLOCATE XmlDataEntries;
346
							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
347
							RETURN '-1'
348
						END
349
					END
350
					*/
351
	
352
				DECLARE @p_ET_ID VARCHAR(15);
353
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_ENTRIES', @p_ET_ID OUT;
354
				IF @p_ET_ID='' OR @p_ET_ID IS NULL GOTO ABORT;
355

    
356
				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)
357
				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)
358

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

    
383
--INSERT XMLDATAENTRIES
384
		-- CAP NHAT TAI KHOAN GL
385

    
386
		--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,'') ='')
387
		-- CAP NHAT TAI KHOAN GL
388

    
389
-- INSERT LUOI HOA DON KHONG VAT
390
	
391
		DELETE FROM TR_REQ_PAY_INVOICE WHERE REQ_PAY_ID= @p_REQ_PAY_ID
392
		FETCH NEXT FROM XmlData  INTO @TRANS_NO , @TRANS_DT  ,@INVOICE_SIGN ,@INVOICE_NO_SIGN,@INVOICE_NO ,@INVOICE_DT ,@SELLER ,
393
		@TAX_NO ,@GOODS_NAME ,@PRICE ,@TAX,@VAT,@NOTES,@VAT_RATE,@CURRENCY,@RATE,@PRICE_KT ,@VAT_KT,@TOTAL_AMT_KT,@TYPE_VAT,@TYPE_FUNC
394
		WHILE @@FETCH_STATUS=0 BEGIN
395
			SET @INDEX_IV = @INDEX_IV+1
396
				IF(@TYPE_FUNC ='HC')
397
				BEGIN
398
					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 
399
					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'))))
400
					BEGIN
401
						ROLLBACK TRANSACTION
402
						CLOSE XmlData;
403
						DEALLOCATE XmlData;
404
						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
405
						RETURN '-1'
406
					END	
407
				END
408
			DECLARE @p_REQ_INV_ID VARCHAR(15);
409
			EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_INVOICE', @p_REQ_INV_ID OUT;
410
			IF @p_REQ_INV_ID='' OR @p_REQ_INV_ID IS NULL GOTO ABORT;
411

    
412
		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,
413
		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) 
414
		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,
415
		@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')
416
		
417
		IF @@error<>0 GOTO ABORT;
418
		FETCH NEXT FROM XmlData 
419
		INTO @TRANS_NO , @TRANS_DT,@INVOICE_SIGN,@INVOICE_NO_SIGN,@INVOICE_NO ,@INVOICE_DT ,@SELLER ,@TAX_NO ,@GOODS_NAME ,@PRICE ,
420
		@TAX,@VAT,@NOTES,@VAT_RATE,@CURRENCY,@RATE,@PRICE_KT ,@VAT_KT,@TOTAL_AMT_KT,@TYPE_VAT,@TYPE_FUNC
421
		END;
422
		CLOSE XmlData;
423
		DEALLOCATE XmlData;
424

    
425
-- BEGIN HOA DON CO VAT
426
		IF(@p_XMP_TEMP_VAT_INVOICE IS NOT NULL)
427
		BEGIN
428
			-- hoa don co VAT
429
			DECLARE XmlVATInvoice CURSOR FOR
430
			SELECT *
431
			FROM
432
			OPENXML(@hdocVATInvoice, '/Root/XmlVATInvoice', 2)
433
			WITH(TRANS_NO nvarchar(50),TRANS_DT VARCHAR(20),INVOICE_SIGN nvarchar(50),INVOICE_NO_SIGN nvarchar(50),
434
				 INVOICE_NO nvarchar(50),INVOICE_DT VARCHAR(20) ,SELLER nvarchar(250),TAX_NO nvarchar(15),GOODS_NAME nvarchar(250) ,
435
				 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))
436
			OPEN XmlVATInvoice
437

    
438
			-- CAP NHAT HOA DON CO VAT
439
			FETCH NEXT FROM XmlVATInvoice  INTO @TRANS_NO , @TRANS_DT  ,@INVOICE_SIGN ,@INVOICE_NO_SIGN,@INVOICE_NO ,@INVOICE_DT ,@SELLER ,
440
			@TAX_NO ,@GOODS_NAME ,@PRICE ,@TAX,@VAT,@NOTES,@VAT_RATE,@CURRENCY,@RATE,@PRICE_KT ,@VAT_KT,@TOTAL_AMT_KT,@TYPE_VAT,@TYPE_FUNC
441
			WHILE @@fetch_status=0 BEGIN
442
				SET @INDEX_VAT = @INDEX_VAT+1
443
				--IF(@TYPE_FUNC ='KT')
444
				--BEGIN
445
					IF(EXISTS(SELECT REQ_PAYDT_ID FROM TR_REQ_PAY_INVOICE 
446
									   WHERE INVOICE_NO =@INVOICE_NO 
447
											AND INVOICE_NO_SIGN = @INVOICE_NO_SIGN 
448
											AND INVOICE_SIGN =@INVOICE_SIGN 
449
											AND TAX_NO =@TAX_NO 
450
											AND TAX =@TAX 
451
											AND TYPE_FUNC = 'KT' 
452
											AND AUTH_STATUS <>'D' 
453
											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'))
454
							  )
455
					   )
456
					BEGIN
457
						ROLLBACK TRANSACTION
458
						CLOSE XmlVATInvoice;
459
						DEALLOCATE XmlVATInvoice;
460
						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
461
						RETURN '-1'
462
					END	
463
				--END
464
				--doanptt 20/04/2022
465
				/*
466
				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'))
467
				BEGIN
468
					ROLLBACK TRANSACTION
469
					CLOSE XmlVATInvoice;	
470
					DEALLOCATE XmlVATInvoice;
471
					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
472
					RETURN '-1'
473
				END
474
				*/
475
					
476
				DECLARE @p_REQ_INV_VAT_ID VARCHAR(15);
477
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_INVOICE', @p_REQ_INV_VAT_ID OUT;
478
				IF @p_REQ_INV_VAT_ID='' OR @p_REQ_INV_VAT_ID IS NULL GOTO ABORT;
479
				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,
480
				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,
481
				TOTAL_AMT_KT,TYPE_VAT,TYPE_FUNC) 
482
				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 ,
483
				@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,
484
				@TYPE_VAT,'KT')
485
			IF @@error<>0 GOTO ABORT;
486

    
487
			FETCH NEXT FROM XmlVATInvoice 
488
			INTO @TRANS_NO , @TRANS_DT,@INVOICE_SIGN,@INVOICE_NO_SIGN,@INVOICE_NO ,@INVOICE_DT ,@SELLER ,@TAX_NO ,@GOODS_NAME ,@PRICE ,
489
			@TAX,@VAT,@NOTES,@VAT_RATE,@CURRENCY,@RATE,@PRICE_KT ,@VAT_KT,@TOTAL_AMT_KT,@TYPE_VAT,@TYPE_FUNC
490
			END;
491
			CLOSE XmlVATInvoice;
492
			DEALLOCATE XmlVATInvoice;
493
		END
494
-- END HOA DON CO VAT
495

    
496

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

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

    
511

    
512
				FETCH NEXT FROM XmlDataOutsideTrans INTO @MAKER_ID_KT , @TYPE_TRANSFER_ID, @PRODUCT_ID, @OBJECT_TRANSFER_ID, @BRANCH_ID, 
513
				@ACC_NO_TRANSFER, @BRANCH_TRANSFER_ID, @CURRENCY, @BRANCH_TRANFSER_NAME
514
				WHILE @@fetch_status=0 
515
				BEGIN
516
					
517
					--IF(@p_REQ_PAY_ID <> NULL)
518
					--BEGIN
519
						DECLARE @p_TR_REQ_TRANS_OUTSIDE_ID VARCHAR(15);
520
						EXEC SYS_CodeMasters_Gen 'TR_REQ_OUTSIDE_TRANS', @p_TR_REQ_TRANS_OUTSIDE_ID OUT;
521
						IF @p_TR_REQ_TRANS_OUTSIDE_ID='' OR @p_TR_REQ_TRANS_OUTSIDE_ID IS NULL GOTO ABORT;
522
						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 , 
523
						BRANCH_TRANFSER_NAME,TYPE_TRANSFER_ID , PRODUCT_ID , OBJECT_TRANSFER_ID , BRANCH_ID, ACC_NO_TRANSFER , BRANCH_TRANSFER_ID)
524
						VALUES (@p_TR_REQ_TRANS_OUTSIDE_ID ,@p_REQ_PAY_ID ,@p_MAKER_ID_KT , GETDATE(), NULL , NULL, 
525
						@BRANCH_TRANFSER_NAME, @TYPE_TRANSFER_ID , @PRODUCT_ID , @OBJECT_TRANSFER_ID , @BRANCH_ID, @ACC_NO_TRANSFER , @BRANCH_TRANSFER_ID)
526
					--END
527

    
528
					IF @@error<>0 GOTO ABORT;
529
					FETCH NEXT FROM XmlDataOutsideTrans INTO @MAKER_ID_KT , @TYPE_TRANSFER_ID, @PRODUCT_ID, @OBJECT_TRANSFER_ID, @BRANCH_ID, 
530
					@ACC_NO_TRANSFER, @BRANCH_TRANSFER_ID, @CURRENCY, @BRANCH_TRANFSER_NAME
531
				END;
532
				CLOSE XmlDataOutsideTrans;
533
				DEALLOCATE XmlDataOutsideTrans;
534
--- END INSERT đơn vị chuyển
535

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

    
541
	DECLARE @CHANEL_PAYMENT_ID VARCHAR(15), @CITAD1_ID VARCHAR(15), @BANK_RECEIVE_ID VARCHAR(250), @OBJECT_RECEIVE_ID VARCHAR(15), 
542
				@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)
543
-- INSERT đơn vị nhận
544
				DELETE FROM TR_REQ_PAY_TRANS_OUTSIDE_REC WHERE REQ_PAY_ID = @p_REQ_PAY_ID
545

    
546
				DECLARE XmlDataOutsideRec CURSOR LOCAL FOR
547
				SELECT * FROM OPENXML(@hdocOutsideRec, 'Root/XmlDataTransferOutside',2) 
548
				WITH(MAKER_ID VARCHAR(15), CHANEL_PAYMENT_ID VARCHAR(15), CITAD1_ID VARCHAR(15), BANK_RECEIVE_ID VARCHAR(250), OBJECT_RECEIVE_ID VARCHAR(15), 
549
				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),  
550
				ENTRY_PAIR varchar(20), REF_NO varchar(20)) 
551
				OPEN XmlDataOutsideRec
552

    
553
				FETCH NEXT FROM XmlDataOutsideRec INTO @MAKER_ID_KT, @CHANEL_PAYMENT_ID, @CITAD1_ID, @BANK_RECEIVE_ID, @OBJECT_RECEIVE_ID, 
554
				@BRANCH_RECEIVE_ID, @BRANCH_RECEIVE_NAME, @ACC_NO_RECEIVE, @TRADE_AMT, @TRADE_DESC, @SUB_BANK_RECEIVE_NAME, @ENTRY_PAIR, @REF_NO
555
				WHILE @@fetch_status=0 
556
				BEGIN
557

    
558
					DECLARE @p_REQ_TRANS_OUTSIDE_REC_ID VARCHAR(15);
559
					EXEC SYS_CodeMasters_Gen 'TR_REQ_OUTSIDE_REC', @p_REQ_TRANS_OUTSIDE_REC_ID OUT;
560
					IF @p_REQ_TRANS_OUTSIDE_REC_ID='' OR @p_REQ_TRANS_OUTSIDE_REC_ID IS NULL GOTO ABORT;
561

    
562
					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,
563
					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)
564
					VALUES (@p_REQ_TRANS_OUTSIDE_REC_ID, @p_REQ_PAY_ID, @p_MAKER_ID_KT, GETDATE(), NULL, NULL,
565
					@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)
566
					IF @@error<>0 GOTO ABORT;
567
					FETCH NEXT FROM XmlDataOutsideRec INTO  @MAKER_ID_KT, @CHANEL_PAYMENT_ID, @CITAD1_ID, @BANK_RECEIVE_ID, @OBJECT_RECEIVE_ID, 
568
					@BRANCH_RECEIVE_ID, @BRANCH_RECEIVE_NAME, @ACC_NO_RECEIVE, @TRADE_AMT, @TRADE_DESC, @SUB_BANK_RECEIVE_NAME, @ENTRY_PAIR, @REF_NO
569
				END;
570
				CLOSE XmlDataOutsideRec;
571
				DEALLOCATE XmlDataOutsideRec;
572
--- END INSERT đơn vị nhận		
573

    
574
		--- Luu log chinh sua select * from TR_REQ_PAY_INVOICE
575
		INSERT INTO TR_REQ_PAY_INVOICE_LOG SELECT * FROM TR_REQ_PAY_INVOICE WHERE REQ_PAY_ID =@p_REQ_PAY_ID
576
		-----
577
	--- BAT DAU CAP NHAT XAC DINH CAC BUOC DUYET SAU KHI KE TOAN CAP NHAT THONG TIN
578

    
579
	COMMIT TRANSACTION
580

    
581
-- BEGIN VALIDATE SEND APRROVE
582
	IF(@p_IS_SEND_APPR = 'Y')
583
	BEGIN
584
	-- BEGIN VALIDATE RIGHT
585
		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'))
586
		BEGIN
587
			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
588
			RETURN '-1'
589
		END
590
		IF ((SELECT AUTH_STATUS FROM TR_REQ_PAYMENT WHERE REQ_PAY_ID = @p_REQ_PAY_ID) ='R')
591
		BEGIN
592
			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
593
			RETURN '-1'
594
		END
595
		IF ( EXISTS (SELECT AUTH_STATUS FROM TR_REQ_PAYMENT WHERE REQ_PAY_ID = @p_REQ_PAY_ID AND AUTH_STATUS <> 'A'))
596
		BEGIN
597
			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
598
			RETURN '-1'
599
		END
600
		IF(EXISTS(SELECT * FROM TR_REQ_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND AUTH_STATUS_KT = 'A'))
601
		BEGIN
602
			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
603
			RETURN '-1'
604
		END
605
		IF(EXISTS(SELECT * FROM TR_REQ_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND AUTH_STATUS_KT = 'P'))
606
		BEGIN
607
			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
608
			RETURN '-1'
609
		END
610
		IF(EXISTS(SELECT * FROM TR_REQ_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND AUTH_STATUS_KT = 'S'))
611
		BEGIN
612
			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
613
			RETURN '-1'
614
		END
615
	-- END VALIDATE RIGHT
616

    
617
		DECLARE @SUMVAT DECIMAL(18,0) = 0
618
		DECLARE @SUM3532 DECIMAL(18,0) = 0
619
		DECLARE @tmp3532 TABLE(
620
		AMT DECIMAL(18,0),
621
		ACCT VARCHAR(20)
622
		)
623
		INSERT INTO @tmp3532 SELECT * FROM OPENXML(@hdoc, '/Root/XmlDataEntries', 2) WITH(AMT DECIMAL(18, 0), ACCT VARCHAR(20))
624
		IF(EXISTS(SELECT * FROM @tmp3532 WHERE ACCT = '353200002'))
625
		BEGIN
626
			SET @SUM3532 = (SELECT SUM(AMT) FROM @tmp3532 WHERE ACCT = '353200002')
627
			SET @SUMVAT = (SELECT SUM(VAT) FROM OPENXML(@hdocVATInvoice, '/Root/XmlVATInvoice', 2) WITH(VAT DECIMAL(18, 0)))
628
						
629
			IF(@SUM3532 <> @SUMVAT)
630
			BEGIN
631
				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
632
				RETURN '-1'
633
			END
634
		END
635
		
636

    
637
		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
638
		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
639
		Open cursorProduct
640

    
641
		FETCH NEXT FROM cursorProduct INTO @REQ_PAY_ID , @ET_ID, @AMT_ET, @ACC_ET , @DRCR_ET
642
		WHILE @@FETCH_STATUS = 0
643
		BEGIN
644
			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))
645
			BEGIN
646
				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)
647
				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))
648
				BEGIN
649
					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
650
					RETURN '-1'
651
				END
652
			END
653
			-- KIEM TRA SO TIEN NO CO
654
			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))
655
			BEGIN
656
				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
657
				RETURN '-1'
658
			END
659

    
660
			FETCH NEXT FROM cursorProduct INTO  @REQ_PAY_ID , @ET_ID, @AMT_ET, @ACC_ET , @DRCR_ET
661
		END
662

    
663
		IF(EXISTS(SELECT * FROM TR_REQ_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND AUTH_STATUS_KT = 'S'))
664
		BEGIN
665
			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
666
			RETURN '-1'
667
		END
668

    
669
		IF(EXISTS(SELECT * FROM TR_REQ_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND AUTH_STATUS_KT = 'P'))
670
		BEGIN
671
			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
672
			RETURN '-1'
673
		END
674

    
675
		-- CHAN NEU CHI CO 1 BUT NO 1 BUT CO THI KHONG DUOC DI TIEP
676
		IF(EXISTS(SELECT * FROM TR_REQ_PAY_ENTRIES WHERE REQ_PAY_ID =@p_REQ_PAY_ID))
677
		BEGIN
678
			DECLARE  @SUM_CR DECIMAL(18,2), @SUM_DR DECIMAL(18,2)
679
			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)
680
			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)
681
			IF(@SUM_CR <> @SUM_DR)
682
			BEGIN
683
				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
684
				RETURN '-1'
685
			END
686
		END
687

    
688
		UPDATE PL_REQUEST_PROCESS_CHILD SET STATUS_JOB ='P' WHERE REQ_ID=@p_REQ_PAY_ID AND TLNAME=@p_MAKER_ID_KT
689
		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)
690
		-- CAP NHAT TINH TRANG DUYET KE TOAN LA DANG XU LY
691
		UPDATE TR_REQ_PAYMENT SET AUTH_STATUS_KT='P',CREATE_DT_KT = GETDATE() WHERE REQ_PAY_ID=@p_REQ_PAY_ID
692
		INSERT INTO dbo.PL_PROCESS(REQ_ID,PROCESS_ID,CHECKER_ID,APPROVE_DT,PROCESS_DESC,NOTES)
693
		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')
694
		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
695
		RETURN '4'
696
	END
697
-- END VALIDATE SEND APPROVE
698

    
699
SELECT '0' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, '' ErrorDesc
700
RETURN '0'
701
ABORT:
702
BEGIN
703
		ROLLBACK TRANSACTION
704
		SELECT '-1' as Result, '' REQ_PAY_ID, '' ErrorDesc
705
		RETURN '-1'
706
End