Project

General

Profile

2.0 CAP NHAT DON VI TINH CUA PYCMS 2021 1499.txt

Luc Tran Van, 10/18/2021 08:59 PM

 
1
DECLARE @REQ_ID VARCHAR(15), @DATE DATETIME
2
SET @REQ_ID=(SELECT REQ_ID FROM TR_REQUEST_DOC WHERE REQ_CODE ='PUR/2021/001499')
3
UPDATE TR_REQUEST_DOC_DT SET UNIT_NAME = N'Hộp' WHERE REQ_DOC_ID =@REQ_ID
4
---20211014
5
¿
6
ALTER PROCEDURE [dbo].[TR_REQ_PAYMENT_KT_Upd]
7
@p_REQ_PAY_ID	varchar(15)= NULL,
8
@p_REQ_PAY_CODE	varchar(50)	= NULL,
9
@p_REQ_DT VARCHAR(20)= NULL,
10
@p_BRANCH_ID	varchar(15)	= NULL,
11
@p_DEP_ID	varchar(15)	= NULL,
12
@p_REQ_REASON	nvarchar(MAX)	= NULL,
13
@p_REQ_TYPE	varchar(15)	= NULL,
14
@P_REQ_ENTRIES nvarchar(MAX)	= NULL,
15
@p_REQ_DESCRIPTION	nvarchar(MAX)	= NULL,
16
@p_REF_ID	varchar(15)	= NULL,
17
@p_RECEIVER_PO	nvarchar(250)	= NULL,
18
@p_REQ_PAY_TYPE	varchar(15)	= NULL,
19
@p_REQ_TYPE_CURRENCY	nvarchar(50)	= NULL,
20
@p_REQ_AMT	decimal(18, 0)	= NULL,
21
@p_REQ_TEMP_AMT	decimal(18, 0)	= NULL,
22
@p_MAKER_ID	varchar(15)	= NULL,
23
@p_CREATE_DT	varchar(25)	= NULL,
24
@p_EDITOR_ID	varchar(15)	= NULL,
25
@p_AUTH_STATUS	varchar(1)	= NULL,
26
@p_CHECKER_ID	varchar(15)	= NULL,
27
@p_APPROVE_DT	varchar(25)	= NULL,
28
@p_CREATE_DT_KT	varchar(25)	= NULL,
29
@p_MAKER_ID_KT	varchar(15)	= NULL,
30
@p_AUTH_STATUS_KT	varchar(1)	= NULL,
31
@p_CHECKER_ID_KT	varchar(1)	= NULL,
32
@p_APPROVE_DT_KT  varchar(25)= null,
33
@p_CONFIRM_NOTE	nvarchar(500)	= NULL,
34
@p_BRANCH_CREATE	varchar(15)	= NULL,
35
@p_NOTES	varchar(15)	= NULL,
36
@p_RECORD_STATUS	varchar(1)	= NULL,
37
@p_TRANSFER_MAKER	nvarchar(50)	= NULL,
38
@p_TRANSFER_DT	varchar(25)	= NULL,
39
@p_TRASFER_USER_RECIVE	varchar(15)	= NULL,
40
@p_PROCESS	varchar(15)	= NULL,
41
@p_PAY_PHASE VARCHAR(15) = NULL,
42
@p_XMP_TEMP XML = NULL,
43
@p_XMP_TEMP_2 XML = NULL
44
AS
45

    
46
--Validation is here
47
IF ((SELECT AUTH_STATUS FROM TR_REQ_PAYMENT WHERE REQ_PAY_ID = @p_REQ_PAY_ID) ='R')
48
	BEGIN
49
		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
50
		RETURN '-1'
51
	END
52
	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),
53
		@BRANCH_ID VARCHAR(15), @DEP_ID VARCHAR(15),@TRN_DESC nvarchar(1000),@GL_CODE VARCHAR(100), @BRANCH_CODE VARCHAR(15), @DEP_CODE VARCHAR(15)
54
	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,
55
		@INVOICE_NO nvarchar(50) = NULL,@INVOICE_DT VARCHAR(20) = NULL,@SELLER nvarchar(250) = NULL,@TAX_NO nvarchar(15) = NULL,@GOODS_NAME nvarchar(250) = NULL,
