Project

General

Profile

TR_REQ_KT_UPD.txt

Luc Tran Van, 01/04/2023 10:06 AM

 
1

    
2
ALTER   PROCEDURE [dbo].[TR_REQ_ADVANCE_PAYMENT_KT_Upd]
3
@p_REQ_PAY_ID	varchar(15)= NULL,
4
@p_REQ_PAY_CODE	varchar(50)	= NULL,
5
@p_REQ_DT VARCHAR(20)= NULL,
6
@p_BRANCH_ID	varchar(15)	= NULL,
7
@p_DEP_ID	varchar(15)	= NULL,
8
@p_REQ_REASON	nvarchar(MAX)	= NULL,
9
@p_REQ_TYPE	varchar(15)	= NULL,
10
@P_REQ_ENTRIES nvarchar(MAX)	= NULL,
11
@p_REQ_DESCRIPTION	nvarchar(MAX)	= NULL,
12
@p_REF_ID	varchar(15)	= NULL,
13
@p_RECEIVER_PO	nvarchar(250)	= NULL,
14
@p_RECEIVER_DEBIT	nvarchar(250)	= NULL,
15
@p_REQ_PAY_TYPE	varchar(15)	= NULL,
16
@p_REQ_TYPE_CURRENCY	nvarchar(50)	= NULL,
17
@p_REQ_AMT	decimal(18, 0)	= NULL,
18
@p_REQ_TEMP_AMT	decimal(18, 0)	= NULL,
19
@p_MAKER_ID	varchar(15)	= NULL,
20
@p_CREATE_DT	varchar(25)	= NULL,
21
@p_EDITOR_ID	varchar(15)	= NULL,
22
@p_AUTH_STATUS	varchar(1)	= NULL,
23
@p_CHECKER_ID	varchar(15)	= NULL,
24
@p_APPROVE_DT	varchar(25)	= NULL,
25
@p_CREATE_DT_KT	varchar(25)	= NULL,
26
@p_MAKER_ID_KT	varchar(15)	= NULL,
27
@p_AUTH_STATUS_KT	varchar(1)	= NULL,
28
@p_CHECKER_ID_KT	varchar(1)	= NULL,
29
@p_APPROVE_DT_KT  varchar(25)= null,
30
@p_CONFIRM_NOTES	nvarchar(500)	= NULL,
31
@p_BRANCH_CREATE	varchar(15)	= NULL,
32
@p_NOTES	varchar(15)	= NULL,
33
@p_RECORD_STATUS	varchar(1)	= NULL,
34
@p_TRANSFER_MAKER	nvarchar(50)	= NULL,
35
@p_TRANSFER_DT	varchar(25)	= NULL,
36
@p_TRASFER_USER_RECIVE	varchar(15)	= NULL,
37
@p_PROCESS	varchar(15)	= NULL,
38
@p_PAY_PHASE VARCHAR(15)= NULL,
39
@p_DVDM_ID VARCHAR(15) = NULL,
40
@p_TYPE_FUNCTION VARCHAR(15) = NULL,
41
@p_RATE DECIMAL(18,0)= 0,
42
@p_XMP_TEMP_DATA_ENTRIES XML = NULL,
43
--doanptt 17/02/2022
44
@p_XMP_TEMP_DATA_TRANSFER_OUTSIDE_TRANS XML = NULL,
45
@p_XMP_TEMP_DATA_TRANSFER_OUTSIDE_REC XML = NULL
46
AS
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ị tạm ứng này. Phiếu đề nghị tạm ứng đ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_ADVANCE_PAYMENT WHERE REQ_PAY_ID = @p_REQ_PAY_ID) ='R')
54
	BEGIN
55
		SELECT '-1' Result,'' REQ_PAY_ID,N'Phiếu đề nghị tạm ứng đ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 AUTH_STATUS FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID = @p_REQ_PAY_ID AND AUTH_STATUS <> 'A'))
59
	BEGIN
60
		SELECT '-1' Result,'' REQ_PAY_ID,N'Phiếu đề nghị tạm ứng đang được ở cấp độ đơn vị. Vui lòng chờ đơn vị cập nhật thông tin và duyệt lại!' ErrorDesc
61
		RETURN '-1'
62
	END
63
	IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND AUTH_STATUS_KT = 'A'))
64
	BEGIN
65
		SELECT '-1' as Result, '' REQ_PAY_ID, N'Phiếu đề nghị tạm ứng đã được phê duyệt kế toán thành công trước đó!' ErrorDesc
66
		RETURN '-1'
67
	END
68
	IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND AUTH_STATUS_KT = 'P'))
69
	BEGIN
70
		SELECT '-1' as Result, '' REQ_PAY_ID, N'Phiếu đề nghị tạm ứng đã được gửi phê duyệt thành công trước đó! Vui lòng đợi KSV xử lý phiếu' ErrorDesc
71
		RETURN '-1'
72
	END
73
	IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND AUTH_STATUS_KT = 'S'))
74
	BEGIN
75
		SELECT '-1' as Result, '' REQ_PAY_ID, N'Phiếu đề nghị tạm ứng đang được đề xuất từ chối! Vui lòng đợi KSV xử lý phiếu' ErrorDesc
76
		RETURN '-1'
77
	END
78
-- END VALIDATE UPDATE
79

    
80

    
81

    
82
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),
83
	@BRANCH_ID VARCHAR(15), @DEP_ID VARCHAR(15),@TRN_DESC nvarchar(1000),@GL_CODE VARCHAR(100),@GL_CODE_ACCNO VARCHAR(20),@BRANCH_CODE VARCHAR(15), @DEP_CODE VARCHAR(15)
84

    
85
	DECLARE @INDEX_REC INT = 0
86

    
87

    
88
BEGIN TRANSACTION
89
		-- KHAI BAO CAC BUOC DUYET- XAC NHAN
90
		DECLARE @LEVEL_JOB VARCHAR(5), @LEVEL_JOB_PREV INT
91
		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 TYPE_JOB ='XL')
92
		SET @LEVEL_JOB_PREV = CONVERT(INT,@LEVEL_JOB) -1
93
		----
94
		--IF(EXISTS (SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID = @p_REQ_PAY_ID AND MAKER_ID_KT IS NULL))
95
-- INSERT HACH TOAN
96
		IF(@p_XMP_TEMP_DATA_ENTRIES IS NOT NULL)
97
		BEGIN
98
			-- khai báo cursor
99
			DECLARE @hdocEntries INT;
100
			EXEC sp_xml_preparedocument @hdocEntries OUTPUT, @p_XMP_TEMP_DATA_ENTRIES;
101

    
102
			DECLARE XmlDataEntries CURSOR FOR
103
			SELECT * FROM OPENXML(@hdocEntries, '/Root/XmlDataEntries', 2)
104
					 WITH(ENTRY_PAIR varchar(20),DR_CR varchar(20),ACCT VARCHAR(50), ACCT_NAME VARCHAR(500), AMT decimal(18,2),CURRENCY VARCHAR(15), 
105
					 EXC_RATE DECIMAL(18,0), BRANCH_ID VARCHAR(15), DEP_ID VARCHAR(15),TRN_DESC nvarchar(1000), GL_CODE VARCHAR(100),GL_CODE_ACCNO VARCHAR(20))
106
			
107
			OPEN XmlDataEntries;
108
			DECLARE @INDEX INT = 0
109

    
110
			UPDATE TR_REQ_ADVANCE_PAYMENT 
111
			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_NOTES=@p_CONFIRM_NOTES
112
			WHERE REQ_PAY_ID =@p_REQ_PAY_ID
113
			-- DOANPTT 291222: THEM LOG KPI
114
			UPDATE TR_REQ_KPI 
115
			SET AUTH_STATUS_KT ='U', CREATE_DT_KT = GETDATE(),MAKER_ID_KT =@p_MAKER_ID_KT, CORE_NOTE = @p_CONFIRM_NOTES, REQ_REASON = @p_REQ_REASON
116
			WHERE REQ_ID =@p_REQ_PAY_ID AND AUTH_STATUS_KT = 'U'
117

    
118
			DELETE FROM TR_REQ_PAY_ENTRIES WHERE REQ_PAY_ID = @p_REQ_PAY_ID
119
			IF @@Error <> 0 GOTO ABORT
120

    
121
			DECLARE @DR_CR_NAME NVARCHAR(50)
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
123
			WHILE @@fetch_status=0 BEGIN
124
				IF(@EXC_RATE IS NULL)
125
				BEGIN
126
					SET @EXC_RATE = 1
127
				END
128

    
129
				SET @INDEX = @INDEX +1
130
				-- NEU TEN TAI KHOAN RONG, THI LAY TEN TU CHECK CASA
131
				IF(ISNULL(@GL_CODE, '') <> '')
132
				BEGIN
133
					SET @ACCT_NAME = STUFF(@GL_CODE, LEN(@GL_CODE)-8, 9, '')
134
				END
135

    
136
				IF(@GL_CODE IS NOT NULL AND @GL_CODE <> '')
137
				BEGIN
138
					SET @GL_CODE = RIGHT(@GL_CODE,9) 
139
				END-- LUCTV BO SUNG 20211117
140

    
141
				SET @ACCT_NAME =UPPER(dbo.fChuyenCoDauThanhKhongDau(@ACCT_NAME))
142
				-- NEU SO TAI KHOAN RONG, THI LAY SO TAI KHOAN TU CHECK CASA
143
				SET @GL_CODE = RIGHT(@GL_CODE,9)
144
				IF(ISNULL(@ACCT, '') = '' AND ISNULL(@GL_CODE_ACCNO, '') <> '')
145
				BEGIN
146
					SET @ACCT = @GL_CODE_ACCNO
147
				END
148

    
149
				IF(@DR_CR='D')
150
				BEGIN
151
					SET @DR_CR_NAME =N'Nợ'
152
				END
153
				ELSE
154
				BEGIN
155
					SET @DR_CR_NAME =N'Có'
156
				END
157

    
158
				SET @BRANCH_CODE =(SELECT TOP 1 BRANCH_CODE FROM CM_BRANCH WHERE BRANCH_ID =@BRANCH_ID)
159
				SET @DEP_CODE =(SELECT TOP 1 DEP_CODE FROM CM_DEPARTMENT WHERE DEP_ID =@DEP_ID)
160

    
161
				IF(@p_TYPE_FUNCTION ='SEND')
