Project

General

Profile

1.0 THANH TOAN - TAM UNG -KT -UPD.txt

Luc Tran Van, 03/18/2021 10:18 AM

 
1
ALTER PROCEDURE [dbo].[TR_REQ_PAYMENT_KT_Upd]
2
@p_REQ_PAY_ID	varchar(15)= NULL,
3
@p_REQ_PAY_CODE	varchar(50)	= NULL,
4
@p_REQ_DT VARCHAR(20)= NULL,
5
@p_BRANCH_ID	varchar(15)	= NULL,
6
@p_DEP_ID	varchar(15)	= NULL,
7
@p_REQ_REASON	nvarchar(MAX)	= NULL,
8
@p_REQ_TYPE	varchar(15)	= NULL,
9
@P_REQ_ENTRIES nvarchar(MAX)	= NULL,
10
@p_REQ_DESCRIPTION	nvarchar(MAX)	= NULL,
11
@p_REF_ID	varchar(15)	= NULL,
12
@p_RECEIVER_PO	nvarchar(250)	= NULL,
13
@p_REQ_PAY_TYPE	varchar(15)	= NULL,
14
@p_REQ_TYPE_CURRENCY	nvarchar(50)	= NULL,
15
@p_REQ_AMT	decimal(18, 0)	= NULL,
16
@p_REQ_TEMP_AMT	decimal(18, 0)	= NULL,
17
@p_MAKER_ID	varchar(15)	= NULL,
18
@p_CREATE_DT	varchar(25)	= NULL,
19
@p_EDITOR_ID	varchar(15)	= NULL,
20
@p_AUTH_STATUS	varchar(1)	= NULL,
21
@p_CHECKER_ID	varchar(15)	= NULL,
22
@p_APPROVE_DT	varchar(25)	= NULL,
23
@p_CREATE_DT_KT	varchar(25)	= NULL,
24
@p_MAKER_ID_KT	varchar(15)	= NULL,
25
@p_AUTH_STATUS_KT	varchar(1)	= NULL,
26
@p_CHECKER_ID_KT	varchar(1)	= NULL,
27
@p_APPROVE_DT_KT  varchar(25)= null,
28
@p_CONFIRM_NOTE	nvarchar(500)	= NULL,
29
@p_BRANCH_CREATE	varchar(15)	= NULL,
30
@p_NOTES	varchar(15)	= NULL,
31
@p_RECORD_STATUS	varchar(1)	= NULL,
32
@p_TRANSFER_MAKER	nvarchar(50)	= NULL,
33
@p_TRANSFER_DT	varchar(25)	= NULL,
34
@p_TRASFER_USER_RECIVE	varchar(15)	= NULL,
35
@p_PROCESS	varchar(15)	= NULL,
36
@p_PAY_PHASE VARCHAR(15) = NULL,
37
@p_XMP_TEMP XML = NULL,
38
@p_XMP_TEMP_2 XML = NULL
39
AS
40

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

    
81
		IF(@p_XMP_TEMP IS NOT NULL)
82
		BEGIN
83
			UPDATE TR_REQ_PAYMENT SET 
84
			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
85
			WHERE REQ_PAY_ID =@p_REQ_PAY_ID
86
			DELETE FROM TR_REQ_PAY_ENTRIES WHERE REQ_PAY_ID = @p_REQ_PAY_ID
87
			DELETE FROM TR_REQ_PAY_INVOICE WHERE REQ_PAY_ID= @p_REQ_PAY_ID
88
		IF @@Error <> 0 GOTO ABORT
89
		DECLARE @DR_CR_NAME NVARCHAR(50),@ACC_NAME_FN NVARCHAR(500)
90
		FETCH NEXT FROM XmlData INTO @ENTRY_PAIR ,@DR_CR,@ACCT, @ACCT_NAME, @AMT ,@CURRENCY, @EXC_RATE,@BRANCH_ID, @DEP_ID,@TRN_DESC,@GL_CODE
91
		WHILE @@fetch_status=0 BEGIN
