mirror of
https://github.com/OCA/account-financial-tools.git
synced 2025-02-02 12:47:26 +02:00
77 lines
2.8 KiB
Python
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()
|