162
				BEGIN
163
					IF(@ENTRY_PAIR IS NULL OR @ENTRY_PAIR ='')
164
					BEGIN
165
						ROLLBACK TRANSACTION
166
						CLOSE XmlDataEntries;
167
						DEALLOCATE XmlDataEntries;
168
						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
169
						RETURN '-1'
170
					END
171

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

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

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

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

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

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

    
226
					IF(@GL_CODE IS NULL OR @GL_CODE ='')
227
					BEGIN
228
						IF (LEN(@ACCT) >9 AND ((SELECT TOP 1 ISNULL(TK_GL,'') FROM CM_ACCOUNT WHERE ACC_NO =@ACCT) ='' OR (SELECT TOP 1 ISNULL(TK_GL_NAME,'') FROM CM_ACCOUNT WHERE ACC_NO =@ACCT) =''))
229
						BEGIN
230
							ROLLBACK TRANSACTION
231
							CLOSE XmlDataEntries;
232
							DEALLOCATE XmlDataEntries;
233
							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
234
							RETURN '-1'
235
						END
236
					END
237

    
238
					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)
239
					BEGIN
240
						ROLLBACK TRANSACTION
241
						CLOSE XmlDataEntries;
242
						DEALLOCATE XmlDataEntries;
243
						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
244
						RETURN '-1'
245
					END
246

    
247
					IF(@DEP_ID IS NOT NULL AND @DEP_ID <> '' AND (LEFT(@DEP_CODE,3) <> @BRANCH_CODE))
248
					BEGIN
249
							ROLLBACK TRANSACTION
250
							CLOSE XmlDataEntries;	
251
							DEALLOCATE XmlDataEntries;
252
							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
253
							RETURN '-1'
254
					END
255

    
256
					-- NEU HACH TOAN CASA THI 3 KI TU DAU PHAI KHOP VOI BRANCH CODE CUA DON VI CHIU CHI PHI
257
					PRINT @BRANCH_ID
258
					IF(LEN(@ACCT) >9 AND (SUBSTRING(@ACCT,1,3) <> (SELECT TOP 1 ISNULL(BRANCH_CODE,'') FROM CM_BRANCH WHERE BRANCH_ID = @BRANCH_ID)))
259
					BEGIN
260
							ROLLBACK TRANSACTION
261
							CLOSE XmlDataEntries;	
262
							DEALLOCATE XmlDataEntries;
263
							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
264
							RETURN '-1'
265
					END
266
					
267
					/*
268
					-- DOANPTT 11/11/22: BỔ SUNG TRƯỜNG HỢP BỊ KHUẤT CHÂN NỢ HOẶC CHÂN CÓ
269
					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 
270
							(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)
271
					BEGIN
272
						ROLLBACK TRANSACTION
273
						CLOSE XmlDataEntries;	
274
						DEALLOCATE XmlDataEntries;
275
						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
276
						RETURN '-1'
277
					END
278

    
279
					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 
280
							(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)
281
					BEGIN
282
						ROLLBACK TRANSACTION
283
						CLOSE XmlDataEntries;	
284
						DEALLOCATE XmlDataEntries;
285
						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
286
						RETURN '-1'
287
					END
288
					*/
289

    
290
				END
291
				
292
				/*IF(@DEP_ID IS NOT NULL AND @DEP_ID <> '' AND NOT EXISTS(SELECT * FROM CM_DEPARTMENT WHERE DEP_ID =@DEP_ID AND BRANCH_ID =@BRANCH_ID))
293
					BEGIN
294
					ROLLBACK TRANSACTION
295
						CLOSE XmlDataEntries;	
296
						DEALLOCATE XmlDataEntries;
297
						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
298
						RETURN '-1'
299
				END*/
300
				
301

    
302
				DECLARE @p_ET_ID VARCHAR(15);
303
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_ENTRIES', @p_ET_ID OUT;
304
				IF @p_ET_ID='' OR @p_ET_ID IS NULL GOTO ABORT;
305

    
306
				INSERT INTO TR_REQ_PAY_ENTRIES (REQ_PAY_DT_ID,REQ_PAY_ID,ENTRY_PAIR,DR_CR, DR_CR_NAME,ACCT,ACCT_NAME,AMT,CURRENCY,EXC_RATE,BRANCH_ID,DEP_ID,TRN_DESC,TRN_DATE,MAKER_ID_KT, TRN_TYPE)
307
				VALUES (@p_ET_ID,@p_REQ_PAY_ID,@ENTRY_PAIR,@DR_CR,@DR_CR_NAME,@ACCT,@ACCT_NAME, @AMT ,'VND', 1, @BRANCH_ID, @DEP_ID,@TRN_DESC,GETDATE(),@p_MAKER_ID_KT, 'ADVANCE')
308

    
309
				-- NEU CHUA CO TAI KHOAN THI THEM VO CM_ACCOUNT
310
				IF(NOT EXISTS(SELECT * FROM CM_ACCOUNT WHERE ACC_NO =@ACCT))
311
				BEGIN
312
					INSERT INTO CM_ACCOUNT (ACC_NO, ACC_NAME, TK_GL, TK_GL_NAME, MAKER_ID, CHECKER_ID) VALUES
313
					(@ACCT,@ACCT_NAME,@GL_CODE,(SELECT TOP 1 ACC_NAME FROM CM_ACCOUNT WHERE ACC_NO =@GL_CODE),'admin','admin')
314
				END
315
				ELSE
316
				BEGIN
317
					IF(@GL_CODE IS NOT NULL AND @GL_CODE <> '' AND @GL_CODE <> '0')
318
						BEGIN
319
							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), EDITOR_DT = GETDATE()
320
							WHERE ACC_NO=@ACCT
321
					END
322
				END
323

    
324
				
325
			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
326
			END;
327
		CLOSE XmlDataEntries;
328
		DEALLOCATE XmlDataEntries;
329
		-- UPDATE GL THEO RULE
330
		----UPDATE  CM_ACCOUNT
331
		----SET TK_GL ='361200001', TK_GL_NAME =(SELECT ACC_NAME FROM CM_ACCOUNT WHERE ACC_NO ='361200001')
332
		----WHERE LEN (ACC_NO) >9 AND ISNULL(TK_GL,'')=''
333
		----AND SUBSTRING(ACC_NO,4,4) ='7048'
334

    
335
		----UPDATE  CM_ACCOUNT
336
		----SET TK_GL ='519200002', TK_GL_NAME =(SELECT ACC_NAME FROM CM_ACCOUNT WHERE ACC_NO ='519200002')
337
		----WHERE LEN (ACC_NO) >9 AND ISNULL(TK_GL,'')=''
338
		----AND SUBSTRING(ACC_NO,4,4) ='7044' AND SUBSTRING(ACC_NO,12,2) ='19'
339

    
340
		----UPDATE  CM_ACCOUNT
341
		----SET TK_GL ='421100001', TK_GL_NAME =(SELECT ACC_NAME FROM CM_ACCOUNT WHERE ACC_NO ='421100001')
342
		----WHERE LEN (ACC_NO) >9 AND ISNULL(TK_GL,'')=''
343
		----AND SUBSTRING(ACC_NO,4,4) ='7041'
344

    
345
		--UPDATE TR_REQ_PAY_ENTRIES SET ACCT_NAME = UPPER(dbo.fChuyenCoDauThanhKhongDau(ACCT_NAME)) WHERE REQ_PAY_ID =@p_REQ_PAY_ID
346

    
347
		IF @@error<>0 GOTO ABORT;
348
	END
349

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

    
354
	DECLARE  @MAKER_ID_KT VARCHAR(15), @TYPE_TRANSFER_ID VARCHAR(15), @PRODUCT_ID VARCHAR(15), @OBJECT_TRANSFER_ID VARCHAR(15), 
355
				@ACC_NO_TRANSFER VARCHAR(255), @BRANCH_TRANSFER_ID VARCHAR(15), @BRANCH_TRANFSER_NAME NVARCHAR(255)
356
-- INSERT đơn vị chuyển
357
				DELETE FROM TR_REQ_PAY_TRANS_OUTSIDE_TRANS WHERE REQ_PAY_ID = @p_REQ_PAY_ID
358
				DECLARE XmlDataOutsideTrans CURSOR LOCAL FOR
359
				SELECT * FROM OPENXML(@hdocOutsideTrans, 'Root/XmlDataTransferOutside',2) 
360
				WITH(MAKER_ID VARCHAR(15), TYPE_TRANSFER_ID VARCHAR(15), PRODUCT_ID VARCHAR(15), OBJECT_TRANSFER_ID VARCHAR(15), BRANCH_ID VARCHAR(15), 
361
				ACC_NO_TRANSFER VARCHAR(255), BRANCH_TRANSFER_ID VARCHAR(15), CURRENCY VARCHAR(15), BRANCH_TRANFSER_NAME NVARCHAR(255))
362
				OPEN XmlDataOutsideTrans
363

    
364

    
365
				FETCH NEXT FROM XmlDataOutsideTrans INTO @MAKER_ID_KT , @TYPE_TRANSFER_ID, @PRODUCT_ID, @OBJECT_TRANSFER_ID, @BRANCH_ID, 
366
				@ACC_NO_TRANSFER, @BRANCH_TRANSFER_ID, @CURRENCY, @BRANCH_TRANFSER_NAME
367
				WHILE @@fetch_status=0 
368
				BEGIN
369
					
370
					--IF(@p_REQ_PAY_ID <> NULL)
371
					--BEGIN
372
						DECLARE @p_TR_REQ_TRANS_OUTSIDE_ID VARCHAR(15);
373
						EXEC SYS_CodeMasters_Gen 'TR_REQ_OUTSIDE_TRANS', @p_TR_REQ_TRANS_OUTSIDE_ID OUT;
374
						IF @p_TR_REQ_TRANS_OUTSIDE_ID='' OR @p_TR_REQ_TRANS_OUTSIDE_ID IS NULL GOTO ABORT;
375
						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 , 
376
						BRANCH_TRANFSER_NAME,TYPE_TRANSFER_ID , PRODUCT_ID , OBJECT_TRANSFER_ID , BRANCH_ID, ACC_NO_TRANSFER , BRANCH_TRANSFER_ID, CURRENCY)
