Project

General

Profile

UP TRANSF 2.0.txt

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

 
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
98
						WHERE A.REQ_PAY_ID <>  @p_REQ_PAY_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((@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,'')))
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' 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
178
				RETURN '-1'
179
			END
180
			DECLARE @p_ET_ID VARCHAR(15);
181
			EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_ENTRIES', @p_ET_ID OUT;
182
			IF @p_ET_ID='' OR @p_ET_ID IS NULL GOTO ABORT;
183
			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)
184
			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)
185
			-- NEU CHUA CO TAI KHOAN THI THEM VO CM_ACCOUNT
186
			IF(NOT EXISTS(SELECT * FROM CM_ACCOUNT WHERE ACC_NO =@ACCT))
187
			BEGIN
188
				INSERT INTO CM_ACCOUNT (ACC_NO, ACC_NAME, TK_GL, TK_GL_NAME, MAKER_ID, CHECKER_ID) VALUES
189
				(@ACCT,@ACCT_NAME,@GL_CODE,(SELECT TOP 1 ACC_NAME FROM CM_ACCOUNT WHERE ACC_NO =@GL_CODE),'admin','admin')
190
			END
191
			ELSE
192
			BEGIN
193
				IF(@GL_CODE IS NOT NULL AND @GL_CODE <> '')
194
				BEGIN
195
					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)
196
					WHERE ACC_NO=@ACCT
197
				END
198
			END
199
			IF @@error<>0 GOTO ABORT;
200
		FETCH NEXT FROM XmlData INTO @ENTRY_PAIR ,@DR_CR,@ACCT, @ACCT_NAME, @AMT ,@CURRENCY, @EXC_RATE,@BRANCH_ID, @DEP_ID,@TRN_DESC,@GL_CODE
201
		END;
202
	CLOSE XmlData;
203
	DEALLOCATE XmlData;	
204
	IF(EXISTS(SELECT * FROM TR_REQ_PAY_ENTRIES WHERE REQ_PAY_ID =@p_TRANSFER_ID))
205
			BEGIN
206
				DECLARE  @SUM_CR DECIMAL(18,2), @SUM_DR DECIMAL(18,2)
207
				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)
208
				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)
209
				IF(@SUM_CR <> @SUM_DR)
210
				BEGIN
211
					ROLLBACK TRANSACTION
212
					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
213
					RETURN '-1'
214
				END
215
	END
216
COMMIT TRANSACTION
217
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
218
RETURN '0'
219
ABORT:
220
BEGIN
221
		CLOSE AssetDetail
222
		DEALLOCATE AssetDetail
223
		CLOSE PaymentDetail
224
		DEALLOCATE PaymentDetail
225
		ROLLBACK TRANSACTION
226
		SELECT '-1' as Result, '' TRANSFER_ID, '' ErrorDesc
227
		RETURN '-1'
228
End