Files
@ f7326eedf7c1
Branch filter:
Location: symposion_app/registrasion/models/people.py - annotation
f7326eedf7c1
2.9 KiB
text/x-python
Makes as many reports under attendee() as possible a QuerysetReport
875f736d67c5 875f736d67c5 875f736d67c5 875f736d67c5 875f736d67c5 875f736d67c5 875f736d67c5 875f736d67c5 875f736d67c5 875f736d67c5 875f736d67c5 875f736d67c5 875f736d67c5 875f736d67c5 875f736d67c5 875f736d67c5 875f736d67c5 875f736d67c5 875f736d67c5 875f736d67c5 875f736d67c5 875f736d67c5 875f736d67c5 875f736d67c5 875f736d67c5 875f736d67c5 875f736d67c5 875f736d67c5 875f736d67c5 875f736d67c5 875f736d67c5 875f736d67c5 875f736d67c5 875f736d67c5 875f736d67c5 875f736d67c5 875f736d67c5 875f736d67c5 875f736d67c5 875f736d67c5 875f736d67c5 875f736d67c5 875f736d67c5 875f736d67c5 875f736d67c5 875f736d67c5 875f736d67c5 875f736d67c5 875f736d67c5 875f736d67c5 875f736d67c5 875f736d67c5 875f736d67c5 875f736d67c5 875f736d67c5 875f736d67c5 875f736d67c5 875f736d67c5 875f736d67c5 875f736d67c5 875f736d67c5 b0d1f69f1aa5 b0d1f69f1aa5 b0d1f69f1aa5 b0d1f69f1aa5 b0d1f69f1aa5 b0d1f69f1aa5 875f736d67c5 875f736d67c5 f3a08a82bb96 f3a08a82bb96 f3a08a82bb96 f3a08a82bb96 f3a08a82bb96 f3a08a82bb96 f3a08a82bb96 875f736d67c5 b0d1f69f1aa5 b0d1f69f1aa5 b0d1f69f1aa5 b0d1f69f1aa5 b0d1f69f1aa5 b0d1f69f1aa5 b0d1f69f1aa5 875f736d67c5 875f736d67c5 875f736d67c5 875f736d67c5 875f736d67c5 875f736d67c5 875f736d67c5 875f736d67c5 875f736d67c5 875f736d67c5 875f736d67c5 | from registrasion import util
from django.contrib.auth.models import User
from django.core.exceptions import ObjectDoesNotExist
from django.db import models
from django.utils.encoding import python_2_unicode_compatible
from model_utils.managers import InheritanceManager
# User models
@python_2_unicode_compatible
class Attendee(models.Model):
''' Miscellaneous user-related data. '''
class Meta:
app_label = "registrasion"
def __str__(self):
return "%s" % self.user
@staticmethod
def get_instance(user):
''' Returns the instance of attendee for the given user, or creates
a new one. '''
try:
return Attendee.objects.get(user=user)
except ObjectDoesNotExist:
return Attendee.objects.create(user=user)
def save(self, *a, **k):
while not self.access_code:
access_code = util.generate_access_code()
if Attendee.objects.filter(access_code=access_code).count() == 0:
self.access_code = access_code
return super(Attendee, self).save(*a, **k)
user = models.OneToOneField(User, on_delete=models.CASCADE)
# Badge/profile is linked
access_code = models.CharField(
max_length=6,
unique=True,
db_index=True,
)
completed_registration = models.BooleanField(default=False)
guided_categories_complete = models.ManyToManyField("category")
class AttendeeProfileBase(models.Model):
''' Information for an attendee's badge and related preferences.
Subclass this in your Django site to ask for attendee information in your
registration progess.
'''
class Meta:
app_label = "registrasion"
objects = InheritanceManager()
@classmethod
def name_field(cls):
'''
Returns:
The name of a field that stores the attendee's name. This is used
to pre-fill the attendee's name from their Speaker profile, if they
have one.
'''
return None
def attendee_name(self):
if type(self) == AttendeeProfileBase:
real = AttendeeProfileBase.objects.get_subclass(id=self.id)
else:
real = self
return getattr(real, real.name_field())
def invoice_recipient(self):
'''
Returns:
A representation of this attendee profile for the purpose
of rendering to an invoice. This should include any information
that you'd usually include on an invoice. Override in subclasses.
'''
# Manual dispatch to subclass. Fleh.
slf = AttendeeProfileBase.objects.get_subclass(id=self.id)
# Actually compare the functions.
if type(slf).invoice_recipient != type(self).invoice_recipient:
return type(slf).invoice_recipient(slf)
# Return a default
return slf.attendee.user.username
attendee = models.OneToOneField(Attendee, on_delete=models.CASCADE)
|