Project

General

Profile

UPDATE KHAU HAO 2.txt

Luc Tran Van, 04/19/2023 05:10 PM

 
1

    
2
ALTER PROCEDURE dbo.ASS_AMORT_StartDO
3
	@p_EXECUTE_DATE varchar(50) = 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) = NULL,
7
	@p_BRANCH_ID_LST XML = NULL,
8
  @p_EXEC_TYPE VARCHAR(50) = 'EXECUTE'
9
AS
10
BEGIN TRY
11
  
12

    
13
SET @p_MAKER_ID='QLTS' 
14
SET @p_CHECKER_ID='QLTS'
15
  --GHI LOG
16
  DECLARE   @DISTANCE_TIME INT = NULL,
17
            @DISTANCE_TYPE VARCHAR(20) = NULL,
18
            @TOOL_NAME NVARCHAR(1000) = NULL,
19
            @TOOL_VALUE VARCHAR(100) = NULL,
20
            @EXEC_DT DATETIME = NULL,            
21
            @MESSAGE NVARCHAR(1000) = NULL
22

    
23
  SELECT  @DISTANCE_TIME = TIME_SEND        
24
        ,@DISTANCE_TYPE = TIME_SEND_TYPE
25
        ,@TOOL_NAME = TIME_CONTENT
26
        ,@TOOL_VALUE = TIME_VALUE                
27
  FROM THREAD_TIME_SEND 
28
  WHERE TIME_VALUE = 'KH'
29

    
30
	declare @l_AMORT_ID varchar(15), @l_AMORTDT_ID varchar(15)
31
	declare @l_LAST_AMORT_ID varchar(15) = NULL
32
	declare @l_AMORT_TERM nvarchar(50) = ''
33
	
34
	declare @l_ASSET_ID varchar(15)
35
	declare @l_AMORTIZED_AMT decimal(18,0)
36
	declare @l_AMORTIZED_MONTH int
37
	declare @l_AMORT_AMT decimal(18,0)
38
	declare @l_AMORT_MONTH decimal(18,2)
39
	declare @l_AMORT_END_DATE datetime, @l_AMORT_START_DATE datetime
40
	declare @l_FIRST_AMORT_AMT decimal(18,0), @l_MONTHLY_AMORT_AMT decimal(18,0)
41
	declare @l_BRANCH_ID varchar(15)
42
	declare @l_DEP_ID varchar(15)	
43
	declare @l_BRANCH_ID_DO varchar(15) = NULL, @l_BRANCH_TYPE_DO VARCHAR(15)
44
	declare @l_CURR_AMORT_AMT decimal(18,0)
45
	declare @l_TOTAL_AMT decimal(18,0)
46
	declare @l_CURR_AMORT_STATUS nvarchar(100)
47
	declare @l_DESC nvarchar(1000)
48
	DECLARE @ERRORSYS NVARCHAR(15) = '' 
49
	DECLARE @LST_BRANCH TABLE ( BRANCHID VARCHAR(15), BRANCHCODE VARCHAR(15))
50

    
51
    -- khai báo phần chạy khấu hao
52
    DECLARE @l_AMT_OVER DECIMAL(18,0), @l_AMT_AMORT DECIMAL(18,0)
53

    
54
        DECLARE   @l_EXP_GL varchar(50)
55
                , @l_AMORT_GL varchar(50)
56
            	, @l_GROUP_ID varchar(15)
57
            	, @l_ET_ID varchar(15)
58
            	
59
            	, @sToday varchar(10)
60
            	, @l_TRN_REF_NO varchar(20) = NULL
61
            	, @l_DO_BRANCH_ID varchar(15)= NULL
62
            	, @l_TYPE_ID	varchar(15)  = NULL
63
            	
64
            	, @l_DR_BRN_ID varchar(15)
65
                , @l_CR_BRN_ID varchar(15)		
66
            	, @l_HO_BRN_ID varchar(15)	
67
                , @l_ASSET_TYPE_DO varchar(15)
68
        	    , @l_ASSET_TYPE VARCHAR(15)
69
                , @l_DESC_CORE nvarchar(200)
70

    
71
BEGIN TRANSACTION
72
SET @sToday = convert(varchar(10), getdate(), 103)
73
        SET @l_AMT_OVER = 0
74
-- start cusor loại tài sản
75
DECLARE cur CURSOR FOR
76
	SELECT TRIM(TYPE_ID) AS ASSET_TYPE FROM ASS_TYPE
77
OPEN cur
78

    
79
FETCH NEXT FROM cur INTO @p_ASSET_TYPE
80

    
81
WHILE @@FETCH_STATUS = 0 
82
BEGIN
83
-- start cusor loại tài sản
84

    
85
	--Thieuvq Them gia tri mac dinh
86
	--
87
	declare @l_AmortIdDefault varchar(100) = '',@l_AMORTTERMDefault varchar(100) = '',
88
	@l_TOTALAMTDefault decimal (18,2) = 0,@l_PROCESSSTATUSDefault varchar(100) = '',
89
	@l_ExecDateDefault datetime = null, @l_StatusNameDef varchar(100) = '', @l_NotesDef varchar(100) = ''
90
	--
91

    
92
	declare @sExecDT datetime = convert(datetime, @p_EXECUTE_DATE, 103)
93
	
94
	select @l_LAST_AMORT_ID = AMORT_ID
95
	FROM ASS_AMORT
96
	WHERE IS_LEAF = 'Y'
97

    
98
	SET @l_AMORT_TERM = convert(varchar(2), datepart(month, @sExecDT)) + '/' + convert(varchar(4), datepart(year, @sExecDT))
99

    
100

    
101

    
102
	--THIEUVQ 29092016 - BO DIEU KIEN KHONG CHO PGD CHAY PHAN BO
