diff --git a/addons/hr_expense/models/hr_expense.py b/addons/hr_expense/models/hr_expense.py index d6711bd3ed3..38e1cb5247b 100644 --- a/addons/hr_expense/models/hr_expense.py +++ b/addons/hr_expense/models/hr_expense.py @@ -921,12 +921,13 @@ class HrExpense(models.Model): def message_new(self, msg_dict, custom_values=None): email_address = email_split(msg_dict.get('email_from', False))[0] - employee = self.env['hr.employee'].search( - ['|', ('work_email', 'ilike', email_address), ('user_id.email', 'ilike', email_address)], - limit=1, - ) + employee = self.env['hr.employee'].search([ + '|', + ('work_email', 'ilike', email_address), + ('user_id.email', 'ilike', email_address) + ]).filtered(lambda e: e.company_id == e.user_id.company_id) - if not employee: + if len(employee) != 1: return super().message_new(msg_dict, custom_values=custom_values) expense_description = msg_dict.get('subject', '') diff --git a/addons/hr_expense/tests/test_expenses_mail_import.py b/addons/hr_expense/tests/test_expenses_mail_import.py index 4a78143c189..70d8b0d9ec7 100644 --- a/addons/hr_expense/tests/test_expenses_mail_import.py +++ b/addons/hr_expense/tests/test_expenses_mail_import.py @@ -40,6 +40,33 @@ class TestExpensesMailImport(TestExpenseCommon): {'product_id': self.product_c.id, 'total_amount_currency': 100.0, 'employee_id': self.expense_employee.id}, ]) + def test_import_expense_from_email_several_employees(self): + """When a user has several employees' profiles from different companies, the right record should be selected""" + user = self.expense_user_employee + company_2 = user.company_ids[1] + user.company_id = company_2.id + + # Create a second employee linked to the user for another company + company_2_employee = self.env['hr.employee'].create({ + 'name': 'expense_employee_2', + 'company_id': company_2.id, + 'user_id': user.id, + 'work_email': user.email, + }) + + message_parsed = { + 'message_id': "the-world-is-a-ghetto", + 'subject': 'New expense', + 'email_from': user.email, + 'to': 'catchall@yourcompany.com', + 'body': "Don't you know, that for me, and for you", + 'attachments': [], + } + expense = self.env['hr.expense'].message_new(message_parsed) + self.assertRecordValues(expense, [{ + 'employee_id': company_2_employee.id, + }]) + def test_import_expense_from_mail_parsing_subjects(self): def assertParsedValues(subject, currencies, exp_description, exp_amount, exp_product, exp_currency): product, amount, currency_id, description = self.env['hr.expense'] \