Project

General

Profile

TRANS UPD.txt

Luc Tran Van, 03/01/2021 10:49 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 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(50), @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 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(50), 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(200)
126
		FETCH NEXT FROM XmlData INTO @ENTRY_PAIR ,@DR_CR,@ACCT, @ACCT_NAME, @AMT ,@CURRENCY, @EXC_RATE,@BRANCH_ID, @DEP_ID,@TRN_DESC,@GL_CODE
127
		-- Validate lưới hạch toán rỗng hay không
128
		--IF (@@FETCH_STATUS < 0)
129
		--BEGIN
130
		--	ROLLBACK TRANSACTION
131
		--	CLOSE XmlData;
132
		--	DEALLOCATE XmlData;
133
		--	SELECT '-1' as Result, '' AS TRANSFER_ID, N'Thông tin hạch toán không được để trống' ErrorDesc
134
		--	RETURN '-1'
135
		--END
136

    
137
		WHILE @@fetch_status=0 BEGIN
138
			SET @INDEX= @INDEX+1
139
			IF(@DR_CR='D')
140
			BEGIN
141
				SET @DR_CR_NAME =N'Nợ'
142
			END
143
			ELSE
144
			BEGIN
145
				SET @DR_CR_NAME =N'Có'
146
			END
147
			IF(@DR_CR IS NULL OR @DR_CR ='')
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 nợ không được phép để trống' ErrorDesc
153
				RETURN '-1'
154
			END
155
			IF(@ACCT IS NULL OR @ACCT ='')
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' Tài khoản có không được phép để trống' ErrorDesc
161
				RETURN '-1'
162
			END
163
			IF(@TRN_DESC IS NULL OR @TRN_DESC ='')
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' Diễn giải hạch toán không được phép để trống' ErrorDesc
169
				RETURN '-1'
170
			END
171
			IF(@BRANCH_ID IS NULL OR @BRANCH_ID ='')
172
			BEGIN
173
				ROLLBACK TRANSACTION
174
				CLOSE XmlData;
175
				DEALLOCATE XmlData;
176
				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
177
				RETURN '-1'
178
			END
179
			SET @ACC_NAME_FN =(SELECT TOP 1 ACC_NAME FROM CM_ACCOUNT WHERE ACC_NO =@ACCT)
180
			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,'')))
181
			BEGIN
182
				ROLLBACK TRANSACTION
183
				CLOSE XmlData;
184
				DEALLOCATE XmlData;
185
				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
186
				RETURN '-1'
187
			END
188
			DECLARE @p_ET_ID VARCHAR(15);
189
			EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_ENTRIES', @p_ET_ID OUT;
190
			IF @p_ET_ID='' OR @p_ET_ID IS NULL GOTO ABORT;
191
			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)
192
			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)
193
			-- NEU CHUA CO TAI KHOAN THI THEM VO CM_ACCOUNT
194
			IF(NOT EXISTS(SELECT * FROM CM_ACCOUNT WHERE ACC_NO =@ACCT))
195
			BEGIN
196
				INSERT INTO CM_ACCOUNT (ACC_NO, ACC_NAME, TK_GL, TK_GL_NAME, MAKER_ID, CHECKER_ID) VALUES
197
				(@ACCT,@ACCT_NAME,@GL_CODE,(SELECT TOP 1 ACC_NAME FROM CM_ACCOUNT WHERE ACC_NO =@GL_CODE),'admin','admin')
198
			END
199
			ELSE
200
			BEGIN
201
				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)
202
				WHERE ACC_NO=@ACCT
203
			END
204
			IF @@error<>0 GOTO ABORT;
205
		FETCH NEXT FROM XmlData INTO @ENTRY_PAIR ,@DR_CR,@ACCT, @ACCT_NAME, @AMT ,@CURRENCY, @EXC_RATE,@BRANCH_ID, @DEP_ID,@TRN_DESC,@GL_CODE
206
		END;
207
	CLOSE XmlData;
208
	DEALLOCATE XmlData;	
209
	IF(EXISTS(SELECT * FROM TR_REQ_PAY_ENTRIES WHERE REQ_PAY_ID =@p_TRANSFER_ID))
210
			BEGIN
211
				DECLARE  @SUM_CR DECIMAL(18,2), @SUM_DR DECIMAL(18,2)
212
				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)
213
				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)
214
				IF(@SUM_CR <> @SUM_DR)
215
				BEGIN
216
				ROLLBACK TRANSACTION
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