1
0
forked from Mapan/odoo17e
odoo17e-kedaikipas58/addons/l10n_in_asset/models/account_asset.py
2024-12-10 09:04:09 +07:00

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'