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
|