Project

General

Profile

advance_kt_upd.txt

Luc Tran Van, 11/24/2022 02:37 PM

 
1
ALTER   PROCEDURE [dbo].[TR_REQ_ADVANCE_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_RECEIVER_DEBIT	nvarchar(250)	= NULL,
14
@p_REQ_PAY_TYPE	varchar(15)	= NULL,
15
@p_REQ_TYPE_CURRENCY	nvarchar(50)	= 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_NOTES	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_DVDM_ID VARCHAR(15) = NULL,
39
@p_TYPE_FUNCTION VARCHAR(15) = NULL,
40
@p_RATE DECIMAL(18,0)= 0,
41
@p_XMP_TEMP_DATA_ENTRIES XML = NULL,
42
--doanptt 17/02/2022
43
@p_XMP_TEMP_DATA_TRANSFER_OUTSIDE_TRANS XML = NULL,
44
@p_XMP_TEMP_DATA_TRANSFER_OUTSIDE_REC XML = NULL
45
AS
46
-- BEGIN VALIDATE UPDATE
47
	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'))
48
	BEGIN
49
		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
50
		RETURN '-1'
51
	END
52
	IF ((SELECT AUTH_STATUS FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID = @p_REQ_PAY_ID) ='R')
53
	BEGIN
54
		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
55
		RETURN '-1'
56
	END
57
	IF ( EXISTS (SELECT AUTH_STATUS FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID = @p_REQ_PAY_ID AND AUTH_STATUS <> 'A'))
58
	BEGIN
59
		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
60
		RETURN '-1'
61
	END
62
	IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND AUTH_STATUS_KT = 'A'))
63
	BEGIN
64
		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
65
		RETURN '-1'
66
	END
67
	IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND AUTH_STATUS_KT = 'P'))
68
	BEGIN
69
		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
70
		RETURN '-1'
71
	END
72
	IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND AUTH_STATUS_KT = 'S'))
73
	BEGIN
74
		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
75
		RETURN '-1'
76
	END
77
-- END VALIDATE UPDATE
78

    
79

    
80

    
81
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),
82
	@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)
83

    
84

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

    
99
			DECLARE XmlDataEntries CURSOR FOR
100
			SELECT * FROM OPENXML(@hdocEntries, '/Root/XmlDataEntries', 2)
101
					 WITH(ENTRY_PAIR varchar(20),DR_CR varchar(20),ACCT VARCHAR(50), ACCT_NAME VARCHAR(500), AMT decimal(18,2),CURRENCY VARCHAR(15), 
102
					 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))
103
			
104
			OPEN XmlDataEntries;
105
			DECLARE @INDEX INT = 0
106

    
107
			UPDATE TR_REQ_ADVANCE_PAYMENT 
108
			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
109
			WHERE REQ_PAY_ID =@p_REQ_PAY_ID
110

    
111
			DELETE FROM TR_REQ_PAY_ENTRIES WHERE REQ_PAY_ID = @p_REQ_PAY_ID
112
			IF @@Error <> 0 GOTO ABORT
113

    
114
			DECLARE @DR_CR_NAME NVARCHAR(50)
115
			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
116
			WHILE @@fetch_status=0 BEGIN
117
				IF(@EXC_RATE IS NULL)
118
				BEGIN
119
					SET @EXC_RATE = 1
120
				END
121

    
122
				SET @INDEX = @INDEX +1
123

    
124
				IF(@GL_CODE IS NOT NULL AND @GL_CODE <> '')
125
				BEGIN
126
					SET @GL_CODE = RIGHT(@GL_CODE,9) 
127
				END-- LUCTV BO SUNG 20211117
128

    
129
				SET @ACCT_NAME =UPPER(dbo.fChuyenCoDauThanhKhongDau(@ACCT_NAME))
130
				-- NEU TEN TAI KHOAN RONG, THI LAY TEN TU CHECK CASA
131
				IF(ISNULL(@ACCT_NAME, '') = '' AND ISNULL(@GL_CODE, '') <> '')
