Changeset - 2a720bd46bb4
[Not reviewed]
0 5 2
Joel Addison - 3 years ago 2020-11-23 12:22:00
joel@addison.net.au
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.
7 files changed with 358 insertions and 275 deletions:
0 comments (0 inline, 0 general)
pinaxcon/registrasion/forms.py
Show inline comments
...
 
@@ -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
 
        }
pinaxcon/registrasion/management/commands/populate_inventory.py
Show inline comments
...
 
@@ -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.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.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()
 
        #     )
 

	
 
        # 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,
 
                )
 
        # 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,
 
        ])
 

	
 
        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,
 
        ])
 
        # 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,
 
        # ])
 

	
 
        # 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")
 

	
pinaxcon/registrasion/migrations/0001_initial.py
Show inline comments
...
 
@@ -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"),
 
)
 

	
 

	
pinaxcon/registrasion/migrations/0014_auto_20201123_2319.py
Show inline comments
 
new file 100644
 
# 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?'),
 
        ),
 
    ]
pinaxcon/registrasion/models.py
Show inline comments
...
 
@@ -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(
pinaxcon/settings.py
Show inline comments
...
 
@@ -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)
vendor/symposion/speakers/migrations/0009_auto_20201123_2256.py
Show inline comments
 
new file 100644
 
# 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'),
 
        ),
 
    ]
0 comments (0 inline, 0 general)