92
			SET @INDEX = @INDEX +1
93
			SET @GL_CODE = RIGHT(@GL_CODE,9)
94
			IF(@DR_CR='D')
95
			BEGIN
96
				SET @DR_CR_NAME =N'Nợ'
97
			END
98
			ELSE
99
			BEGIN
100
				SET @DR_CR_NAME =N'Có'
101
			END
102
			--SET @ACC_NAME_FN =(SELECT TOP 1 ACC_NAME FROM CM_ACCOUNT WHERE ACC_NO =@ACCT)
103
			IF(@ACCT_NAME IS NULL OR @ACCT_NAME ='')
104
			BEGIN
105
				ROLLBACK TRANSACTION
106
				CLOSE XmlData;
107
				DEALLOCATE XmlData;
108
				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
109
				RETURN '-1'
110
			END
111
			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) =''))
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à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
117
				RETURN '-1'
118
			END
119
			IF(@DR_CR IS NULL OR @DR_CR ='')
120
			BEGIN
121
				ROLLBACK TRANSACTION
122
				CLOSE XmlData;
123
				DEALLOCATE XmlData;
124
				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
125
				RETURN '-1'
126
			END
127
			IF(@BRANCH_ID IS NULL OR @BRANCH_ID ='')
128
			BEGIN
129
				ROLLBACK TRANSACTION
130
				CLOSE XmlData;
131
				DEALLOCATE XmlData;
132
				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
133
				RETURN '-1'
134
			END
135
			IF(@ACCT IS NULL OR @ACCT ='')
136
			BEGIN
137
				ROLLBACK TRANSACTION
138
				CLOSE XmlData;
139
				DEALLOCATE XmlData;
140
				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
141
				RETURN '-1'
142
			END
143
			IF(@TRN_DESC IS NULL OR @TRN_DESC ='')
144
			BEGIN
145
				ROLLBACK TRANSACTION
146
				CLOSE XmlData;
147
				DEALLOCATE XmlData;
148
				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
149
				RETURN '-1'
150
			END
151
			IF(EXISTS(SELECT * FROM TR_REQ_PAY_METHOD WHERE ACC_NO =@ACCT AND REQ_PAY_ID =@p_REQ_PAY_ID))
152
			BEGIN
153
				IF(@DR_CR ='C' AND ISNULL(@AMT,0) <> (SELECT ISNULL(SUM(TOTAL_AMT),0) FROM TR_REQ_PAY_METHOD WHERE ACC_NO =@ACCT AND REQ_PAY_ID =@p_REQ_PAY_ID))
154
				BEGIN
155
					ROLLBACK TRANSACTION
156
					CLOSE XmlData;
157
					DEALLOCATE XmlData;
158
					SELECT '-1' as Result, '' REQ_PAY_ID, N'Dòng: '+ CONVERT(VARCHAR(5),@INDEX) + N' Số tiền hạch toán có của tài khoản: '+@ACCT + 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 =@ACCT AND REQ_PAY_ID =@p_REQ_PAY_ID),'#,###')  ErrorDesc
159
					RETURN '-1'
160
				END
161
			END
162
			--IF(LEN(@ACCT) >9 AND ISNULL(@ACCT,'') <> '' AND (@GL_CODE IS NULL OR @GL_CODE =''))
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'Nếu bạn đang hạch toán CASA. Vui lòng bấm vào nút kiểm tra tài khoản để lấy chính xác thông tin tài khoản (tên tài khoản, tài khoản GL tương tứng) từ Core'  ErrorDesc
168
			--		RETURN '-1'
169
			-----
170
			--END
171
			DECLARE @p_ET_ID VARCHAR(15);
172
			EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_ENTRIES', @p_ET_ID OUT;
173
			IF @p_ET_ID='' OR @p_ET_ID IS NULL GOTO ABORT;
174
			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)
175
			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)
176
			-- NEU CHUA CO TAI KHOAN THI THEM VO CM_ACCOUNT
177
			IF(NOT EXISTS(SELECT * FROM CM_ACCOUNT WHERE ACC_NO =@ACCT))
