From 8acb86a5ab30f67fafb635c1e5f14e97d50706bb Mon Sep 17 00:00:00 2001 From: dormantman Date: Fri, 24 Jan 2020 18:25:17 +0300 Subject: [PATCH] Added history to subscriptions --- apps/notification/models.py | 12 ++++++++++-- apps/notification/serializers/common.py | 20 ++++++++++++++++---- apps/notification/tasks.py | 1 + 3 files changed, 27 insertions(+), 6 deletions(-) diff --git a/apps/notification/models.py b/apps/notification/models.py index adcb4fab..094fcad4 100644 --- a/apps/notification/models.py +++ b/apps/notification/models.py @@ -137,10 +137,14 @@ class Subscriber(ProjectBaseMixin): """Unsubscribe user.""" self.subscribe_set.update( - unsunbscribe_date=now(), + unsubscribe_date=now(), old_subscriber_id=F('subscriber_id'), old_subscription_type_id=F('subscription_type_id') - ).update(subscriber_id=None, subscription_type_id=None) + ) + self.subscribe_set.update( + subscriber_id=None, + subscription_type_id=None + ) if settings.USE_CELERY: send_unsubscribe_email.delay(self.email) @@ -166,6 +170,10 @@ class Subscriber(ProjectBaseMixin): def active_subscriptions(self): return self.subscription_types.exclude(subscriber__subscribe__unsubscribe_date__isnull=False) + @property + def subscription_history(self): + return Subscribe.objects.subscription_history(self.pk) + class SubscribeQuerySet(models.QuerySet): diff --git a/apps/notification/serializers/common.py b/apps/notification/serializers/common.py index 48caee48..9eda31b3 100644 --- a/apps/notification/serializers/common.py +++ b/apps/notification/serializers/common.py @@ -141,14 +141,24 @@ class UpdateSubscribeSerializer(serializers.ModelSerializer): class SubscribeObjectSerializer(serializers.ModelSerializer): - """Subscribe serializer.""" + """Subscription type serializer.""" + + subscription_type = serializers.SerializerMethodField() class Meta: """Meta class.""" - model = models.Subscriber - fields = ('subscriber',) - read_only_fields = ('subscribe_date', 'unsubscribe_date',) + model = models.Subscribe + fields = ( + 'subscribe_date', + 'unsubscribe_date', + 'subscription_type' + ) + + def get_subscription_type(self, instance): + return SubscriptionTypeSerializer( + models.SubscriptionType.objects.get(pk=instance.old_subscription_type_id) + ).data class SubscribeSerializer(serializers.ModelSerializer): @@ -156,6 +166,7 @@ class SubscribeSerializer(serializers.ModelSerializer): email = serializers.EmailField(required=False, source='send_to') subscription_types = SubscriptionTypeSerializer(source='active_subscriptions', read_only=True, many=True) + history = SubscribeObjectSerializer(source='subscription_history', many=True) class Meta: """Meta class.""" @@ -165,6 +176,7 @@ class SubscribeSerializer(serializers.ModelSerializer): 'email', 'subscription_types', 'link_to_unsubscribe', + 'history', ) diff --git a/apps/notification/tasks.py b/apps/notification/tasks.py index 3f9f7249..cea15287 100644 --- a/apps/notification/tasks.py +++ b/apps/notification/tasks.py @@ -7,6 +7,7 @@ from django.template.loader import get_template, render_to_string from main.models import SiteSettings from notification import models +from django.utils.translation import gettext_lazy as _ @shared_task