1
|
|
2
|
ALTER PROCEDURE dbo.ASS_AMORT_Do
|
3
|
@p_EXECUTE_DATE varchar(20) = NULL, --Mac dinh la ngay hien tai cua he thong, duoc truyen tu UI
|
4
|
@p_MAKER_ID varchar(100) = NULL,
|
5
|
@p_CHECKER_ID varchar(15) = NULL,
|
6
|
@p_ASSET_TYPE VARCHAR(15) = 'TSCD',
|
7
|
@p_BRANCH_ID_LST XML = NULL
|
8
|
AS
|
9
|
BEGIN TRY
|
10
|
declare @l_AMORT_ID varchar(15), @l_AMORTDT_ID varchar(15)
|
11
|
declare @l_LAST_AMORT_ID varchar(15) = NULL
|
12
|
declare @l_AMORT_TERM nvarchar(50) = ''
|
13
|
|
14
|
declare @l_ASSET_ID varchar(15)
|
15
|
declare @l_AMORTIZED_AMT decimal(18,0)
|
16
|
declare @l_AMORTIZED_MONTH int
|
17
|
declare @l_AMORT_AMT decimal(18,0)
|
18
|
declare @l_AMORT_MONTH decimal(18,2)
|
19
|
declare @l_AMORT_END_DATE datetime, @l_AMORT_START_DATE datetime
|
20
|
declare @l_FIRST_AMORT_AMT decimal(18,0), @l_MONTHLY_AMORT_AMT decimal(18,0)
|
21
|
declare @l_BRANCH_ID varchar(15)
|
22
|
declare @l_DEP_ID varchar(15)
|
23
|
declare @l_BRANCH_ID_DO varchar(15) = NULL, @l_BRANCH_TYPE_DO VARCHAR(15)
|
24
|
declare @l_CURR_AMORT_AMT decimal(18,0)
|
25
|
declare @l_TOTAL_AMT decimal(18,0)
|
26
|
declare @l_CURR_AMORT_STATUS nvarchar(100)
|
27
|
declare @l_DESC nvarchar(1000)
|
28
|
DECLARE @ERRORSYS NVARCHAR(15) = ''
|
29
|
DECLARE @LST_BRANCH TABLE ( BRANCHID VARCHAR(15), BRANCHCODE VARCHAR(15))
|
30
|
|
31
|
BEGIN TRANSACTION
|
32
|
|
33
|
--Thieuvq Them gia tri mac dinh
|
34
|
--
|
35
|
declare @l_AmortIdDefault varchar(100) = '',@l_AMORTTERMDefault varchar(100) = '',
|
36
|
@l_TOTALAMTDefault decimal (18,2) = 0,@l_PROCESSSTATUSDefault varchar(100) = '',
|
37
|
@l_ExecDateDefault datetime = null, @l_StatusNameDef varchar(100) = '', @l_NotesDef varchar(100) = ''
|
38
|
--
|
39
|
|
40
|
declare @sExecDT datetime = convert(datetime, @p_EXECUTE_DATE, 103)
|
41
|
|
42
|
select @l_LAST_AMORT_ID = AMORT_ID
|
43
|
FROM ASS_AMORT
|
44
|
WHERE IS_LEAF = 'Y'
|
45
|
|
46
|
SET @l_AMORT_TERM = convert(varchar(2), datepart(month, @sExecDT)) + '/' + convert(varchar(4), datepart(year, @sExecDT))
|
47
|
|
48
|
--Put valodation here
|
49
|
|
50
|
--THIEUVQ 11/07/2014
|
51
|
/***********LAY BRANCH_ID CUA USER THUC HIEN CHAY KHAU HAO**************/
|
52
|
SET @l_BRANCH_ID_DO = 'DV0001'
|
53
|
IF @l_BRANCH_ID_DO = '' OR @l_BRANCH_ID_DO IS NULL
|
54
|
BEGIN
|
55
|
SET @ERRORSYS = 'ASS-AMR-0005'
|
56
|
GOTO THROW_ERR
|
57
|
END
|
58
|
|
59
|
--THIEUVQ 29092016 - BO DIEU KIEN KHONG CHO PGD CHAY PHAN BO
|
60
|
SELECT @l_BRANCH_TYPE_DO = BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID = @l_BRANCH_ID_DO
|
61
|
--IF @l_BRANCH_TYPE_DO = 'PGD' OR @l_BRANCH_TYPE_DO IS NULL
|
62
|
--BEGIN
|
63
|
-- SET @ERRORSYS = 'ASS-AMR-1006'
|
64
|
-- GOTO THROW_ERR
|
65
|
--END
|
66
|
--11/07/2014
|
67
|
|
68
|
----------------BO DUNG DANH SACH PGD DUOC CN PHAN BO GIUM THIEUVQ - 28092016------------------
|
69
|
IF @p_BRANCH_ID_LST IS NOT NULL AND @l_BRANCH_TYPE_DO = 'CN'
|
70
|
BEGIN
|
71
|
Declare @hdoc INT
|
72
|
Exec sp_xml_preparedocument @hdoc Output, @p_BRANCH_ID_LST
|
73
|
|
74
|
INSERT INTO @LST_BRANCH
|
75
|
SELECT *
|
76
|
FROM OPENXML(@hdoc,'/Root/BRANCHLIST',2)
|
77
|
WITH
|
78
|
(
|
79
|
BRANCH_ID varchar(15),
|
80
|
BRANCH_CODE varchar(15)
|
81
|
)
|
82
|
END
|
83
|
-----------------------------------------------------------------------------------------------
|
84
|
|
85
|
/******** kiem tra giao dich chua duyet **********************/
|
86
|
IF @p_ASSET_TYPE = 'TSCD'
|
87
|
BEGIN
|
88
|
IF EXISTS(SELECT 1 FROM ASS_PENDING_ITEM A WHERE A.AUTH_STATUS = 'U' AND TYPE_ID = 'TSCD')--THIEUVQ THEM DIEU KIEN KIEM TRA THEO DON VI
|
89
|
BEGIN
|
90
|
SET @ERRORSYS = 'ASS-AMR-0002'
|
91
|
GOTO THROW_ERR
|
92
|
END
|
93
|
END
|
94
|
ELSE
|
95
|
BEGIN
|
96
|
IF EXISTS(SELECT 1 FROM ASS_PENDING_ITEM A WHERE A.AUTH_STATUS = 'U' AND TYPE_ID = 'CCLD' AND TRAN_TYPE NOT IN ('ASS_ADDNEW','ASS_USE')
|
97
|
AND (BRANCH_CREATE = @l_BRANCH_ID_DO
|
98
|
OR (@l_BRANCH_TYPE_DO = 'CN'
|
99
|
--AND BRANCH_CREATE IN (SELECT * FROM [dbo].[CM_BRANCH_GETCHILDID](@l_BRANCH_ID_DO)))))--THIEUVQ THEM DIEU KIEN KIEM TRA THEO DON VI
|
100
|
AND BRANCH_CREATE IN (SELECT BRANCHID FROM @LST_BRANCH))))--THIEUVQ 29092016 - SUA DIEU KIEN PGD THUOC DANH SACH DA CHON
|
101
|
|
102
|
BEGIN
|
103
|
SET @ERRORSYS = 'ASS-AMR-0002'
|
104
|
GOTO THROW_ERR
|
105
|
END
|
106
|
END
|
107
|
|
108
|
|
109
|
/*******KIEM TRA KY KHAU HAO DA TRONG THANG DA DUOC TAO HAY CHUA******/
|
110
|
IF @p_ASSET_TYPE = 'TSCD'
|
111
|
BEGIN
|
112
|
IF EXISTS(SELECT 1 FROM ASS_AMORT A WHERE MONTH(A.EXECUTE_DT) = MONTH(@sExecDT) AND YEAR(A.EXECUTE_DT) = YEAR(@sExecDT)
|
113
|
AND ASSET_TYPE = 'TSCD')
|
114
|
BEGIN
|
115
|
SET @ERRORSYS = 'ASS-AMR-0001'
|
116
|
GOTO THROW_ERR
|
117
|
END
|
118
|
END
|
119
|
ELSE
|
120
|
BEGIN
|
121
|
IF EXISTS(SELECT 1 FROM ASS_AMORT A WHERE MONTH(A.EXECUTE_DT) = MONTH(@sExecDT) AND YEAR(A.EXECUTE_DT) = YEAR(@sExecDT)
|
122
|
AND ASSET_TYPE = 'CCLD' AND BRANCH_ID = @l_BRANCH_ID_DO)--THIEUVQ THEM DIEU KIEN KIEM TRA THEO LOAI TAI SAN
|
123
|
BEGIN
|
124
|
SET @ERRORSYS = 'ASS-AMR-0006'
|
125
|
GOTO THROW_ERR
|
126
|
END
|
127
|
|
128
|
----------------BO DUNG DANH SACH PGD DUOC CN PHAN BO GIUM THIEUVQ - 28092016------------------
|
129
|
IF @l_BRANCH_TYPE_DO = 'CN'
|
130
|
BEGIN
|
131
|
DECLARE @LSTERROR VARCHAR(500) = ''
|
132
|
SELECT @LSTERROR = @LSTERROR + B.BRANCHCODE + ';'
|
133
|
FROM ASS_AMORT A
|
134
|
LEFT JOIN @LST_BRANCH B ON B.BRANCHID = A.BRANCH_ID
|
135
|
WHERE A.AMORT_TERM = @l_AMORT_TERM AND A.BRANCH_ID IN (SELECT BRANCHID FROM @LST_BRANCH)
|
136
|
|
137
|
IF LEN(@LSTERROR) > 0
|
138
|
BEGIN
|
139
|
SELECT '-1' Result, N'PGD sau đã tự chạy phân bổ: ' + @LSTERROR ErrorDesc, @l_AmortIdDefault as AMORT_ID, @l_AMORTTERMDefault as AMORT_TERM,
|
140
|
@l_TOTALAMTDefault as TOTAL_AMT, @l_PROCESSSTATUSDefault as PROCESS_STATUS ,@l_StatusNameDef as STATUS_NAME,
|
141
|
@l_ExecDateDefault AS EXECUTE_DT,@l_NotesDef AS NOTES
|
142
|
|
143
|
IF @@TRANCOUNT>0 ROLLBACK TRANSACTION
|
144
|
RETURN '0'
|
145
|
END
|
146
|
END
|
147
|
ELSE
|
148
|
BEGIN
|
149
|
IF @l_BRANCH_TYPE_DO = 'PGD'
|
150
|
BEGIN
|
151
|
IF EXISTS(SELECT 1 FROM ASS_AMORT_BRN A WHERE A.AMORT_TERM = @l_AMORT_TERM AND A.BRANCH_ID = @l_BRANCH_ID_DO)
|
152
|
BEGIN
|
153
|
SET @ERRORSYS = 'ASS-AMR-0007'
|
154
|
GOTO THROW_ERR
|
155
|
END
|
156
|
END
|
157
|
END
|
158
|
END
|
159
|
|
160
|
/***** Ngay thuc thi khau hao phai lon hon ngay chay cuoi cung da chay *****/
|
161
|
--IF EXISTS(SELECT 1 FROM ASS_AMORT A WHERE convert(date,A.EXECUTE_DT) > convert(date,@sExecDT))
|
162
|
--BEGIN
|
163
|
-- SET @ERRORSYS = 'ASS-AMR-0004'
|
164
|
-- GOTO THROW_ERR
|
165
|
--END
|
166
|
/************ Kiem tra cac tai khoan hach toan trong bang ASS_GROUP ******/
|
167
|
IF EXISTS(SELECT *
|
168
|
FROM ASS_GROUP A
|
169
|
WHERE 1=1
|
170
|
AND A.IS_LEAF='Y'
|
171
|
AND ISNULL(A.ASSET_ACCTNO,'') = ''
|
172
|
AND ISNULL(A.AMORT_ACCTNO,'') = ''
|
173
|
AND ISNULL(A.EXP_ACCTNO,'') = ''
|
174
|
AND ISNULL(A.INC_ACCTNO,'') = ''
|
175
|
AND ISNULL(A.LIQ_ACCTNO,'') = ''
|
176
|
AND A.TYPE_ID = @p_ASSET_TYPE)
|
177
|
BEGIN
|
178
|
SET @ERRORSYS = 'ASS-AMR-0003'
|
179
|
GOTO THROW_ERR
|
180
|
END
|
181
|
|
182
|
THROW_ERR:
|
183
|
IF @ERRORSYS <> ''
|
184
|
BEGIN
|
185
|
|
186
|
SELECT ErrorCode Result, ErrorDesc ErrorDesc, @l_AmortIdDefault as AMORT_ID, @l_AMORTTERMDefault as AMORT_TERM,
|
187
|
@l_TOTALAMTDefault as TOTAL_AMT, @l_PROCESSSTATUSDefault as PROCESS_STATUS ,@l_StatusNameDef as STATUS_NAME,
|
188
|
@l_ExecDateDefault AS EXECUTE_DT,@l_NotesDef AS NOTES
|
189
|
FROM SYS_ERROR WHERE ErrorCode = @ERRORSYS
|
190
|
|
191
|
IF @@TRANCOUNT>0 ROLLBACK TRANSACTION
|
192
|
RETURN '0'
|
193
|
END
|
194
|
|
195
|
--oepn cursor
|
196
|
declare pCur cursor for
|
197
|
SELECT A.ASSET_ID, A.AMORTIZED_AMT, A.AMORTIZED_MONTH,
|
198
|
A.AMORT_AMT, A.AMORT_MONTH, A.AMORT_END_DATE, A.AMORT_START_DATE,
|
199
|
A.FIRST_AMORT_AMT, A.MONTHLY_AMORT_AMT, A.BRANCH_ID, A.DEPT_ID
|
200
|
FROM ASS_MASTER A
|
201
|
WHERE A.AMORT_STATUS IN ('CKH','DKH')
|
202
|
AND (convert(date, A.AMORT_START_DATE) <= convert(date, @sExecDT) OR ( dbo.FN_GetLastDayOfMonth(@sExecDT) = dbo.FN_GetLastDayOfMonth(A.AMORT_START_DATE)))
|
203
|
AND ISNULL(A.AMORTIZED_AMT,0) < A.AMORT_AMT
|
204
|
AND A.RECORD_STATUS = '1'
|
205
|
AND A.AUTH_STATUS = 'A'
|
206
|
AND A.TYPE_ID = @p_ASSET_TYPE--THIEUVQ
|
207
|
-- AND (A.BRANCH_ID = @l_BRANCH_ID_DO
|
208
|
-- OR (@p_ASSET_TYPE = 'TSCD')
|
209
|
-- OR (@l_BRANCH_TYPE_DO = 'CN' --NEU LA CN THI PHAN BO LUON CHO PGD THUOC CHI NHANH DO
|
210
|
-- --AND A.BRANCH_ID IN (SELECT * FROM [dbo].[CM_BRANCH_GETCHILDID](@l_BRANCH_ID_DO)))) --THIEUVQ
|
211
|
-- AND A.BRANCH_ID IN (SELECT BRANCHID FROM @LST_BRANCH))) --THIEUVQ CHINH SUA 28092016
|
212
|
|
213
|
open pCur
|
214
|
|
215
|
--Update ky khau hao truoc khong con la nut la
|
216
|
IF @l_LAST_AMORT_ID IS NOT NULL
|
217
|
BEGIN
|
218
|
UPDATE ASS_AMORT
|
219
|
SET IS_LEAF = 'N'
|
220
|
WHERE AMORT_ID = @l_LAST_AMORT_ID
|
221
|
END
|
222
|
|
223
|
--set dien giai
|
224
|
IF @p_ASSET_TYPE = 'TSCD'
|
225
|
SET @l_DESC = N'Khấu hao kỳ ' + @l_AMORT_TERM
|
226
|
ELSE
|
227
|
SET @l_DESC = N'Phân bổ kỳ ' + @l_AMORT_TERM
|
228
|
|
229
|
--Insert ky khau hao moi
|
230
|
EXEC SYS_CodeMasters_Gen 'ASS_AMORT', @l_AMORT_ID out
|
231
|
|
232
|
INSERT INTO ASS_AMORT
|
233
|
(
|
234
|
AMORT_ID,
|
235
|
AMORT_TERM,
|
236
|
EXECUTE_DT,
|
237
|
TOTAL_AMT,
|
238
|
IS_LEAF,
|
239
|
PARENT_ID,
|
240
|
NOTES,
|
241
|
PROCESS_STATUS,
|
242
|
[RECORD_STATUS],
|
243
|
[MAKER_ID],
|
244
|
[CREATE_DT],
|
245
|
[AUTH_STATUS],
|
246
|
[CHECKER_ID],
|
247
|
[APPROVE_DT],
|
248
|
[BRANCH_ID],
|
249
|
[ASSET_TYPE]
|
250
|
)
|
251
|
VALUES
|
252
|
(
|
253
|
@l_AMORT_ID,
|
254
|
@l_AMORT_TERM,
|
255
|
CONVERT(datetime, @p_EXECUTE_DATE, 103),
|
256
|
0,
|
257
|
'Y',
|
258
|
@l_LAST_AMORT_ID,
|
259
|
@l_DESC,--N'Khấu hao kỳ ' + @l_AMORT_TERM,
|
260
|
'P', --Pending cho chay khau hao
|
261
|
'1',
|
262
|
@p_MAKER_ID,
|
263
|
GETDATE(),
|
264
|
'A',
|
265
|
@p_CHECKER_ID,
|
266
|
GETDATE(),
|
267
|
@l_BRANCH_ID_DO,
|
268
|
@p_ASSET_TYPE
|
269
|
)
|
270
|
|
271
|
----------------BO DUNG DANH SACH PGD DUOC CN PHAN BO GIUM THIEUVQ - 28092016------------------
|
272
|
IF @l_BRANCH_TYPE_DO = 'CN'
|
273
|
BEGIN
|
274
|
INSERT INTO ASS_AMORT_BRN SELECT @l_AMORT_ID, @l_AMORT_TERM, BRANCHID FROM @LST_BRANCH
|
275
|
END
|
276
|
-----------------------------------------------------------------------------------------------
|
277
|
SET @l_TOTAL_AMT = 0
|
278
|
|
279
|
--Tinh khau hao cho tung tai san
|
280
|
FETCH NEXT FROM pCur INTO @l_ASSET_ID, @l_AMORTIZED_AMT, @l_AMORTIZED_MONTH,
|
281
|
@l_AMORT_AMT, @l_AMORT_MONTH, @l_AMORT_END_DATE, @l_AMORT_START_DATE,
|
282
|
@l_FIRST_AMORT_AMT, @l_MONTHLY_AMORT_AMT, @l_BRANCH_ID, @l_DEP_ID
|
283
|
|
284
|
WHILE @@FETCH_STATUS = 0
|
285
|
BEGIN
|
286
|
--SET @l_DESC = N'Khấu hao kỳ ' + @l_AMORT_TERM
|
287
|
|
288
|
IF (@l_AMORTIZED_MONTH = 0) --Khau hao thang dau tien
|
289
|
BEGIN
|
290
|
SET @l_CURR_AMORT_AMT = @l_FIRST_AMORT_AMT
|
291
|
IF(@l_AMORTIZED_AMT>0)
|
292
|
SET @l_CURR_AMORT_AMT =@l_MONTHLY_AMORT_AMT
|
293
|
--SET @l_CURR_AMORT_STATUS = 'DKH'
|
294
|
END
|
295
|
ELSE IF dbo.FN_GetLastDayOfMonth(@sExecDT) = dbo.FN_GetLastDayOfMonth(@l_AMORT_END_DATE) --Ky khau hao cuoi cung
|
296
|
BEGIN
|
297
|
IF(@l_AMORT_AMT - @l_AMORTIZED_AMT > @l_MONTHLY_AMORT_AMT )
|
298
|
SET @l_CURR_AMORT_AMT =@l_MONTHLY_AMORT_AMT
|
299
|
ELSE
|
300
|
SET @l_CURR_AMORT_AMT = @l_AMORT_AMT - @l_AMORTIZED_AMT
|
301
|
--SET @l_CURR_AMORT_STATUS = 'KHX'
|
302
|
print 'last amort' + @l_ASSET_ID
|
303
|
END
|
304
|
ELSE --tai san dang khau hao binh thuong
|
305
|
BEGIN
|
306
|
SET @l_CURR_AMORT_AMT = @l_MONTHLY_AMORT_AMT
|
307
|
--SET @l_CURR_AMORT_STATUS = 'DKH'
|
308
|
--THIEUVQ THEM DK KHONG KHAU HAO AM 13112017
|
309
|
IF (@l_AMORTIZED_AMT + @l_CURR_AMORT_AMT) > @l_AMORT_AMT
|
310
|
SET @l_CURR_AMORT_AMT = @l_AMORT_AMT - @l_AMORTIZED_AMT
|
311
|
END
|
312
|
|
313
|
--Insert to bang ASS_AMORT_DT
|
314
|
EXEC SYS_CodeMasters_Gen 'ASS_AMORT_DT', @l_AMORTDT_ID out
|
315
|
|
316
|
INSERT INTO ASS_AMORT_DT
|
317
|
(
|
318
|
AMORTDT_ID,
|
319
|
AMORT_ID,
|
320
|
AMORT_DT,
|
321
|
CRDR,
|
322
|
BRANCH_ID,
|
323
|
DEP_ID,
|
324
|
ASSET_ID,
|
325
|
AMORT_AMT,
|
326
|
GROUP_ID,
|
327
|
EXECUTED,
|
328
|
TRN_TYPE,
|
329
|
TRN_DESC
|
330
|
)
|
331
|
VALUES
|
332
|
(
|
333
|
@l_AMORTDT_ID,
|
334
|
@l_AMORT_ID,
|
335
|
@sExecDT,
|
336
|
'C',
|
337
|
@l_BRANCH_ID,
|
338
|
@l_DEP_ID,
|
339
|
@l_ASSET_ID,
|
340
|
@l_CURR_AMORT_AMT,
|
341
|
NULL, --Khong chay khau hao theo group
|
342
|
'0',
|
343
|
'AMORT',
|
344
|
@l_DESC
|
345
|
)
|
346
|
|
347
|
SET @l_TOTAL_AMT = @l_TOTAL_AMT + @l_CURR_AMORT_AMT
|
348
|
|
349
|
FETCH NEXT FROM pCur INTO @l_ASSET_ID, @l_AMORTIZED_AMT, @l_AMORTIZED_MONTH,
|
350
|
@l_AMORT_AMT, @l_AMORT_MONTH, @l_AMORT_END_DATE, @l_AMORT_START_DATE,
|
351
|
@l_FIRST_AMORT_AMT, @l_MONTHLY_AMORT_AMT, @l_BRANCH_ID, @l_DEP_ID
|
352
|
END
|
353
|
|
354
|
UPDATE ASS_AMORT
|
355
|
SET TOTAL_AMT = @l_TOTAL_AMT
|
356
|
WHERE AMORT_ID = @l_AMORT_ID
|
357
|
|
358
|
END TRY
|
359
|
|
360
|
BEGIN CATCH
|
361
|
CLOSE pCur
|
362
|
DEALLOCATE pCur
|
363
|
|
364
|
IF @@TRANCOUNT>0 ROLLBACK TRANSACTION
|
365
|
SELECT '-1' as Result, convert(varchar(100),ERROR_NUMBER()) + ' - ' + ERROR_MESSAGE() ErrorDesc,
|
366
|
'' AMORT_ID, '' AMORT_TERM, 0 TOTAL_AMT, NULL EXECUTE_DT, '' STATUS_NAME, '' NOTES
|
367
|
|
368
|
RETURN '-1'
|
369
|
|
370
|
END CATCH;
|
371
|
|
372
|
CLOSE pCur
|
373
|
DEALLOCATE pCur
|
374
|
|
375
|
IF @@TRANCOUNT>0 COMMIT TRANSACTION
|
376
|
|
377
|
SELECT '0' as Result, '' ErrorDesc, AMORT_ID, AMORT_TERM, TOTAL_AMT, EXECUTE_DT,
|
378
|
CASE WHEN PROCESS_STATUS='P' THEN N'Chờ thực thi' ELSE N'Đã thực thi' END STATUS_NAME, NOTES
|
379
|
FROM ASS_AMORT WHERE AMORT_ID = @l_AMORT_ID
|
380
|
RETURN '0'
|
381
|
|