Files
enterprise-addons/marketing_automation_whatsapp/models/whatsapp_message.py
T

57 lines
2.0 KiB
Python

from odoo import fields, models, _
from odoo.fields import Domain
class WhatsappMessage(models.Model):
_inherit = 'whatsapp.message'
links_click_datetime = fields.Datetime(
'Clicked On', help='Stores last click datetime in case of multi clicks.'
)
marketing_trace_ids = fields.One2many(
'marketing.trace', 'whatsapp_message_id', string='Marketing Trace'
)
def set_clicked(self):
self.write({'links_click_datetime': fields.Datetime.now()})
if self.marketing_trace_ids:
self.marketing_trace_ids.process_event('whatsapp_click')
return self
def _process_statuses(self, value):
"""Process statuses of whatsapp messages like: 'send', 'delivered' and 'read'."""
processed_msgs = super()._process_statuses(value)
status_mapping = {
'send': 'whatsapp_send',
'delivered': 'whatsapp_delivered',
'read': 'whatsapp_read',
}
for processed_msg in processed_msgs:
traces = processed_msg.marketing_trace_ids
trace_event = status_mapping.get(processed_msg.state, '')
if trace_event and traces:
for trace in traces:
trace.sudo().process_event(trace_event)
def _get_whatsapp_gc_domain(self):
return Domain.AND([
super()._get_whatsapp_gc_domain(),
[('marketing_trace_ids', '!=', 'False')],
])
def _handle_error(self, failure_type=False, whatsapp_error_code=False, error_message=False):
super()._handle_error(failure_type, whatsapp_error_code=whatsapp_error_code, error_message=error_message)
traces = self.sudo().marketing_trace_ids
if not traces:
return
# TDE FIXME: handle bounce / error from status
traces.write({
'state': 'canceled',
'schedule_date': self.env.cr.now(),
'state_msg': _('WhatsApp canceled'),
})
if self.state == 'bounced':
for trace in traces:
trace.process_event('whatsapp_bounced')