Project

General

Profile

4.0 RANG BUOC HACH TOAN DIEU CHUYEN.txt

Luc Tran Van, 03/15/2021 10:32 AM

 
1

    
2
ALTER PROCEDURE [dbo].[TR_REQ_PAY_TRANSFER_V1_Upd]
3
@p_TRANSFER_ID	varchar(15),
4
@p_TRANSFER_CODE varchar(15),
5
@p_REQ_PAY_ID	varchar(15)	,
6
@p_MAKER_ID	varchar(15)	,
7
@p_CREATE_DT	VARCHAR(25)	,
8
@p_AUTH_STATUS	varchar(15)	,
9
@p_CHECKER_ID	varchar(15)	,
10
@p_APPROVE_DT	datetime,	
11
@p_FR_USER	varchar(15)	,
12
@p_TO_USER	varchar(15)	,
13
@p_REASON	nvarchar(4000),	
14
@p_NOTES	nvarchar(4000)	,
15
@p_DESCRIPTION	nvarchar(4000),	
16
@p_CONFIRM_NOTES	nvarchar(4000)	,
17
@p_FR_ACC VARCHAR(50),
18
@p_TO_ACC VARCHAR(50),
19
@p_MAKER_ID_KT	varchar(15),
20
@P_LISTASSET XML,
21
@P_LISTASSET_v1 XML
22
AS
23
	IF(@p_FR_USER ='' or @p_FR_USER IS NULL)
24
	BEGIN
25
			--ROLLBACK TRANSACTION
26
			SELECT '-1' Result, @p_TRANSFER_ID AS TRANSFER_ID, N'Người cho phiếu không được để trống' AS ErrorDesc 
27
			RETURN '-1'
28
	END
29
	IF(@p_TO_USER ='' or @p_TO_USER IS NULL)
30
	BEGIN
31
			--ROLLBACK TRANSACTION
32
			SELECT '-1' Result, @p_TRANSFER_ID AS TRANSFER_ID, N'Người nhận phiếu không được để trống' AS ErrorDesc 
33
			RETURN '-1'
34
	END
35
	IF(@p_CONFIRM_NOTES ='' or @p_CONFIRM_NOTES IS NULL)
36
	BEGIN
37
			--ROLLBACK TRANSACTION
38
			SELECT '-1' Result, @p_TRANSFER_ID AS TRANSFER_ID, N'Lý do điều chuyển không được để trống' AS ErrorDesc 
39
			RETURN '-1'
40
	END
41
	Declare @hdoc INT
42
	Exec sp_xml_preparedocument @hdoc Output,@P_LISTASSET
43
	DECLARE TransferDetail CURSOR LOCAL FOR
44
	SELECT *
45
	FROM OPENXML(@hDoc,'/Root/TransferDetail',2)
46
	WITH 
47
	(
48
		TRAN_DT_ID	varchar(15)				 ,
49
		TRANSFER_ID	varchar(15)				 ,
50
		REQ_PAY_ID	varchar(15)				 ,
51
		TOTAL_AMT	decimal(18, 0)			 ,
52
		TOAL_AMT_DO	decimal(18, 0)			 ,
53
		TOTAL_AMT_REMAIN	decimal(18, 0)	 ,
54
		TOTAL_AMT_REAL	decimal(18, 0)		 ,
55
		TOTAL_AMT_REMAIN_FN	decimal(18, 0)	 ,
56
		NOTES	nvarchar(4000)				 ,
57
		REASON	nvarchar(4000)				 
58
	)
59
	OPEN TransferDetail
60
	PRINT 'PASS KHOI TAO'
61
	BEGIN TRANSACTION
62
		--insert master
63
		--DECLARE @l_CONTRACT_ID VARCHAR(15)
64
		UPDATE TR_REQ_PAY_TRANSFER SET REASON =@p_REASON, CONFIRM_NOTES =@p_CONFIRM_NOTES WHERE TRANSFER_ID =@p_TRANSFER_ID
65
		IF @@Error <> 0 GOTO ABORT
66
		PRINT 'INSERT MASTER SUCCESS'
67

    
68
		Declare 