56
		@PRICE decimal(18, 0) = NULL,@TAX decimal(18, 0) = NULL,@NOTES NVARCHAR(MAX) = NULL,@VAT_RATE decimal(18,2),
57
		@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,
58
		@TYPE_VAT VARCHAR(15),@TYPE_FUNC VARCHAR(15)
59
DECLARE @hdoc INT;
60
	EXEC sp_xml_preparedocument @hdoc OUTPUT, @p_XMP_TEMP;
61
	DECLARE XmlData CURSOR FOR
62
	SELECT *
63
	FROM
64
	OPENXML(@hdoc, '/Root/XmlData', 2)
65
	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),
66
	BRANCH_ID VARCHAR(15), DEP_ID VARCHAR(15),TRN_DESC nvarchar(1000),GL_CODE VARCHAR(100))
67
	OPEN XmlData;
68
	---
69
	DECLARE XmlInvoice CURSOR FOR
70
	SELECT *
71
	FROM
72
	OPENXML(@hdoc, '/Root/XmlInvoice', 2)
73
	WITH(TRANS_NO nvarchar(50),TRANS_DT VARCHAR(20),INVOICE_SIGN nvarchar(50),INVOICE_NO_SIGN nvarchar(50),
74
		 INVOICE_NO nvarchar(50),INVOICE_DT VARCHAR(20) ,SELLER nvarchar(250),TAX_NO nvarchar(15),GOODS_NAME nvarchar(250) ,
75
		 PRICE decimal(18,2),TAX decimal(18, 2),VAT decimal(18,2),NOTE NVARCHAR(MAX),VAT_RATE decimal(18,2),CURRENCY VARCHAR(15), RATE DECIMAL(18,2),PRICE_KT DECIMAL(18,2),VAT_KT DECIMAL(18,2),TOTAL_AMT_KT DECIMAL(18,2),TYPE_VAT VARCHAR(15), TYPE_FUNC VARCHAR(15))
76
		OPEN XmlInvoice;
77
	DECLARE @INDEX INT  =0, @INDEX_IV INT =0
78
	BEGIN TRANSACTION
79
		-- KHAI BAO CAC BUOC DUYET- XAC NHAN
80
		DECLARE @LEVEL_JOB VARCHAR(5), @LEVEL_JOB_PREV INT
81
		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')
82
		SET @LEVEL_JOB_PREV = CONVERT(INT,@LEVEL_JOB) -1
83
		----
84
		--IF(EXISTS (SELECT * FROM TR_REQ_PAYMENT WHERE REQ_PAY_ID = @p_REQ_PAY_ID AND MAKER_ID_KT IS NULL))
85

    
86
		IF(@p_XMP_TEMP IS NOT NULL)
87
		BEGIN
88
			UPDATE TR_REQ_PAYMENT SET 
89
			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
90
			WHERE REQ_PAY_ID =@p_REQ_PAY_ID
91
			DELETE FROM TR_REQ_PAY_ENTRIES WHERE REQ_PAY_ID = @p_REQ_PAY_ID
92
			DELETE FROM TR_REQ_PAY_INVOICE WHERE REQ_PAY_ID= @p_REQ_PAY_ID
93
		IF @@Error <> 0 GOTO ABORT
94
		DECLARE @DR_CR_NAME NVARCHAR(50),@ACC_NAME_FN NVARCHAR(500)
95
		FETCH NEXT FROM XmlData INTO @ENTRY_PAIR ,@DR_CR,@ACCT, @ACCT_NAME, @AMT ,@CURRENCY, @EXC_RATE,@BRANCH_ID, @DEP_ID,@TRN_DESC,@GL_CODE
96
		WHILE @@fetch_status=0 BEGIN
97
			SET @INDEX = @INDEX +1
98
			SET @GL_CODE = RIGHT(@GL_CODE,9)
99
			SET @ACC_NAME =UPPER(dbo.fChuyenCoDauThanhKhongDau(@ACCT_NAME))
100
			IF(@DR_CR='D')
101
			BEGIN
