[IMP] sale: avoid using _write to schedule an activity from the invoice status

Task 2186312

closes odoo/odoo#53427

Related: odoo/enterprise#11335
Signed-off-by: Xavier Morel (xmo) <xmo@odoo.com>
This commit is contained in:
Xavier Morel
2020-06-24 10:27:26 +00:00
parent 1dab0fac85
commit 6bd8e89766
+15 -23
View File
@@ -476,31 +476,23 @@ class SaleOrder(models.Model):
result = super(SaleOrder, self).create(vals)
return result
def _write(self, values):
""" Override of private write method in order to generate activities
based in the invoice status. As the invoice status is a computed field
triggered notably when its lines and linked invoice status changes the
flow does not necessarily goes through write if the action was not done
on the SO itself. We hence override the _write to catch the computation
of invoice_status field. """
if self.env.context.get('mail_activity_automation_skip'):
return super(SaleOrder, self)._write(values)
def _compute_field_value(self, field):
super()._compute_field_value(field)
if field.name != 'invoice_status' or self.env.context.get('mail_activity_automation_skip'):
return
if 'invoice_status' in values:
if values['invoice_status'] == 'upselling':
filtered_self = self.search([('id', 'in', self.ids),
('user_id', '!=', False),
('invoice_status', '!=', 'upselling')])
filtered_self.activity_unlink(['sale.mail_act_sale_upsell'])
for order in filtered_self:
order.activity_schedule(
'sale.mail_act_sale_upsell',
user_id=order.user_id.id,
note=_("Upsell <a href='#' data-oe-model='%s' data-oe-id='%d'>%s</a> for customer <a href='#' data-oe-model='%s' data-oe-id='%s'>%s</a>") % (
order._name, order.id, order.name,
order.partner_id._name, order.partner_id.id, order.partner_id.display_name))
filtered_self = self.filtered(lambda so: so.user_id and so.invoice_status == 'upselling')
if not filtered_self:
return
return super(SaleOrder, self)._write(values)
filtered_self.activity_unlink(['sale.mail_act_sale_upsell'])
for order in filtered_self:
order.activity_schedule(
'sale.mail_act_sale_upsell',
user_id=order.user_id.id,
note=_("Upsell <a href='#' data-oe-model='%s' data-oe-id='%d'>%s</a> for customer <a href='#' data-oe-model='%s' data-oe-id='%s'>%s</a>") % (
order._name, order.id, order.name,
order.partner_id._name, order.partner_id.id, order.partner_id.display_name))
def copy_data(self, default=None):
if default is None: