From ca6edb87069d4b6d398309d21367b22f05765948 2017-10-03 00:23:05 From: Christopher Neugebauer Date: 2017-10-03 00:23:05 Subject: [PATCH] Amends Registrasion user profile --- diff --git a/pinaxcon/registrasion/admin.py b/pinaxcon/registrasion/admin.py index 1229ed9b71e38898bd3d8a09d5a72cc6d75d8151..831b3e78664801abbec3b75b5b236657ba1df0e9 100644 --- a/pinaxcon/registrasion/admin.py +++ b/pinaxcon/registrasion/admin.py @@ -7,7 +7,3 @@ from django.utils.translation import ugettext_lazy as _ class UserProfileAdmin(admin.ModelAdmin): model = models.AttendeeProfile list_display = ("name", "company", "name_per_invoice") - -@admin.register(models.DynamicValues) -class DynamicValuesAdmin(admin.ModelAdmin): - pass diff --git a/pinaxcon/registrasion/migrations/0003_auto_20171002_1719.py b/pinaxcon/registrasion/migrations/0003_auto_20171002_1719.py new file mode 100644 index 0000000000000000000000000000000000000000..84280d652f4efdb03fbc530ff620deaa2ccd5b25 --- /dev/null +++ b/pinaxcon/registrasion/migrations/0003_auto_20171002_1719.py @@ -0,0 +1,103 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.5 on 2017-10-03 00:19 +from __future__ import unicode_literals + +from django.db import migrations, models +import django_countries.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ('pinaxcon_registrasion', '0002_auto_20161005_1823'), + ] + + operations = [ + migrations.RemoveField( + model_name='attendeeprofile', + name='db_defined_values', + ), + migrations.RemoveField( + model_name='attendeeprofile', + name='dietary_requirements', + ), + migrations.RemoveField( + model_name='attendeeprofile', + name='free_text_1', + ), + migrations.RemoveField( + model_name='attendeeprofile', + name='free_text_2', + ), + migrations.RemoveField( + model_name='attendeeprofile', + name='of_legal_age', + ), + migrations.AddField( + model_name='attendeeprofile', + name='address_line_1', + field=models.CharField(blank=True, help_text=b'This address, if provided, will appear on your receipt.', max_length=1024, verbose_name=b'Address line 1'), + ), + migrations.AddField( + model_name='attendeeprofile', + name='address_line_2', + field=models.CharField(blank=True, max_length=1024, verbose_name=b'Address line 2'), + ), + migrations.AddField( + model_name='attendeeprofile', + name='address_postcode', + field=models.CharField(blank=True, max_length=1024, verbose_name=b'Postal/Zip code'), + ), + migrations.AddField( + model_name='attendeeprofile', + name='address_suburb', + field=models.CharField(blank=True, max_length=1024, verbose_name=b'City/Town/Suburb'), + ), + migrations.AddField( + model_name='attendeeprofile', + name='country', + field=django_countries.fields.CountryField(default=b'US', max_length=2), + ), + migrations.AddField( + model_name='attendeeprofile', + name='dietary_restrictions', + field=models.CharField(blank=True, max_length=256, verbose_name=b'Food allergies, intolerances, or dietary restrictions'), + ), + migrations.AddField( + model_name='attendeeprofile', + name='newsletter', + field=models.BooleanField(default=False, help_text=b'Select to be subscribed to the low-volume North Bay Python announcements newsletter', verbose_name=b'Subscribe to North Bay Python newsletter'), + preserve_default=False, + ), + migrations.AddField( + model_name='attendeeprofile', + name='state', + field=models.CharField(blank=True, max_length=256, verbose_name=b'State/Territory/Province'), + ), + migrations.AlterField( + model_name='attendeeprofile', + name='accessibility_requirements', + field=models.CharField(blank=True, max_length=256, verbose_name=b'Accessibility-related requirements'), + ), + migrations.AlterField( + model_name='attendeeprofile', + name='company', + field=models.CharField(blank=True, help_text=b"The name of your company, as you'd like it on your badge and receipt", max_length=64), + ), + migrations.AlterField( + model_name='attendeeprofile', + name='gender', + field=models.CharField(blank=True, help_text=b'Gender data will only be used for demographic purposes.', max_length=64), + ), + migrations.AlterField( + model_name='attendeeprofile', + name='name_per_invoice', + field=models.CharField(blank=True, help_text=b"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.", max_length=256, verbose_name=b'Your legal name (for your receipt)'), + ), + migrations.DeleteModel( + name='DemoPayment', + ), + migrations.DeleteModel( + name='DynamicValues', + ), + ] diff --git a/pinaxcon/registrasion/models.py b/pinaxcon/registrasion/models.py index 77952fe122108d36235260de45b4e7a2b68a362a..255370e47b4c3f254af7ca3038be68b6864c74a2 100644 --- a/pinaxcon/registrasion/models.py +++ b/pinaxcon/registrasion/models.py @@ -1,18 +1,9 @@ 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 -@python_2_unicode_compatible -class DynamicValues(models.Model): - - name = models.CharField(max_length=64) - value = models.IntegerField() - - def __str__(self): - return "%s - %d" % (self.name, self.value) - - class AttendeeProfile(rego.AttendeeProfileBase): @classmethod @@ -22,11 +13,49 @@ class AttendeeProfile(rego.AttendeeProfileBase): return "name" def invoice_recipient(self): + + lines = [ + self.name_per_invoice, + ] + if self.company: - base = "\n%(company)s\nAttention: %(name_per_invoice)s" - else: - base = "%(name_per_invoice)s" - return base % self.__dict__ + 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 errors: + raise ValidationError(dict(errors)) def save(self): if not self.name_per_invoice: @@ -42,56 +71,68 @@ class AttendeeProfile(rego.AttendeeProfileBase): company = models.CharField( max_length=64, - help_text="The name of your company, as you'd like it on your badge", - blank=True, - ) - free_text_1 = models.CharField( - max_length=64, - verbose_name="Free text line 1", - help_text="A line of free text that will appear on your badge. Use " - "this for your Twitter handle, IRC nick, your preferred " - "pronouns or anything else you'd like people to see on " - "your badge.", - blank=True, - ) - free_text_2 = models.CharField( - max_length=64, - verbose_name="Free text line 2", + help_text="The name of your company, as you'd like it on your badge and receipt", blank=True, ) - # Other important Information name_per_invoice = models.CharField( - verbose_name="Your legal name (for invoicing purposes)", - max_length=64, + 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 invoice. Otherwise, " + "fill this in, and we'll put it on your receipt. Otherwise, " "leave it blank.", blank=True, ) - of_legal_age = models.BooleanField( - default=False, - verbose_name="18+?", + + 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, ) - dietary_requirements = models.CharField( + 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, ) accessibility_requirements = models.CharField( + verbose_name="Accessibility-related requirements", max_length=256, blank=True, ) gender = models.CharField( + help_text="Gender data will only be used for demographic purposes.", max_length=64, blank=True, ) - db_defined_values = models.ManyToManyField( - DynamicValues - ) - - -class DemoPayment(rego.PaymentBase): - ''' A subclass of PaymentBase for use in our demo payments function. ''' - pass # No custom features here, but yours could be here. + newsletter = models.BooleanField( + verbose_name="Subscribe to North Bay Python newsletter", + help_text="Select to be subscribed to the low-volume North Bay Python " + "announcements newsletter", + blank=True, + ) diff --git a/pinaxcon/templates/dashboard.html b/pinaxcon/templates/dashboard.html index 6e337f517097635e6e7a31b8cce1a41305bcc5e8..7696abb8b708e194baf3d6d403fed46825c25718 100644 --- a/pinaxcon/templates/dashboard.html +++ b/pinaxcon/templates/dashboard.html @@ -30,6 +30,8 @@ + {% include "registrasion/dashboard_widget.html" %} +