102
				SET @DR_CR_NAME =N'Nợ'
103
			END
104
			ELSE
105
			BEGIN
106
				SET @DR_CR_NAME =N'Có'
107
			END
108
			SET @BRANCH_CODE =(SELECT TOP 1 BRANCH_CODE FROM CM_BRANCH WHERE BRANCH_ID =@BRANCH_ID)
109
			SET @DEP_CODE =(SELECT TOP 1 DEP_CODE FROM CM_DEPARTMENT WHERE DEP_ID =@DEP_ID)
110
			--SET @ACC_NAME_FN =(SELECT TOP 1 ACC_NAME FROM CM_ACCOUNT WHERE ACC_NO =@ACCT)
111
			IF(@ACCT_NAME IS NULL OR @ACCT_NAME ='' OR @ACC_NAME ='0')
112
			BEGIN
113
				ROLLBACK TRANSACTION
114
				CLOSE XmlData;
115
				DEALLOCATE XmlData;
116
				SELECT '-1' as Result, '' REQ_PAY_ID, 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
117
				RETURN '-1'
118
			END
119
			IF(@GL_CODE IS NULL OR @GL_CODE ='')
120
			BEGIN
121
				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) =''))
122
				BEGIN
123
					ROLLBACK TRANSACTION
124
					CLOSE XmlData;
125
					DEALLOCATE XmlData;
126
					SELECT '-1' as Result, '' REQ_PAY_ID, 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
127
					RETURN '-1'
128
				END
129
			END
130
			IF(@DR_CR IS NULL OR @DR_CR ='')
131
			BEGIN
132
				ROLLBACK TRANSACTION
133
				CLOSE XmlData;
134
				DEALLOCATE XmlData;
135
				SELECT '-1' as Result, '' REQ_PAY_ID, N'Dòng: '+ CONVERT(VARCHAR(5),@INDEX) + N' Tài khoản nợ không được phép để trống' ErrorDesc
136
				RETURN '-1'
137
			END
138
			IF(@BRANCH_ID IS NULL OR @BRANCH_ID ='')
139
			BEGIN
140
				ROLLBACK TRANSACTION
141
				CLOSE XmlData;
142
				DEALLOCATE XmlData;
143
				SELECT '-1' as Result, '' REQ_PAY_ID, N'Dòng: '+ CONVERT(VARCHAR(5),@INDEX) + N' Đơn vị nhận không được phép để trống' ErrorDesc
144
				RETURN '-1'
145
			END
146
			IF(@ACCT IS NULL OR @ACCT ='')
147
			BEGIN
148
				ROLLBACK TRANSACTION
149
				CLOSE XmlData;
150
				DEALLOCATE XmlData;
151
				SELECT '-1' as Result, '' REQ_PAY_ID, N'Dòng: '+ CONVERT(VARCHAR(5),@INDEX) + N' Tài khoản có không được phép để trống' ErrorDesc
152
				RETURN '-1'
153
			END
154
			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)
155
			BEGIN
156
				ROLLBACK TRANSACTION
157
				CLOSE XmlData;
158
				DEALLOCATE XmlData;
159
				SELECT '-1' as Result, '' REQ_PAY_ID, 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
160
				RETURN '-1'
161
			END
162
			IF(@TRN_DESC IS NULL OR @TRN_DESC ='')
163
			BEGIN
164
				ROLLBACK TRANSACTION
165
				CLOSE XmlData;
166
				DEALLOCATE XmlData;
167
				SELECT '-1' as Result, '' REQ_PAY_ID, N'Dòng: '+ CONVERT(VARCHAR(5),@INDEX) + N' Diễn giải hạch toán không được phép để trống' ErrorDesc
168
				RETURN '-1'
169
			END
170
			--LUCTV 09082021 BO SUNG CHAN NEU DIEN GIAI HACH TOAN CHUA KY TU CO DAU <, &
171
			IF(@TRN_DESC IS NOT NULL AND @TRN_DESC <>'')
172
			BEGIN
173
				IF CHARINDEX('&',@TRN_DESC) <> 0
174
				BEGIN
175
					ROLLBACK TRANSACTION
176
					CLOSE XmlData;