103
--SELECT @l_BRANCH_TYPE_DO = BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID = @l_BRANCH_ID_DO
104
SET  @l_BRANCH_TYPE_DO='HS'
105

    
106
--	/******** kiem tra giao dich chua duyet **********************/
107
--	IF @p_ASSET_TYPE = 'TSCD'
108
--	BEGIN
109
--		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
110
--		BEGIN
111
--			SET @ERRORSYS = 'ASS-AMR-0002'	
112
--			GOTO THROW_ERR
113
--		END
114
--	END
115
--	ELSE
116
--	BEGIN
117
--		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')
118
--		AND (BRANCH_CREATE = @l_BRANCH_ID_DO 
119
--			OR (@l_BRANCH_TYPE_DO = 'CN' 
120
--				--AND BRANCH_CREATE IN (SELECT * FROM [dbo].[CM_BRANCH_GETCHILDID](@l_BRANCH_ID_DO)))))--THIEUVQ THEM DIEU KIEN KIEM TRA THEO DON VI
121
--				AND BRANCH_CREATE IN (SELECT BRANCHID FROM @LST_BRANCH))))--THIEUVQ 29092016 - SUA DIEU KIEN PGD THUOC DANH SACH DA CHON
122
--				
123
--		BEGIN
124
--			SET @ERRORSYS = 'ASS-AMR-0002'	
125
--			GOTO THROW_ERR
126
--		END
127
--	END
128
--
129

    
130
	/*******KIEM TRA KY KHAU HAO DA TRONG THANG DA DUOC TAO HAY CHUA******/
131
	IF @p_ASSET_TYPE = 'TSCD'
132
	BEGIN
133
		IF EXISTS(SELECT 1 FROM ASS_AMORT A WHERE MONTH(A.EXECUTE_DT) = MONTH(@sExecDT) AND YEAR(A.EXECUTE_DT) = YEAR(@sExecDT)
134
												  AND ASSET_TYPE = 'TSCD')	
135
		BEGIN
136
			SET @ERRORSYS = 'ASS-AMR-0001'
137
			GOTO THROW_ERR
138
		END
139
	END
140
	ELSE
141
	BEGIN		
142
		IF EXISTS(SELECT 1 FROM ASS_AMORT A WHERE MONTH(A.EXECUTE_DT) = MONTH(@sExecDT) AND YEAR(A.EXECUTE_DT) = YEAR(@sExecDT)
143
												AND ASSET_TYPE = 'CCLD' AND BRANCH_ID = @l_BRANCH_ID_DO)--THIEUVQ THEM DIEU KIEN KIEM TRA THEO LOAI TAI SAN
144
		BEGIN
145
			SET @ERRORSYS = 'ASS-AMR-0006'
146
			GOTO THROW_ERR
147
		END
148
		
149
	
150
	END
151

    
152

    
153
	IF EXISTS(SELECT * 
154
				FROM ASS_GROUP A 
155
				WHERE 1=1
156
					AND A.IS_LEAF='Y' 
157
					AND ISNULL(A.ASSET_ACCTNO,'') = '' 
158
					AND ISNULL(A.AMORT_ACCTNO,'') = ''
159
					AND ISNULL(A.EXP_ACCTNO,'') = ''
160
					AND ISNULL(A.INC_ACCTNO,'') = ''
161
					AND ISNULL(A.LIQ_ACCTNO,'') = ''
162
					AND A.TYPE_ID = @p_ASSET_TYPE)
163
	BEGIN					
164
		SET @ERRORSYS = 'ASS-AMR-0003'
165
		GOTO THROW_ERR
166
	END
167
		
168
THROW_ERR:			
169
	IF @ERRORSYS <> '' 
170
	BEGIN
171
        CLOSE cur
172
        DEALLOCATE cur
173

    
174
		SELECT ErrorCode Result, ErrorDesc ErrorDesc, @l_AmortIdDefault as AMORT_ID, @l_AMORTTERMDefault as AMORT_TERM, 
175
					@l_TOTALAMTDefault as TOTAL_AMT, @l_PROCESSSTATUSDefault as PROCESS_STATUS ,@l_StatusNameDef as STATUS_NAME, 
176
					@l_ExecDateDefault AS EXECUTE_DT,@l_NotesDef AS NOTES
177
		FROM SYS_ERROR WHERE ErrorCode = @ERRORSYS
178

    
179
    SELECT @MESSAGE = ErrorDesc 
180
		FROM SYS_ERROR WHERE ErrorCode = @ERRORSYS
181

    
182
		IF @@TRANCOUNT>0 ROLLBACK TRANSACTION
183
    --GHI LOG
184
    INSERT INTO THREAD_TIME_SEND_LOG (DISTANCE_TIME, DISTANCE_TYPE, TOOL_NAME, TOOL_VALUE, EXEC_DT, EXEC_TYPE, MESSAGE, CREATE_DT)
185
    VALUES (@DISTANCE_TIME,@DISTANCE_TYPE, @TOOL_NAME, @TOOL_VALUE, CONVERT(DATETIME,@p_EXECUTE_DATE,103),@p_EXEC_TYPE, @MESSAGE, GETDATE()); 
186

    
187
		RETURN '0'
188
	END	
189

    
190
	--oepn cursor
191
	declare pCur cursor for
192
		 SELECT A.ASSET_ID, A.AMORTIZED_AMT, A.AMORTIZED_MONTH,
193
				A.AMORT_AMT,  A.AMORT_MONTH, A.AMORT_END_DATE, A.AMORT_START_DATE,
194
				A.FIRST_AMORT_AMT, A.MONTHLY_AMORT_AMT, A.BRANCH_ID, A.DEPT_ID, ISNULL(A.REF_GROUP_ID,A.GROUP_ID)
195
		 FROM ASS_MASTER A
196
		 WHERE A.AMORT_STATUS IN ('CKH','DKH')
197
			AND convert(date, A.AMORT_START_DATE) <= convert(date, @sExecDT)
198
			AND A.AMORTIZED_AMT < A.AMORT_AMT
199
			AND A.RECORD_STATUS = '1'
200
			AND A.AUTH_STATUS = 'A'