69
		@l_TRAN_DT_ID	varchar(15)				 ,
70
		@l_TRANSFER_ID	varchar(15)				 ,
71
		@l_REQ_PAY_ID	varchar(15)				 ,
72
		@l_TOTAL_AMT	decimal(18, 0)			 ,
73
		@l_TOAL_AMT_DO	decimal(18, 0)			 ,
74
		@l_TOTAL_AMT_REMAIN	decimal(18, 0)	 ,
75
		@l_TOTAL_AMT_REAL	decimal(18, 0)		 ,
76
		@l_TOTAL_AMT_REMAIN_FN	decimal(18, 0)	 ,
77
		@l_NOTES	nvarchar(4000)				 ,
78
		@l_REASON	nvarchar(4000)				 
79
		--Insert detail
80
		DELETE FROM TR_REQ_PAY_TRANSFER_DT WHERE TRANSFER_ID =@p_TRANSFER_ID OR TRANSFER_ID IS NULL OR TRANSFER_ID =''
81
		FETCH NEXT FROM TransferDetail INTO @l_TRAN_DT_ID,@l_TRANSFER_ID,@l_REQ_PAY_ID,@l_TOTAL_AMT,@l_TOAL_AMT_DO,@l_TOTAL_AMT_REMAIN,@l_TOTAL_AMT_REAL,@l_TOTAL_AMT_REMAIN_FN,@l_NOTES,@l_REASON
82
		-- Validate lưới chi tiết rỗng hay không
83
		IF (@@FETCH_STATUS < 0)
84
		BEGIN
85
			ROLLBACK TRANSACTION
86
			CLOSE TransferDetail;
87
			DEALLOCATE TransferDetail;
88
			SELECT '-1' as Result, '' AS TRANSFER_ID, N'Thông tin phiếu đề nghị tạm ứng không được để trống' ErrorDesc
89
			RETURN '-1'
90
		END
91
		DECLARE @IDX INT = 0
92
		WHILE @@FETCH_STATUS = 0	
93
		BEGIN
94
			SET @IDX = @IDX + 1
95
			-- Kiểm tra nếu PĐN tạm ứng đang được điều chuyển ở một giao dịch khác thì không cho tạo
96
			IF EXISTS (SELECT A.REQ_PAY_ID FROM TR_REQ_PAY_TRANSFER_DT A
97
						LEFT JOIN TR_REQ_PAY_TRANSFER B ON A.TRANSFER_ID = B.TRANSFER_ID AND A.REQ_PAY_ID =@l_REQ_PAY_ID
98
						WHERE B.TRANSFER_ID <> @p_TRANSFER_ID AND B.AUTH_STATUS = 'U')
99
			BEGIN
100
				ROLLBACK TRANSACTION
101
				CLOSE TransferDetail;
102
				DEALLOCATE TransferDetail;
103
				SELECT '-1' as Result, '' AS TRANSFER_ID, N'Dòng: '+ CONVERT(VARCHAR(5),@IDX) + N' Phiếu đề nghị tạm ứng đang được điều chuyển ở một giao dịch khác' ErrorDesc
104
				RETURN '-1'
105
			END
106
			EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_TRANSFER_DT', @l_TRAN_DT_ID out
107
			IF @l_TRAN_DT_ID='' OR @l_TRAN_DT_ID IS NULL GOTO ABORT
108
			INSERT INTO TR_REQ_PAY_TRANSFER_DT(TRAN_DT_ID, TRANSFER_ID,REQ_PAY_ID,TOTAL_AMT, TOAL_AMT_DO, TOTAL_AMT_REMAIN, TOTAL_AMT_REAL,  TOTAL_AMT_REMAIN_FN, NOTES, REASON)
109
			VALUES ( @l_TRAN_DT_ID,@p_TRANSFER_ID,@l_REQ_PAY_ID,@l_TOTAL_AMT,@l_TOAL_AMT_DO,@l_TOTAL_AMT_REMAIN,@l_TOTAL_AMT_REAL,@l_TOTAL_AMT_REMAIN_FN,@l_NOTES,@l_REASON)
110
			IF @@Error <> 0 GOTO ABORT			
