[FW][MERGE] base,note,snailmail: perf of users and partners create/write
Following the new populate functionality (populating the database with generated records), this PR aims to improve: * the creation of users (missed batching opportunity) * the update of partners (optimized write to potentially reduce database requests). Followup of #48912 Task Id - 2229358 closes odoo/odoo#50452 Forward-port-of: odoo/odoo#50367 Signed-off-by: Martin Trigaux (mat) <mat@odoo.com> Signed-off-by: Victor Feyens (vfe) <vfe@odoo.com>
This commit is contained in:
@@ -12,13 +12,13 @@ class Users(models.Model):
|
||||
_name = 'res.users'
|
||||
_inherit = ['res.users']
|
||||
|
||||
@api.model
|
||||
def create(self, values):
|
||||
user = super(Users, self).create(values)
|
||||
@api.model_create_multi
|
||||
def create(self, vals_list):
|
||||
users = super().create(vals_list)
|
||||
user_group_id = self.env['ir.model.data'].xmlid_to_res_id('base.group_user')
|
||||
# for new employee, create his own 5 base note stages
|
||||
if user.has_group('base.group_user'):
|
||||
user._create_note_stages()
|
||||
return user
|
||||
users.filtered_domain([('groups_id', 'in', [user_group_id])])._create_note_stages()
|
||||
return users
|
||||
|
||||
@api.model
|
||||
def _init_data_user_note_stages(self):
|
||||
|
||||
@@ -10,16 +10,18 @@ class ResPartner(models.Model):
|
||||
_inherit = "res.partner"
|
||||
|
||||
def write(self, vals):
|
||||
for id in self.ids:
|
||||
letter_address_vals = {}
|
||||
address_fields = ['street', 'street2', 'city', 'zip', 'state_id', 'country_id']
|
||||
for field in address_fields:
|
||||
if field in vals:
|
||||
letter_address_vals[field] = vals[field]
|
||||
letter_address_vals = {}
|
||||
address_fields = ['street', 'street2', 'city', 'zip', 'state_id', 'country_id']
|
||||
for field in address_fields:
|
||||
if field in vals:
|
||||
letter_address_vals[field] = vals[field]
|
||||
|
||||
if len(letter_address_vals):
|
||||
letter_ids = self.env['snailmail.letter'].search([('state', 'not in', ['sent', 'canceled']), ('partner_id', '=', id)])
|
||||
letter_ids.write(letter_address_vals)
|
||||
if letter_address_vals:
|
||||
letters = self.env['snailmail.letter'].search([
|
||||
('state', 'not in', ['sent', 'canceled']),
|
||||
('partner_id', 'in', self.ids),
|
||||
])
|
||||
letters.write(letter_address_vals)
|
||||
|
||||
return super(ResPartner, self).write(vals)
|
||||
|
||||
|
||||
@@ -1271,8 +1271,10 @@ class UsersView(models.Model):
|
||||
def write(self, values):
|
||||
values = self._remove_reified_groups(values)
|
||||
res = super(UsersView, self).write(values)
|
||||
if 'company_ids' not in values:
|
||||
return res
|
||||
group_multi_company = self.env.ref('base.group_multi_company', False)
|
||||
if group_multi_company and 'company_ids' in values:
|
||||
if group_multi_company:
|
||||
for user in self:
|
||||
if len(user.company_ids) <= 1 and user.id in group_multi_company.users.ids:
|
||||
user.write({'groups_id': [(3, group_multi_company.id)]})
|
||||
|
||||
Reference in New Issue
Block a user