Steps to reproduce the problem: - Have user A with B2B group. - Have user B with B2C group. - Add simultaneously on both - via write - another group (or call `_check_one_user_type`). Expected result: - No problem Got result: - Error "A user cannot have both Tax B2B and Tax B2C..." That's because the check is performed for more than one user each time, while it has to be record per record. The implementation of `_has_multiple_groups` actually checks if the passed recordset is only one record, and if not, it looks directly for all existing users, so also the case of both users A and B being in the same B2x group, but having a 3rd user in the other group will fail. Revisiting the query in `_has_multiple_groups`, there's a hidden error when you use it for only one ID because a missing space. closes odoo/odoo#44300 X-original-commit: 83f104b2f2fc1345ad067430466c004697a91db9 Signed-off-by: Nicolas Martinelli (nim) <nim@odoo.com>
28 lines
1.1 KiB
Python
28 lines
1.1 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from odoo import api, models, _
|
|
from odoo.exceptions import ValidationError
|
|
|
|
|
|
class Users(models.Model):
|
|
_inherit = "res.users"
|
|
|
|
@api.constrains('groups_id')
|
|
def _check_one_user_type(self):
|
|
super(Users, self)._check_one_user_type()
|
|
|
|
g1 = self.env.ref('account.group_show_line_subtotals_tax_included', False)
|
|
g2 = self.env.ref('account.group_show_line_subtotals_tax_excluded', False)
|
|
|
|
if not g1 or not g2:
|
|
# A user cannot be in a non-existant group
|
|
return
|
|
|
|
for user in self:
|
|
if user._has_multiple_groups([g1.id, g2.id]):
|
|
raise ValidationError(_("A user cannot have both Tax B2B and Tax B2C.\n"
|
|
"You should go in General Settings, and choose to display Product Prices\n"
|
|
"either in 'Tax-Included' or in 'Tax-Excluded' mode\n"
|
|
"(or switch twice the mode if you are already in the desired one)."))
|