You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
54 lines
1.6 KiB
54 lines
1.6 KiB
"""Managers for emencia.django.newsletter"""
|
|
from django.db import models
|
|
from accounts.models import User
|
|
|
|
|
|
class ContactManager(models.Manager):
|
|
"""Manager for the contacts"""
|
|
|
|
def subscribers(self):
|
|
"""Return all subscribers"""
|
|
return self.get_query_set().filter(subscriber=True)
|
|
|
|
def unsubscribers(self):
|
|
"""Return all unsubscribers"""
|
|
return self.get_query_set().filter(subscriber=False)
|
|
|
|
def valids(self):
|
|
"""Return only valid contacts"""
|
|
return self.get_query_set().filter(valid=True, activated=True)
|
|
|
|
def valid_subscribers(self):
|
|
"""Return only valid subscribers"""
|
|
return self.subscribers().filter(valid=True, activated=True)
|
|
|
|
def activate(self, activation_key):
|
|
try:
|
|
contact = self.get(activation_code=activation_key)
|
|
except self.model.DoesNotExist:
|
|
return None
|
|
|
|
contact.activated = True
|
|
try:
|
|
user = User.objects.get(username=contact.email)
|
|
except User.DoesNotExist:
|
|
user = None
|
|
|
|
contact.user = user
|
|
|
|
contact.save()
|
|
return contact
|
|
|
|
def create_contact(self, email, user=None, create_setting=False):
|
|
contact = self.model(user=user, email=email)
|
|
if user:
|
|
contact.first_name = user.first_name
|
|
contact.last_name = user.last_name
|
|
contact.save()
|
|
contact.send_activation()
|
|
if create_setting:
|
|
from .models import ContactSettings
|
|
sett = ContactSettings(contact=contact, exponent_practicum=False, organiser_practicum=False)
|
|
sett.save()
|
|
|
|
return contact
|
|
|