diff --git a/addons/hr_expense/models/account_move_line.py b/addons/hr_expense/models/account_move_line.py index bb9ca3613ab..7294bc5620c 100644 --- a/addons/hr_expense/models/account_move_line.py +++ b/addons/hr_expense/models/account_move_line.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. -from odoo import fields, models +from odoo import api, fields, models from odoo.tools.misc import frozendict @@ -10,6 +10,10 @@ class AccountMoveLine(models.Model): expense_id = fields.Many2one('hr.expense', string='Expense', copy=False) + @api.constrains('account_id', 'display_type') + def _check_payable_receivable(self): + super(AccountMoveLine, self.filtered(lambda line: not line.expense_id or line.expense_id.payment_mode != 'company_account'))._check_payable_receivable() + def reconcile(self): # OVERRIDE not_paid_expenses = self.expense_id.filtered(lambda expense: expense.state != 'done') diff --git a/addons/hr_expense/tests/test_expenses.py b/addons/hr_expense/tests/test_expenses.py index 21922261445..4855a085961 100644 --- a/addons/hr_expense/tests/test_expenses.py +++ b/addons/hr_expense/tests/test_expenses.py @@ -231,6 +231,28 @@ class TestExpenses(TestExpenseCommon): }, ]) + def test_expense_company_account(self): + """ Create an expense with payment mode 'Company' and post it (it should not fail) """ + with Form(self.env['hr.expense']) as expense_form: + expense_form.name = 'Company expense' + expense_form.date = '2022-11-17' + expense_form.total_amount = 1000.0 + expense_form.payment_mode = 'company_account' + expense_form.employee_id = self.expense_employee + expense_form.product_id = self.product_a + expense = expense_form.save() + + with Form(self.env['hr.expense.sheet']) as expense_sheet_form: + # Use same values that will be used by action_submit_expenses + expense_sheet_form.employee_id = expense.employee_id + expense_sheet_form.name = expense.name + expense_sheet_form.expense_line_ids.add(expense) + expense_sheet = expense_sheet_form.save() + + expense_sheet.action_submit_sheet() + expense_sheet.approve_expense_sheets() + expense_sheet.action_sheet_move_create() + def test_account_entry_multi_currency(self): """ Checking accounting move entries and analytic entries when submitting expense. With multi-currency. And taxes. """