132
				BEGIN
133
					SET @ACCT_NAME = STUFF(@GL_CODE, LEN(@GL_CODE)-8, 9, '')
134
				END
135
				-- NEU SO TAI KHOAN RONG, THI LAY SO TAI KHOAN TU CHECK CASA
136
				SET @GL_CODE = RIGHT(@GL_CODE,9)
137
				IF(ISNULL(@ACCT, '') = '' AND ISNULL(@GL_CODE_ACCNO, '') <> '')
138
				BEGIN
139
					SET @ACCT = @GL_CODE_ACCNO
140
				END
141

    
142
				IF(@DR_CR='D')
143
				BEGIN
144
					SET @DR_CR_NAME =N'Nợ'
145
				END
146
				ELSE
147
				BEGIN
148
					SET @DR_CR_NAME =N'Có'
149
				END
150

    
151
				SET @BRANCH_CODE =(SELECT TOP 1 BRANCH_CODE FROM CM_BRANCH WHERE BRANCH_ID =@BRANCH_ID)
152
				SET @DEP_CODE =(SELECT TOP 1 DEP_CODE FROM CM_DEPARTMENT WHERE DEP_ID =@DEP_ID)
153

    
154
				IF(@p_TYPE_FUNCTION ='SEND')
155
				BEGIN
156
					IF(@ENTRY_PAIR IS NULL OR @ENTRY_PAIR ='')
157
					BEGIN
158
						ROLLBACK TRANSACTION
159
						CLOSE XmlDataEntries;
160
						DEALLOCATE XmlDataEntries;
161
						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
162
						RETURN '-1'
163
					END
164

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

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

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

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

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

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

    
219
					IF(@GL_CODE IS NULL OR @GL_CODE ='')
220
					BEGIN
221
						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) =''))
222
						BEGIN
223
							ROLLBACK TRANSACTION
224
							CLOSE XmlDataEntries;
225
							DEALLOCATE XmlDataEntries;
226
							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
227
							RETURN '-1'
228
						END
229
					END
230

    
231
					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)
232
					BEGIN
233
						ROLLBACK TRANSACTION
234
						CLOSE XmlDataEntries;
235
						DEALLOCATE XmlDataEntries;
236
						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
237
						RETURN '-1'
238
					END
239

    
240
					IF(@DEP_ID IS NOT NULL AND @DEP_ID <> '' AND (LEFT(@DEP_CODE,3) <> @BRANCH_CODE))
241
					BEGIN
242
							ROLLBACK TRANSACTION
243
							CLOSE XmlDataEntries;	
244
							DEALLOCATE XmlDataEntries;
245
							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
246
							RETURN '-1'
247
					END
248

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

    
272
					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 
273
							(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)
274
					BEGIN
275
						ROLLBACK TRANSACTION
276
						CLOSE XmlDataEntries;	
277
						DEALLOCATE XmlDataEntries;
278
						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
279
						RETURN '-1'
280
					END
281
					*/
282

    
283
				END
284
				
285
				/*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))
286
					BEGIN
287
					ROLLBACK TRANSACTION
288
						CLOSE XmlDataEntries;	
289
						DEALLOCATE XmlDataEntries;
290
						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
291
						RETURN '-1'
292
				END*/
293
				
294

    
295
				DECLARE @p_ET_ID VARCHAR(15);
296
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_ENTRIES', @p_ET_ID OUT;
297
				IF @p_ET_ID='' OR @p_ET_ID IS NULL GOTO ABORT;
298

    
299
				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)
300
				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')
301

    
302
				-- NEU CHUA CO TAI KHOAN THI THEM VO CM_ACCOUNT
303
				IF(NOT EXISTS(SELECT * FROM CM_ACCOUNT WHERE ACC_NO =@ACCT))
304
				BEGIN
305
					INSERT INTO CM_ACCOUNT (ACC_NO, ACC_NAME, TK_GL, TK_GL_NAME, MAKER_ID, CHECKER_ID) VALUES