201
			AND A.TYPE_ID = @p_ASSET_TYPE--THIEUVQ	
202

    
203
	open pCur
204
		
205
	--Update ky khau hao truoc khong con la nut la
206
	IF @l_LAST_AMORT_ID IS NOT NULL 
207
	BEGIN
208
		UPDATE ASS_AMORT 
209
		SET IS_LEAF = 'N'
210
		WHERE AMORT_ID = @l_LAST_AMORT_ID
211
	END	
212

    
213
	--set dien giai
214
	IF @p_ASSET_TYPE = 'TSCD'
215
		SET @l_DESC = N'Khấu hao kỳ ' + @l_AMORT_TERM
216
	ELSE
217
		SET @l_DESC = N'Phân bổ kỳ ' + @l_AMORT_TERM
218
 
219
	--Insert ky khau hao moi
220
	EXEC SYS_CodeMasters_Gen 'ASS_AMORT', @l_AMORT_ID out
221
	
222
	INSERT INTO ASS_AMORT
223
	(
224
		AMORT_ID,
225
		AMORT_TERM,
226
		EXECUTE_DT,
227
		TOTAL_AMT,
228
		IS_LEAF,
229
		PARENT_ID,
230
		NOTES,
231
		PROCESS_STATUS,
232
		[RECORD_STATUS],
233
		[MAKER_ID],
234
		[CREATE_DT],
235
		[AUTH_STATUS],
236
		[CHECKER_ID],
237
		[APPROVE_DT],
238
		[BRANCH_ID],
239
		[ASSET_TYPE]
240
	)
241
	VALUES
242
	(
243
		@l_AMORT_ID,
244
		@l_AMORT_TERM,
245
		CONVERT(datetime, @p_EXECUTE_DATE, 103),
246
		0,
247
		'Y',
248
		@l_LAST_AMORT_ID,
249
		@l_DESC,--N'Khấu hao kỳ ' + @l_AMORT_TERM,
250
		'P', --Pending cho chay khau hao
251
		'1',
252
		@p_MAKER_ID,
253
		GETDATE(),
254
		'A',
255
		@p_CHECKER_ID,
256
		GETDATE(),
257
		@l_BRANCH_ID_DO,
258
		@p_ASSET_TYPE
259
	)	
260
 
261
	----------------BO DUNG DANH SACH PGD DUOC CN PHAN BO GIUM THIEUVQ - 28092016------------------
262
	IF @l_BRANCH_TYPE_DO = 'CN'
263
	BEGIN
264
		INSERT INTO ASS_AMORT_BRN SELECT @l_AMORT_ID, @l_AMORT_TERM, BRANCHID FROM @LST_BRANCH
265
	END
266
	-----------------------------------------------------------------------------------------------
267
	SET @l_TOTAL_AMT = 0	
268
 
269
	--Tinh khau hao cho tung tai san
270
	FETCH NEXT FROM pCur INTO  @l_ASSET_ID, @l_AMORTIZED_AMT, @l_AMORTIZED_MONTH,
271
				@l_AMORT_AMT,  @l_AMORT_MONTH, @l_AMORT_END_DATE, @l_AMORT_START_DATE,
272
				@l_FIRST_AMORT_AMT, @l_MONTHLY_AMORT_AMT, @l_BRANCH_ID, @l_DEP_ID, @l_GROUP_ID
273
	
274
	WHILE @@FETCH_STATUS = 0	
275
	BEGIN
276

    
277
			IF (@l_AMORTIZED_MONTH = 0) --Khau hao thang dau tien
278
		BEGIN
279
			SET @l_CURR_AMORT_AMT = @l_FIRST_AMORT_AMT
280
			IF(@l_AMORTIZED_AMT>0)
281
        SET  @l_CURR_AMORT_AMT =@l_MONTHLY_AMORT_AMT
282
      --SET @l_CURR_AMORT_STATUS = 'DKH'
283
		END
284
		ELSE IF dbo.FN_GetLastDayOfMonth(@sExecDT) = dbo.FN_GetLastDayOfMonth(@l_AMORT_END_DATE) --Ky khau hao cuoi cung
285
		BEGIN
286
      IF(@l_AMORT_AMT - @l_AMORTIZED_AMT > @l_MONTHLY_AMORT_AMT )
287
 	        SET @l_CURR_AMORT_AMT =@l_MONTHLY_AMORT_AMT
288
      ELSE
289
			  SET @l_CURR_AMORT_AMT = @l_AMORT_AMT - @l_AMORTIZED_AMT
290
			--SET @l_CURR_AMORT_STATUS = 'KHX'	
291
			print 'last amort'	+ @l_ASSET_ID
292
		END
293
		ELSE --tai san dang khau hao binh thuong
294
		BEGIN
295
			SET @l_CURR_AMORT_AMT = @l_MONTHLY_AMORT_AMT
296
			--SET @l_CURR_AMORT_STATUS = 'DKH'
297
			--THIEUVQ THEM DK KHONG KHAU HAO AM 13112017
298
			IF (@l_AMORTIZED_AMT + @l_CURR_AMORT_AMT) > @l_AMORT_AMT
299
				SET @l_CURR_AMORT_AMT = @l_AMORT_AMT - @l_AMORTIZED_AMT
300
		END
301
	
302
		--Insert to bang ASS_AMORT_DT
303
		EXEC SYS_CodeMasters_Gen 'ASS_AMORT_DT', @l_AMORTDT_ID out
304
	
305
		INSERT INTO ASS_AMORT_DT
306
		(
307
			AMORTDT_ID,
308
			AMORT_ID,
309
			AMORT_DT,
310
			CRDR,
311
			BRANCH_ID,
312
			DEP_ID,
313
			ASSET_ID,
314
			AMORT_AMT,
315
			GROUP_ID,
316
			EXECUTED,
317
			TRN_TYPE,
318
			TRN_DESC
319
		)
320
		VALUES