377
						VALUES (@p_TR_REQ_TRANS_OUTSIDE_ID ,@p_REQ_PAY_ID ,@p_MAKER_ID_KT , GETDATE(), NULL , NULL, 
378
						@BRANCH_TRANFSER_NAME, @TYPE_TRANSFER_ID , @PRODUCT_ID , @OBJECT_TRANSFER_ID , @BRANCH_ID, @ACC_NO_TRANSFER , @BRANCH_TRANSFER_ID, @CURRENCY)
379
					--END
380

    
381
					IF @@error<>0 GOTO ABORT;
382
					FETCH NEXT FROM XmlDataOutsideTrans INTO @MAKER_ID_KT , @TYPE_TRANSFER_ID, @PRODUCT_ID, @OBJECT_TRANSFER_ID, @BRANCH_ID, 
383
					@ACC_NO_TRANSFER, @BRANCH_TRANSFER_ID, @CURRENCY, @BRANCH_TRANFSER_NAME
384
				END;
385
				CLOSE XmlDataOutsideTrans;
386
				DEALLOCATE XmlDataOutsideTrans;
387
--- END INSERT đơn vị chuyển
388

    
389
-- doanptt 12/03/2022 thêm lưới chuyển tiền ngoài hệ thống - đơn vị nhận
390
-- START INSERT đơn vị nhận
391
	DECLARE @hdocOutsideRec INT
392
	EXEC sp_xml_preparedocument @hdocOutsideRec OUTPUT, @p_XMP_TEMP_DATA_TRANSFER_OUTSIDE_REC;
393

    
394
	DECLARE @CHANEL_PAYMENT_ID VARCHAR(20), @CITAD1_ID VARCHAR(20), @BANK_RECEIVE_ID VARCHAR(255), @OBJECT_RECEIVE_ID VARCHAR(20), @REF_NO VARCHAR(50),
395
				@BRANCH_RECEIVE_ID VARCHAR(255), @BRANCH_RECEIVE_NAME NVARCHAR(MAX), @ACC_NO_RECEIVE VARCHAR(255), @TRADE_AMT DECIMAL(18, 0), @TRADE_DESC NVARCHAR(120), @SUB_BANK_RECEIVE_NAME nvarchar(MAX)
396
-- INSERT đơn vị nhận
397
	DELETE FROM TR_REQ_PAY_TRANS_OUTSIDE_REC WHERE REQ_PAY_ID = @p_REQ_PAY_ID
398

    
399
	DECLARE XmlDataOutsideRec CURSOR LOCAL FOR
400
	SELECT * FROM OPENXML(@hdocOutsideRec, 'Root/XmlDataTransferOutside',2) 
401
	WITH(MAKER_ID VARCHAR(15), CHANEL_PAYMENT_ID VARCHAR(15), CITAD1_ID VARCHAR(15), BANK_RECEIVE_ID VARCHAR(255), OBJECT_RECEIVE_ID VARCHAR(15), 
402
	BRANCH_RECEIVE_ID VARCHAR(15), BRANCH_RECEIVE_NAME VARCHAR(MAX), ACC_NO_RECEIVE VARCHAR(255), TRADE_AMT DECIMAL(18, 0), TRADE_DESC NVARCHAR(120), SUB_BANK_RECEIVE_NAME nvarchar(MAX),  
403
				ENTRY_PAIR varchar(20), REF_NO varchar(20)) 
404
	OPEN XmlDataOutsideRec
405

    
406
	FETCH NEXT FROM XmlDataOutsideRec INTO @MAKER_ID_KT, @CHANEL_PAYMENT_ID, @CITAD1_ID, @BANK_RECEIVE_ID, @OBJECT_RECEIVE_ID, 
407
	@BRANCH_RECEIVE_ID, @BRANCH_RECEIVE_NAME, @ACC_NO_RECEIVE, @TRADE_AMT, @TRADE_DESC, @SUB_BANK_RECEIVE_NAME, @ENTRY_PAIR, @REF_NO
408
	WHILE @@fetch_status=0 
409
	BEGIN
410
		SET @INDEX_REC = @INDEX_REC+1
411
		IF(@p_TYPE_FUNCTION ='SEND')
412
			BEGIN
413
				IF(ISNULL(@ACC_NO_RECEIVE, '') = '')
414
				BEGIN
415
					ROLLBACK TRANSACTION
416
					CLOSE XmlDataOutsideRec;
417
					DEALLOCATE XmlDataOutsideRec;
418
					SELECT '-1' as Result, '' REQ_PAY_ID, N'Lưới đơn vị nhận, dòng: '+ CONVERT(VARCHAR(5),@INDEX_REC) + N' Số tài khoản không được để trống' ErrorDesc
419
					RETURN '-1'
420
				END
421
				IF(ISNULL(@BRANCH_RECEIVE_NAME, '') = '')
422
				BEGIN
423
					ROLLBACK TRANSACTION
424
					CLOSE XmlDataOutsideRec;
425
					DEALLOCATE XmlDataOutsideRec;
426
					SELECT '-1' as Result, '' REQ_PAY_ID, N'Lưới đơn vị nhận, dòng: '+ CONVERT(VARCHAR(5),@INDEX_REC) + N' Tên đơn vị nhận không được để trống' ErrorDesc
427
					RETURN '-1'
428
				END
429
				IF(ISNULL(@OBJECT_RECEIVE_ID, '') = '')
430
				BEGIN
431
					ROLLBACK TRANSACTION
432
					CLOSE XmlDataOutsideRec;
433
					DEALLOCATE XmlDataOutsideRec;
434
					SELECT '-1' as Result, '' REQ_PAY_ID, N'Lưới đơn vị nhận, dòng: '+ CONVERT(VARCHAR(5),@INDEX_REC) + N' Đối tượng nhận không được để trống' ErrorDesc
435
					RETURN '-1'
436
				END
437
				IF(ISNULL(@BANK_RECEIVE_ID, '') = '' OR ISNULL(@BRANCH_RECEIVE_NAME, '') = '')
438
				BEGIN
439
					ROLLBACK TRANSACTION
440
					CLOSE XmlDataOutsideRec;
441
					DEALLOCATE XmlDataOutsideRec;
442
					SELECT '-1' as Result, '' REQ_PAY_ID, N'Lưới đơn vị nhận, dòng: '+ CONVERT(VARCHAR(5),@INDEX_REC) + N' Tên ngân hàng hưởng trực tiếp không được để trống' ErrorDesc
443
					RETURN '-1'
444
				END
445
				IF(ISNULL(@CITAD1_ID, '') = '')
446
				BEGIN
447
					ROLLBACK TRANSACTION
448
					CLOSE XmlDataOutsideRec;
449
					DEALLOCATE XmlDataOutsideRec;
450
					SELECT '-1' as Result, '' REQ_PAY_ID, N'Lưới đơn vị nhận, dòng: '+ CONVERT(VARCHAR(5),@INDEX_REC) + N' Mã CITAD không được để trống' ErrorDesc
451
					RETURN '-1'
452
				END
453
				IF(ISNULL(@CHANEL_PAYMENT_ID, '') = '')
454
				BEGIN
455
					ROLLBACK TRANSACTION
456
					CLOSE XmlDataOutsideRec;
457
					DEALLOCATE XmlDataOutsideRec;
458
					SELECT '-1' as Result, '' REQ_PAY_ID, N'Lưới đơn vị nhận, dòng: '+ CONVERT(VARCHAR(5),@INDEX_REC) + N' Kênh thanh toán không được để trống' ErrorDesc
459
					RETURN '-1'
460
				END
461
			END
462

    
463
		DECLARE @p_REQ_TRANS_OUTSIDE_REC_ID VARCHAR(15);
464
		EXEC SYS_CodeMasters_Gen 'TR_REQ_OUTSIDE_REC', @p_REQ_TRANS_OUTSIDE_REC_ID OUT;
465
		IF @p_REQ_TRANS_OUTSIDE_REC_ID='' OR @p_REQ_TRANS_OUTSIDE_REC_ID IS NULL GOTO ABORT;
466
		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,
467
		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)
468
		VALUES (@p_REQ_TRANS_OUTSIDE_REC_ID, @p_REQ_PAY_ID, @p_MAKER_ID_KT, GETDATE(), NULL, NULL,
469
		@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)
470
		IF @@error<>0 GOTO ABORT;
471
		FETCH NEXT FROM XmlDataOutsideRec INTO  @MAKER_ID_KT, @CHANEL_PAYMENT_ID, @CITAD1_ID, @BANK_RECEIVE_ID, @OBJECT_RECEIVE_ID, 
472
		@BRANCH_RECEIVE_ID, @BRANCH_RECEIVE_NAME, @ACC_NO_RECEIVE, @TRADE_AMT, @TRADE_DESC, @SUB_BANK_RECEIVE_NAME, @ENTRY_PAIR, @REF_NO
473
	END;
474
	CLOSE XmlDataOutsideRec;
475
	DEALLOCATE XmlDataOutsideRec;
476
--- END INSERT đơn vị nhận
477

    
478

    
479
COMMIT TRANSACTION
480
-- BEGIN VALIDATE SEND APPROVE
481
	IF(@p_TYPE_FUNCTION ='SEND')-- BAT DAU GUI PHE DUYET
482
	BEGIN
483
		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'))
484
		BEGIN
485
			SELECT '-1' as Result, '' REQ_PAY_ID, N'Bạn không được phép gửi phê duyệt phiếu đề nghị tạm ứng này. Phiếu đề nghị tạm ứng đang được điều phối cho giao dịch viên khác xử lý' ErrorDesc
486
			RETURN '-1'
487
		END
488
		IF ((SELECT AUTH_STATUS FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID = @p_REQ_PAY_ID) ='R')
489
		BEGIN
490
			SELECT '-1' Result,'' REQ_PAY_ID,N'Phiếu đề nghị tạm ứng đ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
491
			RETURN '-1'
492
		END
493
		IF ( EXISTS (SELECT AUTH_STATUS FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID = @p_REQ_PAY_ID AND AUTH_STATUS <> 'A'))
494
		BEGIN
495
			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
496
			RETURN '-1'
497
		END
498
		IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND AUTH_STATUS_KT = 'A'))
499
		BEGIN
500
			SELECT '-1' as Result, '' REQ_PAY_ID, N'Phiếu đề nghị tạm ứng đã được phê duyệt kế toán thành công trước đó!' ErrorDesc
501
			RETURN '-1'
502
		END
503
		IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND AUTH_STATUS_KT = 'P'))
504
		BEGIN
