Project

General

Profile

INS TRANSF 2.0.txt

Luc Tran Van, 03/02/2021 04:42 PM

 
1

    
2

    
3
ALTER PROCEDURE [dbo].[TR_REQ_PAY_TRANSFER_Ins]
4
@p_TRANSFER_ID	varchar(15) = NULL,
5
@p_TRANSFER_CODE varchar(15),
6
@p_REQ_PAY_ID	varchar(15)	,
7
@p_MAKER_ID	varchar(15)	,
8
@p_CREATE_DT	VARCHAR(25)	,
9
@p_AUTH_STATUS	varchar(15)	,
10
@p_CHECKER_ID	varchar(15)	,
11
@p_APPROVE_DT	datetime,	
12
@p_FR_USER	varchar(15)	,
13
@p_TO_USER	varchar(15)	,
14
@p_REASON	nvarchar(4000),	
15
@p_NOTES	nvarchar(4000)	,
16
@p_DESCRIPTION	nvarchar(4000),	
17
@p_CONFIRM_NOTES	nvarchar(4000),
18
@p_FR_ACC VARCHAR(50),
19
@p_TO_ACC VARCHAR(50),
20
@p_MAKER_ID_KT	varchar(15),
21
@P_LISTASSET XML,
22
@P_LISTASSET_v1 XML
23
AS
24

    
25
	DECLARE @l_TRANSFER_ID_MASTER VARCHAR(15)
26
	IF(@p_FR_USER ='' or @p_FR_USER IS NULL)
27
	BEGIN
28
			--ROLLBACK TRANSACTION
29
			SELECT '-1' Result, @p_TRANSFER_ID AS TRANSFER_ID, N'Người cho phiếu không được để trống' AS ErrorDesc 
30
			RETURN '-1'
31
	END
32
	IF(@p_TO_USER ='' or @p_TO_USER IS NULL)
33
	BEGIN
34
			--ROLLBACK TRANSACTION
35
			SELECT '-1' Result, @p_TRANSFER_ID AS TRANSFER_ID, N'Người nhận phiếu không được để trống' AS ErrorDesc 
36
			RETURN '-1'
37
	END
38
	IF(@p_CONFIRM_NOTES ='' or @p_CONFIRM_NOTES IS NULL)
39
	BEGIN
40
			--ROLLBACK TRANSACTION
41
			SELECT '-1' Result, @p_TRANSFER_ID AS TRANSFER_ID, N'Lý do điều chuyển không được để trống' AS ErrorDesc 
42
			RETURN '-1'
43
	END
44
	Declare @hdoc INT
45
	Exec sp_xml_preparedocument @hdoc Output,@P_LISTASSET
46
	DECLARE TransferDetail CURSOR LOCAL FOR
47
	SELECT *
48
	FROM OPENXML(@hDoc,'/Root/TransferDetail',2)
49
	WITH 
50
	(
51
		TRAN_DT_ID	varchar(15)				 ,
52
		TRANSFER_ID	varchar(15)				 ,
53
		REQ_PAY_ID	varchar(15)				 ,
54
		TOTAL_AMT	decimal(18, 0)			 ,
55
		TOAL_AMT_DO	decimal(18, 0)			 ,
56
		TOTAL_AMT_REMAIN	decimal(18, 0)	 ,
57
		TOTAL_AMT_REAL	decimal(18, 0)		 ,
58
		TOTAL_AMT_REMAIN_FN	decimal(18, 0)	 ,
59
		NOTES	nvarchar(4000)				 ,
60
		REASON	nvarchar(4000)				 
61
	)
62
	OPEN TransferDetail
63
	PRINT 'PASS KHOI TAO'
64
	BEGIN TRANSACTION
65
		--insert master
66
		EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_TRANSFER', @l_TRANSFER_ID_MASTER out
67
		IF @l_TRANSFER_ID_MASTER='' OR @l_TRANSFER_ID_MASTER IS NULL GOTO ABORT
68
		INSERT INTO TR_REQ_PAY_TRANSFER (TRANSFER_ID, TRANSFER_CODE,REQ_PAY_ID, MAKER_ID,CREATE_DT, AUTH_STATUS, CHECKER_ID, APPROVE_DT, FR_USER, TO_USER, REASON, NOTES,[DESCRIPTION],CONFIRM_NOTES)
69
		VALUES (@l_TRANSFER_ID_MASTER, @p_TRANSFER_CODE,@p_REQ_PAY_ID, @p_MAKER_ID,GETDATE(), @p_AUTH_STATUS, @p_CHECKER_ID, NULL, @p_FR_USER, @p_TO_USER, @p_REASON, @p_NOTES,@p_DESCRIPTION,@p_CONFIRM_NOTES)