321
		(
322
			@l_AMORTDT_ID,
323
			@l_AMORT_ID,
324
			@sExecDT,
325
			'C',
326
			@l_BRANCH_ID,
327
			@l_DEP_ID,
328
			@l_ASSET_ID,
329
			@l_CURR_AMORT_AMT,
330
			NULL, --Khong chay khau hao theo group
331
			'0',
332
			'AMORT',
333
			@l_DESC
334
		)
335
		
336
		SET @l_TOTAL_AMT = @l_TOTAL_AMT + @l_CURR_AMORT_AMT
337

    
338

    
339
        ------------- BẮT ĐẦU CHẠY KHẤU HAO TÀI SẢN----------------
340
                -- lấy thông tin nhóm tài sản
341

    
342
  DECLARE @goupxe TABLE (
343
    GROUP_ID VARCHAR(25)
344
  )
345

    
346
  INSERT INTO @goupxe
347
    SELECT
348
      ag.GROUP_ID
349
    FROM ASS_GROUP ag
350
    WHERE ag.PARENT_ID = 'ASG000000000151'
351

    
352

    
353

    
354
    SELECT @l_EXP_GL = G.EXP_ACCTNO, @l_AMORT_GL = G.AMORT_ACCTNO, @l_TYPE_ID = G.[TYPE_ID]
355
		FROM ASS_GROUP G
356
		WHERE G.GROUP_ID = @l_GROUP_ID
357
		IF @@ERROR<>0 GOTO ABORT
358
        
359

    
360

    
361
        DECLARE @l_MONTHLY_AMT DECIMAL(18,0), @l_AM_AMORT_AMT DECIMAL(18,0)
362
        SELECT @l_AM_AMORT_AMT = AM.AMORT_AMT FROM ASS_MASTER AM WHERE AM.ASSET_ID = @l_ASSET_ID
363

    
364

    
365
      IF (@l_AM_AMORT_AMT > 1600000000
366
    AND EXISTS (SELECT
367
        GROUP_ID
368
      FROM @goupxe
369
      WHERE GROUP_ID = @l_GROUP_ID)
370
    )
371
  BEGIN
372
    PRINT 1
373
    SET @l_MONTHLY_AMT = ROUND(1600000000 / @l_AMORT_MONTH, 0)
374
    DECLARE @AMORT_ON_DAY DECIMAL(18, 0)
375
    SET @AMORT_ON_DAY = ROUND(@l_MONTHLY_AMT / dbo.[FN_GetDaysInMonth](@l_AMORT_START_DATE), 0)
376
    SET @l_AMT_AMORT = ROUND(@AMORT_ON_DAY * (DATEDIFF(DAY, @l_AMORT_START_DATE, dbo.FN_GetLastDayOfMonth(@l_AMORT_START_DATE)) + 1), 0)
377
    --END
378
    IF (DAY(@l_AMORT_START_DATE) = 1)
379
      SET @l_AMT_AMORT = @l_MONTHLY_AMT
380

    
381
  END
382

    
383
  IF (@l_AMORTIZED_MONTH = 0) --Khau hao thang dau tien
384
  BEGIN
385
    SET @l_CURR_AMORT_STATUS = 'DKH'
386
    IF (@l_AM_AMORT_AMT > 1600000000
387
      AND EXISTS (SELECT
388
          GROUP_ID
389
        FROM @goupxe
390
        WHERE GROUP_ID = @l_GROUP_ID)
391
      )
392
    BEGIN
393
      SET @l_AMT_OVER = @l_AMORT_AMT - @l_AMT_AMORT
394
    END
395
  END
396
  ELSE
397
  IF dbo.FN_GetLastDayOfMonth(@sExecDT) = dbo.FN_GetLastDayOfMonth(@l_AMORT_END_DATE) --Ky khau hao cuoi cung
398
  BEGIN
399
    --SET @l_CURR_AMORT_AMT = @l_AMORT_AMT - @l_AMORTIZED_AMT
400
   
401

    
402
    SET @l_CURR_AMORT_STATUS = 'KHX'
403
    IF (@l_AM_AMORT_AMT > 1600000000
404
      AND EXISTS (SELECT
405
          GROUP_ID
406
        FROM @goupxe
407
        WHERE GROUP_ID = @l_GROUP_ID)
408
      )
409
    BEGIN
410
      SET @l_AMT_OVER = @l_AMORT_AMT - (1600000000 - (@l_AMT_AMORT + (@l_MONTHLY_AMT * (@l_AMORT_MONTH - 2))))
411
    END
412
  END
413
  ELSE --tai san dang khau hao binh thuong
414
  BEGIN
415
    SET @l_CURR_AMORT_STATUS = 'DKH'
416
    IF (@l_AM_AMORT_AMT > 1600000000
417
      AND EXISTS (SELECT
418
          GROUP_ID
419
        FROM @goupxe
420
        WHERE GROUP_ID = @l_GROUP_ID)
421
      )
422
    BEGIN
423
      SET @l_AMT_OVER = @l_AMORT_AMT - @l_MONTHLY_AMT
424
    END
425
  END
426
 IF(@l_AMORT_AMT - @l_AMORTIZED_AMT>0)
427
  SET  @l_CURR_AMORT_STATUS = 'DKH'
428

    
429
        --BRN_ID HOI SO
430
    	SELECT @l_HO_BRN_ID = BRANCH_ID FROM CM_BRANCH A WHERE A.BRANCH_TYPE = 'HS'
431

    
432
        --Insert vao bang dbo.ASS_ENTRIES_POST
433
		EXEC ASS_TRN_REF_NO_Gen @p_ASSET_TYPE, @sToday, @l_TRN_REF_NO out	
434
		
435
		IF @l_BRANCH_ID = @l_HO_BRN_ID 
436
		BEGIN
437
			SET @l_DR_BRN_ID = @l_DEP_ID
438
		END
439
		ELSE
440
		BEGIN
441
			SET @l_DR_BRN_ID = @l_BRANCH_ID
442
		END
443

    
444
		--thieuvq dien giai hach toan khau hao
