diff --git a/account_asset_management/__manifest__.py b/account_asset_management/__manifest__.py index a5cfefb3..889e6a68 100644 --- a/account_asset_management/__manifest__.py +++ b/account_asset_management/__manifest__.py @@ -1,9 +1,10 @@ # Copyright 2009-2018 Noviat +# Copyright 2019 Tecnativa - Pedro M. Baeza # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). { 'name': 'Assets Management', - 'version': '12.0.1.0.0', + 'version': '12.0.1.0.1', 'license': 'AGPL-3', 'depends': [ 'account', diff --git a/account_asset_management/i18n/account_asset_management.pot b/account_asset_management/i18n/account_asset_management.pot index b662b129..0a588356 100644 --- a/account_asset_management/i18n/account_asset_management.pot +++ b/account_asset_management/i18n/account_asset_management.pot @@ -14,7 +14,7 @@ msgstr "" "Plural-Forms: \n" #. module: account_asset_management -#: code:addons/account_asset_management/models/account_asset.py:1076 +#: code:addons/account_asset_management/models/account_asset.py:1080 #, python-format msgid "\n" "Error while processing asset '%s': %s" @@ -399,7 +399,7 @@ msgid "Degressive-Linear" msgstr "" #. module: account_asset_management -#: code:addons/account_asset_management/models/account_asset.py:261 +#: code:addons/account_asset_management/models/account_asset.py:262 #: code:addons/account_asset_management/models/account_asset_profile.py:148 #, python-format msgid "Degressive-Linear is only supported for Time Method = Year." @@ -506,13 +506,13 @@ msgid "Entries" msgstr "" #. module: account_asset_management -#: code:addons/account_asset_management/models/account_asset.py:252 +#: code:addons/account_asset_management/models/account_asset.py:253 #, python-format msgid "Error ! You can not create recursive assets." msgstr "" #. module: account_asset_management -#: code:addons/account_asset_management/models/account_asset.py:1079 +#: code:addons/account_asset_management/models/account_asset.py:1083 #, python-format msgid "Error while processing asset '%s': \n" "\n" @@ -541,7 +541,7 @@ msgid "General" msgstr "" #. module: account_asset_management -#: code:addons/account_asset_management/models/account_asset.py:443 +#: code:addons/account_asset_management/models/account_asset.py:444 #, python-format msgid "Generate Asset Removal entries" msgstr "" @@ -577,7 +577,7 @@ msgid "ID" msgstr "" #. module: account_asset_management -#: code:addons/account_asset_management/models/account_asset.py:770 +#: code:addons/account_asset_management/models/account_asset.py:771 #, python-format msgid "Illegal value %s in asset.method." msgstr "" @@ -618,7 +618,7 @@ msgid "Journal" msgstr "" #. module: account_asset_management -#: code:addons/account_asset_management/models/account_asset.py:463 +#: code:addons/account_asset_management/models/account_asset.py:464 #: model:ir.model,name:account_asset_management.model_account_move #: model_terms:ir.ui.view,arch_db:account_asset_management.account_asset_view_form #, python-format @@ -708,7 +708,7 @@ msgid "Next Period Depreciation" msgstr "" #. module: account_asset_management -#: code:addons/account_asset_management/models/account_asset.py:924 +#: code:addons/account_asset_management/models/account_asset.py:972 #, python-format msgid "No Fiscal Year defined." msgstr "" @@ -931,7 +931,7 @@ msgid "Status" msgstr "" #. module: account_asset_management -#: code:addons/account_asset_management/models/account_asset.py:743 +#: code:addons/account_asset_management/models/account_asset.py:744 #, python-format msgid "The '_compute_year_amount' method is only intended for Time Method 'Number of Years." msgstr "" @@ -949,13 +949,13 @@ msgid "The Sale Value must be positive!" msgstr "" #. module: account_asset_management -#: code:addons/account_asset_management/models/account_asset.py:271 +#: code:addons/account_asset_management/models/account_asset.py:272 #, python-format msgid "The Start Date must precede the Ending Date." msgstr "" #. module: account_asset_management -#: code:addons/account_asset_management/models/account_asset.py:535 +#: code:addons/account_asset_management/models/account_asset.py:536 #, python-format msgid "The duration of the asset conflicts with the posted depreciation table entry dates." msgstr "" @@ -1081,7 +1081,7 @@ msgid "You are not allowed to remove an accounting entry linked to an asset.\n" msgstr "" #. module: account_asset_management -#: code:addons/account_asset_management/models/account_asset.py:381 +#: code:addons/account_asset_management/models/account_asset.py:382 #, python-format msgid "You can only delete assets in draft state." msgstr "" @@ -1111,13 +1111,13 @@ msgid "You cannot change an accounting item linked to an asset depreciation line msgstr "" #. module: account_asset_management -#: code:addons/account_asset_management/models/account_asset.py:294 +#: code:addons/account_asset_management/models/account_asset.py:295 #, python-format msgid "You cannot change the profile of an asset with accounting entries." msgstr "" #. module: account_asset_management -#: code:addons/account_asset_management/models/account_asset.py:931 +#: code:addons/account_asset_management/models/account_asset.py:979 #, python-format msgid "You cannot compute a depreciation table for an asset starting in an undefined future fiscal year.\n" "Please correct the start date for asset '%s'." @@ -1130,7 +1130,7 @@ msgid "You cannot delete a depreciation line with an associated accounting entry msgstr "" #. module: account_asset_management -#: code:addons/account_asset_management/models/account_asset.py:385 +#: code:addons/account_asset_management/models/account_asset.py:386 #, python-format msgid "You cannot delete an asset that contains posted depreciation lines." msgstr "" diff --git a/account_asset_management/models/account_asset.py b/account_asset_management/models/account_asset.py index f99eee2c..8e44ade2 100644 --- a/account_asset_management/models/account_asset.py +++ b/account_asset_management/models/account_asset.py @@ -1,4 +1,5 @@ # Copyright 2009-2018 Noviat +# Copyright 2019 Tecnativa - Pedro M. Baeza # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). import calendar @@ -807,6 +808,53 @@ class AccountAsset(models.Model): return line_dates + def _compute_depreciation_amount_per_fiscal_year(self, table, line_dates): + digits = self.env['decimal.precision'].precision_get('Account') + fy_residual_amount = self.depreciation_base + i_max = len(table) - 1 + asset_sign = self.depreciation_base >= 0 and 1 or -1 + for i, entry in enumerate(table): + if self.method_time == 'year': + year_amount = self._compute_year_amount(fy_residual_amount) + if self.method_period == 'year': + period_amount = year_amount + elif self.method_period == 'quarter': + period_amount = year_amount / 4 + elif self.method_period == 'month': + period_amount = year_amount / 12 + if i == i_max: + if self.method in ['linear-limit', 'degr-limit']: + fy_amount = fy_residual_amount - self.salvage_value + else: + fy_amount = fy_residual_amount + else: + firstyear = i == 0 and True or False + fy_factor = self._get_fy_duration_factor( + entry, firstyear) + fy_amount = year_amount * fy_factor + if asset_sign * (fy_amount - fy_residual_amount) > 0: + fy_amount = fy_residual_amount + period_amount = round(period_amount, digits) + fy_amount = round(fy_amount, digits) + else: + fy_amount = False + if self.method_time == 'number': + number = self.method_number + else: + number = len(line_dates) + period_amount = round(self.depreciation_base / number, digits) + entry.update({ + 'period_amount': period_amount, + 'fy_amount': fy_amount, + }) + if self.method_time == 'year': + fy_residual_amount -= fy_amount + if round(fy_residual_amount, digits) == 0: + break + i_max = i + table = table[:i_max + 1] + return table + def _compute_depreciation_table_lines(self, table, depreciation_start_date, depreciation_stop_date, line_dates): @@ -980,55 +1028,11 @@ class AccountAsset(models.Model): # Step 1: # Calculate depreciation amount per fiscal year. # This is calculation is skipped for method_time != 'year'. - digits = self.env['decimal.precision'].precision_get('Account') - fy_residual_amount = self.depreciation_base - i_max = len(table) - 1 - asset_sign = self.depreciation_base >= 0 and 1 or -1 line_dates = self._compute_line_dates( table, depreciation_start_date, depreciation_stop_date) - for i, entry in enumerate(table): - - if self.method_time == 'year': - year_amount = self._compute_year_amount(fy_residual_amount) - if self.method_period == 'year': - period_amount = year_amount - elif self.method_period == 'quarter': - period_amount = year_amount / 4 - elif self.method_period == 'month': - period_amount = year_amount / 12 - if i == i_max: - if self.method in ['linear-limit', 'degr-limit']: - fy_amount = fy_residual_amount - self.salvage_value - else: - fy_amount = fy_residual_amount - else: - firstyear = i == 0 and True or False - fy_factor = self._get_fy_duration_factor( - entry, firstyear) - fy_amount = year_amount * fy_factor - if asset_sign * (fy_amount - fy_residual_amount) > 0: - fy_amount = fy_residual_amount - period_amount = round(period_amount, digits) - fy_amount = round(fy_amount, digits) - else: - fy_amount = False - if self.method_time == 'number': - number = self.method_number - elif self.method_time == 'end': - number = len(line_dates) - period_amount = round(self.depreciation_base / number, digits) - - entry.update({ - 'period_amount': period_amount, - 'fy_amount': fy_amount, - }) - if self.method_time == 'year': - fy_residual_amount -= fy_amount - if round(fy_residual_amount, digits) == 0: - break - i_max = i - table = table[:i_max + 1] - + table = self._compute_depreciation_amount_per_fiscal_year( + table, line_dates, + ) # Step 2: # Spread depreciation amount per fiscal year # over the depreciation periods.