[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:
Odoo's Mergebot
2020-04-30 13:14:46 +02:00
committed by GitHub
3 changed files with 20 additions and 16 deletions
+6 -6
View File
@@ -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):
+11 -9
View File
@@ -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)
+3 -1
View File
@@ -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)]})