111
		-- next Group_Id
112
			FETCH NEXT FROM TransferDetail INTO @l_TRAN_DT_ID,@l_TRANSFER_ID,@l_REQ_PAY_ID,@l_TOTAL_AMT,@l_TOAL_AMT_DO,@l_TOTAL_AMT_REMAIN,@l_TOTAL_AMT_REAL,@l_TOTAL_AMT_REMAIN_FN,@l_NOTES,@l_REASON
113
		END
114
	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),
115
	@BRANCH_ID VARCHAR(15), @DEP_ID VARCHAR(15),@TRN_DESC nvarchar(1000), @GL_CODE VARCHAR(10)
116
	DECLARE @hdoc2 INT;
117
	EXEC sp_xml_preparedocument @hdoc2 OUTPUT, @P_LISTASSET_v1;
118
	DECLARE XmlData CURSOR LOCAL FOR
119
	SELECT *
120
	FROM
121
	OPENXML(@hdoc2, '/Root/XmlData', 2)
122
	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),
123
	BRANCH_ID VARCHAR(15), DEP_ID VARCHAR(15),TRN_DESC nvarchar(1000),GL_CODE VARCHAR(10))
124
	OPEN XmlData;
125
		DECLARE @DR_CR_NAME NVARCHAR(50), @INDEX INT =0, @ACC_NAME_FN VARCHAR(500)
126
		--
127
		DELETE FROM TR_REQ_PAY_ENTRIES WHERE REQ_PAY_ID =@p_TRANSFER_ID
128
		FETCH NEXT FROM XmlData INTO @ENTRY_PAIR ,@DR_CR,@ACCT, @ACCT_NAME, @AMT ,@CURRENCY, @EXC_RATE,@BRANCH_ID, @DEP_ID,@TRN_DESC,@GL_CODE
129
		WHILE @@fetch_status=0 BEGIN
130
			SET @INDEX= @INDEX+1
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
			IF(@DR_CR IS NULL OR @DR_CR ='')
140
			BEGIN
141
				ROLLBACK TRANSACTION
142
				CLOSE XmlData;
143
				DEALLOCATE XmlData;
144
				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
145
				RETURN '-1'
146
			END
147
			IF(@ACCT IS NULL OR @ACCT ='')
148
			BEGIN
149
				ROLLBACK TRANSACTION
150
				--CLOSE XmlData;
151
				--DEALLOCATE XmlData;
152
				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
153
				RETURN '-1'
154
			END
155
			IF(@TRN_DESC IS NULL OR @TRN_DESC ='')
156
			BEGIN
157
				ROLLBACK TRANSACTION
158
				--CLOSE XmlData;
159
				--DEALLOCATE XmlData;
160
				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
161
				RETURN '-1'
162
			END
163
			IF(@BRANCH_ID IS NULL OR @BRANCH_ID ='')
164
			BEGIN
165
				ROLLBACK TRANSACTION
166
				--CLOSE XmlData;
167
				--DEALLOCATE XmlData;
168
				SELECT '-1' as Result, '' REQ_PAY_ID, N'Dòng: '+ CONVERT(VARCHAR(5),@INDEX) + N' Đơn vị không được phép để trống' ErrorDesc
169
				RETURN '-1'
170
			END
171
			SET @ACC_NAME_FN =(SELECT TOP 1 ACC_NAME FROM CM_ACCOUNT WHERE ACC_NO =@ACCT)
172
			IF(@ACC_NAME_FN IS NULL OR @ACC_NAME_FN ='')
173
			BEGIN
174
					SET @ACC_NAME_FN =(SELECT TOP 1 ACC_NAME FROM CM_ACCOUNT_PAY WHERE ACC_NUM =@ACCT)
175
			END
176
			IF((@ACCT_NAME IS NULL OR @ACCT_NAME ='' OR @ACC_NAME_FN IS NULL OR @ACC_NAME_FN ='' ) OR (ISNULL(@ACCT_NAME,'') <> ISNULL(@ACC_NAME_FN,'')))
177
			BEGIN
178
				ROLLBACK TRANSACTION
179
				--CLOSE XmlData;
180
				--DEALLOCATE XmlData;