177
					DEALLOCATE XmlData;
178
					SELECT '-1' as Result, '' REQ_PAY_ID, N'Dòng: '+ CONVERT(VARCHAR(5),@INDEX) + N' Diễn giải hạch toán không được phép chứa kí tự &' ErrorDesc
179
					RETURN '-1'
180
				END
181
			END
182
			IF(@TRN_DESC IS NOT NULL AND @TRN_DESC <>'')
183
			BEGIN
184
				IF CHARINDEX('<',@TRN_DESC ) <> 0 OR CHARINDEX('&',@TRN_DESC ) <> 0
185
				BEGIN
186
					ROLLBACK TRANSACTION
187
					CLOSE XmlData;
188
					DEALLOCATE XmlData;
189
					SELECT '-1' as Result, '' REQ_PAY_ID, N'Dòng: '+ CONVERT(VARCHAR(5),@INDEX) + N' Diễn giải hạch toán không được phép chứa kí tự < hoặc kí tự &' ErrorDesc
190
					RETURN '-1'
191
				END
192
			END
193
			-- NEU HACH TOAN CASA THI 3 KI TU DAU PHAI KHOP VOI BRANCH CODE CUA DON VI CHIU CHI PHI
194
			IF(LEN(@ACCT) >9 AND (SUBSTRING(@ACCT,1,3) <> (SELECT ISNULL(BRANCH_CODE,'') FROM CM_BRANCH WHERE BRANCH_ID = @BRANCH_ID)))
195
			BEGIN
196
				ROLLBACK TRANSACTION
197
					CLOSE XmlData;	
198
					DEALLOCATE XmlData;
199
					SELECT '-1' as Result, '' REQ_PAY_ID, 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
200
					RETURN '-1'
201
			---
202
			END
203
			--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))
204
			--BEGIN
205
			--ROLLBACK TRANSACTION
206
			--		--CLOSE XmlData;	
207
			--		--DEALLOCATE XmlData;
208
			--		SELECT '-1' as Result, '' REQ_PAY_ID, 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
209
			--		RETURN '-1'
210
			--	---
211
			--END
212
			IF(@DEP_ID IS NOT NULL AND @DEP_ID <> '' AND (LEFT(@DEP_CODE,3) <> @BRANCH_CODE))
213
			BEGIN
214
			ROLLBACK TRANSACTION
215
					--CLOSE XmlData;	
216
					--DEALLOCATE XmlData;
217
					SELECT '-1' as Result, '' REQ_PAY_ID, 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
218
					RETURN '-1'
219
				---
220
			END
221
			-- KIEM TRA SO TIEN HACH TOAN
222
			IF (ISNULL(@AMT,0)<=0)
223
			BEGIN
224
						ROLLBACK TRANSACTION
225
						SELECT '-1' as Result, '' REQ_PAY_ID, N'Dòng: '+ CONVERT(VARCHAR(5),@INDEX) + N' Mã bút toán số ' + @ENTRY_PAIR + N' Số tiền bút hạch toán phải lớn hơn không'  ErrorDesc
226
						RETURN '-1'
227
			END
228
			--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'))
229
			--BEGIN
230
			--	IF(@ACCT ='353200002' OR @ACCT ='353200001')
231
			--	BEGIN
232
			--		SELECT '-1' as Result, '' REQ_PAY_ID, 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
233
			--		RETURN '-1'
234
			--	END
235
			--END
236
			DECLARE @p_ET_ID VARCHAR(15);
237
			EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_ENTRIES', @p_ET_ID OUT;
238
			IF @p_ET_ID='' OR @p_ET_ID IS NULL GOTO ABORT;
239
			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)
240
			VALUES (@p_ET_ID,@p_REQ_PAY_ID,@ENTRY_PAIR,@DR_CR,@DR_CR_NAME,@ACCT,@ACCT_NAME, @AMT ,@CURRENCY, @EXC_RATE, @BRANCH_ID, @DEP_ID,@TRN_DESC,GETDATE(),@p_MAKER_ID_KT)
241
			-- NEU CHUA CO TAI KHOAN THI THEM VO CM_ACCOUNT