70
		IF @@Error <> 0 GOTO ABORT
71
		PRINT 'INSERT MASTER SUCCESS'
72

    
73
		Declare 
74
		@l_TRAN_DT_ID	varchar(15)				 ,
75
		@l_TRANSFER_ID	varchar(15)				 ,
76
		@l_REQ_PAY_ID	varchar(15)				 ,
77
		@l_TOTAL_AMT	decimal(18, 0)			 ,
78
		@l_TOAL_AMT_DO	decimal(18, 0)			 ,
79
		@l_TOTAL_AMT_REMAIN	decimal(18, 0)	 ,
80
		@l_TOTAL_AMT_REAL	decimal(18, 0)		 ,
81
		@l_TOTAL_AMT_REMAIN_FN	decimal(18, 0)	 ,
82
		@l_NOTES	nvarchar(4000)				 ,
83
		@l_REASON	nvarchar(4000)				 
84
		-- insert detail
85
		DECLARE @l_CD_ID VARCHAR(15)
86
		FETCH NEXT FROM TransferDetail INTO @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
87
		-- Validate lưới chi tiết rỗng hay không
88
		IF (@@FETCH_STATUS < 0)
89
		BEGIN
90
			ROLLBACK TRANSACTION
91
			CLOSE TransferDetail;
92
			DEALLOCATE TransferDetail;
93
			SELECT '-1' as Result, '' AS TRANSFER_ID, N'Thông tin phiếu đề nghị tạm ứng không được để trống' ErrorDesc
94
			RETURN '-1'
95
		END
96
		DECLARE @IDX INT = 0
97
		WHILE @@FETCH_STATUS = 0	
98
		BEGIN
99
			SET @IDX = @IDX + 1
100
			-- 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
101
		IF EXISTS (SELECT A.REQ_PAY_ID FROM TR_REQ_PAY_TRANSFER_DT A
102
						LEFT JOIN TR_REQ_PAY_TRANSFER B ON A.TRANSFER_ID = B.TRANSFER_ID
103
						WHERE B.AUTH_STATUS = 'U')
104
			BEGIN
105
				ROLLBACK TRANSACTION
106
				CLOSE TransferDetail;
107
				DEALLOCATE TransferDetail;
108
				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
109
				RETURN '-1'
110
			END
111
			EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_TRANSFER_DT', @l_TRAN_DT_ID out
112
			IF @l_TRAN_DT_ID='' OR @l_TRAN_DT_ID IS NULL GOTO ABORT
113
			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)
114
			VALUES ( @l_TRAN_DT_ID,@l_TRANSFER_ID_MASTER,@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)
115
			IF @@Error <> 0 GOTO ABORT			
116
		-- next Group_Id
117
			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
118
		END
119
		
120
		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),
121
			@BRANCH_ID VARCHAR(15), @DEP_ID VARCHAR(15),@TRN_DESC nvarchar(1000), @GL_CODE VARCHAR(10)
122
		DECLARE @hdoc2 INT;
123
		EXEC sp_xml_preparedocument @hdoc2 OUTPUT, @P_LISTASSET_v1;
124
		DECLARE XmlData CURSOR LOCAL FOR
125
		SELECT *
126
		FROM
127
		OPENXML(@hdoc2, '/Root/XmlData', 2)
128
		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),
129
		BRANCH_ID VARCHAR(15), DEP_ID VARCHAR(15),TRN_DESC nvarchar(1000),GL_CODE VARCHAR(10))
130
		OPEN XmlData;
131
		---
132
		DECLARE @INDEX INT  =0, @INDEX_IV INT =0,@ACC_NAME_FN VARCHAR(500)
133
			-- KHAI BAO CAC BUOC DUYET- XAC NHAN
134
			IF @@Error <> 0 GOTO ABORT
135
			DECLARE @DR_CR_NAME NVARCHAR(50)
136
			FETCH NEXT FROM XmlData INTO @ENTRY_PAIR ,@DR_CR,@ACCT, @ACCT_NAME, @AMT ,@CURRENCY, @EXC_RATE,@BRANCH_ID, @DEP_ID,@TRN_DESC,@GL_CODE
137
			WHILE @@fetch_status=0 BEGIN
138
				SET @INDEX = @INDEX +1
139

    
140
				IF(@DR_CR='D')
141
				BEGIN
