diff --git a/addons/auth_signup/models/res_users.py b/addons/auth_signup/models/res_users.py index dc1a471421a..c600d969e9d 100644 --- a/addons/auth_signup/models/res_users.py +++ b/addons/auth_signup/models/res_users.py @@ -233,16 +233,18 @@ class ResUsers(models.Model): inactive_users.with_context(create_user=True).action_reset_password() return res - @api.model - def create(self, values): + @api.model_create_multi + def create(self, vals_list): # overridden to automatically invite user to sign up - user = super(ResUsers, self).create(values) - if user.email and not self.env.context.get('no_reset_password'): - try: - user.with_context(create_user=True).action_reset_password() - except MailDeliveryException: - user.partner_id.with_context(create_user=True).signup_cancel() - return user + users = super(ResUsers, self).create(vals_list) + if not self.env.context.get('no_reset_password'): + users_with_email = users.filtered('email') + if users_with_email: + try: + users_with_email.with_context(create_user=True).action_reset_password() + except MailDeliveryException: + users_with_email.partner_id.with_context(create_user=True).signup_cancel() + return users @api.returns('self', lambda value: value.id) def copy(self, default=None): diff --git a/addons/base_vat/models/res_partner.py b/addons/base_vat/models/res_partner.py index 24f581f9a31..c3376cd0ba5 100644 --- a/addons/base_vat/models/res_partner.py +++ b/addons/base_vat/models/res_partner.py @@ -481,12 +481,13 @@ class ResPartner(models.Model): vat_number = format_func(vat_number) return vat_country.upper() + vat_number - @api.model - def create(self, values): - if values.get('vat'): - country_id = values.get('country_id') - values['vat'] = self._fix_vat_number(values['vat'], country_id) - return super(ResPartner, self).create(values) + @api.model_create_multi + def create(self, vals_list): + for values in vals_list: + if values.get('vat'): + country_id = values.get('country_id') + values['vat'] = self._fix_vat_number(values['vat'], country_id) + return super(ResPartner, self).create(vals_list) def write(self, values): if values.get('vat') and len(self.mapped('country_id')) == 1: diff --git a/addons/digest/models/res_users.py b/addons/digest/models/res_users.py index 767ec444391..432e140df33 100644 --- a/addons/digest/models/res_users.py +++ b/addons/digest/models/res_users.py @@ -6,13 +6,13 @@ from odoo import api, models class ResUsers(models.Model): _inherit = "res.users" - @api.model - def create(self, vals): + @api.model_create_multi + def create(self, vals_list): """ Automatically subscribe employee users to default digest if activated """ - user = super(ResUsers, self).create(vals) + users = super(ResUsers, self).create(vals_list) default_digest_emails = self.env['ir.config_parameter'].sudo().get_param('digest.default_digest_emails') default_digest_id = self.env['ir.config_parameter'].sudo().get_param('digest.default_digest_id') - if user.has_group('base.group_user') and default_digest_emails and default_digest_id: + if default_digest_emails and default_digest_id: digest = self.env['digest.digest'].sudo().browse(int(default_digest_id)) - digest.user_ids |= user - return user + digest.user_ids |= users.filtered_domain([('share', '=', False)]) + return users diff --git a/addons/mail/models/res_users.py b/addons/mail/models/res_users.py index 64e0d1cd746..ce00a1d2b72 100644 --- a/addons/mail/models/res_users.py +++ b/addons/mail/models/res_users.py @@ -71,17 +71,18 @@ GROUP BY channel_moderator.res_users_id""", [tuple(self.ids)]) type(self).SELF_READABLE_FIELDS.extend(['notification_type']) return init_res - @api.model - def create(self, values): - if not values.get('login', False): - action = self.env.ref('base.action_res_users') - msg = _("You cannot create a new user from here.\n To create new user please go to configuration panel.") - raise exceptions.RedirectWarning(msg, action.id, _('Go to the configuration panel')) + @api.model_create_multi + def create(self, vals_list): + for values in vals_list: + if not values.get('login', False): + action = self.env.ref('base.action_res_users') + msg = _("You cannot create a new user from here.\n To create new user please go to configuration panel.") + raise exceptions.RedirectWarning(msg, action.id, _('Go to the configuration panel')) - user = super(Users, self).create(values) + users = super(Users, self).create(vals_list) # Auto-subscribe to channels - self.env['mail.channel'].search([('group_ids', 'in', user.groups_id.ids)])._subscribe_users() - return user + self.env['mail.channel'].search([('group_ids', 'in', users.groups_id.ids)])._subscribe_users() + return users def write(self, vals): write_res = super(Users, self).write(vals) diff --git a/odoo/addons/base/models/res_users.py b/odoo/addons/base/models/res_users.py index 0926c8dd922..4d34c0a027d 100644 --- a/odoo/addons/base/models/res_users.py +++ b/odoo/addons/base/models/res_users.py @@ -211,8 +211,8 @@ class Users(models.Model): SELF_READABLE_FIELDS = ['signature', 'company_id', 'login', 'email', 'name', 'image_1920', 'image_1024', 'image_512', 'image_256', 'image_128', 'lang', 'tz', 'tz_offset', 'groups_id', 'partner_id', '__last_update', 'action_id'] def _default_groups(self): - default_user = self.env.ref('base.default_user', raise_if_not_found=False) - return (default_user or self.env['res.users']).sudo().groups_id + default_user_id = self.env['ir.model.data'].xmlid_to_res_id('base.default_user', raise_if_not_found=False) + return self.env['res.users'].browse(default_user_id).sudo().groups_id if default_user_id else [] @api.model def _get_default_image(self): @@ -357,8 +357,10 @@ class Users(models.Model): @api.depends('groups_id') def _compute_share(self): - for user in self: - user.share = not user.has_group('base.group_user') + user_group_id = self.env['ir.model.data'].xmlid_to_res_id('base.group_user') + internal_users = self.filtered_domain([('groups_id', 'in', [user_group_id])]) + internal_users.share = False + (self - internal_users).share = True def _compute_companies_count(self): self.companies_count = self.env['res.company'].sudo().search_count([]) @@ -1250,17 +1252,21 @@ class ModuleCategory(models.Model): class UsersView(models.Model): _inherit = 'res.users' - @api.model - def create(self, values): - values = self._remove_reified_groups(values) - user = super(UsersView, self).create(values) - group_multi_company = self.env.ref('base.group_multi_company', False) - if group_multi_company and 'company_ids' in values: - if len(user.company_ids) <= 1 and user.id in group_multi_company.users.ids: - user.write({'groups_id': [(3, group_multi_company.id)]}) - elif len(user.company_ids) > 1 and user.id not in group_multi_company.users.ids: - user.write({'groups_id': [(4, group_multi_company.id)]}) - return user + @api.model_create_multi + def create(self, vals_list): + new_vals_list = [] + for values in vals_list: + new_vals_list.append(self._remove_reified_groups(values)) + users = super(UsersView, self).create(new_vals_list) + group_multi_company_id = self.env['ir.model.data'].xmlid_to_res_id( + 'base.group_multi_company', raise_if_not_found=False) + if group_multi_company_id: + for user in users: + if len(user.company_ids) <= 1 and group_multi_company_id in user.groups_id.ids: + user.write({'groups_id': [(3, group_multi_company_id)]}) + elif len(user.company_ids) > 1 and group_multi_company_id in user.groups_id.ids: + user.write({'groups_id': [(4, group_multi_company_id)]}) + return users def write(self, values): values = self._remove_reified_groups(values)