mirror of
https://github.com/OCA/account-financial-tools.git
synced 2025-02-02 12:47:26 +02:00
@@ -34,6 +34,7 @@ class AccountAsset(models.Model):
|
||||
_name = "account.asset"
|
||||
_description = "Asset"
|
||||
_order = "date_start desc, code, name"
|
||||
_check_company_auto = True
|
||||
|
||||
account_move_line_ids = fields.One2many(
|
||||
comodel_name="account.move.line",
|
||||
@@ -41,6 +42,7 @@ class AccountAsset(models.Model):
|
||||
string="Entries",
|
||||
readonly=True,
|
||||
copy=False,
|
||||
check_company=True,
|
||||
)
|
||||
move_line_check = fields.Boolean(
|
||||
compute="_compute_move_line_check", string="Has accounting entries"
|
||||
@@ -90,6 +92,7 @@ class AccountAsset(models.Model):
|
||||
change_default=True,
|
||||
required=True,
|
||||
states=READONLY_STATES,
|
||||
check_company=True,
|
||||
)
|
||||
group_ids = fields.Many2many(
|
||||
comodel_name="account.asset.group",
|
||||
@@ -240,6 +243,7 @@ class AccountAsset(models.Model):
|
||||
string="Depreciation Lines",
|
||||
copy=False,
|
||||
states=READONLY_STATES,
|
||||
check_company=True,
|
||||
)
|
||||
company_id = fields.Many2one(
|
||||
comodel_name="res.company",
|
||||
|
||||
@@ -11,6 +11,7 @@ class AccountAssetGroup(models.Model):
|
||||
_description = "Asset Group"
|
||||
_order = "code, name"
|
||||
_parent_store = True
|
||||
_check_company_auto = True
|
||||
|
||||
name = fields.Char(string="Name", size=64, required=True, index=True)
|
||||
code = fields.Char(index=True)
|
||||
@@ -25,11 +26,13 @@ class AccountAssetGroup(models.Model):
|
||||
comodel_name="account.asset.group",
|
||||
string="Parent Asset Group",
|
||||
ondelete="restrict",
|
||||
check_company=True,
|
||||
)
|
||||
child_ids = fields.One2many(
|
||||
comodel_name="account.asset.group",
|
||||
inverse_name="parent_id",
|
||||
string="Child Asset Groups",
|
||||
check_company=True,
|
||||
)
|
||||
|
||||
@api.model
|
||||
|
||||
@@ -9,10 +9,15 @@ class AccountAssetLine(models.Model):
|
||||
_name = "account.asset.line"
|
||||
_description = "Asset depreciation table line"
|
||||
_order = "type, line_date"
|
||||
_check_company_auto = True
|
||||
|
||||
name = fields.Char(string="Depreciation Name", size=64, readonly=True)
|
||||
asset_id = fields.Many2one(
|
||||
comodel_name="account.asset", string="Asset", required=True, ondelete="cascade"
|
||||
comodel_name="account.asset",
|
||||
string="Asset",
|
||||
required=True,
|
||||
ondelete="cascade",
|
||||
check_company=True,
|
||||
)
|
||||
previous_id = fields.Many2one(
|
||||
comodel_name="account.asset.line",
|
||||
@@ -41,7 +46,10 @@ class AccountAssetLine(models.Model):
|
||||
line_date = fields.Date(string="Date", required=True)
|
||||
line_days = fields.Integer(string="Days", readonly=True)
|
||||
move_id = fields.Many2one(
|
||||
comodel_name="account.move", string="Depreciation Entry", readonly=True
|
||||
comodel_name="account.move",
|
||||
string="Depreciation Entry",
|
||||
readonly=True,
|
||||
check_company=True,
|
||||
)
|
||||
move_check = fields.Boolean(
|
||||
compute="_compute_move_check", string="Posted", store=True
|
||||
@@ -60,6 +68,9 @@ class AccountAssetLine(models.Model):
|
||||
help="Set this flag for entries of previous fiscal years "
|
||||
"for which Odoo has not generated accounting entries.",
|
||||
)
|
||||
company_id = fields.Many2one(
|
||||
"res.company", store=True, readonly=True, related="asset_id.company_id",
|
||||
)
|
||||
|
||||
@api.depends("amount", "previous_id", "type")
|
||||
def _compute_values(self):
|
||||
|
||||
@@ -7,6 +7,7 @@ from odoo.exceptions import UserError
|
||||
|
||||
class AccountAssetProfile(models.Model):
|
||||
_name = "account.asset.profile"
|
||||
_check_company_auto = True
|
||||
_description = "Asset profile"
|
||||
_order = "name"
|
||||
|
||||
@@ -17,41 +18,48 @@ class AccountAssetProfile(models.Model):
|
||||
)
|
||||
account_asset_id = fields.Many2one(
|
||||
comodel_name="account.account",
|
||||
domain=[("deprecated", "=", False)],
|
||||
domain="[('deprecated', '=', False), ('company_id', '=', company_id)]",
|
||||
string="Asset Account",
|
||||
check_company=True,
|
||||
required=True,
|
||||
)
|
||||
account_depreciation_id = fields.Many2one(
|
||||
comodel_name="account.account",
|
||||
domain=[("deprecated", "=", False)],
|
||||
domain="[('deprecated', '=', False), ('company_id', '=', company_id)]",
|
||||
string="Depreciation Account",
|
||||
check_company=True,
|
||||
required=True,
|
||||
)
|
||||
account_expense_depreciation_id = fields.Many2one(
|
||||
comodel_name="account.account",
|
||||
domain=[("deprecated", "=", False)],
|
||||
domain="[('deprecated', '=', False), ('company_id', '=', company_id)]",
|
||||
string="Depr. Expense Account",
|
||||
check_company=True,
|
||||
required=True,
|
||||
)
|
||||
account_plus_value_id = fields.Many2one(
|
||||
comodel_name="account.account",
|
||||
domain=[("deprecated", "=", False)],
|
||||
domain="[('deprecated', '=', False), ('company_id', '=', company_id)]",
|
||||
check_company=True,
|
||||
string="Plus-Value Account",
|
||||
)
|
||||
account_min_value_id = fields.Many2one(
|
||||
comodel_name="account.account",
|
||||
domain=[("deprecated", "=", False)],
|
||||
domain="[('deprecated', '=', False), ('company_id', '=', company_id)]",
|
||||
check_company=True,
|
||||
string="Min-Value Account",
|
||||
)
|
||||
account_residual_value_id = fields.Many2one(
|
||||
comodel_name="account.account",
|
||||
domain=[("deprecated", "=", False)],
|
||||
domain="[('deprecated', '=', False), ('company_id', '=', company_id)]",
|
||||
check_company=True,
|
||||
string="Residual Value Account",
|
||||
)
|
||||
journal_id = fields.Many2one(
|
||||
comodel_name="account.journal",
|
||||
domain=[("type", "=", "general")],
|
||||
domain="[('type', '=', 'general'), ('company_id', '=', company_id)]",
|
||||
string="Journal",
|
||||
check_company=True,
|
||||
required=True,
|
||||
)
|
||||
company_id = fields.Many2one(
|
||||
@@ -65,6 +73,7 @@ class AccountAssetProfile(models.Model):
|
||||
relation="account_asset_profile_group_rel",
|
||||
column1="profile_id",
|
||||
column2="group_id",
|
||||
check_company=True,
|
||||
string="Asset Groups",
|
||||
)
|
||||
method = fields.Selection(
|
||||
|
||||
@@ -27,6 +27,17 @@ FIELDS_AFFECTS_ASSET_MOVE_LINE = {
|
||||
class AccountMove(models.Model):
|
||||
_inherit = "account.move"
|
||||
|
||||
asset_count = fields.Integer(compute="_compute_asset_count")
|
||||
|
||||
def _compute_asset_count(self):
|
||||
for rec in self:
|
||||
assets = (
|
||||
self.env["account.asset.line"]
|
||||
.search([("move_id", "=", self.id)])
|
||||
.mapped("asset_id")
|
||||
)
|
||||
rec.asset_count = len(assets)
|
||||
|
||||
def unlink(self):
|
||||
# for move in self:
|
||||
deprs = self.env["account.asset.line"].search(
|
||||
@@ -107,15 +118,35 @@ class AccountMove(models.Model):
|
||||
line_vals.update(asset_profile_id=False, asset_id=False)
|
||||
return move_vals
|
||||
|
||||
def action_view_assets(self):
|
||||
assets = (
|
||||
self.env["account.asset.line"]
|
||||
.search([("move_id", "=", self.id)])
|
||||
.mapped("asset_id")
|
||||
)
|
||||
action = self.env.ref("account_asset_management.account_asset_action")
|
||||
action_dict = action.read()[0]
|
||||
if len(assets) == 1:
|
||||
res = self.env.ref(
|
||||
"account_asset_management.account_asset_view_form", False
|
||||
)
|
||||
action_dict["views"] = [(res and res.id or False, "form")]
|
||||
action_dict["res_id"] = assets.id
|
||||
elif assets:
|
||||
action_dict["domain"] = [("id", "in", assets.ids)]
|
||||
else:
|
||||
action_dict = {"type": "ir.actions.act_window_close"}
|
||||
return action_dict
|
||||
|
||||
|
||||
class AccountMoveLine(models.Model):
|
||||
_inherit = "account.move.line"
|
||||
|
||||
asset_profile_id = fields.Many2one(
|
||||
comodel_name="account.asset.profile", string="Asset Profile"
|
||||
comodel_name="account.asset.profile", string="Asset Profile",
|
||||
)
|
||||
asset_id = fields.Many2one(
|
||||
comodel_name="account.asset", string="Asset", ondelete="restrict"
|
||||
comodel_name="account.asset", string="Asset", ondelete="restrict",
|
||||
)
|
||||
|
||||
@api.onchange("account_id")
|
||||
@@ -123,6 +154,11 @@ class AccountMoveLine(models.Model):
|
||||
self.asset_profile_id = self.account_id.asset_profile_id
|
||||
super()._onchange_account_id()
|
||||
|
||||
@api.onchange("asset_profile_id")
|
||||
def _onchange_asset_profile_id(self):
|
||||
self.account_id = self.asset_profile_id.account_asset_id
|
||||
super()._onchange_account_id()
|
||||
|
||||
@api.model_create_multi
|
||||
def create(self, vals_list):
|
||||
for vals in vals_list:
|
||||
|
||||
@@ -1,3 +1,9 @@
|
||||
13.0.2.0.0 (2021-02-19)
|
||||
~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
* Add support for multi-company
|
||||
|
||||
|
||||
13.0.1.0.0 (2019-10-21)
|
||||
~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
|
||||
@@ -373,6 +373,7 @@
|
||||
<record id="account_asset_action" model="ir.actions.act_window">
|
||||
<field name="name">Assets</field>
|
||||
<field name="res_model">account.asset</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="view_id" ref="account_asset_view_tree" />
|
||||
<field name="search_view_id" ref="account_asset_view_search" />
|
||||
</record>
|
||||
|
||||
@@ -5,12 +5,29 @@
|
||||
<field name="model">account.move</field>
|
||||
<field name="inherit_id" ref="account.view_move_form" />
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//div[hasclass('oe_button_box')]" position="inside">
|
||||
<button
|
||||
name="action_view_assets"
|
||||
type="object"
|
||||
class="oe_stat_button"
|
||||
icon="fa-cube"
|
||||
attrs="{'invisible': [('asset_count', '=', 0)]}"
|
||||
>
|
||||
<div class="o_field_widget o_stat_info">
|
||||
<span class="o_stat_value">
|
||||
<field name="asset_count" />
|
||||
</span>
|
||||
<span class="o_stat_text"> Asset(s)</span>
|
||||
</div>
|
||||
</button>
|
||||
</xpath>
|
||||
<xpath
|
||||
expr="//field[@name='invoice_line_ids']/tree/field[@name='quantity']"
|
||||
position="before"
|
||||
>
|
||||
<field
|
||||
name="asset_profile_id"
|
||||
domain="[('company_id','=', parent.company_id)]"
|
||||
attrs="{'invisible': [('parent.type', 'not in', ('in_invoice', 'in_refund'))]}"
|
||||
/>
|
||||
<field
|
||||
@@ -23,7 +40,10 @@
|
||||
expr="//notebook//field[@name='line_ids']/tree/field[@name='date_maturity']"
|
||||
position="after"
|
||||
>
|
||||
<field name="asset_profile_id" />
|
||||
<field
|
||||
name="asset_profile_id"
|
||||
domain="[('company_id','=', parent.company_id)]"
|
||||
/>
|
||||
<field name="asset_id" groups="account.group_account_manager" />
|
||||
</xpath>
|
||||
</field>
|
||||
|
||||
@@ -6,7 +6,10 @@
|
||||
<field name="inherit_id" ref="account.view_move_line_form" />
|
||||
<field name="arch" type="xml">
|
||||
<field name="statement_id" position="after">
|
||||
<field name="asset_profile_id" />
|
||||
<field
|
||||
name="asset_profile_id"
|
||||
domain="[('company_id','=', parent.company_id)]"
|
||||
/>
|
||||
<field name="asset_id" />
|
||||
</field>
|
||||
</field>
|
||||
|
||||
@@ -14,7 +14,15 @@ _logger = logging.getLogger(__name__)
|
||||
class AccountAssetRemove(models.TransientModel):
|
||||
_name = "account.asset.remove"
|
||||
_description = "Remove Asset"
|
||||
_check_company_auto = True
|
||||
|
||||
company_id = fields.Many2one(
|
||||
comodel_name="res.company",
|
||||
string="Company",
|
||||
readonly=True,
|
||||
required=True,
|
||||
default=lambda self: self._default_company_id(),
|
||||
)
|
||||
date_remove = fields.Date(
|
||||
string="Asset Removal Date",
|
||||
required=True,
|
||||
@@ -29,25 +37,25 @@ class AccountAssetRemove(models.TransientModel):
|
||||
account_sale_id = fields.Many2one(
|
||||
comodel_name="account.account",
|
||||
string="Asset Sale Account",
|
||||
domain=[("deprecated", "=", False)],
|
||||
domain="[('deprecated', '=', False), ('company_id', '=', company_id)]",
|
||||
default=lambda self: self._default_account_sale_id(),
|
||||
)
|
||||
account_plus_value_id = fields.Many2one(
|
||||
comodel_name="account.account",
|
||||
string="Plus-Value Account",
|
||||
domain=[("deprecated", "=", False)],
|
||||
domain="[('deprecated', '=', False), ('company_id', '=', company_id)]",
|
||||
default=lambda self: self._default_account_plus_value_id(),
|
||||
)
|
||||
account_min_value_id = fields.Many2one(
|
||||
comodel_name="account.account",
|
||||
string="Min-Value Account",
|
||||
domain=[("deprecated", "=", False)],
|
||||
domain="[('deprecated', '=', False), ('company_id', '=', company_id)]",
|
||||
default=lambda self: self._default_account_min_value_id(),
|
||||
)
|
||||
account_residual_value_id = fields.Many2one(
|
||||
comodel_name="account.account",
|
||||
string="Residual Value Account",
|
||||
domain=[("deprecated", "=", False)],
|
||||
domain="[('deprecated', '=', False), ('company_id', '=', company_id)]",
|
||||
default=lambda self: self._default_account_residual_value_id(),
|
||||
)
|
||||
posting_regime = fields.Selection(
|
||||
@@ -68,6 +76,12 @@ class AccountAssetRemove(models.TransientModel):
|
||||
if self.sale_value < 0:
|
||||
raise ValidationError(_("The Sale Value must be positive!"))
|
||||
|
||||
@api.model
|
||||
def _default_company_id(self):
|
||||
asset_id = self.env.context.get("active_id")
|
||||
asset = self.env["account.asset"].browse(asset_id)
|
||||
return asset.company_id
|
||||
|
||||
@api.model
|
||||
def _default_sale_value(self):
|
||||
return self._get_sale()["sale_value"]
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
<field name="arch" type="xml">
|
||||
<form string="Remove Asset">
|
||||
<group colspan="4" col="4">
|
||||
<field name="company_id" groups="base.group_multi_company" />
|
||||
<field name="date_remove" />
|
||||
<field name="force_date" />
|
||||
<field name="sale_value" />
|
||||
|
||||
Reference in New Issue
Block a user