178
			BEGIN
179
				INSERT INTO CM_ACCOUNT (ACC_NO, ACC_NAME, TK_GL, TK_GL_NAME, MAKER_ID, CHECKER_ID,CREATE_DT) VALUES
180
				(@ACCT,@ACCT_NAME,@GL_CODE,(SELECT TOP 1 ACC_NAME FROM CM_ACCOUNT WHERE ACC_NO =@GL_CODE),'admin','admin',GETDATE())
181
			END
182
			ELSE
183
			BEGIN
184
				IF(@GL_CODE IS NOT NULL AND @GL_CODE <> '')
185
					BEGIN
186
						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)
187
						WHERE ACC_NO=@ACCT
188
				END
189
				--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()
190
				--WHERE ACC_NO=@ACCT
191
			END
192
			IF @@error<>0 GOTO ABORT;
193
		FETCH NEXT FROM XmlData INTO @ENTRY_PAIR ,@DR_CR,@ACCT, @ACCT_NAME, @AMT ,@CURRENCY, @EXC_RATE,@BRANCH_ID, @DEP_ID,@TRN_DESC,@GL_CODE
194
		END;
195
	CLOSE XmlData;
196
	DEALLOCATE XmlData;
197
	-- UPDATE INVOICE
198
	--Insert XmlData
199
		
200
		FETCH NEXT FROM XmlInvoice  INTO @TRANS_NO , @TRANS_DT  ,@INVOICE_SIGN ,@INVOICE_NO_SIGN,@INVOICE_NO ,@INVOICE_DT ,@SELLER ,
201
		@TAX_NO ,@GOODS_NAME ,@PRICE ,@TAX,@VAT,@NOTES,@VAT_RATE,@CURRENCY,@RATE,@PRICE_KT ,@VAT_KT,@TOTAL_AMT_KT,@TYPE_VAT,@TYPE_FUNC
202
		WHILE @@fetch_status=0 BEGIN
203
			SET @INDEX_IV = @INDEX_IV+1
204
			IF(LEN(@INVOICE_NO) >7)
205
				BEGIN
206
					ROLLBACK TRANSACTION
207
					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
208
					RETURN '-1'
209
				END	
210
			  IF(LEN(@INVOICE_NO) <7)
211
				BEGIN
212
					ROLLBACK TRANSACTION
213
					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
214
					RETURN '-1'
215
				END	
216
				IF(@TYPE_FUNC ='HC')
217
				BEGIN
218
					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 
219
					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 <> 'E')))
220
					BEGIN
221
						ROLLBACK TRANSACTION
222
						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
223
						RETURN '-1'
224
					END	
225
				END
226
				IF(@TYPE_FUNC ='KT')
227
				BEGIN
228
					IF(EXISTS(SELECT * FROM TR_REQ_PAY_INVOICE WHERE INVOICE_NO =@INVOICE_NO AND INVOICE_NO_SIGN = @INVOICE_NO_SIGN 
229
											AND INVOICE_SIGN =@INVOICE_SIGN AND TAX_NO =@TAX_NO AND TAX =@TAX AND TYPE_FUNC ='KT' AND AUTH_STATUS <>'D' AND REQ_PAY_ID IN (SELECT REQ_PAY_ID FROM TR_REQ_PAYMENT WHERE AUTH_STATUS <> 'E')))
230
					BEGIN
231
						ROLLBACK TRANSACTION
232
						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
233
						RETURN '-1'
234
					END	
235
				END
236
			DECLARE @p_REQ_INV_ID VARCHAR(15);
237
			EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_INVOICE', @p_REQ_INV_ID OUT;
238
			IF @p_REQ_INV_ID='' OR @p_REQ_INV_ID IS NULL GOTO ABORT;
239
			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,
240
		MAKER_ID,CREATE_DT,EDITOR_ID,AUTH_STATUS,CHECKER_ID,APPROVE_DT,
241
		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) 
242
		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,
243
		@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)
244
		IF @@error<>0 GOTO ABORT;
