ALTER PROCEDURE dbo.ASS_AMORT_StartDO @p_EXECUTE_DATE varchar(50) = NULL, --Mac dinh la ngay hien tai cua he thong, duoc truyen tu UI @p_MAKER_ID varchar(100) = NULL, @p_CHECKER_ID varchar(15) = NULL, @p_ASSET_TYPE VARCHAR(15) = NULL, @p_BRANCH_ID_LST XML = NULL, @p_EXEC_TYPE VARCHAR(50) = 'EXECUTE' AS BEGIN TRY SET @p_MAKER_ID='QLTS' SET @p_CHECKER_ID='QLTS' --GHI LOG DECLARE @DISTANCE_TIME INT = NULL, @DISTANCE_TYPE VARCHAR(20) = NULL, @TOOL_NAME NVARCHAR(1000) = NULL, @TOOL_VALUE VARCHAR(100) = NULL, @EXEC_DT DATETIME = NULL, @MESSAGE NVARCHAR(1000) = NULL SELECT @DISTANCE_TIME = TIME_SEND ,@DISTANCE_TYPE = TIME_SEND_TYPE ,@TOOL_NAME = TIME_CONTENT ,@TOOL_VALUE = TIME_VALUE FROM THREAD_TIME_SEND WHERE TIME_VALUE = 'KH' declare @l_AMORT_ID varchar(15), @l_AMORTDT_ID varchar(15) declare @l_LAST_AMORT_ID varchar(15) = NULL declare @l_AMORT_TERM nvarchar(50) = '' declare @l_ASSET_ID varchar(15) declare @l_AMORTIZED_AMT decimal(18,0) declare @l_AMORTIZED_MONTH int declare @l_AMORT_AMT decimal(18,0) declare @l_AMORT_MONTH decimal(18,2) declare @l_AMORT_END_DATE datetime, @l_AMORT_START_DATE datetime declare @l_FIRST_AMORT_AMT decimal(18,0), @l_MONTHLY_AMORT_AMT decimal(18,0) declare @l_BRANCH_ID varchar(15) declare @l_DEP_ID varchar(15) declare @l_BRANCH_ID_DO varchar(15) = NULL, @l_BRANCH_TYPE_DO VARCHAR(15) declare @l_CURR_AMORT_AMT decimal(18,0) declare @l_TOTAL_AMT decimal(18,0) declare @l_CURR_AMORT_STATUS nvarchar(100) declare @l_DESC nvarchar(1000) DECLARE @ERRORSYS NVARCHAR(15) = '' DECLARE @LST_BRANCH TABLE ( BRANCHID VARCHAR(15), BRANCHCODE VARCHAR(15)) -- khai báo phần chạy khấu hao DECLARE @l_AMT_OVER DECIMAL(18,0), @l_AMT_AMORT DECIMAL(18,0) DECLARE @l_EXP_GL varchar(50) , @l_AMORT_GL varchar(50) , @l_GROUP_ID varchar(15) , @l_ET_ID varchar(15) , @sToday varchar(10) , @l_TRN_REF_NO varchar(20) = NULL , @l_DO_BRANCH_ID varchar(15)= NULL , @l_TYPE_ID varchar(15) = NULL , @l_DR_BRN_ID varchar(15) , @l_CR_BRN_ID varchar(15) , @l_HO_BRN_ID varchar(15) , @l_ASSET_TYPE_DO varchar(15) , @l_ASSET_TYPE VARCHAR(15) , @l_DESC_CORE nvarchar(200) BEGIN TRANSACTION SET @sToday = convert(varchar(10), getdate(), 103) SET @l_AMT_OVER = 0 -- start cusor loại tài sản DECLARE cur CURSOR FOR SELECT TRIM(TYPE_ID) AS ASSET_TYPE FROM ASS_TYPE OPEN cur FETCH NEXT FROM cur INTO @p_ASSET_TYPE WHILE @@FETCH_STATUS = 0 BEGIN -- start cusor loại tài sản --Thieuvq Them gia tri mac dinh -- declare @l_AmortIdDefault varchar(100) = '',@l_AMORTTERMDefault varchar(100) = '', @l_TOTALAMTDefault decimal (18,2) = 0,@l_PROCESSSTATUSDefault varchar(100) = '', @l_ExecDateDefault datetime = null, @l_StatusNameDef varchar(100) = '', @l_NotesDef varchar(100) = '' -- declare @sExecDT datetime = convert(datetime, @p_EXECUTE_DATE, 103) select @l_LAST_AMORT_ID = AMORT_ID FROM ASS_AMORT WHERE IS_LEAF = 'Y' SET @l_AMORT_TERM = convert(varchar(2), datepart(month, @sExecDT)) + '/' + convert(varchar(4), datepart(year, @sExecDT)) --THIEUVQ 29092016 - BO DIEU KIEN KHONG CHO PGD CHAY PHAN BO --SELECT @l_BRANCH_TYPE_DO = BRANCH_TYPE FROM CM_BRANCH WHERE BRANCH_ID = @l_BRANCH_ID_DO SET @l_BRANCH_TYPE_DO='HS' -- /******** kiem tra giao dich chua duyet **********************/ -- IF @p_ASSET_TYPE = 'TSCD' -- BEGIN -- 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 -- BEGIN -- SET @ERRORSYS = 'ASS-AMR-0002' -- GOTO THROW_ERR -- END -- END -- ELSE -- BEGIN -- 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') -- AND (BRANCH_CREATE = @l_BRANCH_ID_DO -- OR (@l_BRANCH_TYPE_DO = 'CN' -- --AND BRANCH_CREATE IN (SELECT * FROM [dbo].[CM_BRANCH_GETCHILDID](@l_BRANCH_ID_DO)))))--THIEUVQ THEM DIEU KIEN KIEM TRA THEO DON VI -- AND BRANCH_CREATE IN (SELECT BRANCHID FROM @LST_BRANCH))))--THIEUVQ 29092016 - SUA DIEU KIEN PGD THUOC DANH SACH DA CHON -- -- BEGIN -- SET @ERRORSYS = 'ASS-AMR-0002' -- GOTO THROW_ERR -- END -- END -- /*******KIEM TRA KY KHAU HAO DA TRONG THANG DA DUOC TAO HAY CHUA******/ IF @p_ASSET_TYPE = 'TSCD' BEGIN IF EXISTS(SELECT 1 FROM ASS_AMORT A WHERE MONTH(A.EXECUTE_DT) = MONTH(@sExecDT) AND YEAR(A.EXECUTE_DT) = YEAR(@sExecDT) AND ASSET_TYPE = 'TSCD') BEGIN SET @ERRORSYS = 'ASS-AMR-0001' GOTO THROW_ERR END END ELSE BEGIN IF EXISTS(SELECT 1 FROM ASS_AMORT A WHERE MONTH(A.EXECUTE_DT) = MONTH(@sExecDT) AND YEAR(A.EXECUTE_DT) = YEAR(@sExecDT) AND ASSET_TYPE = 'CCLD' AND BRANCH_ID = @l_BRANCH_ID_DO)--THIEUVQ THEM DIEU KIEN KIEM TRA THEO LOAI TAI SAN BEGIN SET @ERRORSYS = 'ASS-AMR-0006' GOTO THROW_ERR END END IF EXISTS(SELECT * FROM ASS_GROUP A WHERE 1=1 AND A.IS_LEAF='Y' AND ISNULL(A.ASSET_ACCTNO,'') = '' AND ISNULL(A.AMORT_ACCTNO,'') = '' AND ISNULL(A.EXP_ACCTNO,'') = '' AND ISNULL(A.INC_ACCTNO,'') = '' AND ISNULL(A.LIQ_ACCTNO,'') = '' AND A.TYPE_ID = @p_ASSET_TYPE) BEGIN SET @ERRORSYS = 'ASS-AMR-0003' GOTO THROW_ERR END THROW_ERR: IF @ERRORSYS <> '' BEGIN CLOSE cur DEALLOCATE cur SELECT ErrorCode Result, ErrorDesc ErrorDesc, @l_AmortIdDefault as AMORT_ID, @l_AMORTTERMDefault as AMORT_TERM, @l_TOTALAMTDefault as TOTAL_AMT, @l_PROCESSSTATUSDefault as PROCESS_STATUS ,@l_StatusNameDef as STATUS_NAME, @l_ExecDateDefault AS EXECUTE_DT,@l_NotesDef AS NOTES FROM SYS_ERROR WHERE ErrorCode = @ERRORSYS SELECT @MESSAGE = ErrorDesc FROM SYS_ERROR WHERE ErrorCode = @ERRORSYS IF @@TRANCOUNT>0 ROLLBACK TRANSACTION --GHI LOG INSERT INTO THREAD_TIME_SEND_LOG (DISTANCE_TIME, DISTANCE_TYPE, TOOL_NAME, TOOL_VALUE, EXEC_DT, EXEC_TYPE, MESSAGE, CREATE_DT) VALUES (@DISTANCE_TIME,@DISTANCE_TYPE, @TOOL_NAME, @TOOL_VALUE, CONVERT(DATETIME,@p_EXECUTE_DATE,103),@p_EXEC_TYPE, @MESSAGE, GETDATE()); RETURN '0' END --oepn cursor declare pCur cursor for SELECT A.ASSET_ID, A.AMORTIZED_AMT, A.AMORTIZED_MONTH, A.AMORT_AMT, A.AMORT_MONTH, A.AMORT_END_DATE, A.AMORT_START_DATE, A.FIRST_AMORT_AMT, A.MONTHLY_AMORT_AMT, A.BRANCH_ID, A.DEPT_ID, ISNULL(A.REF_GROUP_ID,A.GROUP_ID) FROM ASS_MASTER A WHERE A.AMORT_STATUS IN ('CKH','DKH') AND convert(date, A.AMORT_START_DATE) <= convert(date, @sExecDT) AND A.AMORTIZED_AMT < A.AMORT_AMT AND A.RECORD_STATUS = '1' AND A.AUTH_STATUS = 'A' AND A.TYPE_ID = @p_ASSET_TYPE--THIEUVQ open pCur --Update ky khau hao truoc khong con la nut la IF @l_LAST_AMORT_ID IS NOT NULL BEGIN UPDATE ASS_AMORT SET IS_LEAF = 'N' WHERE AMORT_ID = @l_LAST_AMORT_ID END --set dien giai IF @p_ASSET_TYPE = 'TSCD' SET @l_DESC = N'Khấu hao kỳ ' + @l_AMORT_TERM ELSE SET @l_DESC = N'Phân bổ kỳ ' + @l_AMORT_TERM --Insert ky khau hao moi EXEC SYS_CodeMasters_Gen 'ASS_AMORT', @l_AMORT_ID out INSERT INTO ASS_AMORT ( AMORT_ID, AMORT_TERM, EXECUTE_DT, TOTAL_AMT, IS_LEAF, PARENT_ID, NOTES, PROCESS_STATUS, [RECORD_STATUS], [MAKER_ID], [CREATE_DT], [AUTH_STATUS], [CHECKER_ID], [APPROVE_DT], [BRANCH_ID], [ASSET_TYPE] ) VALUES ( @l_AMORT_ID, @l_AMORT_TERM, CONVERT(datetime, @p_EXECUTE_DATE, 103), 0, 'Y', @l_LAST_AMORT_ID, @l_DESC,--N'Khấu hao kỳ ' + @l_AMORT_TERM, 'P', --Pending cho chay khau hao '1', @p_MAKER_ID, GETDATE(), 'A', @p_CHECKER_ID, GETDATE(), @l_BRANCH_ID_DO, @p_ASSET_TYPE ) SET @l_TOTAL_AMT = 0 --Tinh khau hao cho tung tai san FETCH NEXT FROM pCur INTO @l_ASSET_ID, @l_AMORTIZED_AMT, @l_AMORTIZED_MONTH, @l_AMORT_AMT, @l_AMORT_MONTH, @l_AMORT_END_DATE, @l_AMORT_START_DATE, @l_FIRST_AMORT_AMT, @l_MONTHLY_AMORT_AMT, @l_BRANCH_ID, @l_DEP_ID, @l_GROUP_ID WHILE @@FETCH_STATUS = 0 BEGIN IF (@l_AMORTIZED_MONTH = 0) --Khau hao thang dau tien BEGIN SET @l_CURR_AMORT_AMT = @l_FIRST_AMORT_AMT IF(@l_AMORTIZED_AMT>0) SET @l_CURR_AMORT_AMT =@l_MONTHLY_AMORT_AMT --SET @l_CURR_AMORT_STATUS = 'DKH' END ELSE IF dbo.FN_GetLastDayOfMonth(@sExecDT) = dbo.FN_GetLastDayOfMonth(@l_AMORT_END_DATE) --Ky khau hao cuoi cung BEGIN IF(@l_AMORT_AMT - @l_AMORTIZED_AMT > @l_MONTHLY_AMORT_AMT ) SET @l_CURR_AMORT_AMT =@l_MONTHLY_AMORT_AMT ELSE SET @l_CURR_AMORT_AMT = @l_AMORT_AMT - @l_AMORTIZED_AMT --SET @l_CURR_AMORT_STATUS = 'KHX' print 'last amort' + @l_ASSET_ID END ELSE --tai san dang khau hao binh thuong BEGIN SET @l_CURR_AMORT_AMT = @l_MONTHLY_AMORT_AMT --SET @l_CURR_AMORT_STATUS = 'DKH' --THIEUVQ THEM DK KHONG KHAU HAO AM 13112017 IF (@l_AMORTIZED_AMT + @l_CURR_AMORT_AMT) > @l_AMORT_AMT SET @l_CURR_AMORT_AMT = @l_AMORT_AMT - @l_AMORTIZED_AMT END --Insert to bang ASS_AMORT_DT EXEC SYS_CodeMasters_Gen 'ASS_AMORT_DT', @l_AMORTDT_ID out INSERT INTO ASS_AMORT_DT ( AMORTDT_ID, AMORT_ID, AMORT_DT, CRDR, BRANCH_ID, DEP_ID, ASSET_ID, AMORT_AMT, GROUP_ID, EXECUTED, TRN_TYPE, TRN_DESC ) VALUES ( @l_AMORTDT_ID, @l_AMORT_ID, @sExecDT, 'C', @l_BRANCH_ID, @l_DEP_ID, @l_ASSET_ID, @l_CURR_AMORT_AMT, NULL, --Khong chay khau hao theo group '0', 'AMORT', @l_DESC ) SET @l_TOTAL_AMT = @l_TOTAL_AMT + @l_CURR_AMORT_AMT ------------- BẮT ĐẦU CHẠY KHẤU HAO TÀI SẢN---------------- -- lấy thông tin nhóm tài sản DECLARE @goupxe TABLE ( GROUP_ID VARCHAR(25) ) INSERT INTO @goupxe SELECT ag.GROUP_ID FROM ASS_GROUP ag WHERE ag.PARENT_ID = 'ASG000000000151' SELECT @l_EXP_GL = G.EXP_ACCTNO, @l_AMORT_GL = G.AMORT_ACCTNO, @l_TYPE_ID = G.[TYPE_ID] FROM ASS_GROUP G WHERE G.GROUP_ID = @l_GROUP_ID IF @@ERROR<>0 GOTO ABORT DECLARE @l_MONTHLY_AMT DECIMAL(18,0), @l_AM_AMORT_AMT DECIMAL(18,0) SELECT @l_AM_AMORT_AMT = AM.AMORT_AMT FROM ASS_MASTER AM WHERE AM.ASSET_ID = @l_ASSET_ID IF (@l_AM_AMORT_AMT > 1600000000 AND EXISTS (SELECT GROUP_ID FROM @goupxe WHERE GROUP_ID = @l_GROUP_ID)) BEGIN PRINT 1 SET @l_MONTHLY_AMT = ROUND(1600000000 / @l_AMORT_MONTH, 0) DECLARE @AMORT_ON_DAY DECIMAL(18, 0) SET @AMORT_ON_DAY = ROUND(@l_MONTHLY_AMT / dbo.[FN_GetDaysInMonth](@l_AMORT_START_DATE), 0) SET @l_AMT_AMORT = ROUND(@AMORT_ON_DAY * (DATEDIFF(DAY, @l_AMORT_START_DATE, dbo.FN_GetLastDayOfMonth(@l_AMORT_START_DATE)) + 1), 0) --END IF (DAY(@l_AMORT_START_DATE) = 1) SET @l_AMT_AMORT = @l_MONTHLY_AMT END IF (@l_AMORTIZED_MONTH = 0) --Khau hao thang dau tien BEGIN SET @l_CURR_AMORT_STATUS = 'DKH' IF (@l_AM_AMORT_AMT > 1600000000 AND EXISTS (SELECT GROUP_ID FROM @goupxe WHERE GROUP_ID = @l_GROUP_ID) ) BEGIN SET @l_AMT_OVER = @l_CURR_AMORT_AMT - @l_AMT_AMORT END END ELSE IF dbo.FN_GetLastDayOfMonth(@sExecDT) = dbo.FN_GetLastDayOfMonth(@l_AMORT_END_DATE) --Ky khau hao cuoi cung BEGIN --SET @l_CURR_AMORT_AMT = @l_AMORT_AMT - @l_AMORTIZED_AMT SET @l_CURR_AMORT_STATUS = 'KHX' IF (@l_AM_AMORT_AMT > 1600000000 AND EXISTS (SELECT GROUP_ID FROM @goupxe WHERE GROUP_ID = @l_GROUP_ID) ) BEGIN SET @l_AMT_OVER = @l_CURR_AMORT_AMT - (1600000000 - (@l_AMT_AMORT + (@l_MONTHLY_AMT * (@l_AMORT_MONTH - 2)))) END END ELSE --tai san dang khau hao binh thuong BEGIN SET @l_CURR_AMORT_STATUS = 'DKH' IF (@l_AM_AMORT_AMT > 1600000000 AND EXISTS (SELECT GROUP_ID FROM @goupxe WHERE GROUP_ID = @l_GROUP_ID) ) BEGIN SET @l_AMT_OVER = @l_CURR_AMORT_AMT - @l_MONTHLY_AMT END END IF(@l_AMORT_AMT - @l_AMORTIZED_AMT>0) SET @l_CURR_AMORT_STATUS = 'DKH' --BRN_ID HOI SO SELECT @l_HO_BRN_ID = BRANCH_ID FROM CM_BRANCH A WHERE A.BRANCH_TYPE = 'HS' --Insert vao bang dbo.ASS_ENTRIES_POST EXEC ASS_TRN_REF_NO_Gen @p_ASSET_TYPE, @sToday, @l_TRN_REF_NO out IF @l_BRANCH_ID = @l_HO_BRN_ID BEGIN SET @l_DR_BRN_ID = @l_DEP_ID END ELSE BEGIN SET @l_DR_BRN_ID = @l_BRANCH_ID END --thieuvq dien giai hach toan khau hao IF @p_ASSET_TYPE = 'TSCD' BEGIN SET @l_DESC_CORE = 'KHAU HAO TSCD KY ' + @l_AMORT_TERM SET @l_CR_BRN_ID = @l_HO_BRN_ID END ELSE BEGIN SET @l_DESC_CORE = 'PHAN BO CHI PHI CCLD KY ' + @l_AMORT_TERM SET @l_CR_BRN_ID = @l_BRANCH_ID END DECLARE @l_BRANCH_CODE VARCHAR(25), @l_ASSET_CODE VARCHAR(25),@l_ETP_ID VARCHAR(25),@DEP_CODE VARCHAR(25) SET @l_BRANCH_CODE = (SELECT cb.BRANCH_CODE FROM CM_BRANCH cb WHERE cb.BRANCH_ID=@l_BRANCH_ID) SET @l_ASSET_CODE =(SELECT am.ASSET_CODE FROM ASS_MASTER am WHERE am.ASSET_ID=@l_ASSET_ID) SET @l_AMORTIZED_AMT =(SELECT am.AMORTIZED_AMT FROM ASS_MASTER am WHERE am.ASSET_ID=@l_ASSET_ID) SET @DEP_CODE= (SELECT cd.DEP_CODE FROM CM_DEPARTMENT cd WHERE cd.DEP_ID=@l_DEP_ID) DECLARE @LST_COST_SHARE TABLE ( ASSET_ID VARCHAR(20), BRANCH_ID VARCHAR(20), DEP_ID VARCHAR(20), COST_AMOUNT DECIMAL(18,0) ) INSERT INTO @LST_COST_SHARE (ASSET_ID, BRANCH_ID, DEP_ID, COST_AMOUNT) SELECT aca.ASSET_ID,acad.BRANCH_ID,acad.DEPT_ID,acad.COST_AMOUNT FROM ASS_COST_ALLOCATION aca LEFT JOIN ASS_COST_ALLOC_DT acad ON aca.COS_ID = acad.COS_ID WHERE aca.RECORD_STATUS=1 AND aca.AUTH_STATUS='A' AND aca.ASSET_ID=@l_ASSET_ID IF (@l_CURR_AMORT_AMT > 0) BEGIN EXEC SYS_CodeMasters_Gen 'ASS_ENTRIES_POST' ,@l_ET_ID OUT IF @l_ET_ID = '' OR @l_ET_ID IS NULL GOTO ABORT 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) 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_CURR_AMORT_AMT - @l_AMT_OVER, 'Y', @sExecDT, @l_DESC_CORE, @p_MAKER_ID, @p_CHECKER_ID) EXEC SYS_CodeMasters_Gen 'ASS_ENTRIES_POST_SYNC' ,@l_ETP_ID OUT 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) VALUES (@l_ETP_ID, @l_ET_ID, @l_AMORTDT_ID, @l_BRANCH_CODE, @l_AMORT_GL, 'VND', 'C', @l_CURR_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); EXEC SYS_CodeMasters_Gen 'ASS_ENTRIES_POST_SYNC' ,@l_ETP_ID OUT 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) VALUES (@l_ETP_ID, @l_ET_ID, @l_AMORTDT_ID, @l_BRANCH_CODE, @l_EXP_GL, 'VND', 'D', @l_CURR_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); IF(EXISTS(SELECT ASSET_ID FROM @LST_COST_SHARE)) BEGIN DECLARE lstDATACOST CURSOR FOR SELECT BRANCH_ID ,DEP_ID ,COST_AMOUNT FROM @LST_COST_SHARE OPEN lstDATACOST 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) SET @TRANFER_CP=(SELECT epa.ACC_NO FROM ENTRIES_POST_ACCNO epa WHERE epa.ACC_TYPE='ASSET_CCLD_N') FETCH NEXT FROM lstDATACOST INTO @COST_BRANCH_ID, @COST_DEP_ID , @COST_AMOUNT WHILE @@fetch_status = 0 BEGIN IF(@l_BRANCH_ID <> @COST_BRANCH_ID) BEGIN SET @COST_BRANCH_CODE =(SELECT cb.BRANCH_CODE FROM CM_BRANCH cb WHERE cb.BRANCH_ID = @COST_BRANCH_ID) EXEC SYS_CodeMasters_Gen 'ASS_ENTRIES_POST_SYNC' ,@l_ETP_ID OUT 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) 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); EXEC SYS_CodeMasters_Gen 'ASS_ENTRIES_POST_SYNC' ,@l_ETP_ID OUT 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) 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); EXEC SYS_CodeMasters_Gen 'ASS_ENTRIES_POST_SYNC' ,@l_ETP_ID OUT 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) 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); EXEC SYS_CodeMasters_Gen 'ASS_ENTRIES_POST_SYNC' ,@l_ETP_ID OUT 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) 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); END ELSE BEGIN SELECT @COST_DEP_ID SET @COST_DEP_CODE =(SELECT cd.DEP_CODE FROM CM_DEPARTMENT cd WHERE cd.DEP_ID=@COST_DEP_ID) EXEC SYS_CodeMasters_Gen 'ASS_ENTRIES_POST_SYNC',@l_ETP_ID OUT 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) 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); EXEC SYS_CodeMasters_Gen 'ASS_ENTRIES_POST_SYNC',@l_ETP_ID OUT 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) 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); END FETCH NEXT FROM lstDATACOST INTO @COST_BRANCH_ID, @COST_DEP_ID , @COST_AMOUNT END CLOSE lstDATACOST DEALLOCATE lstDATACOST END END IF (@l_AMT_OVER > 0) BEGIN EXEC SYS_CodeMasters_Gen 'ASS_ENTRIES_POST' ,@l_ET_ID OUT IF @l_ET_ID = '' OR @l_ET_ID IS NULL GOTO ABORT 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) 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) EXEC SYS_CodeMasters_Gen 'ASS_ENTRIES_POST_SYNC' ,@l_ETP_ID OUT 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) 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); EXEC SYS_CodeMasters_Gen 'ASS_ENTRIES_POST_SYNC' ,@l_ETP_ID OUT 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) 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); END IF @@Error <> 0 GOTO ABORT --UPDATE BANG ASS_MASTER UPDATE ASS_MASTER SET AMORTIZED_AMT = isnull(AMORTIZED_AMT, 0) + @l_CURR_AMORT_AMT, AMORTIZED_MONTH = isnull(AMORTIZED_MONTH, 0) + 1, AMORT_STATUS = @l_CURR_AMORT_STATUS WHERE ASSET_ID = @l_ASSET_ID IF @@Error <> 0 GOTO ABORT -- --update da hach toan UPDATE ASS_AMORT_DT SET EXECUTED = '1' WHERE AMORTDT_ID = @l_AMORTDT_ID IF @@Error <> 0 GOTO ABORT ----------------------------------------------- FETCH NEXT FROM pCur INTO @l_ASSET_ID, @l_AMORTIZED_AMT, @l_AMORTIZED_MONTH, @l_AMORT_AMT, @l_AMORT_MONTH, @l_AMORT_END_DATE, @l_AMORT_START_DATE, @l_FIRST_AMORT_AMT, @l_MONTHLY_AMORT_AMT, @l_BRANCH_ID, @l_DEP_ID, @l_GROUP_ID END UPDATE ASS_AMORT SET TOTAL_AMT = @l_TOTAL_AMT, PROCESS_STATUS = 'S' WHERE AMORT_ID = @l_AMORT_ID -- /****CAP NHAT CCLD TINH TRANG: DPB(Đã phân bổ chi phí khi xuất sử dụng) VE DANG KHAU HAO***/ IF @p_ASSET_TYPE = 'CCLD' BEGIN UPDATE ASS_MASTER SET AMORT_STATUS = 'DKH' WHERE AMORT_STATUS IN ('DPB') --AND convert(date, AMORT_START_DATE) <= convert(date, @sExecDT) AND convert(date, AMORT_START_DATE) <= convert(date, dbo.FN_GetLastDayOfMonth(@sExecDT)) AND AMORTIZED_AMT < AMORT_AMT AND RECORD_STATUS = '1' AND AUTH_STATUS = 'A' AND TYPE_ID = 'CCLD' AND (BRANCH_ID = @l_BRANCH_ID_DO OR (@l_BRANCH_TYPE_DO = 'CN' --NEU LA CN THI PHAN BO LUON CHO PGD THUOC CHI NHANH DO --AND BRANCH_ID IN (SELECT * FROM [dbo].[CM_BRANCH_GETCHILDID](@l_BRANCH_ID_DO)))) --THIEUVQ AND BRANCH_ID IN (SELECT BR.BRANCH_ID FROM ASS_AMORT_BRN BR WHERE BR.AMORT_ID = @l_AMORT_ID))) --THIEUVQ 28092016 END CLOSE pCur DEALLOCATE pCur -- end cusor loại tài sản FETCH NEXT FROM cur INTO @p_ASSET_TYPE END CLOSE cur DEALLOCATE cur -- end cusor loại tài sản END TRY BEGIN CATCH CLOSE pCur DEALLOCATE pCur CLOSE cur DEALLOCATE cur IF @@TRANCOUNT>0 ROLLBACK TRANSACTION SELECT '-1' as Result, convert(varchar(100),ERROR_NUMBER()) + ' - ' + ERROR_MESSAGE() ErrorDesc, '' AMORT_ID, '' AMORT_TERM, 0 TOTAL_AMT, NULL EXECUTE_DT, '' STATUS_NAME, '' NOTES --GHI LOG INSERT INTO THREAD_TIME_SEND_LOG (DISTANCE_TIME, DISTANCE_TYPE, TOOL_NAME, TOOL_VALUE, EXEC_DT, EXEC_TYPE, MESSAGE, CREATE_DT) 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()); RETURN '-1' END CATCH; IF @@TRANCOUNT>0 COMMIT TRANSACTION SELECT '0' as Result, '' ErrorDesc, AMORT_ID, AMORT_TERM, TOTAL_AMT, EXECUTE_DT, CASE WHEN PROCESS_STATUS='P' THEN N'Chờ thực thi' ELSE N'Đã thực thi' END STATUS_NAME, NOTES FROM ASS_AMORT WHERE AMORT_ID = @l_AMORT_ID --GHI LOG INSERT INTO THREAD_TIME_SEND_LOG (DISTANCE_TIME, DISTANCE_TYPE, TOOL_NAME, TOOL_VALUE, EXEC_DT, EXEC_TYPE, MESSAGE, CREATE_DT) 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()); RETURN '0' ABORT: BEGIN CLOSE pCur DEALLOCATE pCur CLOSE cur DEALLOCATE cur ROLLBACK TRANSACTION --GHI LOG INSERT INTO THREAD_TIME_SEND_LOG (DISTANCE_TIME, DISTANCE_TYPE, TOOL_NAME, TOOL_VALUE, EXEC_DT, EXEC_TYPE, MESSAGE, CREATE_DT) VALUES (@DISTANCE_TIME,@DISTANCE_TYPE, @TOOL_NAME, @TOOL_VALUE, CONVERT(DATETIME,@p_EXECUTE_DATE,103),@p_EXEC_TYPE, ERROR_MESSAGE(), GETDATE()); SELECT '-1' as Result, '' ErrorDesc RETURN '-1' End GO UPDATE ASS_MASTER SET AMORTIZED_AMT=(SELECT SUM(aad.AMORT_AMT) FROM ASS_AMORT_DT aad WHERE aad.ASSET_ID=ASS_MASTER.ASSET_ID), AMORTIZED_MONTH=AMORTIZED_MONTH-1 SELECT * FROM ASS_ENTRIES_POST aep WHERE aep.TRN_ID='' SELECT * FROM ASS_ENTRIES_POST_SYNC aeps WHERE aeps.TRN_ID IN (SELECT aad.AMORTDT_ID FROM ASS_AMORT_DT aad WHERE aad.AMORT_ID='')