242
			IF(NOT EXISTS(SELECT * FROM CM_ACCOUNT WHERE ACC_NO =@ACCT))
243
			BEGIN
244
				INSERT INTO CM_ACCOUNT (ACC_NO, ACC_NAME, TK_GL, TK_GL_NAME, MAKER_ID, CHECKER_ID,CREATE_DT) VALUES
245
				(@ACCT,@ACCT_NAME,@GL_CODE,(SELECT TOP 1 ACC_NAME FROM CM_ACCOUNT WHERE ACC_NO =@GL_CODE),'admin','admin',GETDATE())
246
			END
247
			ELSE
248
			BEGIN
249
				IF(@GL_CODE IS NOT NULL AND @GL_CODE <> '')
250
					BEGIN
251
						UPDATE CM_ACCOUNT SET ACC_NAME =@ACC_NAME, TK_GL =@GL_CODE, TK_GL_NAME =(SELECT TOP 1 ACC_NAME FROM CM_ACCOUNT WHERE ACC_NO =@GL_CODE)
252
						WHERE ACC_NO=@ACCT
253
				END
254
				--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()
255
				--WHERE ACC_NO=@ACCT
256
			END
257
			--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Ợ
258
			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 
259
					(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)
260
			BEGIN
261
					ROLLBACK TRANSACTION
262
						CLOSE XmlData;	
263
						DEALLOCATE XmlData;
264
						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
265
						RETURN '-1'
266
					---
267
			END
268
			IF @@error<>0 GOTO ABORT;
269
		FETCH NEXT FROM XmlData INTO @ENTRY_PAIR ,@DR_CR,@ACCT, @ACCT_NAME, @AMT ,@CURRENCY, @EXC_RATE,@BRANCH_ID, @DEP_ID,@TRN_DESC,@GL_CODE
270
		END;
271
	CLOSE XmlData;
272
	DEALLOCATE XmlData;
273
	-- UPDATE INVOICE
274
	--Insert XmlData
275
		-- CAP NHAT TAI KHOAN GL
276
		UPDATE  CM_ACCOUNT
277
		SET TK_GL ='361200001', TK_GL_NAME =(SELECT ACC_NAME FROM CM_ACCOUNT WHERE ACC_NO ='361200001')
278
		WHERE LEN (ACC_NO) >9 AND ISNULL(TK_GL,'') =''
279
		AND SUBSTRING(ACC_NO,4,4) ='7048'
280

    
281
		UPDATE  CM_ACCOUNT
282
		SET TK_GL ='519200002', TK_GL_NAME =(SELECT ACC_NAME FROM CM_ACCOUNT WHERE ACC_NO ='519200002')
283
		WHERE LEN (ACC_NO) >9 AND ISNULL(TK_GL,'') =''
284
		AND SUBSTRING(ACC_NO,4,4) ='7044' AND SUBSTRING(ACC_NO,12,2) ='19'
285

    
286
		UPDATE  CM_ACCOUNT
287
		SET TK_GL ='421100001', TK_GL_NAME =(SELECT ACC_NAME FROM CM_ACCOUNT WHERE ACC_NO ='421100001')
288
		WHERE LEN (ACC_NO) >9 AND ISNULL(TK_GL,'') =''
289
		AND SUBSTRING(ACC_NO,4,4) ='7041'
290

    
291
		--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,'') ='')
292
		-- CAP NHAT TAI KHOAN GL
293
		FETCH NEXT FROM XmlInvoice  INTO @TRANS_NO , @TRANS_DT  ,@INVOICE_SIGN ,@INVOICE_NO_SIGN,@INVOICE_NO ,@INVOICE_DT ,@SELLER ,
294
		@TAX_NO ,@GOODS_NAME ,@PRICE ,@TAX,@VAT,@NOTES,@VAT_RATE,@CURRENCY,@RATE,@PRICE_KT ,@VAT_KT,@TOTAL_AMT_KT,@TYPE_VAT,@TYPE_FUNC
295
		WHILE @@fetch_status=0 BEGIN
296
			SET @INDEX_IV = @INDEX_IV+1
297
			IF(LEN(@INVOICE_NO) >7)