245
		FETCH NEXT FROM XmlInvoice
246
		INTO @TRANS_NO , @TRANS_DT,@INVOICE_SIGN,@INVOICE_NO_SIGN,@INVOICE_NO ,@INVOICE_DT ,@SELLER ,@TAX_NO ,@GOODS_NAME ,@PRICE ,
247
		@TAX,@VAT,@NOTES,@VAT_RATE,@CURRENCY,@RATE,@PRICE_KT ,@VAT_KT,@TOTAL_AMT_KT,@TYPE_VAT,@TYPE_FUNC
248
		END;
249
		CLOSE XmlInvoice;
250
		DEALLOCATE XmlInvoice;
251
		--- Luu log chinh sua
252
		INSERT INTO TR_REQ_PAY_INVOICE_LOG SELECT * FROM TR_REQ_PAY_INVOICE WHERE REQ_PAY_ID =@p_REQ_PAY_ID
253
		-----
254
	--- BAT DAU CAP NHAT XAC DINH CAC BUOC DUYET SAU KHI KE TOAN CAP NHAT THONG TIN
255
	END
256
	COMMIT TRANSACTION
257
	IF(@p_XMP_TEMP IS NULL)
258
			BEGIN
259
				IF(EXISTS(SELECT * FROM TR_REQ_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND AUTH_STATUS_KT = 'S'))
260
				BEGIN
261
					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
262
					RETURN '-1'
263
				END
264
				IF(EXISTS(SELECT * FROM TR_REQ_PAYMENT WHERE REQ_PAY_ID =@p_REQ_PAY_ID AND AUTH_STATUS_KT = 'P'))
265
				BEGIN
266
					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
267
					RETURN '-1'
268
				END
269
				-- CHAN NEU CHI CO 1 BUT NO 1 BUT CO THI KHONG DUOC DI TIEP
270
				IF(EXISTS(SELECT * FROM TR_REQ_PAY_ENTRIES WHERE REQ_PAY_ID =@p_REQ_PAY_ID))
271
				BEGIN
272
					DECLARE  @SUM_CR DECIMAL(18,2), @SUM_DR DECIMAL(18,2)
273
					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)
274
					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)
275
					IF(@SUM_CR <> @SUM_DR)
276
					BEGIN
277
					--ROLLBACK TRANSACTION
278
					--CLOSE XmlData;
279
					--DEALLOCATE XmlData;
280
						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
281
						RETURN '-1'
282
					END
283
				END
284
				UPDATE PL_REQUEST_PROCESS_CHILD SET STATUS_JOB ='P' WHERE REQ_ID=@p_REQ_PAY_ID AND TLNAME=@p_MAKER_ID_KT
285
				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)
286
				-- CAP NHAT TINH TRANG DUYET KE TOAN LA DANG XU LY
287
				UPDATE TR_REQ_PAYMENT SET AUTH_STATUS_KT='P',CREATE_DT_KT = GETDATE() WHERE REQ_PAY_ID=@p_REQ_PAY_ID
288
				INSERT INTO dbo.PL_PROCESS(REQ_ID,PROCESS_ID,CHECKER_ID,APPROVE_DT,PROCESS_DESC,NOTES)
289
				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')
290
				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
291
				RETURN '4'
292
END
293
SELECT '0' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, '' ErrorDesc
294
RETURN '0'
295
ABORT:
296
BEGIN
297
		ROLLBACK TRANSACTION
298
		CLOSE XmlData;
299
		DEALLOCATE XmlData;
300
		SELECT '-1' as Result, '' REQ_PAY_ID, '' ErrorDesc
301
		RETURN '-1'
