Files @ 565a90f61829
Branch filter:

Location: symposion_app/vendor/registrasion/models/people.py - annotation

Sachi King
Add a note to get the permission required for papers review

So not obvious...
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)