Project

General

Profile

ADVANCE_KT_UPD.txt

Luc Tran Van, 11/01/2022 11:41 AM

 
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_CONFIRM_NOTE	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),@BRANCH_CODE VARCHAR(15), @DEP_CODE VARCHAR(15)
84

    
85

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

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

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

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

    
115
			DECLARE @DR_CR_NAME NVARCHAR(50)
116
			FETCH NEXT FROM XmlDataEntries INTO @ENTRY_PAIR ,@DR_CR,@ACCT, @ACCT_NAME, @AMT ,@CURRENCY, @EXC_RATE,@BRANCH_ID, @DEP_ID,@TRN_DESC,@GL_CODE
117
			WHILE @@fetch_status=0 BEGIN
118
				IF(@EXC_RATE IS NULL)
119
				BEGIN
120
					SET @EXC_RATE = 1
121
				END
122

    
123
				SET @INDEX = @INDEX +1
124

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

    
130
				SET @ACCT_NAME =UPPER(dbo.fChuyenCoDauThanhKhongDau(@ACCT_NAME))
131
				IF(@DR_CR='D')
132
				BEGIN
133
					SET @DR_CR_NAME =N'Nợ'
134
				END
135
				ELSE
136
				BEGIN
137
					SET @DR_CR_NAME =N'Có'
138
				END
139

    
140
				SET @BRANCH_CODE =(SELECT TOP 1 BRANCH_CODE FROM CM_BRANCH WHERE BRANCH_ID =@BRANCH_ID)
141
				SET @DEP_CODE =(SELECT TOP 1 DEP_CODE FROM CM_DEPARTMENT WHERE DEP_ID =@DEP_ID)
142

    
143
				IF(@p_TYPE_FUNCTION ='SEND')
144
				BEGIN
145
					IF(@ENTRY_PAIR IS NULL OR @ENTRY_PAIR ='')
146
					BEGIN
147
						ROLLBACK TRANSACTION
148
						CLOSE XmlDataEntries;
149
						DEALLOCATE XmlDataEntries;
150
						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
151
						RETURN '-1'
152
					END
153

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

    
163
					IF(@ACCT IS NULL OR @ACCT ='')
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' Số tài khoản không được phép để trống' ErrorDesc
169
						RETURN '-1'
170
					END
171

    
172
					IF(@ACCT_NAME IS NULL OR @ACCT_NAME ='')
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' 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
178
						RETURN '-1'
179
					END
180

    
181
					IF(@AMT IS NULL OR @AMT < 0)
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ố tiền hạch toán phải lớn hơn 0'  ErrorDesc
187
							RETURN '-1'
188
					END
189

    
190
					IF(@BRANCH_ID IS NULL OR @BRANCH_ID ='')
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' Đơn vị nhận không được phép để trống' ErrorDesc
196
						RETURN '-1'
197
					END
198

    
199
					IF(@TRN_DESC IS NULL OR @TRN_DESC ='')
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' Diễn giải hạch toán không được phép để trống' ErrorDesc
205
						RETURN '-1'
206
					END
207

    
208
					IF(@GL_CODE IS NULL OR @GL_CODE ='')
209
					BEGIN
210
						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) =''))
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' 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
216
							RETURN '-1'
217
						END
218
					END
219

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

    
229
					IF(@DEP_ID IS NOT NULL AND @DEP_ID <> '' AND (LEFT(@DEP_CODE,3) <> @BRANCH_CODE))
230
					BEGIN
231
							ROLLBACK TRANSACTION
232
							CLOSE XmlDataEntries;	
233
							DEALLOCATE XmlDataEntries;
234
							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
235
							RETURN '-1'
236
					END
237

    
238
					-- NEU HACH TOAN CASA THI 3 KI TU DAU PHAI KHOP VOI BRANCH CODE CUA DON VI CHIU CHI PHI
239
					PRINT @BRANCH_ID