445
		IF @p_ASSET_TYPE = 'TSCD'
446
		BEGIN
447
			SET @l_DESC_CORE = 'KHAU HAO TSCD KY ' + @l_AMORT_TERM
448
			SET @l_CR_BRN_ID = @l_HO_BRN_ID
449
		END
450
		ELSE
451
		BEGIN
452
			SET @l_DESC_CORE = 'PHAN BO CHI PHI CCLD KY ' + @l_AMORT_TERM
453
			SET @l_CR_BRN_ID = @l_BRANCH_ID
454
		END        
455

    
456
        DECLARE @l_BRANCH_CODE VARCHAR(25), @l_ASSET_CODE VARCHAR(25),@l_ETP_ID VARCHAR(25),@DEP_CODE VARCHAR(25)
457
        SET @l_BRANCH_CODE = (SELECT cb.BRANCH_CODE FROM CM_BRANCH cb WHERE cb.BRANCH_ID=@l_BRANCH_ID)
458
        SET @l_ASSET_CODE =(SELECT am.ASSET_CODE FROM ASS_MASTER am WHERE am.ASSET_ID=@l_ASSET_ID)
459
        SET @l_AMORTIZED_AMT =(SELECT am.AMORTIZED_AMT FROM ASS_MASTER am WHERE am.ASSET_ID=@l_ASSET_ID)
460
        SET @DEP_CODE= (SELECT cd.DEP_CODE FROM CM_DEPARTMENT cd WHERE cd.DEP_ID=@l_DEP_ID)
461

    
462

    
463
DECLARE @LST_COST_SHARE TABLE (
464
    ASSET_ID VARCHAR(20),
465
    BRANCH_ID VARCHAR(20),
466
    DEP_ID VARCHAR(20),
467
    COST_AMOUNT DECIMAL(18,0)
468
    
469
)
470
INSERT INTO @LST_COST_SHARE (ASSET_ID, BRANCH_ID, DEP_ID, COST_AMOUNT)
471
SELECT aca.ASSET_ID,acad.BRANCH_ID,acad.DEPT_ID,acad.COST_AMOUNT  FROM ASS_COST_ALLOCATION aca
472
LEFT JOIN ASS_COST_ALLOC_DT acad ON aca.COS_ID = acad.COS_ID
473
WHERE aca.RECORD_STATUS=1 AND aca.AUTH_STATUS='A' AND aca.ASSET_ID=@l_ASSET_ID
474

    
475

    
476

    
477
  IF (@l_AMORT_AMT > 0)
478
  BEGIN
479
    EXEC SYS_CodeMasters_Gen 'ASS_ENTRIES_POST'
480
                            ,@l_ET_ID OUT
481
    IF @l_ET_ID = ''
482
      OR @l_ET_ID IS NULL
483
      GOTO ABORT
484

    
485

    
486
    INSERT INTO ASS_ENTRIES_POST (ET_ID, REF_NO, ASSET_ID, TRN_TYPE, REF_ID, DO_BRN, CR_ACCT, CR_BRN, DR_ACCT, DR_BRN, AMT, EXP_TO_CORE, TRN_DATE, TRN_DESC, MAKER_ID, CHECKER_ID)
487
      VALUES (@l_ET_ID, @l_TRN_REF_NO, @l_ASSET_ID, 'AMORT', @l_AMORTDT_ID, @l_DO_BRANCH_ID, dbo.FN_REPLACE_ACCTNO(@l_AMORT_GL, @l_CR_BRN_ID), @l_CR_BRN_ID, @l_EXP_GL, @l_DR_BRN_ID, @l_AMORT_AMT - @l_AMT_OVER, 'Y', @sExecDT, @l_DESC_CORE, @p_MAKER_ID, @p_CHECKER_ID)
488
    EXEC SYS_CodeMasters_Gen 'ASS_ENTRIES_POST_SYNC'
489
                            ,@l_ETP_ID OUT
490
    INSERT INTO ASS_ENTRIES_POST_SYNC (ETP_ID, ET_ID, TRN_ID, AC_BRANCH, AC_NO, AC_CCY, DRCR_IND, FCY_AMOUNT, EXCH_RATE, LCY_AMOUNT, RELATED_REFERENCE, TRN_DT, USER_ID, AUTH_ID, DEPT_CD, DESC_TRANS)
491
      VALUES (@l_ETP_ID, @l_ET_ID, @l_AMORTDT_ID, @l_BRANCH_CODE, @l_AMORT_GL, 'VND', 'C', @l_AMORT_AMT - @l_AMT_OVER, 1, @l_AMORT_AMT - @l_AMT_OVER, @l_ASSET_CODE, @sExecDT, @p_MAKER_ID, @p_CHECKER_ID, @DEP_CODE, @l_DESC_CORE);
492

    
493
    EXEC SYS_CodeMasters_Gen 'ASS_ENTRIES_POST_SYNC'
494
                            ,@l_ETP_ID OUT
495

    
496
    INSERT INTO ASS_ENTRIES_POST_SYNC (ETP_ID, ET_ID, TRN_ID, AC_BRANCH, AC_NO, AC_CCY, DRCR_IND, FCY_AMOUNT, EXCH_RATE, LCY_AMOUNT, RELATED_REFERENCE, TRN_DT, USER_ID, AUTH_ID, DEPT_CD, DESC_TRANS)
497
      VALUES (@l_ETP_ID, @l_ET_ID, @l_AMORTDT_ID, @l_BRANCH_CODE, @l_EXP_GL, 'VND', 'D', @l_AMORT_AMT - @l_AMT_OVER, 1, @l_AMORT_AMT - @l_AMT_OVER, @l_ASSET_CODE, @sExecDT, @p_MAKER_ID, @p_CHECKER_ID, @DEP_CODE, @l_DESC_CORE);
498

    
499
IF(EXISTS(SELECT ASSET_ID FROM @LST_COST_SHARE))
500
BEGIN
501

    
502
        DECLARE lstDATACOST CURSOR FOR 