505
			SELECT '-1' as Result, '' REQ_PAY_ID, N'Phiếu đề nghị tạm ứng đã được gửi phê duyệt thành công trước đó! Vui lòng đợi KSV xử lý phiếu' ErrorDesc
506
			RETURN '-1'
507
		END
508
		IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND AUTH_STATUS_KT = 'S'))
509
		BEGIN
510
			SELECT '-1' as Result, '' REQ_PAY_ID, N'Phiếu đề nghị tạm ứng đang được đề xuất từ chối! Vui lòng đợi KSV xử lý phiếu' ErrorDesc
511
			RETURN '-1'
512
		END
513

    
514
	-- BEGIN VALIDATE LUOI HACH TOAN
515
		IF(@p_XMP_TEMP_DATA_ENTRIES IS NOT NULL)
516
		BEGIN
517
			-- CHAN NEU CHI CO 1 BUT NO 1 BUT CO THI KHONG DUOC DI TIEP
518
			IF(EXISTS(SELECT * FROM TR_REQ_PAY_ENTRIES WHERE REQ_PAY_ID =@p_REQ_PAY_ID))
519
			BEGIN
520
				DECLARE  @SUM_CR DECIMAL(18,2), @SUM_DR DECIMAL(18,2)
521
				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)
522
				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)
523
				IF(@SUM_CR<>@SUM_DR)
524
				BEGIN
525
					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
526
					RETURN '-1'
527
				END
528
			END
529
				
530
			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
531
			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
532

    
533
			Open cursorProduct
534
			FETCH NEXT FROM cursorProduct INTO @REQ_PAY_ID , @ET_ID, @AMT_ET, @ACC_ET , @DRCR_ET
535
			WHILE @@FETCH_STATUS = 0
536
			BEGIN
537
				--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Ợ
538
				IF((SELECT COUNT (*) FROM TR_REQ_PAY_ENTRIES WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND ENTRY_PAIR =@ET_ID AND DR_CR ='D') >1 AND 
539
						(SELECT COUNT (*) FROM TR_REQ_PAY_ENTRIES WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND ENTRY_PAIR =@ET_ID AND DR_CR ='C') >1)
540
				BEGIN
541
					CLOSE cursorProduct;	
542
					DEALLOCATE cursorProduct;
543
					SELECT '-1' as Result, '' REQ_PAY_ID, N'Mã bút toán số '+ @ET_ID+ 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
544
					RETURN '-1'
545
				END
546
				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))
547
				BEGIN
548
					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)
549
					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))
550
					BEGIN
551
						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
552
						RETURN '-1'
553
					END
554
				END
555
				-- KIEM TRA SO TIEN NO CO
556
				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))
557
				BEGIN
558
					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
559
					RETURN '-1'
560
				END
561
				FETCH NEXT FROM cursorProduct INTO  @REQ_PAY_ID , @ET_ID, @AMT_ET, @ACC_ET , @DRCR_ET
562
			END -- END WHILE		
563
		END 
564
	-- END VALIDATE LUOI HACH TOAN
565
		UPDATE PL_REQUEST_PROCESS_CHILD SET STATUS_JOB ='P' WHERE REQ_ID=@p_REQ_PAY_ID AND TLNAME=@p_MAKER_ID_KT
566
		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)
567
		-- CAP NHAT TINH TRANG VE DANG XU LY
568
		UPDATE TR_REQ_ADVANCE_PAYMENT SET AUTH_STATUS_KT='P',CREATE_DT_KT =GETDATE() WHERE REQ_PAY_ID=@p_REQ_PAY_ID
569
		-- DOANPTT 291222: THEM LOG KPI
570
		UPDATE TR_REQ_KPI 
571
		SET AUTH_STATUS_KT ='P', CREATE_DT_KT = GETDATE(),MAKER_ID_KT =@p_MAKER_ID_KT, CORE_NOTE = @p_CONFIRM_NOTES, REQ_REASON = @p_REQ_REASON
572
		WHERE REQ_ID =@p_REQ_PAY_ID AND AUTH_STATUS_KT = 'U'
573
		
574
		INSERT INTO dbo.PL_PROCESS(REQ_ID,PROCESS_ID,CHECKER_ID,APPROVE_DT,PROCESS_DESC,NOTES)
575
		VALUES(@p_REQ_PAY_ID,'SEND',@p_MAKER_ID_KT,GETDATE(), N'Giao dịch viên gửi phê duyệt phiếu',N'Giao dịch viên cập nhật thông tin')
576
		
577
		SELECT '4' as Result, '' REQ_PAY_ID, N'Phiếu đề nghị tạm ứng số: '+(SELECT REQ_PAY_CODE FROM TR_REQ_ADVANCE_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
578
		RETURN '4'
579
	END -- END TYPE_FUNCTION
580
-- END VALIDATE SEND APPROVE
581

    
582
SELECT '0' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, '' ErrorDesc
583
RETURN '0'
584
ABORT:
585
BEGIN
586
		ROLLBACK TRANSACTION
587
		CLOSE XmlDataEntries;
588
		DEALLOCATE XmlDataEntries;
589
		SELECT '-1' as Result, '' REQ_PAY_ID, '' ErrorDesc
590
		RETURN '-1'
591
End
592

    
593
GO
594

    
595
ALTER PROCEDURE [dbo].[TR_REQ_PAYMENT_KT_Upd]
596
@p_REQ_PAY_ID	varchar(15)= NULL,
597
@p_REQ_PAY_CODE	varchar(50)	= NULL,
598
@p_REQ_DT VARCHAR(20)= NULL,
599
@p_BRANCH_ID	varchar(15)	= NULL,
600
@p_DEP_ID	varchar(15)	= NULL,
601
@p_REQ_REASON	nvarchar(MAX)	= NULL,
602
@p_REQ_TYPE	varchar(15)	= NULL,
603
@P_REQ_ENTRIES nvarchar(MAX)	= NULL,
604
@p_REQ_DESCRIPTION	nvarchar(MAX)	= NULL,
605
@p_REF_ID	varchar(15)	= NULL,
606
@p_RECEIVER_PO	nvarchar(250)	= NULL,
607
@p_REQ_PAY_TYPE	varchar(15)	= NULL,
608
@p_REQ_TYPE_CURRENCY	nvarchar(50)	= NULL,
609
@p_RATE	DECIMAL(18,2) = NULL,
610
@p_REQ_AMT	decimal(18, 0)	= NULL,
611
@p_REQ_TEMP_AMT	decimal(18, 0)	= NULL,
612
@p_MAKER_ID	varchar(15)	= NULL,
613
@p_CREATE_DT	varchar(25)	= NULL,
614
@p_EDITOR_ID	varchar(15)	= NULL,
615
@p_AUTH_STATUS	varchar(1)	= NULL,
616
@p_CHECKER_ID	varchar(15)	= NULL,
617
@p_APPROVE_DT	varchar(25)	= NULL,
618
@p_CREATE_DT_KT	varchar(25)	= NULL,
619
@p_MAKER_ID_KT	varchar(15)	= NULL,
620
@p_AUTH_STATUS_KT	varchar(1)	= NULL,
621
@p_CHECKER_ID_KT	varchar(1)	= NULL,
622
@p_APPROVE_DT_KT  varchar(25)= null,
623
@p_CONFIRM_NOTE	nvarchar(500)	= NULL,
624
@p_BRANCH_CREATE	varchar(15)	= NULL,
625
@p_NOTES	varchar(15)	= NULL,
626
@p_RECORD_STATUS	varchar(1)	= NULL,
627
@p_TRANSFER_MAKER	nvarchar(50)	= NULL,
628
@p_TRANSFER_DT	varchar(25)	= NULL,
629
@p_TRASFER_USER_RECIVE	varchar(15)	= NULL,
630
@p_PROCESS	varchar(15)	= NULL,
631
@p_PAY_PHASE VARCHAR(15) = NULL,
632
@p_IS_SEND_APPR VARCHAR(15) = NULL,
633
@p_XMP_TEMP_DATA_ENTRIES XML = NULL,
634
@p_XMP_TEMP_INVOICE XML = NULL,
635
@p_XMP_TEMP_VAT_INVOICE XML = NULL,
636
--doanptt 14/03/2022
637
@p_XMP_TEMP_DATA_TRANSFER_OUTSIDE_TRANS XML = NULL,
638
@p_XMP_TEMP_DATA_TRANSFER_OUTSIDE_REC XML = NULL
639
AS
640

    
641
-- BEGIN VALIDATE UPDATE
642
	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'))
643
	BEGIN
644
		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
645
		RETURN '-1'
646
	END
647
	IF ((SELECT AUTH_STATUS FROM TR_REQ_PAYMENT WHERE REQ_PAY_ID = @p_REQ_PAY_ID) ='R')
648
	BEGIN
649
		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
650
		RETURN '-1'
651
	END
652
	IF(EXISTS(SELECT * FROM TR_REQ_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND AUTH_STATUS_KT = 'A'))
653
	BEGIN
654
		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
655
		RETURN '-1'
656
	END
657
	IF(EXISTS(SELECT * FROM TR_REQ_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND AUTH_STATUS_KT = 'P'))
658
	BEGIN
659
		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
660
		RETURN '-1'
661
	END
662
	IF(EXISTS(SELECT * FROM TR_REQ_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND AUTH_STATUS_KT = 'S'))
663
	BEGIN
664
		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
665
		RETURN '-1'
666
	END
667
-- END VALIDATE UPDATE
668

    
669
	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),
670
		@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)
671
	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,
672
		@INVOICE_NO nvarchar(50) = NULL,@INVOICE_DT VARCHAR(20) = NULL,@SELLER nvarchar(250) = NULL,@TAX_NO nvarchar(15) = NULL,@GOODS_NAME nvarchar(250) = NULL,
673
		@PRICE decimal(18, 0) = NULL,@TAX decimal(18, 0) = NULL,@NOTES NVARCHAR(MAX) = NULL,@VAT_RATE decimal(18,2),
674
		@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,
675
		@TYPE_VAT VARCHAR(15),@TYPE_FUNC VARCHAR(15), @IS_TRANSFER_EXTERNAL VARCHAR(15)
676
	DECLARE @hdoc INT;
677
	DECLARE @hdocInvoice INT;
678
	DECLARE @hdocVATInvoice INT;
679
	EXEC sp_xml_preparedocument @hdoc OUTPUT, @p_XMP_TEMP_DATA_ENTRIES;