302
End
303

    
304
¿
305

    
306

    
307

    
308
ALTER PROCEDURE [dbo].[TR_REQ_ADVANCE_PAYMENT_KT_Upd]
309
@p_REQ_PAY_ID	varchar(15)= NULL,
310
@p_REQ_PAY_CODE	varchar(50)	= NULL,
311
@p_REQ_DT VARCHAR(20)= NULL,
312
@p_BRANCH_ID	varchar(15)	= NULL,
313
@p_DEP_ID	varchar(15)	= NULL,
314
@p_REQ_REASON	nvarchar(MAX)	= NULL,
315
@p_REQ_TYPE	varchar(15)	= NULL,
316
@P_REQ_ENTRIES nvarchar(MAX)	= NULL,
317
@p_REQ_DESCRIPTION	nvarchar(MAX)	= NULL,
318
@p_REF_ID	varchar(15)	= NULL,
319
@p_RECEIVER_PO	nvarchar(250)	= NULL,
320
@p_RECEIVER_DEBIT	nvarchar(250)	= NULL,
321
@p_REQ_PAY_TYPE	varchar(15)	= NULL,
322
@p_REQ_TYPE_CURRENCY	nvarchar(50)	= NULL,
323
@p_REQ_AMT	decimal(18, 0)	= NULL,
324
@p_REQ_TEMP_AMT	decimal(18, 0)	= NULL,
325
@p_MAKER_ID	varchar(15)	= NULL,
326
@p_CREATE_DT	varchar(25)	= NULL,
327
@p_EDITOR_ID	varchar(15)	= NULL,
328
@p_AUTH_STATUS	varchar(1)	= NULL,
329
@p_CHECKER_ID	varchar(15)	= NULL,
330
@p_APPROVE_DT	varchar(25)	= NULL,
331
@p_CREATE_DT_KT	varchar(25)	= NULL,
332
@p_MAKER_ID_KT	varchar(15)	= NULL,
333
@p_AUTH_STATUS_KT	varchar(1)	= NULL,
334
@p_CHECKER_ID_KT	varchar(1)	= NULL,
335
@p_APPROVE_DT_KT  varchar(25)= null,
336
@p_CONFIRM_NOTE	nvarchar(500)	= NULL,
337
@p_BRANCH_CREATE	varchar(15)	= NULL,
338
@p_NOTES	varchar(15)	= NULL,
339
@p_RECORD_STATUS	varchar(1)	= NULL,
340
@p_TRANSFER_MAKER	nvarchar(50)	= NULL,
341
@p_TRANSFER_DT	varchar(25)	= NULL,
342
@p_TRASFER_USER_RECIVE	varchar(15)	= NULL,
343
@p_PROCESS	varchar(15)	= NULL,
344
@p_PAY_PHASE VARCHAR(15)= NULL,
345
@p_DVDM_ID VARCHAR(15) = NULL,
346
@p_RATE DECIMAL(18,0)= 0,
347
@p_XMP_TEMP XML = NULL
348
AS
349
--Validation is here
350
/*
351
END 
352
*/
353
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),
354
	@BRANCH_ID VARCHAR(15), @DEP_ID VARCHAR(15),@TRN_DESC nvarchar(1000),@GL_CODE VARCHAR(10)
355
DECLARE @hdoc INT;
356
EXEC sp_xml_preparedocument @hdoc OUTPUT, @p_XMP_TEMP;
357
DECLARE XmlData CURSOR FOR
358
SELECT *
359
FROM
360
	OPENXML(@hdoc, '/Root/XmlData', 2)
361
	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),
362
	BRANCH_ID VARCHAR(15), DEP_ID VARCHAR(15),TRN_DESC nvarchar(1000), GL_CODE VARCHAR(10))
363
	OPEN XmlData;
364
	DECLARE @INDEX INT  =0
365
BEGIN TRANSACTION
366
		-- KHAI BAO CAC BUOC DUYET- XAC NHAN
367
		DECLARE @LEVEL_JOB VARCHAR(5), @LEVEL_JOB_PREV INT
368
		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')
369
		SET @LEVEL_JOB_PREV = CONVERT(INT,@LEVEL_JOB) -1
370
		----
371
		--IF(EXISTS (SELECT * FROM TR_REQ_ADVANCE_PAYMENT WHERE REQ_PAY_ID = @p_REQ_PAY_ID AND MAKER_ID_KT IS NULL))
