forked from Mapan/odoo17e
67 lines
3.1 KiB
Python
67 lines
3.1 KiB
Python
from odoo import api, fields, models
|
|
|
|
|
|
class AccountAsset(models.Model):
|
|
_inherit = 'account.asset'
|
|
|
|
l10n_in_value_residual = fields.Monetary(compute='_compute_l10n_in_value_residual')
|
|
l10n_in_fiscal_code = fields.Char(related='company_id.account_fiscal_country_id.code')
|
|
|
|
@api.depends('value_residual', 'salvage_value', 'already_depreciated_amount_import')
|
|
def _compute_l10n_in_value_residual(self):
|
|
for record in self:
|
|
if record._check_degressive_special_asset():
|
|
record.l10n_in_value_residual = record.value_residual - record.salvage_value
|
|
else:
|
|
record.l10n_in_value_residual = record.value_residual
|
|
|
|
def _degressive_linear_amount(self, residual_amount, degressive_amount, linear_amount):
|
|
if not self._check_degressive_special_asset():
|
|
return super()._degressive_linear_amount(residual_amount, degressive_amount, linear_amount)
|
|
if abs(residual_amount) - abs(degressive_amount) < abs(self.salvage_value):
|
|
degressive_amount = residual_amount - self.salvage_value
|
|
return degressive_amount
|
|
|
|
def _compute_total_depreciable_value(self):
|
|
l10n_in_records = self.filtered(
|
|
lambda asset: (
|
|
asset._check_degressive_special_asset()
|
|
)
|
|
)
|
|
for asset in l10n_in_records:
|
|
asset.total_depreciable_value = asset.original_value
|
|
super(AccountAsset, (self - l10n_in_records))._compute_total_depreciable_value()
|
|
|
|
@api.constrains('depreciation_move_ids')
|
|
def _check_depreciations(self):
|
|
l10n_in_records = self.filtered(lambda asset: asset._check_degressive_special_asset())
|
|
super(AccountAsset, (self - l10n_in_records))._check_depreciations()
|
|
|
|
def _compute_value_residual(self):
|
|
super()._compute_value_residual()
|
|
for record in self.filtered(lambda asset: asset._check_degressive_special_asset()):
|
|
record.value_residual += record.salvage_value
|
|
|
|
def _compute_book_value(self):
|
|
super()._compute_book_value()
|
|
for record in self.filtered(lambda asset: asset._check_degressive_special_asset()):
|
|
if not (record.state == 'close' and all(move.state == 'posted' for move in record.depreciation_move_ids)):
|
|
record.book_value -= record.salvage_value
|
|
|
|
def _get_own_book_value(self, date=None):
|
|
self.ensure_one()
|
|
if not self._check_degressive_special_asset():
|
|
return super()._get_own_book_value(date)
|
|
return self.value_residual
|
|
|
|
def _get_depreciation_amount_end_of_lifetime(self, residual_amount, amount, days_until_period_end):
|
|
if not self._check_degressive_special_asset():
|
|
return super()._get_depreciation_amount_end_of_lifetime(residual_amount, amount, days_until_period_end)
|
|
# To ensure reaching the salvage value at the end of the lifeTime
|
|
if days_until_period_end >= self.asset_lifetime_days:
|
|
amount = residual_amount - self.salvage_value
|
|
return amount
|
|
|
|
def _check_degressive_special_asset(self):
|
|
return self.company_id.account_fiscal_country_id.code == 'IN' and self.method == 'degressive'
|