680
	EXEC sp_xml_preparedocument @hdocInvoice OUTPUT, @p_XMP_TEMP_INVOICE;
681
	EXEC sp_xml_preparedocument @hdocVATInvoice OUTPUT, @p_XMP_TEMP_VAT_INVOICE;
682
	
683
	--hoa don khong co VAT
684
	DECLARE XmlData CURSOR FOR
685
	SELECT * FROM OPENXML(@hdocInvoice, '/Root/XmlData', 2)
686
			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),
687
			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),
688
			VAT_KT DECIMAL(18,2),TOTAL_AMT_KT DECIMAL(18,2),TYPE_VAT VARCHAR(15), TYPE_FUNC VARCHAR(15))
689

    
690
	OPEN XmlData
691
	DECLARE @INDEX INT  =0, @INDEX_IV INT =0, @INDEX_VAT INT =0, @INDEX_REC INT = 0;
692

    
693
	BEGIN TRANSACTION
694
		-- KHAI BAO CAC BUOC DUYET- XAC NHAN
695
		DECLARE @LEVEL_JOB VARCHAR(5), @LEVEL_JOB_PREV INT
696
		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')
697
		SET @LEVEL_JOB_PREV = CONVERT(INT,@LEVEL_JOB) -1
698

    
699
		UPDATE TR_REQ_PAYMENT 
700
		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
701
		WHERE REQ_PAY_ID =@p_REQ_PAY_ID
702
		-- DOANPTT 291222: THEM LOG KPI
703
		UPDATE TR_REQ_KPI 
704
		SET AUTH_STATUS_KT ='U', CREATE_DT_KT = GETDATE(),MAKER_ID_KT =@p_MAKER_ID_KT, CORE_NOTE = @p_CONFIRM_NOTE, REQ_REASON = @p_REQ_REASON
705
		WHERE REQ_ID =@p_REQ_PAY_ID AND AUTH_STATUS_KT = 'U'
706

    
707
------------------------------------------------------------------------- BEGIN LUOI HACH TOAN -----------------------------------------------------------------------
708
		IF(@p_XMP_TEMP_DATA_ENTRIES IS NOT NULL)
709
		BEGIN
710
			-- hach toan
711
			DECLARE XmlDataEntries CURSOR FOR
712
			SELECT * FROM OPENXML(@hdoc, '/Root/XmlDataEntries', 2)
713
					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),
714
					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))
715
			OPEN XmlDataEntries;
716

    
717
			DELETE FROM TR_REQ_PAY_ENTRIES WHERE REQ_PAY_ID = @p_REQ_PAY_ID
718
			IF @@Error <> 0 GOTO ABORT
719
			DECLARE @DR_CR_NAME NVARCHAR(50),@ACC_NAME_FN NVARCHAR(500)
720
			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
721
			WHILE @@fetch_status=0 
722
			BEGIN
723

    
724
				IF(@EXC_RATE IS NULL)
725
				BEGIN
726
					SET @EXC_RATE = 1
727
				END
728

    
729
				SET @INDEX = @INDEX +1
730
				SET @ACC_NAME =UPPER(dbo.fChuyenCoDauThanhKhongDau(@ACCT_NAME))
731

    
732
				-- NEU TEN TAI KHOAN RONG, THI LAY TEN TU CHECK CASA
733
				IF(ISNULL(@GL_CODE, '') <> '')
734
				BEGIN
735
					SET @ACC_NAME = STUFF(@GL_CODE, LEN(@GL_CODE)-8, 9, '')
736
					SET @ACCT_NAME = STUFF(@GL_CODE, LEN(@GL_CODE)-8, 9, '')
737
				END
738
				-- NEU SO TAI KHOAN RONG, THI LAY SO TAI KHOAN TU CHECK CASA
739
				SET @GL_CODE = RIGHT(@GL_CODE,9)
740
				IF(ISNULL(@ACCT, '') = '' AND ISNULL(@GL_CODE_ACCNO, '') <> '')
741
				BEGIN
742
					SET @ACCT = @GL_CODE_ACCNO
743
				END
744

    
745
				IF(@DR_CR='D')
746
				BEGIN
747
					SET @DR_CR_NAME =N'Nợ'
748
				END
749
				ELSE
750
				BEGIN
751
					SET @DR_CR_NAME =N'Có'
752
				END
753

    
754
				SET @BRANCH_CODE =(SELECT TOP 1 BRANCH_CODE FROM CM_BRANCH WHERE BRANCH_ID =@BRANCH_ID)
755
				SET @DEP_CODE =(SELECT TOP 1 DEP_CODE FROM CM_DEPARTMENT WHERE DEP_ID =@DEP_ID)
756
	
757
				IF(@p_IS_SEND_APPR = 'Y')
758
				BEGIN
759
				
760
				print '@ENTRY_PAIR: ' + @ENTRY_PAIR
761
				print 'req_pay_id: ' + @p_REQ_PAY_ID
762
					IF(@ENTRY_PAIR IS NULL OR @ENTRY_PAIR ='')
763
					BEGIN
764
						ROLLBACK TRANSACTION
765
						CLOSE XmlDataEntries;
766
						DEALLOCATE XmlDataEntries;
767
						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
768
						RETURN '-1'
769
					END
770

    
771
					IF(@DR_CR IS NULL OR @DR_CR ='')
772
					BEGIN
773
						ROLLBACK TRANSACTION
774
						CLOSE XmlDataEntries;
775
						DEALLOCATE XmlDataEntries;
776
						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
777
						RETURN '-1'
778
					END
779

    
780
					IF(@ACCT IS NULL OR @ACCT ='')
781
					BEGIN
782
						ROLLBACK TRANSACTION
783
						CLOSE XmlDataEntries;
784
						DEALLOCATE XmlDataEntries;
785
						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
786
						RETURN '-1'
787
					END
788

    
789
					IF(@ACCT_NAME IS NULL OR @ACCT_NAME ='')
790
					BEGIN
791
						ROLLBACK TRANSACTION
792
						CLOSE XmlDataEntries;
793
						DEALLOCATE XmlDataEntries;
794
						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
795
						RETURN '-1'
796
					END
797

    
798
					IF(@AMT IS NULL OR @AMT < 0)
799
					BEGIN
800
					ROLLBACK TRANSACTION
801
							CLOSE XmlDataEntries;	
802
							DEALLOCATE XmlDataEntries;
803
							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
804
							RETURN '-1'
805
					END
806

    
807
					IF(@BRANCH_ID IS NULL OR @BRANCH_ID ='')
808
					BEGIN
809
						ROLLBACK TRANSACTION
810
						CLOSE XmlDataEntries;
811
						DEALLOCATE XmlDataEntries;
812
						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
813
						RETURN '-1'
814
					END
815

    
816
					IF(@TRN_DESC IS NULL OR @TRN_DESC ='')
817
					BEGIN
818
						ROLLBACK TRANSACTION
819
						CLOSE XmlDataEntries;
820
						DEALLOCATE XmlDataEntries;
821
						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
822
						RETURN '-1'
823
					END
824

    
825
					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)
826
					BEGIN
827
						ROLLBACK TRANSACTION
828
						CLOSE XmlDataEntries;
829
						DEALLOCATE XmlDataEntries;
830
						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
831
						RETURN '-1'
832
					END
833

    
834
					IF(@GL_CODE IS NULL OR @GL_CODE ='')
835
					BEGIN
836
						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) =''))
837
						BEGIN
838
							ROLLBACK TRANSACTION
839
							CLOSE XmlDataEntries;
840
							DEALLOCATE XmlDataEntries;
841
							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
842
							RETURN '-1'
843
						END
844
					END
845

    
846
					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)
847
					BEGIN
848
						ROLLBACK TRANSACTION
849
						CLOSE XmlDataEntries;
850
						DEALLOCATE XmlDataEntries;
851
						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
852
						RETURN '-1'
853
					END
854

    
855
					IF(@DEP_ID IS NOT NULL AND @DEP_ID <> '' AND (LEFT(@DEP_CODE,3) <> @BRANCH_CODE))
856
					BEGIN
857
					ROLLBACK TRANSACTION
858
							CLOSE XmlDataEntries;	
859
							DEALLOCATE XmlDataEntries;
860
							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
861
							RETURN '-1'
862
					END
863

    
864
					-- NEU HACH TOAN CASA THI 3 KI TU DAU PHAI KHOP VOI BRANCH CODE CUA DON VI CHIU CHI PHI
865
					IF(LEN(@ACCT) >9 AND (SUBSTRING(@ACCT,1,3) <> (SELECT ISNULL(BRANCH_CODE,'') FROM CM_BRANCH WHERE BRANCH_ID = @BRANCH_ID)))
866
					BEGIN
867
						ROLLBACK TRANSACTION
868
						CLOSE XmlDataEntries;	
869
						DEALLOCATE XmlDataEntries;
870
						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
871
						RETURN '-1'
872
					END
873

    
874
					--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'))
875
					--BEGIN
876
					--	IF(@ACCT ='353200002' OR @ACCT ='353200001')
877
					--	BEGIN
878
					--		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
879
					--		RETURN '-1'
880
					--	END
881
					--END select * from TR_REQ_PAY_ENTRIES
882

    
883
					--doanptt 20/04/2022
884
					IF(@ACCT = '353200002')
885
					BEGIN
886
						IF(NOT EXISTS(SELECT * FROM OPENXML(@hdocVATInvoice, '/Root/XmlVATInvoice', 2)))
887
						BEGIN
888
							ROLLBACK TRANSACTION
889
							CLOSE XmlDataEntries;	
890
							DEALLOCATE XmlDataEntries;
891
							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
892
							RETURN '-1'
893
						END
894
					END
895
					
896
					/*
897
					-- DOANPTT 11/11/22: BỔ SUNG TRƯỜNG HỢP BỊ KHUẤT CHÂN NỢ HOẶC CHÂN CÓ
898
					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 
899
							(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)
900
					BEGIN
901
						ROLLBACK TRANSACTION
902
						CLOSE XmlDataEntries;	
903
						DEALLOCATE XmlDataEntries;
904
						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
905
						RETURN '-1'
906
					END
907

    
908
					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 
909
							(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)
910
					BEGIN
911
						ROLLBACK TRANSACTION
912
						CLOSE XmlDataEntries;	
913
						DEALLOCATE XmlDataEntries;
914
						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
915
						RETURN '-1'
916
					END
917
					*/