372
		IF(@p_XMP_TEMP IS NOT NULL)
373
		BEGIN
374
			UPDATE TR_REQ_ADVANCE_PAYMENT SET 
375
			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
376
			WHERE REQ_PAY_ID =@p_REQ_PAY_ID
377
			DELETE FROM TR_REQ_PAY_ENTRIES WHERE REQ_PAY_ID = @p_REQ_PAY_ID
378
		IF @@Error <> 0 GOTO ABORT
379
		DECLARE @DR_CR_NAME NVARCHAR(50)
380
		FETCH NEXT FROM XmlData INTO @ENTRY_PAIR ,@DR_CR,@ACCT, @ACCT_NAME, @AMT ,@CURRENCY, @EXC_RATE,@BRANCH_ID, @DEP_ID,@TRN_DESC,@GL_CODE
381
		WHILE @@fetch_status=0 BEGIN
382

    
383
			SET @INDEX = @INDEX +1
384
			IF(@DR_CR='D')
385
			BEGIN
386
				SET @DR_CR_NAME =N'Nợ'
387
			END
388
			ELSE
389
			BEGIN
390
				SET @DR_CR_NAME =N'Có'
391
			END
392
			--SET @ACCT_NAME =(SELECT TOP 1 ACC_NAME FROM CM_ACCOUNT WHERE ACC_NO =@ACCT)
393
			IF(@ACCT_NAME IS NULL OR @ACCT_NAME ='')
394
			BEGIN
395
				ROLLBACK TRANSACTION
396
				CLOSE XmlData;
397
				DEALLOCATE XmlData;
398
				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
399
				RETURN '-1'
400
			END
401
			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) =''))
402
			BEGIN
403
				ROLLBACK TRANSACTION
404
				CLOSE XmlData;
405
				DEALLOCATE XmlData;
406
				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
407
				RETURN '-1'
408
			END
409
			IF(EXISTS(SELECT * FROM TR_REQ_PAY_METHOD WHERE ACC_NO =@ACCT AND REQ_PAY_ID =@p_REQ_PAY_ID))
410
			BEGIN
411
				IF(@DR_CR ='C' AND ISNULL(@AMT,0) <> (SELECT ISNULL(SUM(TOTAL_AMT),0) FROM TR_REQ_PAY_METHOD WHERE ACC_NO =@ACCT AND REQ_PAY_ID =@p_REQ_PAY_ID))
412
				BEGIN
413
					ROLLBACK TRANSACTION
414
					CLOSE XmlData;
415
					DEALLOCATE XmlData;
416
					SELECT '-1' as Result, '' REQ_PAY_ID, N'Dòng: '+ CONVERT(VARCHAR(5),@INDEX) + N' Số tiền hạch toán có của tài khoản: '+@ACCT + 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 =@ACCT AND REQ_PAY_ID =@p_REQ_PAY_ID),'#,###')  ErrorDesc
417
					RETURN '-1'
418
				END
419
			END
420
			--IF(LEN(@ACCT) >9 AND (@GL_CODE IS NULL OR @GL_CODE =''))
421
			--BEGIN
422
			--	ROLLBACK TRANSACTION
423
			--		CLOSE XmlData;
424
			--		DEALLOCATE XmlData;
425
			--		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. Vui lòng bấm vào nút kiểm tra tài khoản để lấy chính xác thông tin tài khoản (tên tài khoản, tài khoản GL tương tứng) từ Core'  ErrorDesc
426
			--		RETURN '-1'
427
			-----
428
			--END
429
			--IF(@DR_ACCT IS NULL OR @DR_ACCT ='')
430
			--BEGIN
431
			--	ROLLBACK TRANSACTION
432
			--	CLOSE XmlData;
433
			--	DEALLOCATE XmlData;
434
			--	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
435
			--	RETURN '-1'
436
			--END
437
			--IF(@TRN_DESC IS NULL OR @TRN_DESC ='')
438
			--BEGIN
439
			--	ROLLBACK TRANSACTION
440
			--	CLOSE XmlData;