503
        SELECT 
504
              BRANCH_ID
505
              ,DEP_ID
506
              ,COST_AMOUNT FROM @LST_COST_SHARE
507
        OPEN lstDATACOST
508

    
509
DECLARE @COST_BRANCH_ID VARCHAR(20) , @COST_DEP_ID VARCHAR(20), @COST_AMOUNT DECIMAL(18,0),@COST_DEP_CODE VARCHAR(20),@COST_BRANCH_CODE VARCHAR(20),@TRANFER_CP VARCHAR(25)
510

    
511
SET @TRANFER_CP=(SELECT epa.ACC_NO FROM ENTRIES_POST_ACCNO epa WHERE epa.ACC_TYPE='ASSET_CCLD_N')
512

    
513
FETCH NEXT FROM lstDATACOST INTO  @COST_BRANCH_ID, @COST_DEP_ID , @COST_AMOUNT
514
WHILE @@fetch_status = 0
515
BEGIN
516
    IF(@l_BRANCH_ID <> @COST_BRANCH_ID)
517
    BEGIN
518

    
519
          SET @COST_BRANCH_CODE =(SELECT
520
      cb.BRANCH_CODE
521
    FROM CM_BRANCH cb
522
    WHERE cb.BRANCH_ID = @COST_BRANCH_ID)
523

    
524

    
525
          EXEC SYS_CodeMasters_Gen 'ASS_ENTRIES_POST_SYNC'
526
                            ,@l_ETP_ID OUT
527

    
528
          INSERT INTO ASS_ENTRIES_POST_SYNC (ETP_ID, ET_ID, TRN_ID, AC_BRANCH, AC_NO, AC_CCY, DRCR_IND, FCY_AMOUNT, EXCH_RATE, LCY_AMOUNT, RELATED_REFERENCE, TRN_DT, USER_ID, AUTH_ID, DEPT_CD, DESC_TRANS)
529
          VALUES (@l_ETP_ID, @l_ET_ID, @l_AMORTDT_ID, @l_BRANCH_CODE, @l_EXP_GL, 'VND', 'C', @COST_AMOUNT, 1, @COST_AMOUNT, @l_ASSET_CODE, @sExecDT, @p_MAKER_ID, @p_CHECKER_ID, @DEP_CODE, @l_DESC_CORE);
530
          
531
          EXEC SYS_CodeMasters_Gen 'ASS_ENTRIES_POST_SYNC'
532
                            ,@l_ETP_ID OUT
533

    
534
          INSERT INTO ASS_ENTRIES_POST_SYNC (ETP_ID, ET_ID, TRN_ID, AC_BRANCH, AC_NO, AC_CCY, DRCR_IND, FCY_AMOUNT, EXCH_RATE, LCY_AMOUNT, RELATED_REFERENCE, TRN_DT, USER_ID, AUTH_ID, DEPT_CD, DESC_TRANS)
535
          VALUES (@l_ETP_ID, @l_ET_ID, @l_AMORTDT_ID, @l_BRANCH_CODE, @TRANFER_CP, 'VND', 'D', @COST_AMOUNT, 1, @COST_AMOUNT, @l_ASSET_CODE, @sExecDT, @p_MAKER_ID, @p_CHECKER_ID, @DEP_CODE, @l_DESC_CORE);
536

    
537
          EXEC SYS_CodeMasters_Gen 'ASS_ENTRIES_POST_SYNC'
538
                            ,@l_ETP_ID OUT
539

    
540
          INSERT INTO ASS_ENTRIES_POST_SYNC (ETP_ID, ET_ID, TRN_ID, AC_BRANCH, AC_NO, AC_CCY, DRCR_IND, FCY_AMOUNT, EXCH_RATE, LCY_AMOUNT, RELATED_REFERENCE, TRN_DT, USER_ID, AUTH_ID, DEPT_CD, DESC_TRANS)
541
          VALUES (@l_ETP_ID, @l_ET_ID, @l_AMORTDT_ID, @COST_BRANCH_CODE, @TRANFER_CP, 'VND', 'C', @COST_AMOUNT, 1, @COST_AMOUNT, @l_ASSET_CODE, @sExecDT, @p_MAKER_ID, @p_CHECKER_ID, '', @l_DESC_CORE);
542

    
543
          EXEC SYS_CodeMasters_Gen 'ASS_ENTRIES_POST_SYNC'
544
                            ,@l_ETP_ID OUT
545

    
546
          INSERT INTO ASS_ENTRIES_POST_SYNC (ETP_ID, ET_ID, TRN_ID, AC_BRANCH, AC_NO, AC_CCY, DRCR_IND, FCY_AMOUNT, EXCH_RATE, LCY_AMOUNT, RELATED_REFERENCE, TRN_DT, USER_ID, AUTH_ID, DEPT_CD, DESC_TRANS)
547
          VALUES (@l_ETP_ID, @l_ET_ID, @l_AMORTDT_ID, @COST_BRANCH_CODE, @l_EXP_GL, 'VND', 'D', @COST_AMOUNT, 1, @COST_AMOUNT, @l_ASSET_CODE, @sExecDT, @p_MAKER_ID, @p_CHECKER_ID, '', @l_DESC_CORE);
548

    
549

    
550
    END
551
    ELSE
552
    BEGIN
553
          
554
          SELECT @COST_DEP_ID
555
          SET @COST_DEP_CODE =(SELECT cd.DEP_CODE FROM CM_DEPARTMENT cd WHERE cd.DEP_ID=@COST_DEP_ID)
556
          EXEC SYS_CodeMasters_Gen 'ASS_ENTRIES_POST_SYNC',@l_ETP_ID OUT
557
          INSERT INTO ASS_ENTRIES_POST_SYNC (ETP_ID, ET_ID, TRN_ID, AC_BRANCH, AC_NO, AC_CCY, DRCR_IND, FCY_AMOUNT, EXCH_RATE, LCY_AMOUNT, RELATED_REFERENCE, TRN_DT, USER_ID, AUTH_ID, DEPT_CD, DESC_TRANS)