298
				BEGIN
299
					ROLLBACK TRANSACTION
300
					SELECT '-1' as Result, '' REQ_PAY_ID, N'Dòng ' + CONVERT(VARCHAR(5),@INDEX_IV)+N': Số hóa đơn '+ @INVOICE_NO +N' không được lớn hơn 7 kí tự' ErrorDesc
301
					RETURN '-1'
302
				END	
303
			  IF(LEN(@INVOICE_NO) <7)
304
				BEGIN
305
					ROLLBACK TRANSACTION
306
					SELECT '-1' as Result, '' REQ_PAY_ID, N'Dòng ' + CONVERT(VARCHAR(5),@INDEX_IV)+N': Số hóa đơn '+ @INVOICE_NO +N' phải đủ 7 kí tự' ErrorDesc
307
					RETURN '-1'
308
				END	
309
				IF(@TYPE_FUNC ='HC')
310
				BEGIN
311
					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 
312
					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'))))
313
					BEGIN
314
						ROLLBACK TRANSACTION
315
						SELECT '-1' as Result, '' REQ_PAY_ID,N'Dòng ' + CONVERT(VARCHAR(5),@INDEX_IV)+N': Số hóa đơn '+ @INVOICE_NO +N' đã tồn tại trong hệ thống' ErrorDesc
316
						RETURN '-1'
317
					END	
318
				END
319
				IF(@TYPE_FUNC ='KT')
320
				BEGIN
321
					IF(EXISTS(SELECT * FROM TR_REQ_PAY_INVOICE WHERE INVOICE_NO =@INVOICE_NO AND INVOICE_NO_SIGN = @INVOICE_NO_SIGN 
322
											AND INVOICE_SIGN =@INVOICE_SIGN AND TAX_NO =@TAX_NO AND TAX =@TAX AND TYPE_FUNC ='KT' AND AUTH_STATUS <>'D' AND
323
											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'))))
324
					BEGIN
325
						ROLLBACK TRANSACTION
326
						SELECT '-1' as Result, '' REQ_PAY_ID,N'Dòng ' + CONVERT(VARCHAR(5),@INDEX_IV)+N': Số hóa đơn '+ @INVOICE_NO +N' đã tồn tại trong hệ thống' ErrorDesc
327
						RETURN '-1'
328
					END	
329
				END
330
			DECLARE @p_REQ_INV_ID VARCHAR(15);
331
			EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_INVOICE', @p_REQ_INV_ID OUT;
332
			IF @p_REQ_INV_ID='' OR @p_REQ_INV_ID IS NULL GOTO ABORT;
333
			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,
334
		MAKER_ID,CREATE_DT,EDITOR_ID,AUTH_STATUS,CHECKER_ID,APPROVE_DT,
335
		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) 
336
		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,
337
		@p_MAKER_ID,GETDATE(),NULL,'U',NULL,NULL,GETDATE(),@p_MAKER_ID_KT,'U',NULL,NULL,'1',@INVOICE_NO_SIGN,@VAT_RATE,@CURRENCY,@RATE,@PRICE_KT ,@VAT_KT,@TOTAL_AMT_KT,@TYPE_VAT,@TYPE_FUNC)
338
		IF @@error<>0 GOTO ABORT;
339
		FETCH NEXT FROM XmlInvoice
340
		INTO @TRANS_NO , @TRANS_DT,@INVOICE_SIGN,@INVOICE_NO_SIGN,@INVOICE_NO ,@INVOICE_DT ,@SELLER ,@TAX_NO ,@GOODS_NAME ,@PRICE ,
341
		@TAX,@VAT,@NOTES,@VAT_RATE,@CURRENCY,@RATE,@PRICE_KT ,@VAT_KT,@TOTAL_AMT_KT,@TYPE_VAT,@TYPE_FUNC
342
		END;
343
		CLOSE XmlInvoice;
344
		DEALLOCATE XmlInvoice;
345
		--- Luu log chinh sua
346
		INSERT INTO TR_REQ_PAY_INVOICE_LOG SELECT * FROM TR_REQ_PAY_INVOICE WHERE REQ_PAY_ID =@p_REQ_PAY_ID