306
					(@ACCT,@ACCT_NAME,@GL_CODE,(SELECT TOP 1 ACC_NAME FROM CM_ACCOUNT WHERE ACC_NO =@GL_CODE),'admin','admin')
307
				END
308
				ELSE
309
				BEGIN
310
					IF(@GL_CODE IS NOT NULL AND @GL_CODE <> '' AND @GL_CODE <> '0')
311
						BEGIN
312
							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()
313
							WHERE ACC_NO=@ACCT
314
					END
315
				END
316

    
317
				
318
			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
319
			END;
320
		CLOSE XmlDataEntries;
321
		DEALLOCATE XmlDataEntries;
322
		-- UPDATE GL THEO RULE
323
		----UPDATE  CM_ACCOUNT
324
		----SET TK_GL ='361200001', TK_GL_NAME =(SELECT ACC_NAME FROM CM_ACCOUNT WHERE ACC_NO ='361200001')
325
		----WHERE LEN (ACC_NO) >9 AND ISNULL(TK_GL,'')=''
326
		----AND SUBSTRING(ACC_NO,4,4) ='7048'
327

    
328
		----UPDATE  CM_ACCOUNT
329
		----SET TK_GL ='519200002', TK_GL_NAME =(SELECT ACC_NAME FROM CM_ACCOUNT WHERE ACC_NO ='519200002')
330
		----WHERE LEN (ACC_NO) >9 AND ISNULL(TK_GL,'')=''
331
		----AND SUBSTRING(ACC_NO,4,4) ='7044' AND SUBSTRING(ACC_NO,12,2) ='19'
332

    
333
		----UPDATE  CM_ACCOUNT
334
		----SET TK_GL ='421100001', TK_GL_NAME =(SELECT ACC_NAME FROM CM_ACCOUNT WHERE ACC_NO ='421100001')
335
		----WHERE LEN (ACC_NO) >9 AND ISNULL(TK_GL,'')=''
336
		----AND SUBSTRING(ACC_NO,4,4) ='7041'
337

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

    
340
		IF @@error<>0 GOTO ABORT;
341
	END
342

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

    
347
	DECLARE  @MAKER_ID_KT VARCHAR(15), @TYPE_TRANSFER_ID VARCHAR(15), @PRODUCT_ID VARCHAR(15), @OBJECT_TRANSFER_ID VARCHAR(15), 
348
				@ACC_NO_TRANSFER VARCHAR(255), @BRANCH_TRANSFER_ID VARCHAR(15), @BRANCH_TRANFSER_NAME NVARCHAR(255)
349
-- INSERT đơn vị chuyển
350
				DELETE FROM TR_REQ_PAY_TRANS_OUTSIDE_TRANS WHERE REQ_PAY_ID = @p_REQ_PAY_ID
351
				DECLARE XmlDataOutsideTrans CURSOR LOCAL FOR
352
				SELECT * FROM OPENXML(@hdocOutsideTrans, 'Root/XmlDataTransferOutside',2) 
353
				WITH(MAKER_ID VARCHAR(15), TYPE_TRANSFER_ID VARCHAR(15), PRODUCT_ID VARCHAR(15), OBJECT_TRANSFER_ID VARCHAR(15), BRANCH_ID VARCHAR(15), 
354
				ACC_NO_TRANSFER VARCHAR(255), BRANCH_TRANSFER_ID VARCHAR(15), CURRENCY VARCHAR(15), BRANCH_TRANFSER_NAME NVARCHAR(255))
355
				OPEN XmlDataOutsideTrans
356

    
357

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

    
374
					IF @@error<>0 GOTO ABORT;
375
					FETCH NEXT FROM XmlDataOutsideTrans INTO @MAKER_ID_KT , @TYPE_TRANSFER_ID, @PRODUCT_ID, @OBJECT_TRANSFER_ID, @BRANCH_ID, 
376
					@ACC_NO_TRANSFER, @BRANCH_TRANSFER_ID, @CURRENCY, @BRANCH_TRANFSER_NAME
