ALTER PROCEDURE dbo.ASS_UPDATE_App @p_UPDATE_ID varchar(15), @P_AUTH_STATUS VARCHAR(1), @p_CHECKER_ID VARCHAR(100), @p_APPROVE_DT varchar(20) AS BEGIN TRY DECLARE @ERRORSYS NVARCHAR(15) = '', @ERROR NVARCHAR(500) = '' declare @l_ASSHIST_ID varchar(15) declare @l_ASSET_ID varchar(15) declare @l_TYPE_ID nvarchar(15) DECLARE @l_MAKER_ID varchar(100) DECLARE @l_BRANCH_CREATE VARCHAR(15), @l_BRANCH_ID VARCHAR(15),@l_DEP_ID VARCHAR(15) declare @l_NEW_GROUP_ID varchar(15), @l_OLD_GROUP_ID varchar(15) declare @l_NEW_ASSET_NAME nvarchar(1000)--, @l_OLD_ASSET_NAME nvarchar(1000) declare @l_NEW_ASSET_SERIAL_NO nvarchar(100)--, @l_OLD_ASSET_SERIAL_NO nvarchar(100) declare @l_NEW_ASSET_DESC nvarchar(max)--, @l_OLD_ASSET_DESC nvarchar(max) declare @l_NEW_BUY_PRICE decimal(18,0), @l_OLD_BUY_PRICE decimal(18,0) declare @l_NEW_AMORT_AMT decimal(18,0), @l_OLD_AMORT_AMT decimal(18,0) declare @l_NEW_AMORT_MONTH decimal(18,2), @l_OLD_AMORT_MONTH decimal(18,2) declare @l_AMORTIZED_MONTH decimal(18,2), @l_AMORTIZED_AMT decimal(18,0) declare @l_SPECIAL_ASS varchar(1) DECLARE @l_AMORT_STATUS VARCHAR(15), @L_AMORT_RATE DECIMAL(18,2) DECLARE @l_AMORT_START_DATE datetime, @l_AMORT_END_DATE datetime DECLARE @l_NEW_FIRST_AMORT_AMT numeric(18,0), @l_OLD_FIRST_AMORT_AMT numeric(18,0) DECLARE @l_NEW_MONTHLY_AMT numeric(18,0), @l_OLD_MONTHLY_AMT numeric(18,0) declare @l_GROUP_ID_UPD varchar(1) = 'N' declare @l_AMORT_AMT_UPD varchar(1) = 'N', @l_AMORT_MONTH_UPD VARCHAR(1) = 'N' declare @l_DO_BRANCH_ID varchar(15) DECLARE @l_VALUE_ID varchar(15) DECLARE @l_HO_BRN_ID varchar(15) declare @l_ET_ID varchar(15) DECLARE @sToday varchar(10) = convert(varchar(10), getdate(), 103) declare @l_TRN_REF_NO varchar(20) DECLARE @l_SUPPEND_GL varchar(50) DECLARE @l_ASSET_GL varchar(50), @l_AMORT_ACCTNO VARCHAR(50) declare @l_ASSET_VALUE decimal(18,0) declare @l_CORE_NOTE NVARCHAR(500) DECLARE @l_DATE1 DATE,@l_DATE2 DATE DECLARE @l_ASSET_CODE VARCHAR(50) -- KHIEMCHG Bo sung ASSETCODE REF cho HACH TOAN DECLARE @l_TRN_NO VARCHAR(15) IF(EXISTS(SELECT * FROM ASS_UPDATE WHERE AUTH_STATUS ='A' AND UPDATE_ID=@p_UPDATE_ID)) BEGIN --ROLLBACK TRANSACTION SELECT '-1' as Result, '' UPDATE_ID, N'Phiếu cập nhật tài sản đã được duyệt.' ErrorDesc RETURN '-1' END EXEC ENTRIES_POST_GEN_NO @p_BRANCH_ID = 'DV0001' ,@p_TRN_DATE = @p_APPROVE_DT ,@p_KeyGen = @l_TRN_NO OUT SELECT @l_ASSET_ID = A.ASSET_ID, @l_NEW_GROUP_ID = A.GROUP_ID, --@l_NEW_AMORT_MONTH = CASE WHEN M.[TYPE_ID] = 'TSCD' THEN G.AMORT_MONTH ELSE A.AMORT_AMT END, @l_NEW_AMORT_MONTH = A.AMORT_MONTH,--THIEUVQ 18/04/2014 @l_NEW_ASSET_NAME = A.ASSET_NAME, @l_NEW_ASSET_SERIAL_NO = A.ASSET_SERIAL_NO, @l_NEW_ASSET_DESC = A.ASSET_DESC, @l_NEW_BUY_PRICE = A.BUY_PRICE, @l_NEW_AMORT_AMT = A.AMORT_AMT, @l_CORE_NOTE = CORE_NOTE, @l_MAKER_ID = A.MAKER_ID, @l_SUPPEND_GL = A.ACCOUNT_GL FROM ASS_UPDATE A INNER JOIN ASS_GROUP G on G.GROUP_ID = A.GROUP_ID INNER JOIN ASS_MASTER M ON M.ASSET_ID = A.ASSET_ID WHERE UPDATE_ID = @p_UPDATE_ID SELECT @l_OLD_GROUP_ID = ISNULL(A.REF_GROUP_ID,A.GROUP_ID), @l_OLD_AMORT_MONTH = AMORT_MONTH, @l_AMORTIZED_MONTH = AMORTIZED_MONTH, --@l_OLD_ASSET_NAME = ASSET_NAME, --@l_OLD_ASSET_SERIAL_NO = ASSET_SERIAL_NO, --@l_OLD_ASSET_DESC = ASSET_DESC, @l_OLD_BUY_PRICE = BUY_PRICE, @l_OLD_FIRST_AMORT_AMT = FIRST_AMORT_AMT, @l_OLD_MONTHLY_AMT = A.MONTHLY_AMORT_AMT, @l_AMORT_START_DATE = AMORT_START_DATE, @l_AMORT_END_DATE = AMORT_END_DATE, @l_OLD_AMORT_AMT = AMORT_AMT, @l_AMORTIZED_AMT = AMORTIZED_AMT, @l_SPECIAL_ASS = SPECIAL_ASS, @l_TYPE_ID = TYPE_ID, @l_AMORT_STATUS = AMORT_STATUS, @L_AMORT_RATE = AMORT_RATE, @l_BRANCH_CREATE = A.BRANCH_CREATE, @l_BRANCH_ID = A.BRANCH_ID, @l_DEP_ID=A.DEPT_ID, @l_ASSET_CODE = A.ASSET_CODE FROM ASS_MASTER A WHERE ASSET_ID = @l_ASSET_ID --Lay branch_id cua user duyet select @l_DO_BRANCH_ID = a.TLSUBBRID from TL_USER a where a.TLNANME = @p_CHECKER_ID --BRN_ID HOI SO SELECT @l_HO_BRN_ID = BRANCH_ID FROM CM_BRANCH A WHERE A.BRANCH_TYPE = 'HS' --Lay suppend GL ---THAY DOI TAI KHOAN HACH TOAN GL THIEUVQ - 09092016 --SET @l_SUPPEND_GL = dbo.fn_replace_acctno(UPPER(@l_SUPPEND_GL) + 'XXXX',@l_DO_BRANCH_ID) SELECT @l_SUPPEND_GL = A.ParaValue FROM SYS_PARAMETERS A WHERE A.ParaKey='ASSET_SUPPEND_GL' --ASSET_GL SELECT @l_ASSET_GL = ASSET_ACCTNO, @l_AMORT_ACCTNO = A.AMORT_ACCTNO FROM ASS_GROUP A WHERE A.GROUP_ID = (SELECT AG.PARENT_ID FROM ASS_GROUP AG WHERE AG.GROUP_ID = (SELECT AG.PARENT_ID FROM ASS_GROUP AG WHERE AG.GROUP_ID = @l_OLD_GROUP_ID)) IF(@l_ASSET_GL IS NULL OR @l_ASSET_GL = '') SET @l_ASSET_GL = (SELECT ASSET_ACCTNO FROM ASS_GROUP WHERE GROUP_ID = @l_OLD_GROUP_ID) IF(@l_AMORT_ACCTNO IS NULL OR @l_AMORT_ACCTNO = '') SET @l_AMORT_ACCTNO = (SELECT AMORT_ACCTNO FROM ASS_GROUP WHERE GROUP_ID = @l_OLD_GROUP_ID) --Validation is here --Kiem tra so thang khau hao cua nhom moi co lon hon so thang da khau hao ko? IF (@l_NEW_GROUP_ID <> @l_OLD_GROUP_ID AND @l_NEW_AMORT_MONTH <> @l_OLD_AMORT_MONTH) BEGIN --IF @l_NEW_AMORT_MONTH <= @l_AMORTIZED_MONTH IF @l_NEW_AMORT_MONTH <= @l_AMORTIZED_MONTH AND @l_AMORT_STATUS IN ('CKH','DKH') --thieuvq 18/04/2014 BEGIN --SET @ERRORSYS = 'ASS-00009' --CAP NHAT LẠI NGAY KET THUC KHAU HAO --thieuvq 18/04/2014 SET @l_DATE1= CONVERT(DATE,'1/'+CONVERT(VARCHAR(10),MONTH(CONVERT(DATE,@p_APPROVE_DT,103))) +'/'+CONVERT(VARCHAR(10),YEAR(CONVERT(DATE,@p_APPROVE_DT,103))),103) SET @l_DATE2 = CONVERT(DATE,'1/'+CONVERT(VARCHAR(10),MONTH(@l_AMORT_END_DATE)) +'/'+CONVERT(VARCHAR(10),YEAR(@l_AMORT_END_DATE)),103) SET @l_AMORT_END_DATE = DATEADD(MONTH,DATEDIFF(MONTH,@l_DATE2,@l_DATE1),@l_AMORT_END_DATE) SET @L_AMORT_RATE = ROUND((100.00/@l_NEW_AMORT_MONTH)*12,2) END SET @l_GROUP_ID_UPD = 'Y' END --Kiem tra gia tri khau hao moi > so tien da khau hao IF (@l_NEW_AMORT_AMT<=@l_AMORTIZED_AMT AND @l_NEW_AMORT_AMT <> @l_OLD_AMORT_AMT) BEGIN SET @ERRORSYS = 'ASS-00014' END ELSE BEGIN IF (@l_NEW_AMORT_AMT <> @l_OLD_AMORT_AMT) BEGIN SET @l_AMORT_AMT_UPD = 'Y' END END ---KIEM TRA SO THANG KHAU HAO MOI NHO HON SO THANG DA KHAU HAO KHONG - THIEUVQ 210618 ::BEGIN IF @l_NEW_AMORT_MONTH < @l_AMORTIZED_MONTH BEGIN SET @ERRORSYS = 'ASS-99994' END ELSE BEGIN IF @l_NEW_AMORT_MONTH <> @l_OLD_AMORT_MONTH SET @l_AMORT_MONTH_UPD = 'Y' SET @l_AMORT_END_DATE = DATEADD(MONTH,@l_NEW_AMORT_MONTH,@l_AMORT_START_DATE) SET @l_AMORT_END_DATE = DATEADD(DAY,-1,@l_AMORT_END_DATE) END -----::END ----NEU THAY DOI SO KY KHAU HAO => KIEM TRA CHO TRUONG HOP CCLD --IF (@l_GROUP_ID_UPD = 'Y' AND @l_TYPE_ID = 'CCLD') --BEGIN -- RETURN 0 --END --Neu co thay doi gia tri khau hao --IF (@l_TYPE_ID = 'TSCD' AND @l_AMORT_STATUS IN ('CKH','DKH')) IF @l_AMORT_STATUS IN ('CKH','DKH') BEGIN IF (@l_AMORT_AMT_UPD = 'Y' OR @l_AMORT_MONTH_UPD = 'Y') BEGIN IF (@l_AMORTIZED_MONTH = 0) --Chua chay khau hao thi phai tinh lai khau hao cua thang dau tien BEGIN SET @l_NEW_MONTHLY_AMT = ROUND((@l_NEW_AMORT_AMT - ISNULL(@l_AMORTIZED_AMT,0)) / @l_NEW_AMORT_MONTH, 0) SET @l_NEW_FIRST_AMORT_AMT = @l_NEW_MONTHLY_AMT--ROUND(@l_NEW_MONTHLY_AMT/dbo.[FN_GetDaysInMonth](@l_AMORT_START_DATE) * (DATEDIFF(day,@l_AMORT_START_DATE, dbo.FN_GetLastDayOfMonth(@l_AMORT_START_DATE)) + 1), -3) END ELSE BEGIN --thieuvq - sua lai doan tinh khau hao --TINH LAI SO KY KHAU HAO TINH THEO NGAY DUYET DECLARE @l_KY_KHAU_HAO_CL FLOAT --BAN VIET THAY DOI CACH TINH 230119 --DECLARE @l_NGAY_DUYET DATE = CONVERT(DATE,@p_APPROVE_DT,103) ----SET @l_NGAY_DUYET = CONVERT(VARCHAR(10),YEAR(@l_NGAY_DUYET)) + '-'+CONVERT(VARCHAR(10),MONTH(@l_NGAY_DUYET)) + '-'+ '1' ----SET @l_KY_KHAU_HAO_CL = round((datepart(day,@l_AMORT_END_DATE)*1.0/dbo.[FN_GetDaysInMonth](@l_AMORT_END_DATE)),2) ------THIEUVQ COMMENT 29072015 ------IF @l_KY_KHAU_HAO_CL = 1 SET @l_KY_KHAU_HAO_CL = DATEDIFF(MM, @l_NGAY_DUYET, @l_AMORT_END_DATE) ------ELSE --SET @l_KY_KHAU_HAO_CL = DATEDIFF(MM, @l_NGAY_DUYET, @l_AMORT_END_DATE) --+ @l_KY_KHAU_HAO_CL ----KIEM TRA THANG DUYET NAY DA CHAY KHAU HAO CHUA, NEU DA CHAY KHAU HAO ROI THI GIAM DI 1 SO KY KH CON LAI --IF EXISTS (SELECT * FROM ASS_AMORT WHERE AMORT_TERM = CONVERT(VARCHAR(5),MONTH(@l_NGAY_DUYET))+'/'+CONVERT(VARCHAR(5),YEAR(@l_NGAY_DUYET)) -- AND ASSET_TYPE = 'ALL') -- --AND ASSET_TYPE = 'TSCD') --BEGIN SET @l_KY_KHAU_HAO_CL = @l_KY_KHAU_HAO_CL - 1 END SET @l_KY_KHAU_HAO_CL = /*@l_OLD_AMORT_MONTH*/ @l_NEW_AMORT_MONTH - @l_AMORTIZED_MONTH --SET @l_NEW_MONTHLY_AMT = ROUND((@l_NEW_AMORT_AMT - @l_AMORTIZED_AMT)/ @l_NEW_AMORT_MONTH, -3) SET @l_NEW_MONTHLY_AMT = ROUND((@l_NEW_AMORT_AMT - @l_AMORTIZED_AMT)/ @l_KY_KHAU_HAO_CL, 0) SET @l_NEW_FIRST_AMORT_AMT = @l_OLD_FIRST_AMORT_AMT END print 'Y' END ELSE BEGIN SET @l_NEW_FIRST_AMORT_AMT = @l_OLD_FIRST_AMORT_AMT SET @l_NEW_MONTHLY_AMT= @l_OLD_MONTHLY_AMT print 'N' END END ELSE BEGIN --THIEUVQ- DIEPTT 03092015 TRUONG HOP KHAU HAO XONG NHUNG TANG NGUYEN GIA --BAT LAI TINH TRANG TAI SAN DANG KHAU HAO VA SE KHAU HAO HET VAO THANG NAY IF (@l_AMORT_AMT_UPD = 'Y') BEGIN SET @l_AMORT_END_DATE = CONVERT(DATETIME,@p_APPROVE_DT,103) --KIEM TRA NEU NGAY DIEU CHINH DA CHAY KHAU HAO ROI THI CHUYEN KHAU HAO HET VAO THANG SAU IF EXISTS (SELECT * FROM ASS_AMORT WHERE AMORT_TERM = CONVERT(VARCHAR(5),MONTH(@l_AMORT_END_DATE))+'/'+CONVERT(VARCHAR(5),YEAR(@l_AMORT_END_DATE)) AND ASSET_TYPE = 'ALL') BEGIN SET @l_AMORT_END_DATE = DATEADD(MM,1,@l_AMORT_END_DATE ) END SET @l_AMORT_STATUS = 'DKH' END SET @l_NEW_FIRST_AMORT_AMT = @l_OLD_FIRST_AMORT_AMT SET @l_NEW_MONTHLY_AMT= @l_OLD_MONTHLY_AMT print 'N' END IF @ERRORSYS <> '' BEGIN SELECT ErrorCode Result, ErrorDesc ErrorDesc FROM SYS_ERROR WHERE ErrorCode = @ERRORSYS RETURN '0' END BEGIN TRANSACTION --Move to history --Phat sinh Asset_ID EXEC SYS_CodeMasters_Gen 'ASS_MASTER_HIST', @l_ASSHIST_ID out INSERT INTO ASS_MASTER_HIST SELECT @l_ASSHIST_ID, a.* FROM ASS_MASTER a where a.ASSET_ID = @l_ASSET_ID UPDATE ASS_MASTER SET ASSET_NAME = @l_NEW_ASSET_NAME, ASSET_DESC = @l_NEW_ASSET_DESC, ASSET_SERIAL_NO = @l_NEW_ASSET_SERIAL_NO, BUY_PRICE = @l_NEW_BUY_PRICE, AMORT_AMT = @l_NEW_AMORT_AMT, FIRST_AMORT_AMT = @l_NEW_FIRST_AMORT_AMT, MONTHLY_AMORT_AMT = @l_NEW_MONTHLY_AMT, APPROVE_DT = CONVERT(DATETIME, @p_APPROVE_DT, 103), AMORT_END_DATE = @l_AMORT_END_DATE, -- thieuvq them 18/04/2014 AMORT_MONTH = @l_NEW_AMORT_MONTH, AMORT_RATE = @L_AMORT_RATE, --THIEUVQ 03092015 AMORT_STATUS = @l_AMORT_STATUS WHERE ASSET_ID = @l_ASSET_ID -- SỐ TIỀN CẶP BÚT TOÁN SAU KHI GIẢM NGUYÊN GIÁ DECLARE @MONTH_OLD_AMORT DECIMAL= (SELECT COUNT(*) FROM ASS_AMORT_DT AAD WHERE YEAR(AAD.AMORT_DT) <> YEAR(CONVERT(DATETIME,@p_APPROVE_DT,103)) AND AAD.ASSET_ID = @l_ASSET_ID) DECLARE @MONTH_NEW_AMORT DECIMAL= (SELECT COUNT(*) FROM ASS_AMORT_DT AAD WHERE YEAR(AAD.AMORT_DT) = YEAR(CONVERT(DATETIME,@p_APPROVE_DT,103)) AND AAD.ASSET_ID = @l_ASSET_ID) DECLARE @AMT_OLD_AMORT DECIMAL= (SELECT SUM(AAD.AMORT_AMT) FROM ASS_AMORT_DT AAD WHERE YEAR(AAD.AMORT_DT) <> YEAR(CONVERT(DATETIME,@p_APPROVE_DT,103)) AND AAD.ASSET_ID = @l_ASSET_ID) DECLARE @_NEW_AMT_AMORT DECIMAL(18,2) DECLARE @_NEW_AMT_AMORT_RE DECIMAL(18,2) DECLARE @_NEW_AMT_AMORT_RENEW DECIMAL(18,2) DECLARE @_NEW_AMT_AMORT_OLD DECIMAL(18,2) DECLARE @_NEW_AMT_AMORT_LAST DECIMAL(18,2) DECLARE @_NUM_AMT_AMORT_DT DECIMAL(18,2) DECLARE @_CUR_DATE DECIMAL(18,2) = CAST((DAY(CONVERT(DATETIME,@p_APPROVE_DT,103))) AS DECIMAL) + 0.00 DECLARE @_END_OF_MONTH DECIMAL(18,2) = DAY(dbo.FN_GetLastDayOfMonth(CONVERT(DATETIME,@p_APPROVE_DT,103))) --- KHẤU HAO LUỸ KẾ DECLARE @KH_CUM DECIMAL(18,2) = (SELECT ISNULL(AM.AMORTIZED_AMT,0) FROM ASS_MASTER AM WHERE AM.ASSET_ID = @l_ASSET_ID) IF(YEAR(@l_AMORT_START_DATE) <> YEAR(CONVERT(DATETIME,@p_APPROVE_DT,103))) BEGIN -- Số tiền trích khấu hao của tháng mới theo nguyên giá mới SET @_NEW_AMT_AMORT = ROUND((@l_NEW_BUY_PRICE - @AMT_OLD_AMORT)/(@l_NEW_AMORT_MONTH-@MONTH_OLD_AMORT),0) END ELSE BEGIN SET @_NEW_AMT_AMORT = ROUND((@l_NEW_BUY_PRICE - @KH_CUM)/@l_KY_KHAU_HAO_CL,0) END -- Số tiền khấu hao theo tháng tròn hiện tại SELECT @_NEW_AMT_AMORT_RE = AA.TOTAL_AMT FROM ASS_AMORT_DT AAD LEFT JOIN ASS_AMORT AA ON AAD.AMORT_ID = AA.AMORT_ID WHERE AAD.ASSET_ID = @l_ASSET_ID AND AA.IS_LEAF = 'Y' IF(@_NEW_AMT_AMORT_RE IS NULL OR @_NEW_AMT_AMORT_RE = 0) SET @_NEW_AMT_AMORT_RE = (SELECT ISNULL(AM.AMORTIZED_AMT,0) FROM ASS_MASTER AM WHERE AM.ASSET_ID = @l_ASSET_ID) -- Số ngày khấu hao còn lại trong khác sau khi update tăng giảm SET @_NUM_AMT_AMORT_DT = (@_END_OF_MONTH - @_CUR_DATE) + 1.00 -- Số tiền khấu hao theo số ngày còn lại của nguyên giá mới VD: Giảm tài sản A 10tr vào ngày 25-03-2023 thì tính đến cuối tháng là (31 - 25) + (ngày 25 hiện tại) = 7 ngày --SET @_NEW_AMT_AMORT_RENEW = ROUND(@_NEW_AMT_AMORT/@_END_OF_MONTH,0)*@_NUM_AMT_AMORT_DT SET @_NEW_AMT_AMORT_RENEW = ROUND((@_NEW_AMT_AMORT-@l_OLD_MONTHLY_AMT)*@MONTH_NEW_AMORT,0) -- Số tiền khấu hao cũ theo ngày còn lại --SET @_NEW_AMT_AMORT_OLD = ROUND(@_NEW_AMT_AMORT_RE/@_END_OF_MONTH, 0)*@_NUM_AMT_AMORT_DT -- Số tiền trích khấu hao cho cặp hạch toán phát sinh tăng giảm --SET @_NEW_AMT_AMORT_LAST = ROUND(@_NEW_AMT_AMORT_OLD - @_NEW_AMT_AMORT_RENEW,0) IF (@l_NEW_BUY_PRICE <> @l_OLD_BUY_PRICE) --TANG NGUYEN GIA BEGIN SET @_NEW_AMT_AMORT_LAST = @_NEW_AMT_AMORT_RENEW UPDATE ASS_MASTER SET MONTHLY_AMORT_AMT = ISNULL(@_NEW_AMT_AMORT, @l_NEW_MONTHLY_AMT) WHERE ASSET_ID = @l_ASSET_ID IF(@_NEW_AMT_AMORT_LAST < 0) SET @_NEW_AMT_AMORT_LAST = -@_NEW_AMT_AMORT_LAST END --HẠCH TOÁN TĂNG GIẢM NGUYÊN GIÁ DECLARE @AC_TSCD VARCHAR(20) IF(EXISTS(SELECT am.ASSET_ID FROM ASS_MASTER am WHERE am.ASSET_ID=@l_ASSET_ID AND am.ENTRY_BOOKED='Y')) BEGIN SET @AC_TSCD= (SELECT EPA.ACC_NO FROM ENTRIES_POST_ACCNO EPA WHERE EPA.ACC_TYPE = 'ASSET_TSCD' AND EPA.GROUP_ID = (SELECT AG.PARENT_ID FROM ASS_GROUP AG WHERE AG.GROUP_ID = (SELECT AG.PARENT_ID FROM ASS_GROUP AG WHERE AG.GROUP_ID = @l_OLD_GROUP_ID))) IF(@AC_TSCD IS NULL OR @AC_TSCD = '') SET @AC_TSCD = (SELECT ACC_NO FROM ENTRIES_POST_ACCNO WHERE ACC_TYPE ='ASSET_TSCD' AND GROUP_ID = @l_OLD_GROUP_ID) END ELSE BEGIN SET @AC_TSCD = (SELECT epa.ACC_NO FROM ENTRIES_POST_ACCNO epa WHERE epa.ACC_TYPE='BUY_TSCD' AND epa.GROUP_ID=(SELECT AG.PARENT_ID FROM ASS_GROUP AG WHERE AG.GROUP_ID = (SELECT AG.PARENT_ID FROM ASS_GROUP AG WHERE AG.GROUP_ID = @l_OLD_GROUP_ID))) IF(@AC_TSCD IS NULL OR @AC_TSCD = '') SET @AC_TSCD = (SELECT ACC_NO FROM ENTRIES_POST_ACCNO WHERE ACC_TYPE ='BUY_TSCD' AND GROUP_ID = @l_OLD_GROUP_ID) END DECLARE @AC_HS_MAIN VARCHAR(20) = (SELECT EPA.ACC_NO FROM ENTRIES_POST_ACCNO EPA WHERE EPA.ACC_TYPE = 'PAY_HS') DECLARE @l_EXP_ACCTNO VARCHAR(20), @l_AMORT_BASIC VARCHAR(20) DECLARE @l_ETP_ID VARCHAR(20),@l_D_BRANCH_CODE VARCHAR(25) , @l_C_BRANCH_CODE VARCHAR(25), @l_AC_BRANCH_CODE VARCHAR(25),@l_DEP_CODE VARCHAR(25) --BRN_ID HOI SO SELECT @l_HO_BRN_ID = BRANCH_ID FROM CM_BRANCH A WHERE A.BRANCH_TYPE = 'HS' SET @l_C_BRANCH_CODE = (SELECT cb.BRANCH_CODE FROM CM_BRANCH cb WHERE cb.BRANCH_ID=@l_HO_BRN_ID) SET @l_D_BRANCH_CODE = (SELECT cb.BRANCH_CODE FROM CM_BRANCH cb WHERE cb.BRANCH_ID=@l_BRANCH_CREATE) SET @l_DEP_CODE =(SELECT cd.DEP_CODE FROM CM_DEPARTMENT cd WHERE cd.DEP_ID=@l_DEP_ID) --ASSET_GL SELECT @l_ASSET_GL = ASSET_ACCTNO, @l_AMORT_BASIC = EXP_ACCTNO, @l_AMORT_ACCTNO = AMORT_ACCTNO FROM ASS_GROUP A WHERE A.GROUP_ID = @l_OLD_GROUP_ID --Neu co thay doi nguyen gia IF (@l_NEW_BUY_PRICE <> @l_OLD_BUY_PRICE) BEGIN DECLARE @AMT DECIMAL(18,0) DECLARE @BRN_ID VARCHAR(15) IF @l_BRANCH_ID IS NULL OR @l_BRANCH_ID = '' SET @BRN_ID = @l_BRANCH_CREATE ELSE SET @BRN_ID = @l_BRANCH_ID SET @l_AC_BRANCH_CODE = (SELECT cb.BRANCH_CODE FROM CM_BRANCH cb WHERE cb.BRANCH_ID=@BRN_ID) DECLARE @NOTE_AMORT NVARCHAR(500) = N'KHAU HAO TSCD TRICH NGUYEN GIA TANG' DECLARE @NOTE_AMORT2 NVARCHAR(500) = N'KHAU HAO TSCD TRICH NGUYEN GIA GIAM' IF (@l_NEW_BUY_PRICE > @l_OLD_BUY_PRICE) --TANG NGUYEN GIA BEGIN SET @AMT = @l_NEW_BUY_PRICE - @l_OLD_BUY_PRICE --insert dbo.ASS_VALUES EXEC SYS_CodeMasters_Gen 'ASS_VALUES', @l_VALUE_ID out INSERT INTO ASS_VALUES ( VALUE_ID, ASSET_ID, BRANCH_ID, TRN_DT, CRDR, ASSET_AMT, [DESCRIPTION], TRN_ID, TRN_TYPE, RECORD_STATUS, AUTH_STATUS, MAKER_ID, CREATE_DT, CHECKER_ID, APPROVE_DT, AMORT_AMT ) VALUES ( @l_VALUE_ID, @l_ASSET_ID, @BRN_ID, CONVERT(datetime, @sToday, 103), 'C', @AMT, N'DIEU CHINH TSCD/CCLD', @p_UPDATE_ID, 'ASS_UPDATE', '1','A',@l_MAKER_ID, CONVERT(datetime, @sToday, 103), @p_CHECKER_ID, CONVERT(datetime, @sToday, 103), @l_NEW_AMORT_AMT - @l_OLD_AMORT_AMT ) IF @l_TYPE_ID = 'TSCD' BEGIN --NO ASSET_ACCTNO - CO ASSET_SUPPEND_GL: GIA TRI CHENH LECH EXEC [dbo].[ASS_ENTRIES_POST_Insert] @l_TYPE_ID, @l_ASSET_ID, 'ASS_UPDATE', @p_UPDATE_ID,@l_DO_BRANCH_ID, @l_SUPPEND_GL, @BRN_ID, @l_ASSET_GL, @BRN_ID,@AMT ,'Y', @sToday, @l_CORE_NOTE, @l_MAKER_ID, @p_CHECKER_ID,@p_UPDATE_ID, --N'XUAT SU DUNG TSCD/CCLD' @l_ET_ID OUT --IF @ERROR <> 0 GOTO ABORT_ERROR -- TSCD 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,TRN_NO) VALUES (@l_ETP_ID, @l_ET_ID,@p_UPDATE_ID ,@l_AC_BRANCH_CODE , @AC_TSCD, 'VND', 'D', @AMT,1, @AMT, @l_ASSET_CODE,CONVERT(DATETIME, @p_APPROVE_DT, 103), @l_MAKER_ID, @p_CHECKER_ID, @l_DEP_CODE, @l_CORE_NOTE,@l_TRN_NO); -- TRẢ HỘI SỞ 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,TRN_NO) VALUES (@l_ETP_ID, @l_ET_ID,@p_UPDATE_ID ,@l_C_BRANCH_CODE , @AC_HS_MAIN, 'VND', 'C', @AMT,1, @AMT, @l_ASSET_CODE,CONVERT(DATETIME, @p_APPROVE_DT, 103), @l_MAKER_ID, @p_CHECKER_ID, @l_DEP_CODE, @l_CORE_NOTE,@l_TRN_NO); --ĐỒNG THỜI TRÍCH BỔ SUNG SỐ TRÍCH KHẤU HAO TRONG NĂM HIỆN HÀNH IF(@_NEW_AMT_AMORT_LAST IS NOT NULL AND @_NEW_AMT_AMORT_LAST <> 0) BEGIN EXEC [dbo].[ASS_ENTRIES_POST_Insert] @l_TYPE_ID, @l_ASSET_ID, 'ASS_UPDATE', @p_UPDATE_ID,@l_DO_BRANCH_ID, @l_SUPPEND_GL, @BRN_ID, @l_ASSET_GL, @BRN_ID,@AMT ,'Y', @sToday, @l_CORE_NOTE, @l_MAKER_ID, @p_CHECKER_ID,@p_UPDATE_ID, --N'XUAT SU DUNG TSCD/CCLD' @l_ET_ID OUT -- Chi phí KH cơ bản 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,TRN_NO) VALUES (@l_ETP_ID, @l_ET_ID,@p_UPDATE_ID ,@l_AC_BRANCH_CODE , @l_AMORT_BASIC, 'VND', 'D', @_NEW_AMT_AMORT_LAST,1, @_NEW_AMT_AMORT_LAST, @l_ASSET_CODE,CONVERT(DATETIME, @p_APPROVE_DT, 103), NULL, NULL, @l_DEP_CODE, @NOTE_AMORT,@l_TRN_NO); -- Hao mòn TSCD 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,TRN_NO) VALUES (@l_ETP_ID, @l_ET_ID,@p_UPDATE_ID ,@l_C_BRANCH_CODE , @l_AMORT_ACCTNO, 'VND', 'C', @_NEW_AMT_AMORT_LAST,1, @_NEW_AMT_AMORT_LAST, @l_ASSET_CODE,CONVERT(DATETIME, @p_APPROVE_DT, 103), NULL, NULL, @l_DEP_CODE, @NOTE_AMORT,@l_TRN_NO); END END -- ELSE IF @l_TYPE_ID = 'CCLD' -- BEGIN -- --NO ASSET_ACCTNO - CO ASSET_SUPPEND_GL: GIA TRI CHENH LECH -- EXEC [dbo].[ASS_ENTRIES_POST_Insert] @l_TYPE_ID, @l_ASSET_ID, 'ASS_UPDATE', @p_UPDATE_ID,@l_DO_BRANCH_ID, @l_SUPPEND_GL, @BRN_ID, @l_AMORT_ACCTNO, @BRN_ID,@AMT ,'Y', -- @sToday, @l_CORE_NOTE, @l_MAKER_ID, @p_CHECKER_ID,@p_UPDATE_ID, --N'XUAT SU DUNG TSCD/CCLD' -- @l_ET_ID OUT -- --IF @ERROR <> 0 GOTO ABORT_ERROR -- END END ELSE --GIAM NGUYEN GIA BEGIN SET @AMT = @l_OLD_BUY_PRICE - @l_NEW_BUY_PRICE --insert dbo.ASS_VALUES EXEC SYS_CodeMasters_Gen 'ASS_VALUES', @l_VALUE_ID out INSERT INTO ASS_VALUES ( VALUE_ID, ASSET_ID, BRANCH_ID, TRN_DT, CRDR, ASSET_AMT, [DESCRIPTION], TRN_ID, TRN_TYPE, RECORD_STATUS, AUTH_STATUS, MAKER_ID, CREATE_DT, CHECKER_ID, APPROVE_DT, AMORT_AMT ) VALUES ( @l_VALUE_ID, @l_ASSET_ID, @l_HO_BRN_ID, CONVERT(datetime, @sToday, 103), 'D', @l_OLD_BUY_PRICE - @l_NEW_BUY_PRICE, N'DIEU CHINH TSCD/CCLD', @p_UPDATE_ID, 'ASS_UPDATE', '1','A',@l_MAKER_ID, CONVERT(datetime, @sToday, 103), @p_CHECKER_ID, CONVERT(datetime, @sToday, 103), @l_NEW_AMORT_AMT - @l_OLD_AMORT_AMT ) IF @l_TYPE_ID = 'TSCD' BEGIN --NO ASSET_SUPPEND_GL - CO ASSET_ACCTNO: GIA TRI CHENH LECH EXEC [dbo].[ASS_ENTRIES_POST_Insert] @l_TYPE_ID, @l_ASSET_ID, 'ASS_UPDATE', @p_UPDATE_ID,@l_DO_BRANCH_ID, @l_ASSET_GL, @BRN_ID, @l_SUPPEND_GL , @BRN_ID,@AMT ,'Y', @sToday, @l_CORE_NOTE, @l_MAKER_ID, @p_CHECKER_ID,@p_UPDATE_ID, --N'XUAT SU DUNG TSCD/CCLD' @l_ET_ID OUT --IF @ERROR <> 0 GOTO ABORT_ERROR -- TRẢ HỘI SỞ 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,TRN_NO) VALUES (@l_ETP_ID, @l_ET_ID,@p_UPDATE_ID ,@l_C_BRANCH_CODE , @AC_HS_MAIN, 'VND', 'D', @AMT,1, @AMT, @l_ASSET_CODE,CONVERT(DATETIME, @p_APPROVE_DT, 103), @l_MAKER_ID, @p_CHECKER_ID, @l_DEP_CODE, @l_CORE_NOTE,@l_TRN_NO); -- TSCD 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,TRN_NO) VALUES (@l_ETP_ID, @l_ET_ID,@p_UPDATE_ID ,@l_AC_BRANCH_CODE , @AC_TSCD, 'VND', 'C', @AMT,1, @AMT, @l_ASSET_CODE,CONVERT(DATETIME, @p_APPROVE_DT, 103), @l_MAKER_ID, @p_CHECKER_ID, @l_DEP_CODE, @l_CORE_NOTE,@l_TRN_NO); -- --ĐỒNG THỜI LẬP HẠCH TOÁN ĐIỀU CHỈNH GIẢM SỐ TRÍCH KHẤU HAO TRONG NĂM HIỆN HÀNH IF(@_NEW_AMT_AMORT_LAST IS NOT NULL AND @_NEW_AMT_AMORT_LAST <> 0) BEGIN EXEC [dbo].[ASS_ENTRIES_POST_Insert] @l_TYPE_ID, @l_ASSET_ID, 'ASS_UPDATE', @p_UPDATE_ID,@l_DO_BRANCH_ID, @l_ASSET_GL, @BRN_ID, @l_SUPPEND_GL , @BRN_ID,@AMT ,'Y', @sToday, @l_CORE_NOTE, @l_MAKER_ID, @p_CHECKER_ID,@p_UPDATE_ID, --N'XUAT SU DUNG TSCD/CCLD' @l_ET_ID OUT -- Hao mòn TSCD 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,TRN_NO) VALUES (@l_ETP_ID, @l_ET_ID,@p_UPDATE_ID ,@l_C_BRANCH_CODE , @l_AMORT_ACCTNO, 'VND', 'D', @_NEW_AMT_AMORT_LAST,1, @_NEW_AMT_AMORT_LAST, @l_ASSET_CODE,CONVERT(DATETIME, @p_APPROVE_DT, 103), NULL, NULL, @l_DEP_CODE, @NOTE_AMORT2,@l_TRN_NO); -- Chi phí KH cơ bản 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,TRN_NO) VALUES (@l_ETP_ID, @l_ET_ID,@p_UPDATE_ID ,@l_AC_BRANCH_CODE , @l_AMORT_BASIC, 'VND', 'C', @_NEW_AMT_AMORT_LAST,1, @_NEW_AMT_AMORT_LAST, @l_ASSET_CODE,CONVERT(DATETIME, @p_APPROVE_DT, 103), NULL, NULL, @l_DEP_CODE, @NOTE_AMORT2,@l_TRN_NO); END END -- ELSE IF @l_TYPE_ID = 'CCLD' -- BEGIN -- --NO ASSET_SUPPEND_GL - CO ASSET_ACCTNO: GIA TRI CHENH LECH -- EXEC [dbo].[ASS_ENTRIES_POST_Insert] @l_TYPE_ID, @l_ASSET_ID, 'ASS_UPDATE', @p_UPDATE_ID,@l_DO_BRANCH_ID, @l_AMORT_ACCTNO, @BRN_ID, @l_SUPPEND_GL , @BRN_ID,@AMT ,'Y', -- @sToday, @l_CORE_NOTE, @l_MAKER_ID, @p_CHECKER_ID,@p_UPDATE_ID, --N'XUAT SU DUNG TSCD/CCLD' -- @ERROR OUT -- --IF @ERROR <> 0 GOTO ABORT_ERROR -- END END END UPDATE ASS_UPDATE SET AUTH_STATUS = @P_AUTH_STATUS, CHECKER_ID = @p_CHECKER_ID, APPROVE_DT = CONVERT(DATETIME,@p_APPROVE_DT,103) WHERE UPDATE_ID = @p_UPDATE_ID UPDATE PL_PROCESS SET PROCESS_ID='UPDATE_NT' WHERE REQ_ID = @p_UPDATE_ID AND PROCESS_ID ='UPDATE' INSERT INTO dbo.PL_PROCESS ( REQ_ID, PROCESS_ID, CHECKER_ID, APPROVE_DT, PROCESS_DESC,NOTES ) VALUES ( @p_UPDATE_ID, -- REQ_ID - varchar(15) 'APPROVE', -- PROCESS_ID - varchar(10) @p_CHECKER_ID, -- CHECKER_ID - varchar(15) GETDATE(), -- APPROVE_DT - datetime N'Phê duyệt phiếu cập nhật tài sản thành công' , N'Phê duyệt phiếu cập nhật tài sản' -- PROCESS_DESC - nvarchar(1000) ) END TRY BEGIN CATCH IF @@TRANCOUNT>0 ROLLBACK TRANSACTION SELECT '-1' as Result, convert(varchar(100),ERROR_NUMBER()) + ' - ' + ERROR_MESSAGE() ErrorDesc RETURN '-1' END CATCH; IF @@TRANCOUNT>0 COMMIT TRANSACTION SELECT '0' as Result, '' ErrorDesc RETURN '-1' ABORT_ERROR: BEGIN IF @@TRANCOUNT>0 ROLLBACK TRANSACTION SELECT '-1' as Result, convert(varchar(100),ERROR_NUMBER()) + ' - ' + ERROR_MESSAGE() + @ERROR ErrorDesc RETURN '-1' END