diff --git a/apps/notification/models.py b/apps/notification/models.py index c7d277d8..20da2799 100644 --- a/apps/notification/models.py +++ b/apps/notification/models.py @@ -7,9 +7,9 @@ from django.utils.translation import ugettext_lazy as _ from account.models import User from location.models import Country +from notification.tasks import send_unsubscribe_email from utils.methods import generate_string_code from utils.models import ProjectBaseMixin, TJSONField, TranslatedFieldsMixin -from notification.tasks import send_unsubscribe_email class SubscriptionType(ProjectBaseMixin, TranslatedFieldsMixin): @@ -32,9 +32,9 @@ class SubscriberManager(models.Manager): # search existing object if not user: user = User.objects.filter(email=email).first() + if user: - obj = self.model.objects.filter(models.Q(user=user) | models.Q( - email=user.email)).first() + obj = self.model.objects.filter(models.Q(user=user) | models.Q(email=user.email)).first() else: obj = self.model.objects.filter(email=email).first() @@ -43,31 +43,39 @@ class SubscriberManager(models.Manager): if user: obj.user = user obj.email = None + else: obj.email = email + obj.ip_address = ip_address obj.country_code = country_code obj.locale = locale obj.update_code = generate_string_code() obj.save() - obj.subscription_types.set(subscription_types) - obj.subscribe_set.update(unsubscribe_date=None) + else: - obj = self.model.objects.create(user=user, email=email, ip_address=ip_address, - country_code=country_code, locale=locale) - obj.subscription_types.set(subscription_types) - obj.subscribe_set.update(unsubscribe_date=None) + obj = self.model.objects.create( + user=user, email=email, ip_address=ip_address, + country_code=country_code, locale=locale + ) + + obj.subscription_types.set(subscription_types) + obj.subscribe_set.update(unsubscribe_date=None) + return obj def associate_user(self, user): """Associate user.""" obj = self.model.objects.filter(user=user).first() + if obj is None: obj = self.model.objects.filter(email=user.email_confirmed, user__isnull=True).first() + if obj: obj.user = user obj.email = None obj.save() + return obj diff --git a/apps/notification/views/common.py b/apps/notification/views/common.py index 5a06b7fa..9830683d 100644 --- a/apps/notification/views/common.py +++ b/apps/notification/views/common.py @@ -47,10 +47,9 @@ class SubscribeInfoAuthUserView(generics.RetrieveAPIView): user = self.request.user if user.is_authenticated: - try: - subscriber = models.Subscriber.objects.get(user=user) + subscriber = models.Subscriber.objects.filter(user=user).first() - except models.Subscriber.DoesNotExist: + if subscriber is None: subscriber = models.Subscriber.objects.make_subscriber( email=user.email, user=user, ip_address=get_user_ip(self.request), country_code=self.request.country_code, locale=self.request.locale