diff --git a/addons/account/models/account_move.py b/addons/account/models/account_move.py index 95eca2f7299..56af04776a7 100644 --- a/addons/account/models/account_move.py +++ b/addons/account/models/account_move.py @@ -1665,7 +1665,8 @@ class AccountMove(models.Model): # Which is wrong in some case # It's better to set the account_id before the partner_id # Ensure related fields are well copied. - line.partner_id = self.partner_id.commercial_partner_id + if line.partner_id != self.partner_id.commercial_partner_id: + line.partner_id = self.partner_id.commercial_partner_id line.date = self.date line.recompute_tax_line = True line.currency_id = self.currency_id @@ -3097,18 +3098,16 @@ class AccountMoveLine(models.Model): return self.product_id.uom_id return False - @api.depends('product_id', 'account_id', 'partner_id', 'date_maturity') + @api.depends('product_id', 'account_id', 'partner_id', 'date') def _compute_analytic_account(self): for record in self: - record.analytic_account_id = (record._origin or record).analytic_account_id - record.analytic_tag_ids = (record._origin or record).analytic_tag_ids - if not record.exclude_from_invoice_tab: + if not record.exclude_from_invoice_tab or not record.move_id.is_invoice(include_receipts=True): rec = self.env['account.analytic.default'].account_get( 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, + date=record.date, company_id=record.move_id.company_id.id ) if rec: diff --git a/addons/account/tests/test_account_move_out_invoice.py b/addons/account/tests/test_account_move_out_invoice.py index d142b6c4dc7..b6dc01a68d6 100644 --- a/addons/account/tests/test_account_move_out_invoice.py +++ b/addons/account/tests/test_account_move_out_invoice.py @@ -1319,6 +1319,33 @@ class TestAccountMoveOutInvoiceOnchanges(AccountTestInvoicingCommon): }, ], self.move_vals) + def test_out_invoice_line_onchange_analytic_2(self): + self.env.user.groups_id += self.env.ref('analytic.group_analytic_accounting') + + analytic_account = self.env['account.analytic.account'].create({ + 'name': 'test_analytic_account1', + 'code': 'TEST1' + }) + + self.invoice.write({'invoice_line_ids': [(1, self.invoice.invoice_line_ids.ids[0], { + 'analytic_account_id': analytic_account.id, + })]}) + + self.assertRecordValues(self.invoice.invoice_line_ids, [ + {'analytic_account_id': analytic_account.id}, + {'analytic_account_id': False}, + ]) + + # We can remove the analytic account, it is not recomputed by an invalidation + self.invoice.write({'invoice_line_ids': [(1, self.invoice.invoice_line_ids.ids[0], { + 'analytic_account_id': False, + })]}) + + self.assertRecordValues(self.invoice.invoice_line_ids, [ + {'analytic_account_id': False}, + {'analytic_account_id': False}, + ]) + def test_out_invoice_line_onchange_cash_rounding_1(self): move_form = Form(self.invoice) # Add a cash rounding having 'add_invoice_line'.