diff --git a/addons/analytic/models/analytic_account.py b/addons/analytic/models/analytic_account.py index 4f3bd7a6aac..f611f3e8a7e 100644 --- a/addons/analytic/models/analytic_account.py +++ b/addons/analytic/models/analytic_account.py @@ -95,7 +95,7 @@ class AccountAnalyticAccount(models.Model): @api.constrains('company_id') def _check_company_consistency(self): for company, accounts in groupby(self, lambda account: account.company_id): - if company and self.env['account.analytic.line'].search([ + if company and self.env['account.analytic.line'].sudo().search([ ('auto_account_id', 'in', [account.id for account in accounts]), '!', ('company_id', 'child_of', company.id), ], limit=1): diff --git a/addons/sale/tests/test_sale_order.py b/addons/sale/tests/test_sale_order.py index 15c1ed1fec4..85ca248ae67 100644 --- a/addons/sale/tests/test_sale_order.py +++ b/addons/sale/tests/test_sale_order.py @@ -446,6 +446,26 @@ class TestSaleOrder(SaleCommon): self.assertFalse(public_user.has_group('sale.group_auto_done_setting')) self.assertTrue(self.sale_order.locked) + def test_generate_account_analytic_when_confirm_so(self): + """ Test generate account analytic when SO with expense product is confirmed """ + restaurant_expenses_product = self.env['product.product'].create({ + 'name': 'Restaurant Expenses', + 'type': 'service', + 'expense_policy': 'sales_price', + 'list_price': 14.0, + 'standard_price': 10.0, + }) + sale_order = self.env['sale.order'].with_user(self.sale_user).create({ + 'partner_id': self.partner.id, + 'order_line': [Command.create({ + 'product_id': restaurant_expenses_product.id, + 'product_uom_qty': 1, + })], + }) + self.assertFalse(sale_order.analytic_account_id) + sale_order.action_confirm() + self.assertTrue(sale_order.analytic_account_id, "An analytic account should be generated") + @tagged('post_install', '-at_install') class TestSaleOrderInvoicing(AccountTestInvoicingCommon, SaleCommon):