Project

General

Profile

TRANS INS.txt

Luc Tran Van, 03/01/2021 10:49 PM

 
1

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

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

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

    
143
				IF(@DR_CR='D')
144
				BEGIN
145
					SET @DR_CR_NAME =N'Nợ'
146
				END
147
				ELSE
148
				BEGIN
149
					SET @DR_CR_NAME =N'Có'
150
				END
151
				IF(@DR_CR IS NULL OR @DR_CR ='')
152
				BEGIN
153
					ROLLBACK TRANSACTION
154
					CLOSE XmlData;
155
					DEALLOCATE XmlData;
156
					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
157
					RETURN '-1'
158
				END
159
				IF(@ACCT IS NULL OR @ACCT ='')
160
				BEGIN
161
					ROLLBACK TRANSACTION
162
					CLOSE XmlData;
163
					DEALLOCATE XmlData;
164
					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
165
					RETURN '-1'
166
				END
167
				IF(@TRN_DESC IS NULL OR @TRN_DESC ='')
168
				BEGIN
169
					ROLLBACK TRANSACTION
170
					CLOSE XmlData;
171
					DEALLOCATE XmlData;
172
					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
173
					RETURN '-1'
174
				END
175
				IF(@BRANCH_ID IS NULL OR @BRANCH_ID ='')
176
					BEGIN
177
					ROLLBACK TRANSACTION
178
					CLOSE XmlData;
179
					DEALLOCATE XmlData;
180
					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
181
					RETURN '-1'
182
				END
183
				SET @ACC_NAME_FN =(SELECT TOP 1 ACC_NAME FROM CM_ACCOUNT WHERE ACC_NO =@ACCT)
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 @@error<>0 GOTO ABORT;
198
			FETCH NEXT FROM XmlData INTO @ENTRY_PAIR ,@DR_CR,@ACCT, @ACCT_NAME, @AMT ,@CURRENCY, @EXC_RATE,@BRANCH_ID, @DEP_ID,@TRN_DESC
199
			END;
200
		CLOSE XmlData;
201
		DEALLOCATE XmlData;
202
		-- CHAN NEU CHI CO 1 BUT NO 1 BUT CO THI KHONG DUOC DI TIEP
203
				IF(EXISTS(SELECT * FROM TR_REQ_PAY_ENTRIES WHERE REQ_PAY_ID =@p_TRANSFER_ID))
204
				BEGIN
205
					ROLLBACK TRANSACTION
206
					CLOSE XmlData;
207
					DEALLOCATE XmlData;
208
					DECLARE  @SUM_CR DECIMAL(18,2), @SUM_DR DECIMAL(18,2)
209
					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)
210
					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)
211
					IF(@SUM_CR <> @SUM_DR)
212
					BEGIN
213
						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
214
						RETURN '-1'
215
					END
216
				END
217
	COMMIT TRANSACTION
218
	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
219
	RETURN '0'
220
ABORT:
221
BEGIN
222
		CLOSE AssetDetail
223
		DEALLOCATE AssetDetail
224
		CLOSE PaymentDetail
225
		DEALLOCATE PaymentDetail
226
		ROLLBACK TRANSACTION
227
		SELECT '-1' as Result, '' TRANSFER_ID, '' ErrorDesc
228
		RETURN '-1'
229
END
230

    
231

    
232