441
			--	DEALLOCATE XmlData;
442
			--	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
443
			--	RETURN '-1'
444
			--END
445
			DECLARE @p_ET_ID VARCHAR(15);
446
			EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_ENTRIES', @p_ET_ID OUT;
447
			IF @p_ET_ID='' OR @p_ET_ID IS NULL GOTO ABORT;
448
			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)
449
			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)
450

    
451
			-- NEU CHUA CO TAI KHOAN THI THEM VO CM_ACCOUNT
452
			IF(NOT EXISTS(SELECT * FROM CM_ACCOUNT WHERE ACC_NO =@ACCT))
453
			BEGIN
454
				INSERT INTO CM_ACCOUNT (ACC_NO, ACC_NAME, TK_GL, TK_GL_NAME, MAKER_ID, CHECKER_ID) VALUES
455
				(@ACCT,@ACCT_NAME,@GL_CODE,(SELECT TOP 1 ACC_NAME FROM CM_ACCOUNT WHERE ACC_NO =@GL_CODE),'admin','admin')
456
			END
457
			ELSE
458
			BEGIN
459
				IF(@GL_CODE IS NOT NULL AND @GL_CODE <> '')
460
					BEGIN
461
						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)
462
						WHERE ACC_NO=@ACCT
463
				END
464
			END
465
			IF @@error<>0 GOTO ABORT;
466
		FETCH NEXT FROM XmlData INTO @ENTRY_PAIR ,@DR_CR,@ACCT, @ACCT_NAME, @AMT ,@CURRENCY, @EXC_RATE,@BRANCH_ID, @DEP_ID,@TRN_DESC,@GL_CODE
467
		END;
468
	CLOSE XmlData;
469
	DEALLOCATE XmlData;
470
	END
471
COMMIT TRANSACTION
472
--- BAT DAU CAP NHAT XAC DINH CAC BUOC DUYET SAU KHI KE TOAN CAP NHAT THONG TIN
473
	IF(@p_XMP_TEMP IS NULL)
474
	BEGIN
475
		-- CHAN NEU CHI CO 1 BUT NO 1 BUT CO THI KHONG DUOC DI TIEP
476
		IF(EXISTS(SELECT * FROM TR_REQ_PAY_ENTRIES WHERE REQ_PAY_ID =@p_REQ_PAY_ID))
477
		BEGIN
478
			DECLARE  @SUM_CR DECIMAL(18,2), @SUM_DR DECIMAL(18,2)
479
			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)
480
			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)
481
			IF(@SUM_CR<>@SUM_DR)
482
			BEGIN
483
			--ROLLBACK TRANSACTION
484
			--CLOSE XmlData;
485
			--DEALLOCATE XmlData;
486
				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
487
				RETURN '-1'
488
			END
489
		END
490
		UPDATE PL_REQUEST_PROCESS_CHILD SET STATUS_JOB ='P' WHERE REQ_ID=@p_REQ_PAY_ID AND TLNAME=@p_MAKER_ID_KT
491
		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)
492
		-- CAP NHAT TINH TRANG VE DANG XU LY
493
		UPDATE TR_REQ_ADVANCE_PAYMENT SET AUTH_STATUS_KT='P',CREATE_DT_KT =GETDATE() WHERE REQ_PAY_ID=@p_REQ_PAY_ID
494
		INSERT INTO dbo.PL_PROCESS(REQ_ID,PROCESS_ID,CHECKER_ID,APPROVE_DT,PROCESS_DESC,NOTES)
495
				   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')
496
		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
497
		RETURN '4'
498
	END
499
SELECT '0' as Result, @p_REQ_PAY_ID  REQ_PAY_ID, '' ErrorDesc
500
RETURN '0'
501
ABORT:
502
BEGIN
503
		ROLLBACK TRANSACTION
504
		CLOSE XmlData;
505
		DEALLOCATE XmlData;
506
		SELECT '-1' as Result, '' REQ_PAY_ID, '' ErrorDesc
507
		RETURN '-1'
508
End
509