142
					SET @DR_CR_NAME =N'Nợ'
143
				END
144
				ELSE
145
				BEGIN
146
					SET @DR_CR_NAME =N'Có'
147
				END
148
				IF(@DR_CR IS NULL OR @DR_CR ='')
149
				BEGIN
150
					ROLLBACK TRANSACTION
151
					--CLOSE XmlData;
152
					--DEALLOCATE XmlData;
153
					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
154
					RETURN '-1'
155
				END
156
				IF(@ACCT IS NULL OR @ACCT ='')
157
				BEGIN
158
					ROLLBACK TRANSACTION
159
					--CLOSE XmlData;
160
					--DEALLOCATE XmlData;
161
					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
162
					RETURN '-1'
163
				END
164
				IF(@TRN_DESC IS NULL OR @TRN_DESC ='')
165
				BEGIN
166
					ROLLBACK TRANSACTION
167
					--CLOSE XmlData;
168
					--DEALLOCATE XmlData;
169
					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
170
					RETURN '-1'
171
				END
172
				IF(@BRANCH_ID IS NULL OR @BRANCH_ID ='')
173
					BEGIN
174
					ROLLBACK TRANSACTION
175
					--CLOSE XmlData;
176
					--DEALLOCATE XmlData;
177
					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
178
					RETURN '-1'
179
				END
180
				SET @ACC_NAME_FN =(SELECT TOP 1 ACC_NAME FROM CM_ACCOUNT WHERE ACC_NO =@ACCT)
181
				PRINT @ACCT
182
				PRINT @ACC_NAME_FN
183
				PRINT @ACCT_NAME
184
				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,'')))
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' 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
190
					RETURN '-1'
191
				END
192
				DECLARE @p_ET_ID VARCHAR(15);
193
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_ENTRIES', @p_ET_ID OUT;
194
				IF @p_ET_ID='' OR @p_ET_ID IS NULL GOTO ABORT;
195
				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)
196
				VALUES (@p_ET_ID,@l_TRANSFER_ID_MASTER,@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)
197
				IF(NOT EXISTS(SELECT * FROM CM_ACCOUNT WHERE ACC_NO =@ACCT))
198
				BEGIN
199
					INSERT INTO CM_ACCOUNT (ACC_NO, ACC_NAME, TK_GL, TK_GL_NAME, MAKER_ID, CHECKER_ID) VALUES
200
					(@ACCT,@ACCT_NAME,@GL_CODE,(SELECT TOP 1 ACC_NAME FROM CM_ACCOUNT WHERE ACC_NO =@GL_CODE),'admin','admin')
201
				END
202
				ELSE
203
				BEGIN
204
					IF(@GL_CODE IS NOT NULL AND @GL_CODE <> '')
205
					BEGIN
206
						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)
207
						WHERE ACC_NO=@ACCT
208
				END
209
			END
210
				IF @@error<>0 GOTO ABORT;
211
			FETCH NEXT FROM XmlData INTO @ENTRY_PAIR ,@DR_CR,@ACCT, @ACCT_NAME, @AMT ,@CURRENCY, @EXC_RATE,@BRANCH_ID, @DEP_ID,@TRN_DESC,@GL_CODE
212
			END;
213
		CLOSE XmlData;
214
		DEALLOCATE XmlData;
215
		-- CHAN NEU CHI CO 1 BUT NO 1 BUT CO THI KHONG DUOC DI TIEP
216
				IF(EXISTS(SELECT * FROM TR_REQ_PAY_ENTRIES WHERE REQ_PAY_ID =@p_TRANSFER_ID))
217
				BEGIN
218
					
219
					--CLOSE XmlData;
220
					--DEALLOCATE XmlData;
221
					DECLARE  @SUM_CR DECIMAL(18,2), @SUM_DR DECIMAL(18,2)
222
					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)
223
					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)
224
					IF(@SUM_CR <> @SUM_DR)
225
					BEGIN
226
						ROLLBACK TRANSACTION
227
						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
228
						RETURN '-1'
229
					END
230
				END
231
COMMIT TRANSACTION
232
	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
233
	RETURN '0'
234
ABORT:
235
BEGIN
236
		CLOSE AssetDetail
237
		DEALLOCATE AssetDetail
238
		CLOSE PaymentDetail
239
		DEALLOCATE PaymentDetail
240
		ROLLBACK TRANSACTION
241
		SELECT '-1' as Result, '' TRANSFER_ID, '' ErrorDesc
242
		RETURN '-1'
243
END
244

    
245

    
246