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 AND A.REQ_PAY_ID =@l_REQ_PAY_ID
|
98
|
WHERE B.TRANSFER_ID <> @p_TRANSFER_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(@ACC_NAME_FN IS NULL OR @ACC_NAME_FN ='')
|
173
|
BEGIN
|
174
|
SET @ACC_NAME_FN =(SELECT TOP 1 ACC_NAME FROM CM_ACCOUNT_PAY WHERE ACC_NUM =@ACCT)
|
175
|
END
|
176
|
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,'')))
|
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' 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
|
182
|
RETURN '-1'
|
183
|
END
|
184
|
IF(LEN(@ACCT) >9 AND (@GL_CODE IS NULL OR @GL_CODE =''))
|
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'Nếu bạn đang hạch toán CASA. Vui lòng bấm vào nút kiểm tra tài khoản để lấy chính xác thông tin tài khoản (tên tài khoản, tài khoản GL tương tứng) từ Core' ErrorDesc
|
190
|
RETURN '-1'
|
191
|
---
|
192
|
END
|
193
|
DECLARE @p_ET_ID VARCHAR(15);
|
194
|
EXEC SYS_CodeMasters_Gen 'TR_REQ_PAY_ENTRIES', @p_ET_ID OUT;
|
195
|
IF @p_ET_ID='' OR @p_ET_ID IS NULL GOTO ABORT;
|
196
|
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)
|
197
|
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)
|
198
|
-- NEU CHUA CO TAI KHOAN THI THEM VO CM_ACCOUNT
|
199
|
IF(NOT EXISTS(SELECT * FROM CM_ACCOUNT WHERE ACC_NO =@ACCT))
|
200
|
BEGIN
|
201
|
INSERT INTO CM_ACCOUNT (ACC_NO, ACC_NAME, TK_GL, TK_GL_NAME, MAKER_ID, CHECKER_ID) VALUES
|
202
|
(@ACCT,@ACCT_NAME,@GL_CODE,(SELECT TOP 1 ACC_NAME FROM CM_ACCOUNT WHERE ACC_NO =@GL_CODE),'admin','admin')
|
203
|
END
|
204
|
ELSE
|
205
|
BEGIN
|
206
|
IF(@GL_CODE IS NOT NULL AND @GL_CODE <> '')
|
207
|
BEGIN
|
208
|
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)
|
209
|
WHERE ACC_NO=@ACCT
|
210
|
END
|
211
|
END
|
212
|
IF @@error<>0 GOTO ABORT;
|
213
|
FETCH NEXT FROM XmlData INTO @ENTRY_PAIR ,@DR_CR,@ACCT, @ACCT_NAME, @AMT ,@CURRENCY, @EXC_RATE,@BRANCH_ID, @DEP_ID,@TRN_DESC,@GL_CODE
|
214
|
END;
|
215
|
CLOSE XmlData;
|
216
|
DEALLOCATE XmlData;
|
217
|
IF(EXISTS(SELECT * FROM TR_REQ_PAY_ENTRIES WHERE REQ_PAY_ID =@p_TRANSFER_ID))
|
218
|
BEGIN
|
219
|
DECLARE @SUM_CR DECIMAL(18,2), @SUM_DR DECIMAL(18,2)
|
220
|
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)
|
221
|
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)
|
222
|
IF(@SUM_CR <> @SUM_DR)
|
223
|
BEGIN
|
224
|
ROLLBACK TRANSACTION
|
225
|
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
|
226
|
RETURN '-1'
|
227
|
END
|
228
|
END
|
229
|
COMMIT TRANSACTION
|
230
|
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
|
231
|
RETURN '0'
|
232
|
ABORT:
|
233
|
BEGIN
|
234
|
CLOSE AssetDetail
|
235
|
DEALLOCATE AssetDetail
|
236
|
CLOSE PaymentDetail
|
237
|
DEALLOCATE PaymentDetail
|
238
|
ROLLBACK TRANSACTION
|
239
|
SELECT '-1' as Result, '' TRANSFER_ID, '' ErrorDesc
|
240
|
RETURN '-1'
|
241
|
End
|
242
|
|