From 0ca97ae3d6499b36b6fcb34bbe560d445e8f0350 Mon Sep 17 00:00:00 2001 From: wan Date: Wed, 9 Oct 2019 12:19:21 +0000 Subject: [PATCH] [FIX] account_analytic_default: compute instead of default_get + onchange Task 2075249 The commit dd627b9 added a default_get to retrieve the default analytic values. However, it was depending on self, which cannot be done in a api.model In this commit, we use an editable compute in order to update the analytic values in all the cases, and to reduce the duplication of the code. X-original-commit: 69bf61bbc991eee96e673316ae8c37e98e1b8a1d --- .../models/account_analytic_default.py | 49 +++++++------------ 1 file changed, 17 insertions(+), 32 deletions(-) diff --git a/addons/account_analytic_default/models/account_analytic_default.py b/addons/account_analytic_default/models/account_analytic_default.py index 862d228fcdd..5e340ab468a 100644 --- a/addons/account_analytic_default/models/account_analytic_default.py +++ b/addons/account_analytic_default/models/account_analytic_default.py @@ -68,38 +68,23 @@ class AccountAnalyticDefault(models.Model): class AccountMoveLine(models.Model): _inherit = 'account.move.line' - @api.model - def default_get(self, fields_list): - defaults = super().default_get(fields_list) - if {'account_analytic_id', 'analytic_tag_ids'} & set(fields_list): + # Overload of fields defined in account + analytic_account_id = fields.Many2one(compute="_compute_analytic_account", store=True, readonly=False) + analytic_tag_ids = fields.Many2many(compute="_compute_analytic_account", store=True, readonly=False) + + @api.depends('product_id', 'account_id', 'partner_id', 'date_maturity') + def _compute_analytic_account(self): + for record in self: + record.analytic_account_id = record.analytic_account_id or False + record.analytic_tag_ids = record.analytic_tag_ids or False rec = self.env['account.analytic.default'].account_get( - product_id=self.product_id.id, - partner_id=self.move_id.commercial_partner_id.id, - user_id=self.move_id.user_id.id or self.env.uid, - date=fields.Date.today(), - company_id=self.company_id.id, + product_id=record.product_id.id, + partner_id=record.partner_id.commercial_partner_id.id or record.move_id.partner_id.commercial_partner_id.id, + account_id=record.account_id.id, + user_id=record.env.uid, + date=record.date_maturity, + company_id=record.move_id.company_id.id ) if rec: - if 'account_analytic_id' in fields_list: - defaults.update({ - 'account_analytic_id': rec.analytic_id.id, - }) - if 'analytic_tag_ids' in fields_list: - defaults.update({ - 'analytic_tag_ids': rec.analytic_tag_ids.ids, - }) - return defaults - - @api.onchange('product_id', 'account_id') - def _onchange_product_id_account_id(self): - rec = self.env['account.analytic.default'].account_get( - product_id=self.product_id.id, - partner_id=self.partner_id.id, - account_id=self.account_id.id, - user_id=self.env.uid, - date=self.date_maturity, - company_id=self.move_id.company_id.id - ) - if rec: - self.analytic_account_id = rec.analytic_id.id - self.analytic_tag_ids = rec.analytic_tag_ids.ids + record.analytic_account_id = rec.analytic_id + record.analytic_tag_ids = rec.analytic_tag_ids