918
					
919

    
920
					
921
				END -- END IF VALIDATE
922
				/*
923
				IF(@ACCT = '353200002')
924
					BEGIN
925
						DECLARE @SUMVAT DECIMAL(18,0) = 0
926
						DECLARE @SUM3532 DECIMAL(18,0) = 0
927
						DECLARE @tmp3532 TABLE(
928
						AMT DECIMAL(18,0),
929
						ACCT VARCHAR(20)
930
						)
931
						INSERT INTO @tmp3532 SELECT * FROM OPENXML(@hdoc, '/Root/XmlDataEntries', 2) WITH(AMT DECIMAL(18, 0), ACCT VARCHAR(20))
932
						SET @SUM3532 = (SELECT SUM(AMT) FROM @tmp3532 WHERE ACCT = '353200002')
933
						SET @SUMVAT = (SELECT SUM(VAT) FROM OPENXML(@hdocVATInvoice, '/Root/XmlVATInvoice', 2) WITH(VAT DECIMAL(18, 0)))
934
						
935
						IF(@SUM3532 <> @SUMVAT)
936
						BEGIN
937
							ROLLBACK TRANSACTION
938
							CLOSE XmlDataEntries;	
939
							DEALLOCATE XmlDataEntries;
940
							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
941
							RETURN '-1'
942
						END
943
					END
944
					*/
945
	
946
				DECLARE @p_ET_ID VARCHAR(15);
947
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_ENTRIES', @p_ET_ID OUT;
948
				IF @p_ET_ID='' OR @p_ET_ID IS NULL GOTO ABORT;
949

    
950
				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)
951
				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)
952

    
953
				-- NEU CHUA CO TAI KHOAN THI THEM VO CM_ACCOUNT
954
				IF(NOT EXISTS(SELECT * FROM CM_ACCOUNT WHERE ACC_NO =@ACCT))
955
				BEGIN
956
					INSERT INTO CM_ACCOUNT (ACC_NO, ACC_NAME, TK_GL, TK_GL_NAME, MAKER_ID, CHECKER_ID,CREATE_DT) VALUES
957
					(@ACCT,@ACCT_NAME,@GL_CODE,(SELECT TOP 1 ACC_NAME FROM CM_ACCOUNT WHERE ACC_NO =@GL_CODE),'admin','admin',GETDATE())
958
				END
959
				ELSE
960
				BEGIN
961
					IF(@GL_CODE IS NOT NULL AND @GL_CODE <> '' AND @GL_CODE <> '0')
962
						BEGIN
963
							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), EDITOR_DT = GETDATE()
964
							WHERE ACC_NO=@ACCT
965
					END
966
					--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()
967
					--WHERE ACC_NO=@ACCT
968
				END
969
				IF @@error<>0 GOTO ABORT;
970
				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
971
			END;--END WHILE
972
			CLOSE XmlDataEntries;
973
			DEALLOCATE XmlDataEntries;
974
		END--END LUOI HACH TOAN
975
------------------------------------------------------------------------------------------ END LUOI HACH TOAN --------------------------------------------------------------------
976

    
977
--INSERT XMLDATAENTRIES
978
		-- CAP NHAT TAI KHOAN GL
979

    
980
		--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,'') ='')
981
		-- CAP NHAT TAI KHOAN GL
982

    
983
-- INSERT LUOI HOA DON KHONG VAT
984
	
985
		DECLARE @PDN_TT_LIST_INVOICE NVARCHAR(1000)
986
		DELETE FROM TR_REQ_PAY_INVOICE WHERE REQ_PAY_ID= @p_REQ_PAY_ID
987
		FETCH NEXT FROM XmlData  INTO @TRANS_NO , @TRANS_DT  ,@INVOICE_SIGN ,@INVOICE_NO_SIGN,@INVOICE_NO ,@INVOICE_DT ,@SELLER ,
988
		@TAX_NO ,@GOODS_NAME ,@PRICE ,@TAX,@VAT,@NOTES,@VAT_RATE,@CURRENCY,@RATE,@PRICE_KT ,@VAT_KT,@TOTAL_AMT_KT,@TYPE_VAT,@TYPE_FUNC
989
		WHILE @@FETCH_STATUS=0 BEGIN
990
			SET @INDEX_IV = @INDEX_IV+1
991
				IF(@TYPE_FUNC ='HC')
992
				BEGIN
993
					SET @PDN_TT_LIST_INVOICE = (select STUFF( (select '; ' + DTA.REQ_PAY_CODE FROM TR_REQ_PAYMENT DTA WHERE REQ_PAY_ID IN 
994
					(SELECT REQ_PAY_ID FROM TR_REQ_PAY_INVOICE WHERE INVOICE_NO =@INVOICE_NO AND INVOICE_NO_SIGN = @INVOICE_NO_SIGN AND INVOICE_SIGN =@INVOICE_SIGN AND TAX_NO =@TAX_NO AND TAX =@TAX 
995
					AND AUTH_STATUS <>'D' AND TYPE_FUNC ='HC'
996
					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')))
997
					FOR XML PATH(''), TYPE).value('.[1]', 'nvarchar(max)'), 1, 2, ''))
998
					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 
999
					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'))))
1000

    
1001
					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 
1002
					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'))))
1003
					BEGIN
1004
						ROLLBACK TRANSACTION
1005
						CLOSE XmlData;
1006
						DEALLOCATE XmlData;
1007
						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. Số phiếu: '+ISNULL(@PDN_TT_LIST_INVOICE,'') ErrorDesc
1008
						RETURN '-1'
1009
					END	
1010
				END
1011
			DECLARE @p_REQ_INV_ID VARCHAR(15);
1012
			EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_INVOICE', @p_REQ_INV_ID OUT;
1013
			IF @p_REQ_INV_ID='' OR @p_REQ_INV_ID IS NULL GOTO ABORT;
1014

    
1015
		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,
1016
		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) 
1017
		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,
1018
		@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')
1019
		
1020
		IF @@error<>0 GOTO ABORT;
1021
		FETCH NEXT FROM XmlData 
1022
		INTO @TRANS_NO , @TRANS_DT,@INVOICE_SIGN,@INVOICE_NO_SIGN,@INVOICE_NO ,@INVOICE_DT ,@SELLER ,@TAX_NO ,@GOODS_NAME ,@PRICE ,
1023
		@TAX,@VAT,@NOTES,@VAT_RATE,@CURRENCY,@RATE,@PRICE_KT ,@VAT_KT,@TOTAL_AMT_KT,@TYPE_VAT,@TYPE_FUNC
1024
		END;
1025
		CLOSE XmlData;
1026
		DEALLOCATE XmlData;
1027

    
1028
-- BEGIN HOA DON CO VAT
1029
		IF(@p_XMP_TEMP_VAT_INVOICE IS NOT NULL)
1030
		BEGIN
1031
			-- hoa don co VAT
1032
			DECLARE XmlVATInvoice CURSOR FOR
1033
			SELECT *
1034
			FROM
1035
			OPENXML(@hdocVATInvoice, '/Root/XmlVATInvoice', 2)
1036
			WITH(TRANS_NO nvarchar(50),TRANS_DT VARCHAR(20),INVOICE_SIGN nvarchar(50),INVOICE_NO_SIGN nvarchar(50),
1037
				 INVOICE_NO nvarchar(50),INVOICE_DT VARCHAR(20) ,SELLER nvarchar(250),TAX_NO nvarchar(15),GOODS_NAME nvarchar(250) ,
1038
				 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))
1039
			OPEN XmlVATInvoice
1040

    
1041
			-- CAP NHAT HOA DON CO VAT
1042
			FETCH NEXT FROM XmlVATInvoice  INTO @TRANS_NO , @TRANS_DT  ,@INVOICE_SIGN ,@INVOICE_NO_SIGN,@INVOICE_NO ,@INVOICE_DT ,@SELLER ,
1043
			@TAX_NO ,@GOODS_NAME ,@PRICE ,@TAX,@VAT,@NOTES,@VAT_RATE,@CURRENCY,@RATE,@PRICE_KT ,@VAT_KT,@TOTAL_AMT_KT,@TYPE_VAT,@TYPE_FUNC
1044
			WHILE @@fetch_status=0 BEGIN
1045
				SET @INDEX_VAT = @INDEX_VAT+1
