[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
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user