[FIX] account_asset_management: Provide hook _compute_depreciation_amount_per_fiscal_year
This way, other method_time mechanism like localization ones is able to overwrite it. You also got an error of variable `number` not set due to previous code. Although no alternate implementation for a new method_time, now you don't have any error, fallbacking to standard proportional repartition.
This commit is contained in:
parent
8b376f3b88
commit
68509d7386
@ -1,9 +1,10 @@
|
|||||||
# Copyright 2009-2018 Noviat
|
# Copyright 2009-2018 Noviat
|
||||||
|
# Copyright 2019 Tecnativa - Pedro M. Baeza
|
||||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
|
|
||||||
{
|
{
|
||||||
'name': 'Assets Management',
|
'name': 'Assets Management',
|
||||||
'version': '12.0.1.0.0',
|
'version': '12.0.1.0.1',
|
||||||
'license': 'AGPL-3',
|
'license': 'AGPL-3',
|
||||||
'depends': [
|
'depends': [
|
||||||
'account',
|
'account',
|
||||||
|
@ -14,7 +14,7 @@ msgstr ""
|
|||||||
"Plural-Forms: \n"
|
"Plural-Forms: \n"
|
||||||
|
|
||||||
#. module: account_asset_management
|
#. 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
|
#, python-format
|
||||||
msgid "\n"
|
msgid "\n"
|
||||||
"Error while processing asset '%s': %s"
|
"Error while processing asset '%s': %s"
|
||||||
@ -399,7 +399,7 @@ msgid "Degressive-Linear"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. module: account_asset_management
|
#. 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
|
#: code:addons/account_asset_management/models/account_asset_profile.py:148
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Degressive-Linear is only supported for Time Method = Year."
|
msgid "Degressive-Linear is only supported for Time Method = Year."
|
||||||
@ -506,13 +506,13 @@ msgid "Entries"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. module: account_asset_management
|
#. 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
|
#, python-format
|
||||||
msgid "Error ! You can not create recursive assets."
|
msgid "Error ! You can not create recursive assets."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. module: account_asset_management
|
#. 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
|
#, python-format
|
||||||
msgid "Error while processing asset '%s': \n"
|
msgid "Error while processing asset '%s': \n"
|
||||||
"\n"
|
"\n"
|
||||||
@ -541,7 +541,7 @@ msgid "General"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. module: account_asset_management
|
#. 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
|
#, python-format
|
||||||
msgid "Generate Asset Removal entries"
|
msgid "Generate Asset Removal entries"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -577,7 +577,7 @@ msgid "ID"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. module: account_asset_management
|
#. 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
|
#, python-format
|
||||||
msgid "Illegal value %s in asset.method."
|
msgid "Illegal value %s in asset.method."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -618,7 +618,7 @@ msgid "Journal"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. module: account_asset_management
|
#. 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:ir.model,name:account_asset_management.model_account_move
|
||||||
#: model_terms:ir.ui.view,arch_db:account_asset_management.account_asset_view_form
|
#: model_terms:ir.ui.view,arch_db:account_asset_management.account_asset_view_form
|
||||||
#, python-format
|
#, python-format
|
||||||
@ -708,7 +708,7 @@ msgid "Next Period Depreciation"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. module: account_asset_management
|
#. 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
|
#, python-format
|
||||||
msgid "No Fiscal Year defined."
|
msgid "No Fiscal Year defined."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -931,7 +931,7 @@ msgid "Status"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. module: account_asset_management
|
#. 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
|
#, python-format
|
||||||
msgid "The '_compute_year_amount' method is only intended for Time Method 'Number of Years."
|
msgid "The '_compute_year_amount' method is only intended for Time Method 'Number of Years."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -949,13 +949,13 @@ msgid "The Sale Value must be positive!"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. module: account_asset_management
|
#. 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
|
#, python-format
|
||||||
msgid "The Start Date must precede the Ending Date."
|
msgid "The Start Date must precede the Ending Date."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. module: account_asset_management
|
#. 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
|
#, python-format
|
||||||
msgid "The duration of the asset conflicts with the posted depreciation table entry dates."
|
msgid "The duration of the asset conflicts with the posted depreciation table entry dates."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -1081,7 +1081,7 @@ msgid "You are not allowed to remove an accounting entry linked to an asset.\n"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. module: account_asset_management
|
#. 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
|
#, python-format
|
||||||
msgid "You can only delete assets in draft state."
|
msgid "You can only delete assets in draft state."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -1111,13 +1111,13 @@ msgid "You cannot change an accounting item linked to an asset depreciation line
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. module: account_asset_management
|
#. 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
|
#, python-format
|
||||||
msgid "You cannot change the profile of an asset with accounting entries."
|
msgid "You cannot change the profile of an asset with accounting entries."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. module: account_asset_management
|
#. 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
|
#, python-format
|
||||||
msgid "You cannot compute a depreciation table for an asset starting in an undefined future fiscal year.\n"
|
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'."
|
"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 ""
|
msgstr ""
|
||||||
|
|
||||||
#. module: account_asset_management
|
#. 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
|
#, python-format
|
||||||
msgid "You cannot delete an asset that contains posted depreciation lines."
|
msgid "You cannot delete an asset that contains posted depreciation lines."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
# Copyright 2009-2018 Noviat
|
# Copyright 2009-2018 Noviat
|
||||||
|
# Copyright 2019 Tecnativa - Pedro M. Baeza
|
||||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
|
|
||||||
import calendar
|
import calendar
|
||||||
@ -807,6 +808,53 @@ class AccountAsset(models.Model):
|
|||||||
|
|
||||||
return line_dates
|
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,
|
def _compute_depreciation_table_lines(self, table, depreciation_start_date,
|
||||||
depreciation_stop_date, line_dates):
|
depreciation_stop_date, line_dates):
|
||||||
|
|
||||||
@ -980,55 +1028,11 @@ class AccountAsset(models.Model):
|
|||||||
# Step 1:
|
# Step 1:
|
||||||
# Calculate depreciation amount per fiscal year.
|
# Calculate depreciation amount per fiscal year.
|
||||||
# This is calculation is skipped for method_time != '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(
|
line_dates = self._compute_line_dates(
|
||||||
table, depreciation_start_date, depreciation_stop_date)
|
table, depreciation_start_date, depreciation_stop_date)
|
||||||
for i, entry in enumerate(table):
|
table = self._compute_depreciation_amount_per_fiscal_year(
|
||||||
|
table, line_dates,
|
||||||
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]
|
|
||||||
|
|
||||||
# Step 2:
|
# Step 2:
|
||||||
# Spread depreciation amount per fiscal year
|
# Spread depreciation amount per fiscal year
|
||||||
# over the depreciation periods.
|
# over the depreciation periods.
|
||||||
|
Loading…
Reference in New Issue
Block a user