240
					IF(LEN(@ACCT) >9 AND (SUBSTRING(@ACCT,1,3) <> (SELECT TOP 1 ISNULL(BRANCH_CODE,'') FROM CM_BRANCH WHERE BRANCH_ID = @BRANCH_ID)))
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'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
246
							RETURN '-1'
247
					END
248

    
249
				END
250
				
251
				/*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))
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' 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
257
						RETURN '-1'
258
				END*/
259
				
260

    
261
				DECLARE @p_ET_ID VARCHAR(15);
262
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_ENTRIES', @p_ET_ID OUT;
263
				IF @p_ET_ID='' OR @p_ET_ID IS NULL GOTO ABORT;
264

    
265
				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)
266
				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')
267

    
268
				-- NEU CHUA CO TAI KHOAN THI THEM VO CM_ACCOUNT
269
				IF(NOT EXISTS(SELECT * FROM CM_ACCOUNT WHERE ACC_NO =@ACCT))
270
				BEGIN
271
					INSERT INTO CM_ACCOUNT (ACC_NO, ACC_NAME, TK_GL, TK_GL_NAME, MAKER_ID, CHECKER_ID) VALUES
272
					(@ACCT,@ACCT_NAME,@GL_CODE,(SELECT TOP 1 ACC_NAME FROM CM_ACCOUNT WHERE ACC_NO =@GL_CODE),'admin','admin')
273
				END
274
				ELSE
275
				BEGIN
276
					IF(@GL_CODE IS NOT NULL AND @GL_CODE <> '')
277
						BEGIN
278
							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)
279
							WHERE ACC_NO=@ACCT
280
					END
281
				END
282

    
283
				--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Ợ
284
				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 
285
						(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)
286
				BEGIN
287
							ROLLBACK TRANSACTION
288
							CLOSE XmlDataEntries;	
289
							DEALLOCATE XmlDataEntries;
290
							SELECT '-1' as Result, '' REQ_PAY_ID, N'Mã bút toán số '+ @ENTRY_PAIR+ N': Sai cấu trúc Nợ Có (1 Nợ nhiều Có hoặc 1 Có nhiều Nợ, không được phép Nhiều Có - Nhiều Nợ)'  ErrorDesc
291
							RETURN '-1'
292
						---
293
				END
294
			FETCH NEXT FROM XmlDataEntries INTO @ENTRY_PAIR ,@DR_CR,@ACCT, @ACCT_NAME, @AMT ,@CURRENCY, @EXC_RATE,@BRANCH_ID, @DEP_ID,@TRN_DESC,@GL_CODE
295
			END;
296
		CLOSE XmlDataEntries;
297
		DEALLOCATE XmlDataEntries;
298
		-- UPDATE GL THEO RULE
299
		----UPDATE  CM_ACCOUNT
300
		----SET TK_GL ='361200001', TK_GL_NAME =(SELECT ACC_NAME FROM CM_ACCOUNT WHERE ACC_NO ='361200001')
301
		----WHERE LEN (ACC_NO) >9 AND ISNULL(TK_GL,'')=''
302
		----AND SUBSTRING(ACC_NO,4,4) ='7048'
303

    
304
		----UPDATE  CM_ACCOUNT
305
		----SET TK_GL ='519200002', TK_GL_NAME =(SELECT ACC_NAME FROM CM_ACCOUNT WHERE ACC_NO ='519200002')
306
		----WHERE LEN (ACC_NO) >9 AND ISNULL(TK_GL,'')=''
307
		----AND SUBSTRING(ACC_NO,4,4) ='7044' AND SUBSTRING(ACC_NO,12,2) ='19'
308

    
309
		----UPDATE  CM_ACCOUNT
310
		----SET TK_GL ='421100001', TK_GL_NAME =(SELECT ACC_NAME FROM CM_ACCOUNT WHERE ACC_NO ='421100001')
311
		----WHERE LEN (ACC_NO) >9 AND ISNULL(TK_GL,'')=''
