From f82898e5b47700cdb5bf29dd608ebecaa0d6735e Mon Sep 17 00:00:00 2001 From: Jordi Ballester Date: Thu, 11 Feb 2021 11:48:48 +0100 Subject: [PATCH 1/4] [13.0][fix][account_asset_management] display only accounts associated to the current company. --- .../models/account_asset.py | 4 ++++ .../models/account_asset_group.py | 3 +++ .../models/account_asset_line.py | 13 +++++++++-- .../models/account_asset_profile.py | 23 +++++++++++++------ .../wizard/account_asset_remove.py | 22 ++++++++++++++---- .../wizard/account_asset_remove.xml | 1 + 6 files changed, 53 insertions(+), 13 deletions(-) diff --git a/account_asset_management/models/account_asset.py b/account_asset_management/models/account_asset.py index ec96ba438..6994b49ce 100644 --- a/account_asset_management/models/account_asset.py +++ b/account_asset_management/models/account_asset.py @@ -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", diff --git a/account_asset_management/models/account_asset_group.py b/account_asset_management/models/account_asset_group.py index 77b1d134f..a706e7ba4 100644 --- a/account_asset_management/models/account_asset_group.py +++ b/account_asset_management/models/account_asset_group.py @@ -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 diff --git a/account_asset_management/models/account_asset_line.py b/account_asset_management/models/account_asset_line.py index 1d6a5c4a2..eca604098 100644 --- a/account_asset_management/models/account_asset_line.py +++ b/account_asset_management/models/account_asset_line.py @@ -9,10 +9,12 @@ 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 +43,8 @@ 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 +63,12 @@ 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): diff --git a/account_asset_management/models/account_asset_profile.py b/account_asset_management/models/account_asset_profile.py index 9f353b4ae..a4883183d 100644 --- a/account_asset_management/models/account_asset_profile.py +++ b/account_asset_management/models/account_asset_profile.py @@ -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( diff --git a/account_asset_management/wizard/account_asset_remove.py b/account_asset_management/wizard/account_asset_remove.py index 6e9aa5187..0488f20ad 100644 --- a/account_asset_management/wizard/account_asset_remove.py +++ b/account_asset_management/wizard/account_asset_remove.py @@ -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"] diff --git a/account_asset_management/wizard/account_asset_remove.xml b/account_asset_management/wizard/account_asset_remove.xml index 23326f2d1..10a74e4b2 100644 --- a/account_asset_management/wizard/account_asset_remove.xml +++ b/account_asset_management/wizard/account_asset_remove.xml @@ -6,6 +6,7 @@
+ From 19f48f4bb8227c413a94920c519600a6253b846c Mon Sep 17 00:00:00 2001 From: Jordi Ballester Date: Thu, 11 Feb 2021 13:03:58 +0100 Subject: [PATCH 2/4] [13.0][account_asset_management] button to navigate from the vendor bill to the asset. --- .../models/account_move.py | 23 +++++++++++++++++++ .../views/account_asset.xml | 1 + .../views/account_move.xml | 12 ++++++++++ 3 files changed, 36 insertions(+) diff --git a/account_asset_management/models/account_move.py b/account_asset_management/models/account_move.py index 48e62ac24..46ba8ccf2 100644 --- a/account_asset_management/models/account_move.py +++ b/account_asset_management/models/account_move.py @@ -27,6 +27,14 @@ 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,6 +115,21 @@ 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" diff --git a/account_asset_management/views/account_asset.xml b/account_asset_management/views/account_asset.xml index 38743e353..0525978aa 100644 --- a/account_asset_management/views/account_asset.xml +++ b/account_asset_management/views/account_asset.xml @@ -373,6 +373,7 @@ Assets account.asset + tree,form diff --git a/account_asset_management/views/account_move.xml b/account_asset_management/views/account_move.xml index 53ee5f22a..ae0b16efe 100644 --- a/account_asset_management/views/account_move.xml +++ b/account_asset_management/views/account_move.xml @@ -5,6 +5,18 @@ account.move + + + Date: Thu, 11 Feb 2021 16:13:21 +0100 Subject: [PATCH 3/4] [13.0][account_asset_management] propose account when user chooses the asset profile in vendor bills. --- .../models/account_move.py | 29 ++++++++++++++----- account_asset_management/readme/HISTORY.rst | 6 ++++ .../views/account_move.xml | 22 +++++++++----- .../views/account_move_line.xml | 5 +++- 4 files changed, 46 insertions(+), 16 deletions(-) diff --git a/account_asset_management/models/account_move.py b/account_asset_management/models/account_move.py index 46ba8ccf2..4b1f0f9b8 100644 --- a/account_asset_management/models/account_move.py +++ b/account_asset_management/models/account_move.py @@ -27,12 +27,15 @@ FIELDS_AFFECTS_ASSET_MOVE_LINE = { class AccountMove(models.Model): _inherit = "account.move" - asset_count = fields.Integer(compute='_compute_asset_count') + 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') + assets = ( + self.env["account.asset.line"] + .search([("move_id", "=", self.id)]) + .mapped("asset_id") + ) rec.asset_count = len(assets) def unlink(self): @@ -116,12 +119,17 @@ class AccountMove(models.Model): return move_vals def action_view_assets(self): - assets = self.env['account.asset.line'].search([ - ('move_id', '=', self.id)]).mapped('asset_id') + 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) + 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: @@ -135,10 +143,10 @@ 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") @@ -146,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: diff --git a/account_asset_management/readme/HISTORY.rst b/account_asset_management/readme/HISTORY.rst index 85492f514..e35ac96cb 100644 --- a/account_asset_management/readme/HISTORY.rst +++ b/account_asset_management/readme/HISTORY.rst @@ -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) ~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/account_asset_management/views/account_move.xml b/account_asset_management/views/account_move.xml index ae0b16efe..30eb8a00a 100644 --- a/account_asset_management/views/account_move.xml +++ b/account_asset_management/views/account_move.xml @@ -6,13 +6,17 @@ - @@ -23,6 +27,7 @@ > - + diff --git a/account_asset_management/views/account_move_line.xml b/account_asset_management/views/account_move_line.xml index 2f86d7d1d..73a2a1691 100644 --- a/account_asset_management/views/account_move_line.xml +++ b/account_asset_management/views/account_move_line.xml @@ -6,7 +6,10 @@ - + From 9c6fd2f2992ded8009f79962dafe000dcbe13d48 Mon Sep 17 00:00:00 2001 From: Mateu Griful Date: Tue, 23 Feb 2021 13:59:08 +0100 Subject: [PATCH 4/4] [13.0][account_asset_management] propose account when user chooses --- .../models/account_asset_line.py | 14 ++++++++------ .../wizard/account_asset_remove.py | 2 +- .../wizard/account_asset_remove.xml | 2 +- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/account_asset_management/models/account_asset_line.py b/account_asset_management/models/account_asset_line.py index eca604098..561cf0095 100644 --- a/account_asset_management/models/account_asset_line.py +++ b/account_asset_management/models/account_asset_line.py @@ -13,7 +13,10 @@ class AccountAssetLine(models.Model): 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( @@ -43,7 +46,9 @@ 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( @@ -64,10 +69,7 @@ class AccountAssetLine(models.Model): "for which Odoo has not generated accounting entries.", ) company_id = fields.Many2one( - 'res.company', - store=True, - readonly=True, - related='asset_id.company_id', + "res.company", store=True, readonly=True, related="asset_id.company_id", ) @api.depends("amount", "previous_id", "type") diff --git a/account_asset_management/wizard/account_asset_remove.py b/account_asset_management/wizard/account_asset_remove.py index 0488f20ad..ae1c24ce0 100644 --- a/account_asset_management/wizard/account_asset_remove.py +++ b/account_asset_management/wizard/account_asset_remove.py @@ -79,7 +79,7 @@ class AccountAssetRemove(models.TransientModel): @api.model def _default_company_id(self): asset_id = self.env.context.get("active_id") - asset = self.env['account.asset'].browse(asset_id) + asset = self.env["account.asset"].browse(asset_id) return asset.company_id @api.model diff --git a/account_asset_management/wizard/account_asset_remove.xml b/account_asset_management/wizard/account_asset_remove.xml index 10a74e4b2..4c885a208 100644 --- a/account_asset_management/wizard/account_asset_remove.xml +++ b/account_asset_management/wizard/account_asset_remove.xml @@ -6,7 +6,7 @@ - +