377
				END;
378
				CLOSE XmlDataOutsideTrans;
379
				DEALLOCATE XmlDataOutsideTrans;
380
--- END INSERT đơn vị chuyển
381

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

    
387
	DECLARE @CHANEL_PAYMENT_ID VARCHAR(15), @CITAD1_ID VARCHAR(15), @BANK_RECEIVE_ID VARCHAR(15), @OBJECT_RECEIVE_ID VARCHAR(15), @REF_NO VARCHAR(50),
388
				@BRANCH_RECEIVE_ID VARCHAR(15), @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)
389
-- INSERT đơn vị nhận
390
	DELETE FROM TR_REQ_PAY_TRANS_OUTSIDE_REC WHERE REQ_PAY_ID = @p_REQ_PAY_ID
391

    
392
	DECLARE XmlDataOutsideRec CURSOR LOCAL FOR
393
	SELECT * FROM OPENXML(@hdocOutsideRec, 'Root/XmlDataTransferOutside',2) 
394
	WITH(MAKER_ID VARCHAR(15), CHANEL_PAYMENT_ID VARCHAR(15), CITAD1_ID VARCHAR(15), BANK_RECEIVE_ID VARCHAR(15), OBJECT_RECEIVE_ID VARCHAR(15), 
395
	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),  
396
				ENTRY_PAIR varchar(20), REF_NO varchar(20)) 
397
	OPEN XmlDataOutsideRec
398

    
399
	FETCH NEXT FROM XmlDataOutsideRec INTO @MAKER_ID_KT, @CHANEL_PAYMENT_ID, @CITAD1_ID, @BANK_RECEIVE_ID, @OBJECT_RECEIVE_ID, 
400
	@BRANCH_RECEIVE_ID, @BRANCH_RECEIVE_NAME, @ACC_NO_RECEIVE, @TRADE_AMT, @TRADE_DESC, @SUB_BANK_RECEIVE_NAME, @ENTRY_PAIR, @REF_NO
401
	WHILE @@fetch_status=0 
402
	BEGIN
403

    
404
		DECLARE @p_REQ_TRANS_OUTSIDE_REC_ID VARCHAR(15);
405
		EXEC SYS_CodeMasters_Gen 'TR_REQ_OUTSIDE_REC', @p_REQ_TRANS_OUTSIDE_REC_ID OUT;
406
		IF @p_REQ_TRANS_OUTSIDE_REC_ID='' OR @p_REQ_TRANS_OUTSIDE_REC_ID IS NULL GOTO ABORT;
407
		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,
408
		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)
409
		VALUES (@p_REQ_TRANS_OUTSIDE_REC_ID, @p_REQ_PAY_ID, @p_MAKER_ID_KT, GETDATE(), NULL, NULL,
410
		@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)
411
		IF @@error<>0 GOTO ABORT;
412
		FETCH NEXT FROM XmlDataOutsideRec INTO  @MAKER_ID_KT, @CHANEL_PAYMENT_ID, @CITAD1_ID, @BANK_RECEIVE_ID, @OBJECT_RECEIVE_ID, 
413
		@BRANCH_RECEIVE_ID, @BRANCH_RECEIVE_NAME, @ACC_NO_RECEIVE, @TRADE_AMT, @TRADE_DESC, @SUB_BANK_RECEIVE_NAME, @ENTRY_PAIR, @REF_NO
414
	END;
415
	CLOSE XmlDataOutsideRec;
416
	DEALLOCATE XmlDataOutsideRec;
417
--- END INSERT đơn vị nhận
418

    
419

    
420
COMMIT TRANSACTION
421
-- BEGIN VALIDATE SEND APPROVE
422
	IF(@p_TYPE_FUNCTION ='SEND')-- BAT DAU GUI PHE DUYET
423
	BEGIN
424
		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'))
425
		BEGIN
426
			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
427
			RETURN '-1'
428
		END
429
		IF ((SELECT AUTH_STATUS FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID = @p_REQ_PAY_ID) ='R')