312
		----AND SUBSTRING(ACC_NO,4,4) ='7041'
313

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

    
316
		IF @@error<>0 GOTO ABORT;
317
	END
318

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

    
323
	DECLARE  @MAKER_ID_KT VARCHAR(15), @TYPE_TRANSFER_ID VARCHAR(15), @PRODUCT_ID VARCHAR(15), @OBJECT_TRANSFER_ID VARCHAR(15), 
324
				@ACC_NO_TRANSFER VARCHAR(255), @BRANCH_TRANSFER_ID VARCHAR(15), @BRANCH_TRANFSER_NAME NVARCHAR(255)
325
-- INSERT đơn vị chuyển
326
				DELETE FROM TR_REQ_PAY_TRANS_OUTSIDE_TRANS WHERE REQ_PAY_ID = @p_REQ_PAY_ID
327
				DECLARE XmlDataOutsideTrans CURSOR LOCAL FOR
328
				SELECT * FROM OPENXML(@hdocOutsideTrans, 'Root/XmlDataTransferOutside',2) 
329
				WITH(MAKER_ID VARCHAR(15), TYPE_TRANSFER_ID VARCHAR(15), PRODUCT_ID VARCHAR(15), OBJECT_TRANSFER_ID VARCHAR(15), BRANCH_ID VARCHAR(15), 
330
				ACC_NO_TRANSFER VARCHAR(255), BRANCH_TRANSFER_ID VARCHAR(15), CURRENCY VARCHAR(15), BRANCH_TRANFSER_NAME NVARCHAR(255))
331
				OPEN XmlDataOutsideTrans
332

    
333

    
334
				FETCH NEXT FROM XmlDataOutsideTrans INTO @MAKER_ID_KT , @TYPE_TRANSFER_ID, @PRODUCT_ID, @OBJECT_TRANSFER_ID, @BRANCH_ID, 
335
				@ACC_NO_TRANSFER, @BRANCH_TRANSFER_ID, @CURRENCY, @BRANCH_TRANFSER_NAME
336
				WHILE @@fetch_status=0 
337
				BEGIN
338
					
339
					--IF(@p_REQ_PAY_ID <> NULL)
340
					--BEGIN
341
						DECLARE @p_TR_REQ_TRANS_OUTSIDE_ID VARCHAR(15);
342
						EXEC SYS_CodeMasters_Gen 'TR_REQ_OUTSIDE_TRANS', @p_TR_REQ_TRANS_OUTSIDE_ID OUT;
343
						IF @p_TR_REQ_TRANS_OUTSIDE_ID='' OR @p_TR_REQ_TRANS_OUTSIDE_ID IS NULL GOTO ABORT;
344
						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 , 
345
						BRANCH_TRANFSER_NAME,TYPE_TRANSFER_ID , PRODUCT_ID , OBJECT_TRANSFER_ID , BRANCH_ID, ACC_NO_TRANSFER , BRANCH_TRANSFER_ID, CURRENCY)
346
						VALUES (@p_TR_REQ_TRANS_OUTSIDE_ID ,@p_REQ_PAY_ID ,@p_MAKER_ID_KT , GETDATE(), NULL , NULL, 
347
						@BRANCH_TRANFSER_NAME, @TYPE_TRANSFER_ID , @PRODUCT_ID , @OBJECT_TRANSFER_ID , @BRANCH_ID, @ACC_NO_TRANSFER , @BRANCH_TRANSFER_ID, @CURRENCY)
348
					--END
349

    
350
					IF @@error<>0 GOTO ABORT;
351
					FETCH NEXT FROM XmlDataOutsideTrans INTO @MAKER_ID_KT , @TYPE_TRANSFER_ID, @PRODUCT_ID, @OBJECT_TRANSFER_ID, @BRANCH_ID, 