181
				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
182
				RETURN '-1'
183
			END
184
			IF(LEN(@ACCT) >9 AND (@GL_CODE IS NULL OR @GL_CODE =''))
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'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
190
					RETURN '-1'
191
			---
192
			END
193
			DECLARE @p_ET_ID VARCHAR(15);
194
			EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_ENTRIES', @p_ET_ID OUT;
195
			IF @p_ET_ID='' OR @p_ET_ID IS NULL GOTO ABORT;
196
			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)
197
			VALUES (@p_ET_ID,@p_TRANSFER_ID,@ENTRY_PAIR,@DR_CR,@DR_CR_NAME,@ACCT,@ACCT_NAME, @AMT ,@CURRENCY, @EXC_RATE, @BRANCH_ID, @DEP_ID,UPPER(@TRN_DESC),GETDATE(),@p_MAKER_ID_KT)
198
			-- NEU CHUA CO TAI KHOAN THI THEM VO CM_ACCOUNT
199
			IF(NOT EXISTS(SELECT * FROM CM_ACCOUNT WHERE ACC_NO =@ACCT))
200
			BEGIN
201
				INSERT INTO CM_ACCOUNT (ACC_NO, ACC_NAME, TK_GL, TK_GL_NAME, MAKER_ID, CHECKER_ID) VALUES
202
				(@ACCT,@ACCT_NAME,@GL_CODE,(SELECT TOP 1 ACC_NAME FROM CM_ACCOUNT WHERE ACC_NO =@GL_CODE),'admin','admin')
203
			END
204
			ELSE
205
			BEGIN
206
				IF(@GL_CODE IS NOT NULL AND @GL_CODE <> '')
207
				BEGIN
208
					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)
209
					WHERE ACC_NO=@ACCT
210
				END
211
			END
212
			IF @@error<>0 GOTO ABORT;
213
		FETCH NEXT FROM XmlData INTO @ENTRY_PAIR ,@DR_CR,@ACCT, @ACCT_NAME, @AMT ,@CURRENCY, @EXC_RATE,@BRANCH_ID, @DEP_ID,@TRN_DESC,@GL_CODE
214
		END;
215
	CLOSE XmlData;
216
	DEALLOCATE XmlData;	
217
	IF(EXISTS(SELECT * FROM TR_REQ_PAY_ENTRIES WHERE REQ_PAY_ID =@p_TRANSFER_ID))
218
			BEGIN
219
				DECLARE  @SUM_CR DECIMAL(18,2), @SUM_DR DECIMAL(18,2)
220
				SET @SUM_CR =ISNULL((SELECT SUM(AMT*ISNULL(EXC_RATE,1)) FROM TR_REQ_PAY_ENTRIES WHERE REQ_PAY_ID =@p_TRANSFER_ID AND DR_CR ='C'),0)
221
				SET @SUM_DR =ISNULL((SELECT SUM(AMT*ISNULL(EXC_RATE,1)) FROM TR_REQ_PAY_ENTRIES WHERE REQ_PAY_ID =@p_TRANSFER_ID AND DR_CR ='D'),0)
222
				IF(@SUM_CR <> @SUM_DR)
223
				BEGIN
224
					ROLLBACK TRANSACTION
225
					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ó: ' + FORMAT(@SUM_DR,'#,###') ErrorDesc
226
					RETURN '-1'
227
				END
228
	END
229
COMMIT TRANSACTION
230
SELECT '0' as Result, @p_TRANSFER_ID  TRANSFER_ID, N'Giao dịch điều chuyển tạm ứng có ID: '+ @p_TRANSFER_ID +N' đã được tạo bản nháp thành công. Bạn có thể bấm gửi phê duyệt' ErrorDesc
231
RETURN '0'
232
ABORT:
233
BEGIN
234
		CLOSE AssetDetail
235
		DEALLOCATE AssetDetail
236
		CLOSE PaymentDetail
237
		DEALLOCATE PaymentDetail
238
		ROLLBACK TRANSACTION
239
		SELECT '-1' as Result, '' TRANSFER_ID, '' ErrorDesc
240
		RETURN '-1'
241
End
242