Files
account-financial-tools/account_asset_low_value/models/account_asset.py
2022-10-19 10:34:28 +07:00

77 lines
2.8 KiB
Python

# Copyright 2021 Ecosoft Co., Ltd. (http://ecosoft.co.th)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import _, api, fields, models
class AccountAsset(models.Model):
_inherit = "account.asset"
low_value = fields.Boolean(
string="Low Value Asset",
compute="_compute_low_value",
search="_search_low_value",
help="Low-Value Asset (LVA) is true when the asset profile set\n"
"1. Asset Account = Expense (low value asset)\n"
"2. Number of Years = 0 years\n"
"In essense, the low value asset is not really and asset but an expense "
"tracked as asset, as such, it has no residual value. And when removed, "
"only status is changed (no accounting entry).",
)
@api.depends("profile_id", "method_number")
def _compute_low_value(self):
expense_account = self.env.ref("account.data_account_type_expenses")
for asset in self:
asset.low_value = (
asset.profile_id.account_asset_id.user_type_id == expense_account
and asset.method_number == 0
)
@api.model
def _search_low_value(self, operator, value):
expense_account = self.env.ref("account.data_account_type_expenses")
if operator == "=":
return [
("profile_id.account_asset_id.user_type_id", "=", expense_account.id),
("method_number", "=", 0),
]
if operator == "!=":
return [
"|",
("profile_id.account_asset_id.user_type_id", "!=", expense_account.id),
("method_number", "!=", 0),
]
def _compute_depreciation(self):
super()._compute_depreciation()
# For low value asset, there is no depreciation
for asset in self:
if asset.low_value:
asset.value_residual = 0
def validate(self):
res = super().validate()
# For low value asset, state = "open" even value_residual = 0
for asset in self:
if asset.low_value:
asset.state = "open"
return res
def remove(self):
self.ensure_one()
ctx = dict(self.env.context, active_ids=self.ids, active_id=self.id)
# Removing low value asset, use different wizard
if self.low_value:
view = self.env.ref("account_asset_low_value.asset_low_value_remove_form")
return {
"name": _("Remove Low Value Asset"),
"view_mode": "form",
"res_model": "account.asset.remove",
"view_id": view.id,
"target": "new",
"type": "ir.actions.act_window",
"context": ctx,
}
return super().remove()