352
					@ACC_NO_TRANSFER, @BRANCH_TRANSFER_ID, @CURRENCY, @BRANCH_TRANFSER_NAME
353
				END;
354
				CLOSE XmlDataOutsideTrans;
355
				DEALLOCATE XmlDataOutsideTrans;
356
--- END INSERT đơn vị chuyển
357

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

    
363
	DECLARE @CHANEL_PAYMENT_ID VARCHAR(15), @CITAD1_ID VARCHAR(15), @BANK_RECEIVE_ID VARCHAR(15), @OBJECT_RECEIVE_ID VARCHAR(15), @REF_NO VARCHAR(50),
364
				@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)
365
-- INSERT đơn vị nhận
366
	DELETE FROM TR_REQ_PAY_TRANS_OUTSIDE_REC WHERE REQ_PAY_ID = @p_REQ_PAY_ID
367

    
368
	DECLARE XmlDataOutsideRec CURSOR LOCAL FOR
369
	SELECT * FROM OPENXML(@hdocOutsideRec, 'Root/XmlDataTransferOutside',2) 
370
	WITH(MAKER_ID VARCHAR(15), CHANEL_PAYMENT_ID VARCHAR(15), CITAD1_ID VARCHAR(15), BANK_RECEIVE_ID VARCHAR(15), OBJECT_RECEIVE_ID VARCHAR(15), 
371
	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),  
372
				ENTRY_PAIR varchar(20), REF_NO varchar(20)) 
373
	OPEN XmlDataOutsideRec
374

    
375
	FETCH NEXT FROM XmlDataOutsideRec INTO @MAKER_ID_KT, @CHANEL_PAYMENT_ID, @CITAD1_ID, @BANK_RECEIVE_ID, @OBJECT_RECEIVE_ID, 
376
	@BRANCH_RECEIVE_ID, @BRANCH_RECEIVE_NAME, @ACC_NO_RECEIVE, @TRADE_AMT, @TRADE_DESC, @SUB_BANK_RECEIVE_NAME, @ENTRY_PAIR, @REF_NO
377
	WHILE @@fetch_status=0 
378
	BEGIN
379

    
380
		DECLARE @p_REQ_TRANS_OUTSIDE_REC_ID VARCHAR(15);
381
		EXEC SYS_CodeMasters_Gen 'TR_REQ_OUTSIDE_REC', @p_REQ_TRANS_OUTSIDE_REC_ID OUT;
382
		IF @p_REQ_TRANS_OUTSIDE_REC_ID='' OR @p_REQ_TRANS_OUTSIDE_REC_ID IS NULL GOTO ABORT;
383
		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,
384
		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)
385
		VALUES (@p_REQ_TRANS_OUTSIDE_REC_ID, @p_REQ_PAY_ID, @p_MAKER_ID_KT, GETDATE(), NULL, NULL,
386
		@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)
387
		IF @@error<>0 GOTO ABORT;
388
		FETCH NEXT FROM XmlDataOutsideRec INTO  @MAKER_ID_KT, @CHANEL_PAYMENT_ID, @CITAD1_ID, @BANK_RECEIVE_ID, @OBJECT_RECEIVE_ID, 
389
		@BRANCH_RECEIVE_ID, @BRANCH_RECEIVE_NAME, @ACC_NO_RECEIVE, @TRADE_AMT, @TRADE_DESC, @SUB_BANK_RECEIVE_NAME, @ENTRY_PAIR, @REF_NO
390
	END;
391
	CLOSE XmlDataOutsideRec;
392
	DEALLOCATE XmlDataOutsideRec;
393
--- END INSERT đơn vị nhận
394

    
395

    
396
COMMIT TRANSACTION
397
-- BEGIN VALIDATE SEND APPROVE
398
	IF(@p_TYPE_FUNCTION ='SEND')-- BAT DAU GUI PHE DUYET
399
	BEGIN
400
		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'))
401
		BEGIN
402
			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
403
			RETURN '-1'
404
		END
