Project

General

Profile

INS TRANSF.txt

Luc Tran Van, 03/02/2021 02:12 PM

 
1

    
2

    
3
--
4
--INSERT INTO SYS_PREFIX (ID,Prefix,[Description]) VALUES ('TR_REQ_PAY_TRANSFER','TRPTF',N'Điều chuyển tạm ứng')
5
--INSERT INTO SYS_PREFIX (ID,Prefix,[Description]) VALUES ('TR_REQ_PAY_TRANSFER_DT','TRTFDT',N'Điều chuyển tạm ứng chi tiết')
6
--
7
ALTER PROCEDURE [dbo].[TR_REQ_PAY_TRANSFER_Ins]
8
@p_TRANSFER_ID	varchar(15) = NULL,
9
@p_TRANSFER_CODE varchar(15),
10
@p_REQ_PAY_ID	varchar(15)	,
11
@p_MAKER_ID	varchar(15)	,
12
@p_CREATE_DT	VARCHAR(25)	,
13
@p_AUTH_STATUS	varchar(15)	,
14
@p_CHECKER_ID	varchar(15)	,
15
@p_APPROVE_DT	datetime,	
16
@p_FR_USER	varchar(15)	,
17
@p_TO_USER	varchar(15)	,
18
@p_REASON	nvarchar(4000),	
19
@p_NOTES	nvarchar(4000)	,
20
@p_DESCRIPTION	nvarchar(4000),	
21
@p_CONFIRM_NOTES	nvarchar(4000),
22
@p_FR_ACC VARCHAR(50),
23
@p_TO_ACC VARCHAR(50),
24
@p_MAKER_ID_KT	varchar(15),
25
@P_LISTASSET XML,
26
@P_LISTASSET_v1 XML
27
AS
28

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

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

    
144
				IF(@DR_CR='D')
145
				BEGIN
146
					SET @DR_CR_NAME =N'Nợ'
147
				END
148
				ELSE
149
				BEGIN
150
					SET @DR_CR_NAME =N'Có'
151
				END
152
				IF(@DR_CR IS NULL OR @DR_CR ='')
153
				BEGIN
154
					ROLLBACK TRANSACTION
155
					--CLOSE XmlData;
156
					--DEALLOCATE XmlData;
157
					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
158
					RETURN '-1'
159
				END
160
				IF(@ACCT IS NULL OR @ACCT ='')
161
				BEGIN
162
					ROLLBACK TRANSACTION
163
					--CLOSE XmlData;
164
					--DEALLOCATE XmlData;
165
					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
166
					RETURN '-1'
167
				END
168
				IF(@TRN_DESC IS NULL OR @TRN_DESC ='')
169
				BEGIN
170
					ROLLBACK TRANSACTION
171
					--CLOSE XmlData;
172
					--DEALLOCATE XmlData;
173
					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
174
					RETURN '-1'
175
				END
176
				IF(@BRANCH_ID IS NULL OR @BRANCH_ID ='')
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' Đơn vị không được phép để trống' ErrorDesc
182
					RETURN '-1'
183
				END
184
				SET @ACC_NAME_FN =(SELECT TOP 1 ACC_NAME FROM CM_ACCOUNT WHERE ACC_NO =@ACCT)
185
				PRINT @ACCT
186
				PRINT @ACC_NAME_FN
187
				PRINT @ACCT_NAME
188
				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,'')))
189
				BEGIN
190
					--ROLLBACK TRANSACTION
191
					--CLOSE XmlData;
192
					DEALLOCATE XmlData;
193
					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
194
					RETURN '-1'
195
				END
196
				DECLARE @p_ET_ID VARCHAR(15);
197
				EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_ENTRIES', @p_ET_ID OUT;
198
				IF @p_ET_ID='' OR @p_ET_ID IS NULL GOTO ABORT;
199
				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)
200
				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)
201
				IF @@error<>0 GOTO ABORT;
202
			FETCH NEXT FROM XmlData INTO @ENTRY_PAIR ,@DR_CR,@ACCT, @ACCT_NAME, @AMT ,@CURRENCY, @EXC_RATE,@BRANCH_ID, @DEP_ID,@TRN_DESC
203
			END;
204
		CLOSE XmlData;
205
		DEALLOCATE XmlData;
206
		-- CHAN NEU CHI CO 1 BUT NO 1 BUT CO THI KHONG DUOC DI TIEP
207
				IF(EXISTS(SELECT * FROM TR_REQ_PAY_ENTRIES WHERE REQ_PAY_ID =@p_TRANSFER_ID))
208
				BEGIN
209
					ROLLBACK TRANSACTION
210
					--CLOSE XmlData;
211
					--DEALLOCATE XmlData;
212
					DECLARE  @SUM_CR DECIMAL(18,2), @SUM_DR DECIMAL(18,2)
213
					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)
214
					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)
215
					IF(@SUM_CR <> @SUM_DR)
216
					BEGIN
217
						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
218
						RETURN '-1'
219
					END
220
				END
221
COMMIT TRANSACTION
222
	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
223
	RETURN '0'
224
ABORT:
225
BEGIN
226
		CLOSE AssetDetail
227
		DEALLOCATE AssetDetail
228
		CLOSE PaymentDetail
229
		DEALLOCATE PaymentDetail
230
		ROLLBACK TRANSACTION
231
		SELECT '-1' as Result, '' TRANSFER_ID, '' ErrorDesc
232
		RETURN '-1'
233
END
234

    
235

    
236