1046

    
1047
				SET @PDN_TT_LIST_INVOICE = (select STUFF( (select '; ' + DTA.REQ_PAY_CODE FROM TR_REQ_PAYMENT DTA WHERE REQ_PAY_ID IN 
1048
				(SELECT REQ_PAY_ID FROM TR_REQ_PAY_INVOICE WHERE INVOICE_NO =@INVOICE_NO AND INVOICE_NO_SIGN = @INVOICE_NO_SIGN AND INVOICE_SIGN =@INVOICE_SIGN AND TAX_NO =@TAX_NO AND TAX =@TAX 
1049
				AND AUTH_STATUS <>'D' AND TYPE_FUNC ='KT'
1050
				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')))
1051
				FOR XML PATH(''), TYPE).value('.[1]', 'nvarchar(max)'), 1, 2, ''))
1052
				IF(EXISTS(SELECT * FROM TR_REQ_PAY_INVOICE WHERE INVOICE_NO =@INVOICE_NO AND INVOICE_NO_SIGN = @INVOICE_NO_SIGN 
1053
										AND INVOICE_SIGN =@INVOICE_SIGN AND TAX_NO =@TAX_NO AND TAX =@TAX AND TYPE_FUNC ='KT' AND AUTH_STATUS <>'D' AND
1054
										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'))))
1055

    
1056
				--IF(@TYPE_FUNC ='KT')
1057
				--BEGIN
1058
					IF(EXISTS(SELECT REQ_PAYDT_ID FROM TR_REQ_PAY_INVOICE 
1059
									   WHERE INVOICE_NO =@INVOICE_NO 
1060
											AND INVOICE_NO_SIGN = @INVOICE_NO_SIGN 
1061
											AND INVOICE_SIGN =@INVOICE_SIGN 
1062
											AND TAX_NO =@TAX_NO 
1063
											AND TAX =@TAX 
1064
											AND TYPE_FUNC = 'KT' 
1065
											AND AUTH_STATUS <>'D' 
1066
											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'))
1067
							  )
1068
					   )
1069
					BEGIN
1070
						ROLLBACK TRANSACTION
1071
						CLOSE XmlVATInvoice;
1072
						DEALLOCATE XmlVATInvoice;
1073
						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. Số phiếu: '+ISNULL(@PDN_TT_LIST_INVOICE,'') ErrorDesc
1074
						RETURN '-1'
1075
					END	
1076
				--END
1077
				--doanptt 20/04/2022
1078
				/*
1079
				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'))
1080
				BEGIN
1081
					ROLLBACK TRANSACTION
1082
					CLOSE XmlVATInvoice;	
1083
					DEALLOCATE XmlVATInvoice;
1084
					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
1085
					RETURN '-1'
1086
				END
1087
				*/
1088
					
1089
				DECLARE @p_REQ_INV_VAT_ID VARCHAR(15);
1090
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_INVOICE', @p_REQ_INV_VAT_ID OUT;
1091
				IF @p_REQ_INV_VAT_ID='' OR @p_REQ_INV_VAT_ID IS NULL GOTO ABORT;
1092
				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,
1093
				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,
1094
				TOTAL_AMT_KT,TYPE_VAT,TYPE_FUNC) 
1095
				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 ,
1096
				@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,
1097
				@TYPE_VAT,'KT')
1098
			IF @@error<>0 GOTO ABORT;
1099

    
1100
			FETCH NEXT FROM XmlVATInvoice 
1101
			INTO @TRANS_NO , @TRANS_DT,@INVOICE_SIGN,@INVOICE_NO_SIGN,@INVOICE_NO ,@INVOICE_DT ,@SELLER ,@TAX_NO ,@GOODS_NAME ,@PRICE ,
1102
			@TAX,@VAT,@NOTES,@VAT_RATE,@CURRENCY,@RATE,@PRICE_KT ,@VAT_KT,@TOTAL_AMT_KT,@TYPE_VAT,@TYPE_FUNC
1103
			END;
1104
			CLOSE XmlVATInvoice;
1105
			DEALLOCATE XmlVATInvoice;
1106
		END
1107
-- END HOA DON CO VAT
1108

    
1109

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

    
1114
	DECLARE  @MAKER_ID_KT VARCHAR(15), @TYPE_TRANSFER_ID VARCHAR(15), @PRODUCT_ID VARCHAR(15), @OBJECT_TRANSFER_ID VARCHAR(15), 
1115
				@ACC_NO_TRANSFER VARCHAR(255), @BRANCH_TRANSFER_ID VARCHAR(15), @BRANCH_TRANFSER_NAME NVARCHAR(255)
1116
-- BEGIN INSERT đơn vị chuyển
1117
				DELETE FROM TR_REQ_PAY_TRANS_OUTSIDE_TRANS WHERE REQ_PAY_ID = @p_REQ_PAY_ID
1118
				DECLARE XmlDataOutsideTrans CURSOR LOCAL FOR
1119
				SELECT * FROM OPENXML(@hdocOutsideTrans, 'Root/XmlDataTransferOutside',2) 
1120
				WITH(MAKER_ID VARCHAR(15), TYPE_TRANSFER_ID VARCHAR(15), PRODUCT_ID VARCHAR(15), OBJECT_TRANSFER_ID VARCHAR(15), BRANCH_ID VARCHAR(15), 
1121
				ACC_NO_TRANSFER VARCHAR(255), BRANCH_TRANSFER_ID VARCHAR(15), CURRENCY VARCHAR(15), BRANCH_TRANFSER_NAME NVARCHAR(255))
1122
				OPEN XmlDataOutsideTrans
1123

    
1124

    
1125
				FETCH NEXT FROM XmlDataOutsideTrans INTO @MAKER_ID_KT , @TYPE_TRANSFER_ID, @PRODUCT_ID, @OBJECT_TRANSFER_ID, @BRANCH_ID, 
1126
				@ACC_NO_TRANSFER, @BRANCH_TRANSFER_ID, @CURRENCY, @BRANCH_TRANFSER_NAME
1127
				WHILE @@fetch_status=0 
1128
				BEGIN
1129
					--IF(@p_REQ_PAY_ID <> NULL)
1130
					--BEGIN
1131
						DECLARE @p_TR_REQ_TRANS_OUTSIDE_ID VARCHAR(15);
1132
						EXEC SYS_CodeMasters_Gen 'TR_REQ_OUTSIDE_TRANS', @p_TR_REQ_TRANS_OUTSIDE_ID OUT;
1133
						IF @p_TR_REQ_TRANS_OUTSIDE_ID='' OR @p_TR_REQ_TRANS_OUTSIDE_ID IS NULL GOTO ABORT;
1134
						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 , 
1135
						BRANCH_TRANFSER_NAME,TYPE_TRANSFER_ID , PRODUCT_ID , OBJECT_TRANSFER_ID , BRANCH_ID, ACC_NO_TRANSFER , BRANCH_TRANSFER_ID)
1136
						VALUES (@p_TR_REQ_TRANS_OUTSIDE_ID ,@p_REQ_PAY_ID ,@p_MAKER_ID_KT , GETDATE(), NULL , NULL, 
1137
						@BRANCH_TRANFSER_NAME, @TYPE_TRANSFER_ID , @PRODUCT_ID , @OBJECT_TRANSFER_ID , @BRANCH_ID, @ACC_NO_TRANSFER , @BRANCH_TRANSFER_ID)
1138
					--END
1139

    
1140
					IF @@error<>0 GOTO ABORT;
1141
					FETCH NEXT FROM XmlDataOutsideTrans INTO @MAKER_ID_KT , @TYPE_TRANSFER_ID, @PRODUCT_ID, @OBJECT_TRANSFER_ID, @BRANCH_ID, 
1142
					@ACC_NO_TRANSFER, @BRANCH_TRANSFER_ID, @CURRENCY, @BRANCH_TRANFSER_NAME
1143
				END;
1144
				CLOSE XmlDataOutsideTrans;
1145
				DEALLOCATE XmlDataOutsideTrans;
1146
--- END INSERT đơn vị chuyển
1147

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

    
1153
	DECLARE @CHANEL_PAYMENT_ID VARCHAR(15), @CITAD1_ID VARCHAR(15), @BANK_RECEIVE_ID VARCHAR(250), @OBJECT_RECEIVE_ID VARCHAR(15), 
1154
				@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)
1155
-- INSERT đơn vị nhận
1156
				DELETE FROM TR_REQ_PAY_TRANS_OUTSIDE_REC WHERE REQ_PAY_ID = @p_REQ_PAY_ID
1157

    
1158
				DECLARE XmlDataOutsideRec CURSOR LOCAL FOR
1159
				SELECT * FROM OPENXML(@hdocOutsideRec, 'Root/XmlDataTransferOutside',2) 
1160
				WITH(MAKER_ID VARCHAR(15), CHANEL_PAYMENT_ID VARCHAR(15), CITAD1_ID VARCHAR(15), BANK_RECEIVE_ID VARCHAR(250), OBJECT_RECEIVE_ID VARCHAR(15), 
1161
				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),  
1162
				ENTRY_PAIR varchar(20), REF_NO varchar(20)) 
1163
				OPEN XmlDataOutsideRec
1164

    
1165
				FETCH NEXT FROM XmlDataOutsideRec INTO @MAKER_ID_KT, @CHANEL_PAYMENT_ID, @CITAD1_ID, @BANK_RECEIVE_ID, @OBJECT_RECEIVE_ID, 
1166
				@BRANCH_RECEIVE_ID, @BRANCH_RECEIVE_NAME, @ACC_NO_RECEIVE, @TRADE_AMT, @TRADE_DESC, @SUB_BANK_RECEIVE_NAME, @ENTRY_PAIR, @REF_NO
1167
				WHILE @@fetch_status=0 
1168
				BEGIN
1169
					SET @INDEX_REC = @INDEX_REC+1
1170

    
1171
					IF(@p_IS_SEND_APPR = 'Y')
1172
					BEGIN
1173
						IF(ISNULL(@ACC_NO_RECEIVE, '') = '')
1174
						BEGIN
1175
							ROLLBACK TRANSACTION
1176
							CLOSE XmlDataOutsideRec;
1177
							DEALLOCATE XmlDataOutsideRec;
1178
							SELECT '-1' as Result, '' REQ_PAY_ID, N'Lưới đơn vị nhận, dòng: '+ CONVERT(VARCHAR(5),@INDEX_REC) + N' Số tài khoản không được để trống' ErrorDesc
1179
							RETURN '-1'
1180
						END
1181
						IF(ISNULL(@BRANCH_RECEIVE_NAME, '') = '')
1182
						BEGIN
1183
							ROLLBACK TRANSACTION
1184
							CLOSE XmlDataOutsideRec;
1185
							DEALLOCATE XmlDataOutsideRec;
1186
							SELECT '-1' as Result, '' REQ_PAY_ID, N'Lưới đơn vị nhận, dòng: '+ CONVERT(VARCHAR(5),@INDEX_REC) + N' Tên đơn vị nhận không được để trống' ErrorDesc
1187
							RETURN '-1'
1188
						END
1189
						IF(ISNULL(@OBJECT_RECEIVE_ID, '') = '')
1190
						BEGIN
1191
							ROLLBACK TRANSACTION
1192
							CLOSE XmlDataOutsideRec;
1193
							DEALLOCATE XmlDataOutsideRec;
1194
							SELECT '-1' as Result, '' REQ_PAY_ID, N'Lưới đơn vị nhận, dòng: '+ CONVERT(VARCHAR(5),@INDEX_REC) + N' Đối tượng nhận không được để trống' ErrorDesc
1195
							RETURN '-1'
1196
						END
1197
						IF(ISNULL(@BANK_RECEIVE_ID, '') = '' OR ISNULL(@BRANCH_RECEIVE_NAME, '') = '')
1198
						BEGIN
1199
							ROLLBACK TRANSACTION
1200
							CLOSE XmlDataOutsideRec;
1201
							DEALLOCATE XmlDataOutsideRec;
1202
							SELECT '-1' as Result, '' REQ_PAY_ID, N'Lưới đơn vị nhận, dòng: '+ CONVERT(VARCHAR(5),@INDEX_REC) + N' Tên ngân hàng hưởng trực tiếp không được để trống' ErrorDesc
1203
							RETURN '-1'
1204
						END
1205
						IF(ISNULL(@CITAD1_ID, '') = '')
1206
						BEGIN
