Tickets for LCA2021

Disable lots of inventory that does not exist for a virtual conf.
Add Swag Badge category and product.
Adjust attendee profile to hide irrelevant questions.
This commit is contained in:
Joel Addison 2020-11-23 22:22:00 +10:00
parent 38aebda92e
commit 2a720bd46b
7 changed files with 355 additions and 272 deletions

View file

@ -22,7 +22,13 @@ class ProfileForm(forms.ModelForm):
class Meta:
model = models.AttendeeProfile
exclude = ['attendee']
exclude = [
'attendee',
'of_legal_age',
'dietary_restrictions',
'children',
'future_conference',
]
widgets = {
'past_lca': forms.widgets.CheckboxSelectMultiple
}

View file

@ -81,59 +81,59 @@ class Command(BaseCommand):
render_type=inv.Category.RENDER_TYPE_CHECKBOX,
order=10,
)
self.penguin_dinner = self.find_or_make(
inv.Category,
("name",),
name="Penguin Dinner Ticket",
description="Tickets to our conference dinner on the evening of "
f"{settings.PENGUIN_DINNER_TICKET_DATE: %A %d %B}. "
"All attendees may purchase "
"seats at the dinner, even if a dinner ticket is not "
"included in your conference ticket price.",
required=False,
render_type=inv.Category.RENDER_TYPE_QUANTITY,
limit_per_user=10,
order=20,
)
self.speakers_dinner_ticket = self.find_or_make(
inv.Category,
("name",),
name="Speakers' Dinner Ticket",
description="Tickets to our exclusive Speakers' Dinner on the "
"evening of "
f"{settings.SPEAKER_DINNER_TICKET_DATE: %A %d %B}.",
required=False,
render_type=inv.Category.RENDER_TYPE_QUANTITY,
limit_per_user=1,
order=30,
)
self.pdns_category = self.find_or_make(
inv.Category,
("name",),
name="Professional Delegates Networking Session Ticket",
description="Tickets to our Professional Delegates Networking session. "
"This event will be held on the evening of "
f"{settings.PDNS_TICKET_DATE: %A %d %B} "
"and is restricted to Professional Ticket "
"holders, speakers, miniconf organisers, and invited "
"guests.",
required=False,
render_type=inv.Category.RENDER_TYPE_RADIO,
limit_per_user=1,
order=40,
)
self.t_shirt = self.find_or_make(
inv.Category,
("name",),
name="Shirt",
description="Commemorative conference shirts, featuring the "
f"linux.conf.au {settings.LCA_START.year} artwork. "
"View the <a href=\"/attend/shirts/\">"
"sizing guide</a>.",
required=False,
render_type=inv.Category.RENDER_TYPE_ITEM_QUANTITY,
order=50,
)
# self.penguin_dinner = self.find_or_make(
# inv.Category,
# ("name",),
# name="Penguin Dinner Ticket",
# description="Tickets to our conference dinner on the evening of "
# f"{settings.PENGUIN_DINNER_TICKET_DATE: %A %d %B}. "
# "All attendees may purchase "
# "seats at the dinner, even if a dinner ticket is not "
# "included in your conference ticket price.",
# required=False,
# render_type=inv.Category.RENDER_TYPE_QUANTITY,
# limit_per_user=10,
# order=20,
# )
# self.speakers_dinner_ticket = self.find_or_make(
# inv.Category,
# ("name",),
# name="Speakers' Dinner Ticket",
# description="Tickets to our exclusive Speakers' Dinner on the "
# "evening of "
# f"{settings.SPEAKER_DINNER_TICKET_DATE: %A %d %B}.",
# required=False,
# render_type=inv.Category.RENDER_TYPE_QUANTITY,
# limit_per_user=1,
# order=30,
# )
# self.pdns_category = self.find_or_make(
# inv.Category,
# ("name",),
# name="Professional Delegates Networking Session Ticket",
# description="Tickets to our Professional Delegates Networking session. "
# "This event will be held on the evening of "
# f"{settings.PDNS_TICKET_DATE: %A %d %B} "
# "and is restricted to Professional Ticket "
# "holders, speakers, miniconf organisers, and invited "
# "guests.",
# required=False,
# render_type=inv.Category.RENDER_TYPE_RADIO,
# limit_per_user=1,
# order=40,
# )
# self.t_shirt = self.find_or_make(
# inv.Category,
# ("name",),
# name="Shirt",
# description="Commemorative conference shirts, featuring the "
# f"linux.conf.au {settings.LCA_START.year} artwork. "
# "View the <a href=\"/attend/shirts/\">"
# "sizing guide</a>.",
# required=False,
# render_type=inv.Category.RENDER_TYPE_ITEM_QUANTITY,
# order=50,
# )
# self.accommodation = self.find_or_make(
# inv.Category,
# ("name",),
@ -153,6 +153,20 @@ class Command(BaseCommand):
# limit_per_user=1,
# order=50,
# )
self.badge_category = self.find_or_make(
inv.Category,
("name",),
name="Swag Badge",
description="We have a limited number of "
"<a href=\"/attend/shirts/\">Swag Badges</a> available "
"for attendees of linux.conf.au 2021. "
"They will be allocated on a first come, first serve basis. "
"Please note that they are only available to Australian "
"attendees due to shipping limitations.",
required=False,
render_type=inv.Category.RENDER_TYPE_CHECKBOX,
order=50,
)
self.extras = self.find_or_make(
inv.Category,
("name",),
@ -202,33 +216,15 @@ class Command(BaseCommand):
reservation_duration=hours(24),
order=30,
)
self.ticket_miniconfs_mt = self.find_or_make(
self.ticket_miniconf_only = self.find_or_make(
inv.Product,
("name", "category",),
category=self.ticket,
name=settings.MINICONF_MT.name,
price=settings.MINICONF_MT.regular_price,
name=settings.MINICONF_ONLY.name,
price=settings.MINICONF_ONLY.regular_price,
reservation_duration=hours(24),
order=40,
)
self.ticket_miniconfs_mon = self.find_or_make(
inv.Product,
("name", "category",),
category=self.ticket,
name=settings.MINICONF_M.name,
price=settings.MINICONF_M.regular_price,
reservation_duration=hours(24),
order=42,
)
self.ticket_miniconfs_tue = self.find_or_make(
inv.Product,
("name", "category",),
category=self.ticket,
name=settings.MINICONF_MT.name,
price=settings.MINICONF_MT.regular_price,
reservation_duration=hours(24),
order=44,
)
self.ticket_speaker = self.find_or_make(
inv.Product,
("name", "category",),
@ -287,42 +283,42 @@ class Command(BaseCommand):
limit_per_user=1,
)
for t in settings.PENGUIN_DINNER.tickets:
self.find_or_make(
inv.Product,
("name", "category",),
category=self.penguin_dinner,
name=t.name,
description=t.description,
price=t.price,
reservation_duration=t.reservation,
order=t.order()
)
# for t in settings.PENGUIN_DINNER.tickets:
# self.find_or_make(
# inv.Product,
# ("name", "category",),
# category=self.penguin_dinner,
# name=t.name,
# description=t.description,
# price=t.price,
# reservation_duration=t.reservation,
# order=t.order()
# )
for t in settings.SPEAKERS_DINNER.tickets:
self.find_or_make(
inv.Product,
("name", "category",),
category=self.speakers_dinner_ticket,
name=t.name,
description=t.description,
price=t.price,
reservation_duration=t.reservation,
order=t.order()
)
# for t in settings.SPEAKERS_DINNER.tickets:
# self.find_or_make(
# inv.Product,
# ("name", "category",),
# category=self.speakers_dinner_ticket,
# name=t.name,
# description=t.description,
# price=t.price,
# reservation_duration=t.reservation,
# order=t.order()
# )
# PDNS
self.pdns = self.find_or_make(
inv.Product,
("name", "category",),
category=self.pdns_category,
name="Conference Attendee",
price=Decimal("00.00"),
reservation_duration=hours(1),
limit_per_user=1,
order=10,
)
# self.pdns = self.find_or_make(
# inv.Product,
# ("name", "category",),
# category=self.pdns_category,
# name="Conference Attendee",
# price=Decimal("00.00"),
# reservation_duration=hours(1),
# limit_per_user=1,
# order=10,
# )
# # Accommodation
@ -340,6 +336,17 @@ class Command(BaseCommand):
# Extras
self.swag_badge = self.find_or_make(
inv.Product,
("name", "category",),
category=self.badge_category,
name="I would like a Swag Badge (if available)",
price=Decimal("0.00"),
reservation_duration=hours(24),
limit_per_user=1,
order=10,
)
self.carbon_offset = self.find_or_make(
inv.Product,
("name", "category",),
@ -347,44 +354,45 @@ class Command(BaseCommand):
name="Offset the carbon pollution generated by your attendance, "
"thanks to fifteen trees.",
price=Decimal("5.00"),
reservation_duration=hours(1),
reservation_duration=hours(24),
order=10,
)
# Shirts
ShirtGroup = namedtuple("ShirtGroup", ("prefix", "sizes"))
shirt_names = {
"straight": ShirtGroup(
"Straight Cut",
("S", "M", "L", "XL", "2XL", "3XL", "4XL", "5XL"),
),
"semi_fitted": ShirtGroup(
"Semi-Fitted",
("XS", "S", "M", "L", "XL", "2XL"),
),
"fitted": ShirtGroup(
"Fitted",
("XS", "S", "M", "L", "XL", "2XL"),
),
}
self.shirts = {}
order = 0
for name, group in shirt_names.items():
self.shirts[name] = {}
prefix = group.prefix
for size in group.sizes:
product_name = "%s %s" % (prefix, size)
order += 10
self.shirts[name][size] = self.find_or_make(
inv.Product,
("name", "category",),
name=product_name,
category=self.t_shirt,
price=settings.TSHIRT_PRICE,
reservation_duration=hours(1),
order=order,
)
# Shirts
# ShirtGroup = namedtuple("ShirtGroup", ("prefix", "sizes"))
# shirt_names = {
# "straight": ShirtGroup(
# "Straight Cut",
# ("S", "M", "L", "XL", "2XL", "3XL", "4XL", "5XL"),
# ),
# "semi_fitted": ShirtGroup(
# "Semi-Fitted",
# ("XS", "S", "M", "L", "XL", "2XL"),
# ),
# "fitted": ShirtGroup(
# "Fitted",
# ("XS", "S", "M", "L", "XL", "2XL"),
# ),
# }
# self.shirts = {}
# order = 0
# for name, group in shirt_names.items():
# self.shirts[name] = {}
# prefix = group.prefix
# for size in group.sizes:
# product_name = "%s %s" % (prefix, size)
# order += 10
# self.shirts[name][size] = self.find_or_make(
# inv.Product,
# ("name", "category",),
# name=product_name,
# category=self.t_shirt,
# price=settings.TSHIRT_PRICE,
# reservation_duration=hours(1),
# order=order,
# )
def populate_restrictions(self):
@ -399,9 +407,6 @@ class Command(BaseCommand):
hide_voucher_products.products.set([
self.ticket_media,
self.ticket_sponsor,
self.ticket_miniconfs_mt,
self.ticket_miniconfs_mon,
self.ticket_miniconfs_tue,
])
hide_all_tickets = self.find_or_make(
@ -416,6 +421,7 @@ class Command(BaseCommand):
self.ticket_professional,
self.ticket_hobbyist,
self.ticket_student,
self.ticket_miniconf_only,
])
# Set limits.
@ -497,38 +503,38 @@ class Command(BaseCommand):
self.ticket_speaker,
])
penguin_dinner_cap = self.find_or_make(
cond.TimeOrStockLimitFlag,
("description", ),
description="Penguin dinner ticket cap",
condition=cond.FlagBase.DISABLE_IF_FALSE,
limit=900,
)
penguin_dinner_cap.categories.set([
self.penguin_dinner,
])
# penguin_dinner_cap = self.find_or_make(
# cond.TimeOrStockLimitFlag,
# ("description", ),
# description="Penguin dinner ticket cap",
# condition=cond.FlagBase.DISABLE_IF_FALSE,
# limit=900,
# )
# penguin_dinner_cap.categories.set([
# self.penguin_dinner,
# ])
speakers_dinner_cap = self.find_or_make(
cond.TimeOrStockLimitFlag,
("description", ),
description="Speakers dinner ticket cap",
condition=cond.FlagBase.DISABLE_IF_FALSE,
limit=135,
)
speakers_dinner_cap.categories.set([
self.speakers_dinner_ticket,
])
# speakers_dinner_cap = self.find_or_make(
# cond.TimeOrStockLimitFlag,
# ("description", ),
# description="Speakers dinner ticket cap",
# condition=cond.FlagBase.DISABLE_IF_FALSE,
# limit=135,
# )
# speakers_dinner_cap.categories.set([
# self.speakers_dinner_ticket,
# ])
pdns_cap = self.find_or_make(
cond.TimeOrStockLimitFlag,
("description", ),
description="PDNS ticket cap",
condition=cond.FlagBase.DISABLE_IF_FALSE,
limit=400,
)
pdns_cap.categories.set([
self.pdns_category,
])
# pdns_cap = self.find_or_make(
# cond.TimeOrStockLimitFlag,
# ("description", ),
# description="PDNS ticket cap",
# condition=cond.FlagBase.DISABLE_IF_FALSE,
# limit=400,
# )
# pdns_cap.categories.set([
# self.pdns_category,
# ])
# Volunteer tickets are for volunteers only
volunteers = self.find_or_make(
@ -567,57 +573,57 @@ class Command(BaseCommand):
speaker_tickets.products.set([self.ticket_speaker, ])
# Speaker dinner tickets are for primary speakers only
speaker_dinner_tickets = self.find_or_make(
cond.SpeakerFlag,
("description", ),
description="Speaker dinner tickets",
condition=cond.FlagBase.ENABLE_IF_TRUE,
is_presenter=True,
is_copresenter=False,
)
speaker_dinner_tickets.proposal_kind.set(self.main_conference_proposals)
speaker_dinner_tickets.categories.set([self.speakers_dinner_ticket, ])
# speaker_dinner_tickets = self.find_or_make(
# cond.SpeakerFlag,
# ("description", ),
# description="Speaker dinner tickets",
# condition=cond.FlagBase.ENABLE_IF_TRUE,
# is_presenter=True,
# is_copresenter=False,
# )
# speaker_dinner_tickets.proposal_kind.set(self.main_conference_proposals)
# speaker_dinner_tickets.categories.set([self.speakers_dinner_ticket, ])
# PDNS tickets are complicated.
# They can be enabled by tickets
pdns_by_ticket = self.find_or_make(
cond.ProductFlag,
("description", ),
description="PDNS available by ticket",
condition=cond.FlagBase.ENABLE_IF_TRUE,
)
pdns_by_ticket.enabling_products.set([
self.ticket_professional,
self.ticket_contributor,
self.ticket_media,
self.ticket_sponsor,
])
pdns_by_ticket.categories.set([self.pdns_category, ])
# pdns_by_ticket = self.find_or_make(
# cond.ProductFlag,
# ("description", ),
# description="PDNS available by ticket",
# condition=cond.FlagBase.ENABLE_IF_TRUE,
# )
# pdns_by_ticket.enabling_products.set([
# self.ticket_professional,
# self.ticket_contributor,
# self.ticket_media,
# self.ticket_sponsor,
# ])
# pdns_by_ticket.categories.set([self.pdns_category, ])
# They are available to speakers
pdns_by_speaker = self.find_or_make(
cond.SpeakerFlag,
("description", ),
description="PDNS available to speakers",
condition=cond.FlagBase.ENABLE_IF_TRUE,
is_presenter=True,
is_copresenter=True,
# pdns_by_speaker = self.find_or_make(
# cond.SpeakerFlag,
# ("description", ),
# description="PDNS available to speakers",
# condition=cond.FlagBase.ENABLE_IF_TRUE,
# is_presenter=True,
# is_copresenter=True,
)
pdns_by_speaker.proposal_kind.set(self.main_conference_proposals)
pdns_by_speaker.categories.set([self.pdns_category, ])
# )
# pdns_by_speaker.proposal_kind.set(self.main_conference_proposals)
# pdns_by_speaker.categories.set([self.pdns_category, ])
# They are available to staff
pdns_by_staff = self.find_or_make(
cond.GroupMemberFlag,
("description", ),
description="PDNS available to staff",
condition=cond.FlagBase.ENABLE_IF_TRUE,
)
pdns_by_staff.group.set([
self.group_team,
])
pdns_by_staff.categories.set([self.pdns_category, ])
# pdns_by_staff = self.find_or_make(
# cond.GroupMemberFlag,
# ("description", ),
# description="PDNS available to staff",
# condition=cond.FlagBase.ENABLE_IF_TRUE,
# )
# pdns_by_staff.group.set([
# self.group_team,
# ])
# pdns_by_staff.categories.set([self.pdns_category, ])
# Don't allow people to get anything if they don't have a ticket first
needs_a_ticket = self.find_or_make(
@ -629,9 +635,9 @@ class Command(BaseCommand):
)
needs_a_ticket.categories.set([
self.extras,
self.t_shirt,
self.penguin_dinner,
self.pdns_category,
# self.t_shirt,
# self.penguin_dinner,
# self.pdns_category,
])
# Require attendees to accept the T&Cs and Code of Conduct
needs_agreement = self.find_or_make(
@ -643,10 +649,10 @@ class Command(BaseCommand):
)
needs_agreement.categories.set([
self.extras,
self.t_shirt,
self.penguin_dinner,
self.pdns_category,
self.speakers_dinner_ticket,
# self.t_shirt,
# self.penguin_dinner,
# self.pdns_category,
# self.speakers_dinner_ticket,
])
def populate_discounts(self):
@ -679,30 +685,30 @@ class Command(BaseCommand):
)
# Early Bird Discount (general public)
early_bird_hobbyist_discount = self.find_or_make(
cond.TimeOrStockLimitDiscount,
("description", ),
description="Early Bird Discount - Hobbyist",
end_time=settings.EARLY_BIRD_DEADLINE,
limit=150, # Across all users
)
self.find_or_make(
cond.DiscountForProduct,
("discount", "product"),
discount=early_bird_hobbyist_discount,
product=self.ticket_hobbyist,
price=settings.HOBBYIST.earlybird_discount(),
quantity=1, # Per user
)
# early_bird_hobbyist_discount = self.find_or_make(
# cond.TimeOrStockLimitDiscount,
# ("description", ),
# description="Early Bird Discount - Hobbyist",
# end_time=settings.EARLY_BIRD_DEADLINE,
# limit=150, # Across all users
# )
# self.find_or_make(
# cond.DiscountForProduct,
# ("discount", "product"),
# discount=early_bird_hobbyist_discount,
# product=self.ticket_hobbyist,
# price=settings.HOBBYIST.earlybird_discount(),
# quantity=1, # Per user
# )
early_bird = self.find_or_make(
cond.TimeOrStockLimitDiscount,
("description", ),
description="Early Bird Discount - Professional",
end_time=settings.EARLY_BIRD_DEADLINE,
limit=200, # Across professionals and fairy sponsors
)
add_early_birds(early_bird)
# early_bird = self.find_or_make(
# cond.TimeOrStockLimitDiscount,
# ("description", ),
# description="Early Bird Discount - Professional",
# end_time=settings.EARLY_BIRD_DEADLINE,
# limit=200, # Across professionals and fairy sponsors
# )
# add_early_birds(early_bird)
# Early bird rates for speakers
speaker_ticket_discounts = self.find_or_make(
@ -726,7 +732,7 @@ class Command(BaseCommand):
is_copresenter=False,
)
primary_speaker.proposal_kind.set(self.main_conference_proposals)
free_category(primary_speaker, self.speakers_dinner_ticket)
# free_category(primary_speaker, self.speakers_dinner_ticket)
# Professional-Like ticket inclusions
ticket_prolike_inclusions = self.find_or_make(
@ -741,8 +747,8 @@ class Command(BaseCommand):
self.ticket_sponsor,
self.ticket_speaker,
])
free_category(ticket_prolike_inclusions, self.penguin_dinner)
free_category(ticket_prolike_inclusions, self.t_shirt)
# free_category(ticket_prolike_inclusions, self.penguin_dinner)
# free_category(ticket_prolike_inclusions, self.t_shirt)
# Hobbyist ticket inclusions
ticket_hobbyist_inclusions = self.find_or_make(
@ -753,7 +759,7 @@ class Command(BaseCommand):
ticket_hobbyist_inclusions.enabling_products.set([
self.ticket_hobbyist,
])
free_category(ticket_hobbyist_inclusions, self.t_shirt)
# free_category(ticket_hobbyist_inclusions, self.t_shirt)
# Student ticket inclusions
ticket_student_inclusions = self.find_or_make(
@ -764,7 +770,7 @@ class Command(BaseCommand):
ticket_student_inclusions.enabling_products.set([
self.ticket_student,
])
free_category(ticket_student_inclusions, self.t_shirt)
# free_category(ticket_student_inclusions, self.t_shirt)
# Team ticket inclusions
ticket_staff_inclusions = self.find_or_make(
@ -775,19 +781,19 @@ class Command(BaseCommand):
ticket_staff_inclusions.enabling_products.set([
self.ticket_team,
])
free_category(ticket_staff_inclusions, self.penguin_dinner)
# free_category(ticket_staff_inclusions, self.penguin_dinner)
# Team & volunteer shirts, regardless of ticket type
staff_t_shirts = self.find_or_make(
cond.GroupMemberDiscount,
("description", ),
description="Shirts complimentary for staff and volunteers",
)
staff_t_shirts.group.set([
self.group_team,
self.group_volunteers,
])
free_category(staff_t_shirts, self.t_shirt, quantity=5)
# staff_t_shirts = self.find_or_make(
# cond.GroupMemberDiscount,
# ("description", ),
# description="Shirts complimentary for staff and volunteers",
# )
# staff_t_shirts.group.set([
# self.group_team,
# self.group_volunteers,
# ])
# free_category(staff_t_shirts, self.t_shirt, quantity=5)
print(f"{self.count} categories found/made")

View file

@ -26,6 +26,9 @@ _PAST_EVENTS = (
(2015, "2015 Auckland"),
(2016, "2016 Geelong"),
(2017, "2017 Hobart"),
(2018, "2018 Sydney"),
(2019, "2019 Christchurch"),
(2020, "2020 Gold Coast"),
)

View file

@ -0,0 +1,43 @@
# Generated by Django 2.2.17 on 2020-11-23 12:19
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('pinaxcon_registrasion', '0013_auto_20201008_2036'),
]
operations = [
migrations.AlterField(
model_name='attendeeprofile',
name='address_line_1',
field=models.CharField(blank=True, help_text='This address, if provided, will appear on your invoices. It is also where we will ship your Swag Badge if you are allocated one.', max_length=1024, verbose_name='Address line 1'),
),
migrations.AlterField(
model_name='attendeeprofile',
name='future_conference',
field=models.BooleanField(blank=True, default=False, help_text='Select to have your login details made available to future Linux Australia conferences who share the same Single Sign On system.', verbose_name='Reuse my login for future Linux Australia conferences?'),
),
migrations.AlterField(
model_name='attendeeprofile',
name='lca_announce',
field=models.BooleanField(blank=True, help_text='Select to be subscribed to the low-traffic lca-announce mailing list', verbose_name='Subscribe to lca-announce list'),
),
migrations.AlterField(
model_name='attendeeprofile',
name='lca_chat',
field=models.BooleanField(blank=True, help_text='lca-chat is a high-traffic mailing list used by attendees during the week of the conference for general discussion.', verbose_name='Subscribe to the LCA chat list'),
),
migrations.AlterField(
model_name='attendeeprofile',
name='linux_australia',
field=models.BooleanField(blank=True, help_text="Select this field to register for free <a href='http://www.linux.org.au/'>Linux Australia</a> membership.", verbose_name='Linux Australia membership'),
),
migrations.AlterField(
model_name='attendeeprofile',
name='of_legal_age',
field=models.BooleanField(blank=True, default=False, help_text='Being under 18 will not stop you from attending the conference. We need to know whether you are over 18 to allow us to cater for you at venues that serve alcohol.', verbose_name='Are you over 18?'),
),
]

View file

@ -114,7 +114,9 @@ class AttendeeProfile(rego.AttendeeProfileBase):
address_line_1 = models.CharField(
verbose_name="Address line 1",
help_text="This address, if provided, will appear on your invoices.",
help_text="This address, if provided, will appear on your invoices. "
"It is also where we will ship your Swag Badge "
"if you are allocated one.",
max_length=1024,
blank=True,
)
@ -149,6 +151,8 @@ class AttendeeProfile(rego.AttendeeProfileBase):
help_text="Being under 18 will not stop you from attending the "
"conference. We need to know whether you are over 18 to "
"allow us to cater for you at venues that serve alcohol.",
blank=True, # LCA2021 - not needed.
default=False,
)
dietary_restrictions = models.CharField(
verbose_name="Food allergies, intolerances, or dietary restrictions",
@ -208,6 +212,7 @@ class AttendeeProfile(rego.AttendeeProfileBase):
"Linux Australia conferences who share the same Single Sign "
"On system.",
blank=True,
default=False,
)
past_lca = models.ManyToManyField(

View file

@ -523,14 +523,11 @@ PDNS_TICKET_DATE = date(2021, 1, 24)
TSHIRT_PRICE = Decimal("25.00")
CONTRIBUTOR = Ticket("Contributor", Decimal("1999.00"), Decimal("1849.00"))
PROFESSIONAL = Ticket("Professional", Decimal("1099.00"), Decimal("949.00"))
HOBBYIST = Ticket("Hobbyist", Decimal("549.00"), Decimal("399.00"))
STUDENT = Ticket("Student", Decimal("199.00"), None)
MINICONF_MT = Ticket("Monday and Tuesday Only", Decimal("198.00"), None)
MINICONF_M = Ticket("Monday Only", Decimal("99.00"), None)
MINICONF_T = Ticket("Tuesday Only", Decimal("99.00"), None)
CONTRIBUTOR = Ticket("Contributor", Decimal("300.00"), Decimal("250.00"))
PROFESSIONAL = Ticket("Professional", Decimal("125.00"), Decimal("100.00"))
HOBBYIST = Ticket("Hobbyist", Decimal("70.00"), None)
STUDENT = Ticket("Student", Decimal("30.00"), None)
MINICONF_ONLY = Ticket("Miniconf Only", Decimal("25.00"), None)
MEDIA = Ticket("Media", Decimal("0.0"), None)
SPEAKER = Ticket("Speaker", Decimal("0.0"), None)

View file

@ -0,0 +1,23 @@
# Generated by Django 2.2.17 on 2020-11-23 11:56
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('symposion_speakers', '0008_auto_20190624_2328'),
]
operations = [
migrations.AlterField(
model_name='speaker',
name='accommodation_assistance',
field=models.BooleanField(blank=True, default=False, help_text='Check this box if you require us to provide you with accommodation in order to present your proposed sessions.', verbose_name='Accommodation assistance required'),
),
migrations.AlterField(
model_name='speaker',
name='travel_assistance',
field=models.BooleanField(blank=True, default=False, help_text='Check this box if you require assistance to travel to linux.conf.au in order to present your proposed sessions.', verbose_name='Travel assistance required'),
),
]