From 4002d2317ef01fed7ddc0e0d11b6090ee8ab9644 Mon Sep 17 00:00:00 2001 From: Rowan Seymour Date: Wed, 4 Oct 2023 15:55:35 +0000 Subject: [PATCH] Add optin as field to channelevents --- .../migrations/0177_channelevent_optin_id.py | 21 +++++++++++++++++++ temba/channels/models.py | 1 + temba/contacts/models.py | 4 ++-- temba/mailroom/events.py | 2 +- 4 files changed, 25 insertions(+), 3 deletions(-) create mode 100644 temba/channels/migrations/0177_channelevent_optin_id.py diff --git a/temba/channels/migrations/0177_channelevent_optin_id.py b/temba/channels/migrations/0177_channelevent_optin_id.py new file mode 100644 index 00000000000..e8c29e46688 --- /dev/null +++ b/temba/channels/migrations/0177_channelevent_optin_id.py @@ -0,0 +1,21 @@ +# Generated by Django 4.2.3 on 2023-10-04 15:54 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + dependencies = [ + ("msgs", "0250_alter_msg_msg_type"), + ("channels", "0176_remove_channel_alert_email_delete_alert"), + ] + + operations = [ + migrations.AddField( + model_name="channelevent", + name="optin_id", + field=models.ForeignKey( + null=True, on_delete=django.db.models.deletion.PROTECT, related_name="optins", to="msgs.optin" + ), + ), + ] diff --git a/temba/channels/models.py b/temba/channels/models.py index a7d279b4ecd..a5f63a307fa 100644 --- a/temba/channels/models.py +++ b/temba/channels/models.py @@ -852,6 +852,7 @@ class ChannelEvent(models.Model): contact_urn = models.ForeignKey( "contacts.ContactURN", on_delete=models.PROTECT, null=True, related_name="channel_events" ) + optin_id = models.ForeignKey("msgs.OptIn", null=True, on_delete=models.PROTECT, related_name="optins") extra = JSONAsTextField(null=True, default=dict) occurred_on = models.DateTimeField() created_on = models.DateTimeField(default=timezone.now) diff --git a/temba/contacts/models.py b/temba/contacts/models.py index bb5060afe24..81a66152960 100644 --- a/temba/contacts/models.py +++ b/temba/contacts/models.py @@ -778,7 +778,7 @@ def get_history(self, after: datetime, before: datetime, include_event_types: se self.msgs.filter(created_on__gte=after, created_on__lt=before) .exclude(status=Msg.STATUS_PENDING) .order_by("-created_on", "-id") - .select_related("channel", "contact_urn", "broadcast")[:limit] + .select_related("channel", "contact_urn", "broadcast", "optin")[:limit] ) # get all runs start started or ended in this period @@ -797,7 +797,7 @@ def get_history(self, after: datetime, before: datetime, include_event_types: se channel_events = ( self.channel_events.filter(created_on__gte=after, created_on__lt=before) .order_by("-created_on") - .select_related("channel")[:limit] + .select_related("channel", "optin")[:limit] ) campaign_events = ( diff --git a/temba/mailroom/events.py b/temba/mailroom/events.py index fd1a9e3d34c..81174407be1 100644 --- a/temba/mailroom/events.py +++ b/temba/mailroom/events.py @@ -252,7 +252,7 @@ def from_channel_event(cls, org: Org, user: User, obj: ChannelEvent) -> dict: if obj.event_type in ChannelEvent.CALL_TYPES: ch_event["duration"] = extra.get("duration") elif obj.event_type in (ChannelEvent.TYPE_OPTIN, ChannelEvent.TYPE_OPTOUT): - ch_event["optin"] = _optin(OptIn.objects.get(org=org, id=extra.get("optin_id"))) + ch_event["optin"] = _optin(obj.optin) if obj.optin else None return { "type": cls.TYPE_CHANNEL_EVENT,