From db79d20a1d24ddfc5a994e73fc1f7b1eb0eb1bd5 Mon Sep 17 00:00:00 2001 From: Victor Feyens Date: Mon, 27 Apr 2020 14:43:05 +0200 Subject: [PATCH] [IMP] snailmail: res.partner write performance Do not loop through the partners, doing the same stuff n times, and potentially doing multiple searches when one is enough. X-original-commit: 35713d2ff46dcfc4a578c41dad6f786919754ca2 --- addons/snailmail/models/res_partner.py | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/addons/snailmail/models/res_partner.py b/addons/snailmail/models/res_partner.py index ae50e43c999..c7f40f7b3a8 100644 --- a/addons/snailmail/models/res_partner.py +++ b/addons/snailmail/models/res_partner.py @@ -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)