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
|
|