405
		IF ((SELECT AUTH_STATUS FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID = @p_REQ_PAY_ID) ='R')
406
		BEGIN
407
			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
408
			RETURN '-1'
409
		END
410
		IF ( EXISTS (SELECT AUTH_STATUS FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID = @p_REQ_PAY_ID AND AUTH_STATUS <> 'A'))
411
		BEGIN
412
			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
413
			RETURN '-1'
414
		END
415
		IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND AUTH_STATUS_KT = 'A'))
416
		BEGIN
417
			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
418
			RETURN '-1'
419
		END
420
		IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND AUTH_STATUS_KT = 'P'))
421
		BEGIN
422
			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
423
			RETURN '-1'
424
		END
425
		IF(EXISTS(SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND AUTH_STATUS_KT = 'S'))
426
		BEGIN
427
			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
428
			RETURN '-1'
429
		END
430

    
431
	-- BEGIN VALIDATE LUOI HACH TOAN
432
		IF(@p_XMP_TEMP_DATA_ENTRIES IS NOT NULL)
433
		BEGIN
434
			-- CHAN NEU CHI CO 1 BUT NO 1 BUT CO THI KHONG DUOC DI TIEP
435
			IF(EXISTS(SELECT * FROM TR_REQ_PAY_ENTRIES WHERE REQ_PAY_ID =@p_REQ_PAY_ID))
436
			BEGIN
437
				DECLARE  @SUM_CR DECIMAL(18,2), @SUM_DR DECIMAL(18,2)
438
				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)
439
				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)
440
				IF(@SUM_CR<>@SUM_DR)
441
				BEGIN
442
					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
443
					RETURN '-1'
444
				END
445
			END
446
				
447
			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
448
			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
449

    
450
			Open cursorProduct
451
			FETCH NEXT FROM cursorProduct INTO @REQ_PAY_ID , @ET_ID, @AMT_ET, @ACC_ET , @DRCR_ET
452
			WHILE @@FETCH_STATUS = 0
453
			BEGIN
454
				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))
455
				BEGIN
456
					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)
457
					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))
458
					BEGIN
459
						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
460
						RETURN '-1'
461
					END
462
				END
463
				-- KIEM TRA SO TIEN NO CO
464
				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))
465
				BEGIN
466
					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
467
					RETURN '-1'
468
				END
469
				FETCH NEXT FROM cursorProduct INTO  @REQ_PAY_ID , @ET_ID, @AMT_ET, @ACC_ET , @DRCR_ET
470
			END -- END WHILE		
471
		END 
472
	-- END VALIDATE LUOI HACH TOAN
473
		UPDATE PL_REQUEST_PROCESS_CHILD SET STATUS_JOB ='P' WHERE REQ_ID=@p_REQ_PAY_ID AND TLNAME=@p_MAKER_ID_KT
474
		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)
475
		-- CAP NHAT TINH TRANG VE DANG XU LY
476
		UPDATE TR_REQ_ADVANCE_PAYMENT SET AUTH_STATUS_KT='P',CREATE_DT_KT =GETDATE() WHERE REQ_PAY_ID=@p_REQ_PAY_ID
477
		
478
		INSERT INTO dbo.PL_PROCESS(REQ_ID,PROCESS_ID,CHECKER_ID,APPROVE_DT,PROCESS_DESC,NOTES)
479
		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')
480
		
481
		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
482
		RETURN '4'
483
	END -- END TYPE_FUNCTION
484
-- END VALIDATE SEND APPROVE
485

    
486
SELECT '0' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, '' ErrorDesc
487
RETURN '0'
488
ABORT:
489
BEGIN
490
		ROLLBACK TRANSACTION
491
		CLOSE XmlDataEntries;
492
		DEALLOCATE XmlDataEntries;
493
		SELECT '-1' as Result, '' REQ_PAY_ID, '' ErrorDesc
494
		RETURN '-1'
495
End