Files @ fb974fffea04
Branch filter:

Location: CopyleftConf/copyleftconf-website/pinaxcon/registrasion/models.py - annotation

Brett Smith
registrasion.models: Update for CopyleftConf 2019.
a6e7388d819f
6c94eb9e91ee
737db640aaeb
ca6edb87069d
6c94eb9e91ee
6c94eb9e91ee
737db640aaeb
6c94eb9e91ee
6c94eb9e91ee
6c94eb9e91ee
6c94eb9e91ee
6c94eb9e91ee
6c94eb9e91ee
6c94eb9e91ee
6c94eb9e91ee
6c94eb9e91ee
ca6edb87069d
ca6edb87069d
ca6edb87069d
ca6edb87069d
ca6edb87069d
6c94eb9e91ee
ca6edb87069d
ca6edb87069d
ca6edb87069d
ca6edb87069d
ca6edb87069d
ca6edb87069d
ca6edb87069d
ca6edb87069d
ca6edb87069d
ca6edb87069d
ca6edb87069d
ca6edb87069d
ca6edb87069d
ca6edb87069d
ca6edb87069d
ca6edb87069d
ca6edb87069d
ca6edb87069d
ca6edb87069d
ca6edb87069d
ca6edb87069d
ca6edb87069d
ca6edb87069d
ca6edb87069d
ca6edb87069d
ca6edb87069d
ca6edb87069d
ca6edb87069d
ca6edb87069d
ca6edb87069d
ca6edb87069d
ca6edb87069d
ca6edb87069d
ca6edb87069d
ca6edb87069d
c82ad6c1181e
c82ad6c1181e
c82ad6c1181e
c82ad6c1181e
c82ad6c1181e
c82ad6c1181e
ca6edb87069d
ca6edb87069d
6c94eb9e91ee
6c94eb9e91ee
6c94eb9e91ee
6c94eb9e91ee
6c94eb9e91ee
6c94eb9e91ee
6c94eb9e91ee
6c94eb9e91ee
6c94eb9e91ee
6c94eb9e91ee
6c94eb9e91ee
6c94eb9e91ee
6c94eb9e91ee
6c94eb9e91ee
6c94eb9e91ee
ca6edb87069d
6c94eb9e91ee
6c94eb9e91ee
6c94eb9e91ee
6c94eb9e91ee
ca6edb87069d
ca6edb87069d
6c94eb9e91ee
ca6edb87069d
6c94eb9e91ee
6c94eb9e91ee
6c94eb9e91ee
ca6edb87069d
ca6edb87069d
ca6edb87069d
ca6edb87069d
ca6edb87069d
ca6edb87069d
ca6edb87069d
ca6edb87069d
ca6edb87069d
ca6edb87069d
ca6edb87069d
ca6edb87069d
ca6edb87069d
ca6edb87069d
ca6edb87069d
ca6edb87069d
ca6edb87069d
ca6edb87069d
ca6edb87069d
ca6edb87069d
6c94eb9e91ee
6c94eb9e91ee
ca6edb87069d
ca6edb87069d
ca6edb87069d
ca6edb87069d
ca6edb87069d
ca6edb87069d
ca6edb87069d
ca6edb87069d
ca6edb87069d
ca6edb87069d
ca6edb87069d
6c94eb9e91ee
6c94eb9e91ee
6c94eb9e91ee
c82ad6c1181e
c82ad6c1181e
c82ad6c1181e
fb974fffea04
fb974fffea04
fb974fffea04
c82ad6c1181e
c82ad6c1181e
c82ad6c1181e
from django.core.exceptions import ValidationError
from django.db import models
from django.utils.encoding import python_2_unicode_compatible
from django_countries.fields import CountryField
from registrasion import models as rego


class AttendeeProfile(rego.AttendeeProfileBase):

    @classmethod
    def name_field(cls):
        ''' This is used to pre-fill the attendee's name from the
        speaker profile. If it's None, that functionality is disabled. '''
        return "name"

    def invoice_recipient(self):

        lines = [
            self.name_per_invoice,
        ]

        if self.company:
            lines.append("C/- " + self.company)

        if self.address_line_1:
            lines.append(self.address_line_1)

        if self.address_line_2:
            lines.append(self.address_line_2)

        if self.address_suburb or self.address_postcode:
            lines.append("%s %s" % (
                self.address_suburb or "",
                self.address_postcode or "",
            ))

        if self.state:
            lines.append(self.state)

        if self.country:
            lines.append(self.country.name)

        return "\n".join(unicode(line) for line in lines)

    def clean(self):
        errors = []
        if self.country == "US" and not self.state:
            errors.append(
                ("state", "US-based attendees must list their state"),
            )

        if self.address_line_2 and not self.address_line_1:
            errors.append((
                "address_line_1",
                "Please fill in line 1 before filling line 2",
            ))

        if not self.agreement:
            errors.append((
                "agreement",
                "You must accept the agreement.",
            ))

        if errors:
            raise ValidationError(dict(errors))

    def save(self):
        if not self.name_per_invoice:
            self.name_per_invoice = self.name
        super(AttendeeProfile, self).save()

    # Things that appear on badge
    name = models.CharField(
        verbose_name="Your name (for your conference nametag)",
        max_length=64,
        help_text="Your name, as you'd like it to appear on your badge. ",
    )

    company = models.CharField(
        max_length=64,
        help_text="The name of your company, as you'd like it on your badge and receipt",
        blank=True,
    )

    name_per_invoice = models.CharField(
        verbose_name="Your legal name (for your receipt)",
        max_length=256,
        help_text="If your legal name is different to the name on your badge, "
                  "fill this in, and we'll put it on your receipt. Otherwise, "
                  "leave it blank.",
        blank=True,
        )

    address_line_1 = models.CharField(
        verbose_name="Address line 1",
        help_text="This address, if provided, will appear on your receipt.",
        max_length=1024,
        blank=True,
    )
    address_line_2 = models.CharField(
        verbose_name="Address line 2",
        max_length=1024,
        blank=True,
    )
    address_suburb = models.CharField(
        verbose_name="City/Town/Suburb",
        max_length=1024,
        blank=True,
    )
    address_postcode = models.CharField(
        verbose_name="Postal/Zip code",
        max_length=1024,
        blank=True,
    )
    country = CountryField(
        default="US",
    )
    state = models.CharField(
        max_length=256,
        verbose_name="State/Territory/Province",
        blank=True,
    )

    dietary_restrictions = models.CharField(
        verbose_name="Food allergies, intolerances, or dietary restrictions",
        max_length=256,
        blank=True,
    )

    agreement = models.BooleanField(
        verbose_name="Agreement",
        help_text="I agree to act according to the <a href='/code-of-conduct'>"
                  "Code of Conduct</a>. I also agree with the "
                  "CopyleftConf <a href='/terms'>Terms and Conditions</a>.",
        blank=False,
        default=False,
    )