430
		BEGIN
431
			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
432
			RETURN '-1'
433
		END
434
		IF ( EXISTS (SELECT AUTH_STATUS FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID = @p_REQ_PAY_ID AND AUTH_STATUS <> 'A'))
435
		BEGIN
436
			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
437
			RETURN '-1'
438
		END
439
		IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND AUTH_STATUS_KT = 'A'))
440
		BEGIN
441
			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
442
			RETURN '-1'
443
		END
444
		IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND AUTH_STATUS_KT = 'P'))
445
		BEGIN
446
			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
447
			RETURN '-1'
448
		END
449
		IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND AUTH_STATUS_KT = 'S'))
450
		BEGIN
451
			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
452
			RETURN '-1'
453
		END
454

    
455
	-- BEGIN VALIDATE LUOI HACH TOAN
456
		IF(@p_XMP_TEMP_DATA_ENTRIES IS NOT NULL)
457
		BEGIN
458
			-- CHAN NEU CHI CO 1 BUT NO 1 BUT CO THI KHONG DUOC DI TIEP
459
			IF(EXISTS(SELECT * FROM TR_REQ_PAY_ENTRIES WHERE REQ_PAY_ID =@p_REQ_PAY_ID))
460
			BEGIN
461
				DECLARE  @SUM_CR DECIMAL(18,2), @SUM_DR DECIMAL(18,2)
462
				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)
463
				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)
464
				IF(@SUM_CR<>@SUM_DR)
465
				BEGIN
466
					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
467
					RETURN '-1'
468
				END
469
			END
470
				
471
			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
472
			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
473

    
474
			Open cursorProduct
475
			FETCH NEXT FROM cursorProduct INTO @REQ_PAY_ID , @ET_ID, @AMT_ET, @ACC_ET , @DRCR_ET
476
			WHILE @@FETCH_STATUS = 0
477
			BEGIN
478
				--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Ợ
479
				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 
480
						(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)
481
				BEGIN
482
					CLOSE cursorProduct;	
483
					DEALLOCATE cursorProduct;
484
					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
485
					RETURN '-1'
486
				END
487
				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))
488
				BEGIN
489
					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)
490
					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))
491
					BEGIN
492
						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
493
						RETURN '-1'
494
					END
495
				END
496
				-- KIEM TRA SO TIEN NO CO
497
				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))
498
				BEGIN
499
					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
500
					RETURN '-1'
501
				END
502
				FETCH NEXT FROM cursorProduct INTO  @REQ_PAY_ID , @ET_ID, @AMT_ET, @ACC_ET , @DRCR_ET
503
			END -- END WHILE		
504
		END 
505
	-- END VALIDATE LUOI HACH TOAN
506
		UPDATE PL_REQUEST_PROCESS_CHILD SET STATUS_JOB ='P' WHERE REQ_ID=@p_REQ_PAY_ID AND TLNAME=@p_MAKER_ID_KT
507
		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)
508
		-- CAP NHAT TINH TRANG VE DANG XU LY
509
		UPDATE TR_REQ_ADVANCE_PAYMENT SET AUTH_STATUS_KT='P',CREATE_DT_KT =GETDATE() WHERE REQ_PAY_ID=@p_REQ_PAY_ID
510
		
511
		INSERT INTO dbo.PL_PROCESS(REQ_ID,PROCESS_ID,CHECKER_ID,APPROVE_DT,PROCESS_DESC,NOTES)
512
		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')
513
		
514
		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
515
		RETURN '4'
516
	END -- END TYPE_FUNCTION
517
-- END VALIDATE SEND APPROVE
518

    
519
SELECT '0' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, '' ErrorDesc
520
RETURN '0'
521
ABORT:
522
BEGIN
523
		ROLLBACK TRANSACTION
524
		CLOSE XmlDataEntries;
525
		DEALLOCATE XmlDataEntries;
526
		SELECT '-1' as Result, '' REQ_PAY_ID, '' ErrorDesc
527
		RETURN '-1'
528
End