347
		-----
348
	--- BAT DAU CAP NHAT XAC DINH CAC BUOC DUYET SAU KHI KE TOAN CAP NHAT THONG TIN
349
	END
350
	COMMIT TRANSACTION
351
	IF(@p_XMP_TEMP IS NULL)
352
			BEGIN
353
				---BAT DAU VALIDATE
354
				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
355
				DECLARE cursorProduct CURSOR LOCAL FOR
356
				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
357
				Open cursorProduct
358
				FETCH NEXT FROM cursorProduct INTO @REQ_PAY_ID , @ET_ID, @AMT_ET, @ACC_ET , @DRCR_ET
359
				WHILE @@FETCH_STATUS = 0
360
				BEGIN
361
				  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))
362
				  BEGIN
363
					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)
364
					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))
365
					BEGIN
366
						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
367
						RETURN '-1'
368
					END
369
				  END
370
				  -- KIEM TRA SO TIEN NO CO
371
					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)
372
						<> 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)
373
						)
374
					BEGIN
375
						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
376
						RETURN '-1'
377
					END
378
				-- KIEM TRA SO TIEN HACH TOAN
379
				IF (ISNULL(@AMT_ET,0)<=0)
380
					BEGIN
381
						SELECT '-1' as Result, '' REQ_PAY_ID, N'Mã bút toán: ' + @ET_ID + N' Số tiền bút hạch toán phải lớn hơn không'  ErrorDesc
382
						RETURN '-1'
383
					END
384
				FETCH NEXT FROM cursorProduct INTO  @REQ_PAY_ID , @ET_ID, @AMT_ET, @ACC_ET , @DRCR_ET
385
				END
386
				-- KET THUC VIEC VALIDATE
387
				IF(EXISTS(SELECT * FROM TR_REQ_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND AUTH_STATUS_KT = 'S'))
388
				BEGIN
389
					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
390
					RETURN '-1'
391
				END
392
				IF(EXISTS(SELECT * FROM TR_REQ_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND AUTH_STATUS_KT = 'P'))
393
				BEGIN
394
					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
395
					RETURN '-1'
396
				END
397
				-- CHAN NEU CHI CO 1 BUT NO 1 BUT CO THI KHONG DUOC DI TIEP
398
				IF(EXISTS(SELECT * FROM TR_REQ_PAY_ENTRIES WHERE REQ_PAY_ID =@p_REQ_PAY_ID))
399
				BEGIN
400
					DECLARE  @SUM_CR DECIMAL(18,2), @SUM_DR DECIMAL(18,2)
401
					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)
402
					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)
403
					IF(ISNULL(@SUM_CR,0) <> ISNULL(@SUM_DR,0))
404
					BEGIN
405
					--ROLLBACK TRANSACTION
406
					--CLOSE XmlData;
407
					--DEALLOCATE XmlData;
408
						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
409
						RETURN '-1'
410
					END
411
				END
412
				UPDATE PL_REQUEST_PROCESS_CHILD SET STATUS_JOB ='P' WHERE REQ_ID=@p_REQ_PAY_ID AND TLNAME=@p_MAKER_ID_KT
413
				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)
414
				-- CAP NHAT TINH TRANG DUYET KE TOAN LA DANG XU LY
415
				UPDATE TR_REQ_PAYMENT SET AUTH_STATUS_KT='P',CREATE_DT_KT = GETDATE() WHERE REQ_PAY_ID=@p_REQ_PAY_ID
416
				INSERT INTO dbo.PL_PROCESS(REQ_ID,PROCESS_ID,CHECKER_ID,APPROVE_DT,PROCESS_DESC,NOTES)
417
				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')
418
				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
419
				RETURN '4'
420
END
421
SELECT '0' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, N'Cập nhật thông tin thành công' ErrorDesc
422
RETURN '0'
423
ABORT:
424
BEGIN
425
		ROLLBACK TRANSACTION
426
		CLOSE XmlData;
427
		DEALLOCATE XmlData;
428
		SELECT '-1' as Result, '' REQ_PAY_ID, '' ErrorDesc
429
		RETURN '-1'
430
End