1207
							ROLLBACK TRANSACTION
1208
							CLOSE XmlDataOutsideRec;
1209
							DEALLOCATE XmlDataOutsideRec;
1210
							SELECT '-1' as Result, '' REQ_PAY_ID, N'Lưới đơn vị nhận, dòng: '+ CONVERT(VARCHAR(5),@INDEX_REC) + N' Mã CITAD không được để trống' ErrorDesc
1211
							RETURN '-1'
1212
						END
1213
						IF(ISNULL(@CHANEL_PAYMENT_ID, '') = '')
1214
						BEGIN
1215
							ROLLBACK TRANSACTION
1216
							CLOSE XmlDataOutsideRec;
1217
							DEALLOCATE XmlDataOutsideRec;
1218
							SELECT '-1' as Result, '' REQ_PAY_ID, N'Lưới đơn vị nhận, dòng: '+ CONVERT(VARCHAR(5),@INDEX_REC) + N' Kênh thanh toán không được để trống' ErrorDesc
1219
							RETURN '-1'
1220
						END
1221
					END
1222

    
1223
					DECLARE @p_REQ_TRANS_OUTSIDE_REC_ID VARCHAR(15);
1224
					EXEC SYS_CodeMasters_Gen 'TR_REQ_OUTSIDE_REC', @p_REQ_TRANS_OUTSIDE_REC_ID OUT;
1225
					IF @p_REQ_TRANS_OUTSIDE_REC_ID='' OR @p_REQ_TRANS_OUTSIDE_REC_ID IS NULL GOTO ABORT;
1226

    
1227
					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,
1228
					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)
1229
					VALUES (@p_REQ_TRANS_OUTSIDE_REC_ID, @p_REQ_PAY_ID, @p_MAKER_ID_KT, GETDATE(), NULL, NULL,
1230
					@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)
1231
					IF @@error<>0 GOTO ABORT;
1232
					FETCH NEXT FROM XmlDataOutsideRec INTO  @MAKER_ID_KT, @CHANEL_PAYMENT_ID, @CITAD1_ID, @BANK_RECEIVE_ID, @OBJECT_RECEIVE_ID, 
1233
					@BRANCH_RECEIVE_ID, @BRANCH_RECEIVE_NAME, @ACC_NO_RECEIVE, @TRADE_AMT, @TRADE_DESC, @SUB_BANK_RECEIVE_NAME, @ENTRY_PAIR, @REF_NO
1234
				END;
1235
				CLOSE XmlDataOutsideRec;
1236
				DEALLOCATE XmlDataOutsideRec;
1237
--- END INSERT đơn vị nhận		
1238

    
1239
		--- Luu log chinh sua select * from TR_REQ_PAY_INVOICE
1240
		INSERT INTO TR_REQ_PAY_INVOICE_LOG SELECT * FROM TR_REQ_PAY_INVOICE WHERE REQ_PAY_ID =@p_REQ_PAY_ID
1241
		-----
1242
	--- BAT DAU CAP NHAT XAC DINH CAC BUOC DUYET SAU KHI KE TOAN CAP NHAT THONG TIN
1243

    
1244
	COMMIT TRANSACTION
1245

    
1246
-- BEGIN VALIDATE SEND APRROVE
1247
	IF(@p_IS_SEND_APPR = 'Y')
1248
	BEGIN
1249
	-- BEGIN VALIDATE RIGHT
1250
		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'))
1251
		BEGIN
1252
			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
1253
			RETURN '-1'
1254
		END
1255
		IF ((SELECT AUTH_STATUS FROM TR_REQ_PAYMENT WHERE REQ_PAY_ID = @p_REQ_PAY_ID) ='R')
1256
		BEGIN
1257
			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
1258
			RETURN '-1'
1259
		END
1260
		IF ( EXISTS (SELECT AUTH_STATUS FROM TR_REQ_PAYMENT WHERE REQ_PAY_ID = @p_REQ_PAY_ID AND AUTH_STATUS <> 'A'))
1261
		BEGIN
1262
			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
1263
			RETURN '-1'
1264
		END
1265
		IF(EXISTS(SELECT * FROM TR_REQ_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND AUTH_STATUS_KT = 'A'))
1266
		BEGIN
1267
			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
1268
			RETURN '-1'
1269
		END
1270
		IF(EXISTS(SELECT * FROM TR_REQ_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND AUTH_STATUS_KT = 'P'))
1271
		BEGIN
1272
			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
1273
			RETURN '-1'
1274
		END
1275
		IF(EXISTS(SELECT * FROM TR_REQ_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND AUTH_STATUS_KT = 'S'))
1276
		BEGIN
1277
			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
1278
			RETURN '-1'
1279
		END
1280
	-- END VALIDATE RIGHT
1281

    
1282
		DECLARE @SUMVAT DECIMAL(18,0) = 0
1283
		DECLARE @SUM3532 DECIMAL(18,0) = 0
1284
		DECLARE @tmp3532 TABLE(
1285
		AMT DECIMAL(18,0),
1286
		ACCT VARCHAR(20)
1287
		)
1288
		INSERT INTO @tmp3532 SELECT * FROM OPENXML(@hdoc, '/Root/XmlDataEntries', 2) WITH(AMT DECIMAL(18, 0), ACCT VARCHAR(20))
1289
		IF(EXISTS(SELECT * FROM @tmp3532 WHERE ACCT = '353200002'))
1290
		BEGIN
1291
			SET @SUM3532 = (SELECT SUM(AMT) FROM @tmp3532 WHERE ACCT = '353200002')
1292
			SET @SUMVAT = (SELECT SUM(VAT) FROM OPENXML(@hdocVATInvoice, '/Root/XmlVATInvoice', 2) WITH(VAT DECIMAL(18, 0)))
1293
						
1294
			IF(@SUM3532 <> @SUMVAT)
1295
			BEGIN
1296
				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
1297
				RETURN '-1'
1298
			END
1299
		END
1300
		
1301

    
1302
		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
1303
		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
1304
		Open cursorProduct
1305

    
1306
		FETCH NEXT FROM cursorProduct INTO @REQ_PAY_ID , @ET_ID, @AMT_ET, @ACC_ET , @DRCR_ET
1307
		WHILE @@FETCH_STATUS = 0
1308
		BEGIN
1309
			--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Ợ
1310
			IF	(	 (SELECT COUNT (*) FROM TR_REQ_PAY_ENTRIES WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND ENTRY_PAIR =@ET_ID AND DR_CR ='D') > 1 AND 
1311
					(SELECT COUNT (*) FROM TR_REQ_PAY_ENTRIES WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND ENTRY_PAIR =@ET_ID AND DR_CR ='C')> 1
1312
				)
1313
			BEGIN
1314
				CLOSE cursorProduct;	
1315
				DEALLOCATE cursorProduct;
1316
				SELECT '-1' as Result, '' REQ_PAY_ID, N'Mã bút toán số '+ @ET_ID+ 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
1317
				RETURN '-1'
1318
			END
1319
			ELSE
1320
			BEGIN
1321
			print 'sai'+@ENTRY_PAIR
1322
			END
1323
			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))
1324
			BEGIN
1325
				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)
1326
				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))
1327
				BEGIN
1328
					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
1329
					RETURN '-1'
1330
				END
1331
			END
1332
			-- KIEM TRA SO TIEN NO CO
1333
			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))
1334
			BEGIN
1335
				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
1336
				RETURN '-1'
1337
			END
1338

    
1339
			FETCH NEXT FROM cursorProduct INTO  @REQ_PAY_ID , @ET_ID, @AMT_ET, @ACC_ET , @DRCR_ET
1340
		END
1341

    
1342
		IF(EXISTS(SELECT * FROM TR_REQ_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND AUTH_STATUS_KT = 'S'))
1343
		BEGIN
1344
			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
1345
			RETURN '-1'
1346
		END
1347

    
1348
		IF(EXISTS(SELECT * FROM TR_REQ_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND AUTH_STATUS_KT = 'P'))
1349
		BEGIN
1350
			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
1351
			RETURN '-1'
1352
		END
1353

    
1354
		-- CHAN NEU CHI CO 1 BUT NO 1 BUT CO THI KHONG DUOC DI TIEP
1355
		IF(EXISTS(SELECT * FROM TR_REQ_PAY_ENTRIES WHERE REQ_PAY_ID =@p_REQ_PAY_ID))
1356
		BEGIN
1357
			DECLARE  @SUM_CR DECIMAL(18,2), @SUM_DR DECIMAL(18,2)
1358
			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)
1359
			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)
1360
			IF(@SUM_CR <> @SUM_DR)
1361
			BEGIN
1362
				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
1363
				RETURN '-1'
1364
			END
1365
		END
1366

    
1367
		UPDATE PL_REQUEST_PROCESS_CHILD SET STATUS_JOB ='P' WHERE REQ_ID=@p_REQ_PAY_ID AND TLNAME=@p_MAKER_ID_KT
1368
		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)
1369
		-- CAP NHAT TINH TRANG DUYET KE TOAN LA DANG XU LY
1370
		UPDATE TR_REQ_PAYMENT SET AUTH_STATUS_KT='P',CREATE_DT_KT = GETDATE() WHERE REQ_PAY_ID=@p_REQ_PAY_ID
1371
		-- DOANPTT 291222: THEM LOG KPI
1372
		UPDATE TR_REQ_KPI 
1373
		SET AUTH_STATUS_KT ='P', CREATE_DT_KT = GETDATE(),MAKER_ID_KT =@p_MAKER_ID_KT, CORE_NOTE = @p_CONFIRM_NOTE, REQ_REASON = @p_REQ_REASON
1374
		WHERE REQ_ID =@p_REQ_PAY_ID AND AUTH_STATUS_KT = 'U'
1375
		INSERT INTO dbo.PL_PROCESS(REQ_ID,PROCESS_ID,CHECKER_ID,APPROVE_DT,PROCESS_DESC,NOTES)
1376
		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')
1377
		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
1378
		RETURN '4'
1379
	END
1380
-- END VALIDATE SEND APPROVE
1381

    
1382
SELECT '0' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, '' ErrorDesc
1383
RETURN '0'
1384
ABORT:
1385
BEGIN
1386
		ROLLBACK TRANSACTION
1387
		SELECT '-1' as Result, '' REQ_PAY_ID, '' ErrorDesc
1388
		RETURN '-1'
1389
End
1390