558
          VALUES (@l_ETP_ID, @l_ET_ID, @l_AMORTDT_ID, @l_BRANCH_CODE, @l_EXP_GL, 'VND', 'C', @COST_AMOUNT, 1, @COST_AMOUNT, @l_ASSET_CODE, @sExecDT, @p_MAKER_ID, @p_CHECKER_ID, @DEP_CODE, @l_DESC_CORE);             
559
         
560
         EXEC SYS_CodeMasters_Gen 'ASS_ENTRIES_POST_SYNC',@l_ETP_ID OUT
561
          INSERT INTO ASS_ENTRIES_POST_SYNC (ETP_ID, ET_ID, TRN_ID, AC_BRANCH, AC_NO, AC_CCY, DRCR_IND, FCY_AMOUNT, EXCH_RATE, LCY_AMOUNT, RELATED_REFERENCE, TRN_DT, USER_ID, AUTH_ID, DEPT_CD, DESC_TRANS)
562
          VALUES (@l_ETP_ID, @l_ET_ID, @l_AMORTDT_ID, @l_BRANCH_CODE, @l_EXP_GL, 'VND', 'D', @COST_AMOUNT, 1, @COST_AMOUNT, @l_ASSET_CODE, @sExecDT, @p_MAKER_ID, @p_CHECKER_ID, @COST_DEP_CODE, @l_DESC_CORE);
563
    END
564

    
565

    
566
FETCH NEXT FROM lstDATACOST INTO  @COST_BRANCH_ID, @COST_DEP_ID , @COST_AMOUNT
567
END
568
CLOSE lstDATACOST
569
DEALLOCATE lstDATACOST
570

    
571
END
572

    
573

    
574

    
575
  END
576

    
577
  IF (@l_AMT_OVER > 0)
578
  BEGIN
579
    EXEC SYS_CodeMasters_Gen 'ASS_ENTRIES_POST'
580
                            ,@l_ET_ID OUT
581
    IF @l_ET_ID = ''
582
      OR @l_ET_ID IS NULL
583
      GOTO ABORT
584
    INSERT INTO ASS_ENTRIES_POST (ET_ID, REF_NO, ASSET_ID, TRN_TYPE, REF_ID, DO_BRN, CR_ACCT, CR_BRN, DR_ACCT, DR_BRN, AMT, EXP_TO_CORE, TRN_DATE, TRN_DESC, MAKER_ID, CHECKER_ID)
585
      VALUES (@l_ET_ID, @l_TRN_REF_NO, @l_ASSET_ID, 'AMORT', @l_AMORTDT_ID, @l_DO_BRANCH_ID, dbo.FN_REPLACE_ACCTNO(@l_AMORT_GL, @l_CR_BRN_ID), @l_CR_BRN_ID, @l_EXP_GL, @l_DR_BRN_ID, @l_AMT_OVER, 'Y', @sExecDT, @l_DESC_CORE, @p_MAKER_ID, @p_CHECKER_ID)
586
    EXEC SYS_CodeMasters_Gen 'ASS_ENTRIES_POST_SYNC'
587
                            ,@l_ETP_ID OUT
588
    INSERT INTO ASS_ENTRIES_POST_SYNC (ETP_ID, ET_ID, TRN_ID, AC_BRANCH, AC_NO, AC_CCY, DRCR_IND, FCY_AMOUNT, EXCH_RATE, LCY_AMOUNT, RELATED_REFERENCE, TRN_DT, USER_ID, AUTH_ID, DEPT_CD, DESC_TRANS)
589
      VALUES (@l_ETP_ID, @l_ET_ID, @l_AMORTDT_ID, @l_BRANCH_CODE, @l_AMORT_GL, 'VND', 'C', @l_AMT_OVER, 1, @l_AMT_OVER, @l_ASSET_CODE, @sExecDT, @p_MAKER_ID, @p_CHECKER_ID, @DEP_CODE, @l_DESC_CORE);
590

    
591
    EXEC SYS_CodeMasters_Gen 'ASS_ENTRIES_POST_SYNC'
592
                            ,@l_ETP_ID OUT
593

    
594
    INSERT INTO ASS_ENTRIES_POST_SYNC (ETP_ID, ET_ID, TRN_ID, AC_BRANCH, AC_NO, AC_CCY, DRCR_IND, FCY_AMOUNT, EXCH_RATE, LCY_AMOUNT, RELATED_REFERENCE, TRN_DT, USER_ID, AUTH_ID, DEPT_CD, DESC_TRANS)
595
      VALUES (@l_ETP_ID, @l_ET_ID, @l_AMORTDT_ID, @l_BRANCH_CODE, '871001005', 'VND', 'D', @l_AMT_OVER, 1, @l_AMT_OVER, @l_ASSET_CODE, @sExecDT, @p_MAKER_ID, @p_CHECKER_ID, @DEP_CODE, @l_DESC_CORE);
596
  END
597
		IF @@Error <> 0 GOTO ABORT
598

    
599
        --UPDATE BANG ASS_MASTER
600
		UPDATE ASS_MASTER 
601
		SET AMORTIZED_AMT = isnull(AMORTIZED_AMT, 0) + @l_CURR_AMORT_AMT,
602
			AMORTIZED_MONTH = isnull(AMORTIZED_MONTH, 0) + 1,
603
			AMORT_STATUS = @l_CURR_AMORT_STATUS
604
		WHERE ASSET_ID = @l_ASSET_ID
605
		IF @@Error <> 0 GOTO ABORT	
606
        --		
607
		--update da hach toan
608
		UPDATE ASS_AMORT_DT
609
		SET EXECUTED = '1'
610
		WHERE AMORTDT_ID = @l_AMORTDT_ID
611
		IF @@Error <> 0 GOTO ABORT
612

    
613
 -----------------------------------------------
614
		FETCH NEXT FROM pCur INTO  @l_ASSET_ID, @l_AMORTIZED_AMT, @l_AMORTIZED_MONTH,
615
					@l_AMORT_AMT,  @l_AMORT_MONTH, @l_AMORT_END_DATE, @l_AMORT_START_DATE,
616
					@l_FIRST_AMORT_AMT, @l_MONTHLY_AMORT_AMT, @l_BRANCH_ID, @l_DEP_ID, @l_GROUP_ID
617
	END
618
	
619
	UPDATE ASS_AMORT
620
	SET TOTAL_AMT = @l_TOTAL_AMT, PROCESS_STATUS = 'S'
621
	WHERE AMORT_ID = @l_AMORT_ID
622
    
623
    --	/****CAP NHAT CCLD TINH TRANG: DPB(Đã phân bổ chi phí khi xuất sử dụng) VE DANG KHAU HAO***/
624
	IF @p_ASSET_TYPE = 'CCLD'
625
	BEGIN
626
		 UPDATE ASS_MASTER SET AMORT_STATUS = 'DKH'
627
		 WHERE AMORT_STATUS IN ('DPB')
628
			--AND convert(date, AMORT_START_DATE) <= convert(date, @sExecDT)
629
			AND convert(date, AMORT_START_DATE) <= convert(date, dbo.FN_GetLastDayOfMonth(@sExecDT))			
630
			AND AMORTIZED_AMT < AMORT_AMT
631
			AND RECORD_STATUS = '1'
632
			AND AUTH_STATUS = 'A'		
633
			AND TYPE_ID = 'CCLD'	
634
			AND (BRANCH_ID = @l_BRANCH_ID_DO 				
635
				OR (@l_BRANCH_TYPE_DO = 'CN' --NEU LA CN THI PHAN BO LUON CHO PGD THUOC CHI NHANH DO
636
					--AND BRANCH_ID IN (SELECT * FROM [dbo].[CM_BRANCH_GETCHILDID](@l_BRANCH_ID_DO)))) --THIEUVQ
637
					AND BRANCH_ID IN (SELECT BR.BRANCH_ID FROM ASS_AMORT_BRN BR WHERE BR.AMORT_ID  = @l_AMORT_ID))) --THIEUVQ  28092016
638
	END
639

    
640

    
641
	CLOSE pCur
642
	DEALLOCATE pCur
643
-- end cusor loại tài sản
644
FETCH NEXT FROM cur INTO @p_ASSET_TYPE
645
END
646
CLOSE cur
647
DEALLOCATE cur
648
-- end cusor loại tài sản
649
	
650
END TRY
651

    
652
BEGIN CATCH	
653
		CLOSE pCur
654
		DEALLOCATE pCur
655
        CLOSE cur
656
        DEALLOCATE cur
657

    
658
	IF @@TRANCOUNT>0 ROLLBACK TRANSACTION
659
		SELECT '-1' as Result, convert(varchar(100),ERROR_NUMBER()) + ' - ' + ERROR_MESSAGE() ErrorDesc, 
660
		'' AMORT_ID, '' AMORT_TERM, 0 TOTAL_AMT, NULL EXECUTE_DT, '' STATUS_NAME, '' NOTES
661
		
662
    --GHI LOG
663
    INSERT INTO THREAD_TIME_SEND_LOG (DISTANCE_TIME, DISTANCE_TYPE, TOOL_NAME, TOOL_VALUE, EXEC_DT, EXEC_TYPE, MESSAGE, CREATE_DT)
664
    VALUES (@DISTANCE_TIME,@DISTANCE_TYPE, @TOOL_NAME, @TOOL_VALUE, CONVERT(DATETIME,@p_EXECUTE_DATE,103),@p_EXEC_TYPE, convert(varchar(100),ERROR_NUMBER()) + ' - ' + ERROR_MESSAGE(), GETDATE()); 
665

    
666
	RETURN '-1'	
667

    
668
END CATCH;
669

    
670
	
671
IF @@TRANCOUNT>0 COMMIT TRANSACTION
672

    
673
SELECT '0' as Result, '' ErrorDesc, AMORT_ID, AMORT_TERM, TOTAL_AMT, EXECUTE_DT,
674
		CASE WHEN PROCESS_STATUS='P' THEN N'Chờ thực thi' ELSE N'Đã thực thi' END STATUS_NAME, NOTES
675
		FROM ASS_AMORT WHERE AMORT_ID = @l_AMORT_ID
676

    
677
    --GHI LOG
678
    INSERT INTO THREAD_TIME_SEND_LOG (DISTANCE_TIME, DISTANCE_TYPE, TOOL_NAME, TOOL_VALUE, EXEC_DT, EXEC_TYPE, MESSAGE, CREATE_DT)
679
    VALUES (@DISTANCE_TIME,@DISTANCE_TYPE, @TOOL_NAME, @TOOL_VALUE, CONVERT(DATETIME,@p_EXECUTE_DATE,103),@p_EXEC_TYPE, N'Thực thi thành công', GETDATE()); 
680

    
681

    
682
    RETURN '0'
683

    
684
ABORT:
685
BEGIN
686

    
687
		CLOSE pCur
688
		DEALLOCATE pCur
689
        CLOSE cur
690
        DEALLOCATE cur
691
		
692
		ROLLBACK TRANSACTION
693
    --GHI LOG
694
    INSERT INTO THREAD_TIME_SEND_LOG (DISTANCE_TIME, DISTANCE_TYPE, TOOL_NAME, TOOL_VALUE, EXEC_DT, EXEC_TYPE, MESSAGE, CREATE_DT)
695
    VALUES (@DISTANCE_TIME,@DISTANCE_TYPE, @TOOL_NAME, @TOOL_VALUE, CONVERT(DATETIME,@p_EXECUTE_DATE,103),@p_EXEC_TYPE, ERROR_MESSAGE(), GETDATE()); 
696

    
697
		SELECT '-1' as Result,  '' ErrorDesc
698
		RETURN '-1'
699
End
700