Changeset - ed2753d28470
[Not reviewed]
0 2 0
James Polley - 7 years ago 2017-09-24 09:30:40
jp@jamezpolley.com
Update inventory for 2018
2 files changed with 160 insertions and 77 deletions:
0 comments (0 inline, 0 general)
make_dev_container.sh
Show inline comments
...
 
@@ -14,7 +14,7 @@ docker exec symposion ./manage.py create_review_permissions
 
docker exec symposion ./manage.py loaddata ./fixtures/miniconf-fixtures/*.json
 
if [ -e ./symposion-fixtures ]; then
 
    pushd ./symposion-fixtures
 
    ./load_data_local.sh
 
    ./load_chunks_local.sh
 
    popd
 
else
 
    docker exec -it symposion ./manage.py createsuperuser --username root --email root@example.com
pinaxcon/registrasion/management/commands/populate_inventory.py
Show inline comments
...
 
@@ -46,6 +46,11 @@ class Command(BaseCommand):
 
            ("name", ),
 
            name="Can see unpublished products",
 
        )
 
        self.group_prepurchase = self.find_or_make(
 
            Group,
 
            ("name", ),
 
            name="Pre-purchase",
 
        )
 

	
 
    def populate_inventory(self):
 
        # Categories
...
 
@@ -56,7 +61,7 @@ class Command(BaseCommand):
 
            name="Ticket",
 
            description="Each type of ticket has different included products. "
 
                        "For details of what products are included, see our "
 
                        "[LINK]registration details page.[/LINK]",
 
                        "<a href='https://lca2018.org/attend'>registration page</a>",
 
            required=True,
 
            render_type=inv.Category.RENDER_TYPE_RADIO,
 
            limit_per_user=1,
...
 
@@ -67,7 +72,7 @@ class Command(BaseCommand):
 
            ("name",),
 
            name="Penguin Dinner Ticket",
 
            description="Tickets to our conference dinner on the evening of "
 
                        "Wednesday 18 January. All attendees may purchase "
 
                        "Wednesday 24 January. All attendees may purchase "
 
                        "seats at the dinner, even if a dinner ticket is not "
 
                        "included in your conference ticket price.",
 
            required=False,
...
 
@@ -80,20 +85,20 @@ class Command(BaseCommand):
 
            ("name",),
 
            name="Speakers' Dinner Ticket",
 
            description="Tickets to our exclusive Speakers' Dinner on the "
 
                        "evening of Tuesday 17 January. You may purchase up "
 
                        "to 5 tickets in total, for significant others, and "
 
                        "evening of Tuesday 23 January. You may purchase up "
 
                        "to 5 tickets in total, for significant others and "
 
                        "family members.",
 
            required=False,
 
            render_type=inv.Category.RENDER_TYPE_QUANTITY,
 
            limit_per_user=5,
 
            order=20,
 
        )
 
        self.pdns_breakfast = self.find_or_make(
 
        self.pdns_category = self.find_or_make(
 
            inv.Category,
 
            ("name",),
 
            name="Opening Reception Breakfast Ticket",
 
            description="Tickets to our Opening Reception Breakfast. This "
 
                        "event will be held on the morning of Monday 16 "
 
            name="Professional Delegates Networking Session Ticket",
 
            description="Tickets to our Professional Delegates Networking session."
 
                        "This event will be held on the evening of Thursday 25th "
 
                        "January, and is restricted to Professional Ticket "
 
                        "holders, speakers, miniconf organisers, and invited "
 
                        "guests.",
...
 
@@ -106,31 +111,31 @@ class Command(BaseCommand):
 
            inv.Category,
 
            ("name",),
 
            name="T-Shirt",
 
            description="Commemorative conference t-shirts, featuring secret "
 
                        "linux.conf.au 2017 artwork.",
 
            description="Commemorative conference t-shirts, featuring the"
 
                        "linux.conf.au 2018 artwork.",
 
            required=False,
 
            render_type=inv.Category.RENDER_TYPE_ITEM_QUANTITY,
 
            order=40,
 
        )
 
        self.accommodation = self.find_or_make(
 
            inv.Category,
 
            ("name",),
 
            name="Accommodation at University of Tasmania",
 
            description="Accommodation at the University of Tasmania colleges "
 
                        "and apartments. You can come back and book your "
 
                        "accommodation at a later date, provided rooms remain "
 
                        "available. Rooms may only be booked from Sunday 15 "
 
                        "January--Saturday 21 January. If you wish to stay "
 
                        "for only a part of the 6-day period, you must book "
 
                        "accommodation for the full 6-day period. Rooms at "
 
                        "other hotels, including Wrest Point can be booked "
 
                        "elsewhere. For full details, see [LINK]our "
 
                        "accommodation page.[/LINK]",
 
            required=False,
 
            render_type=inv.Category.RENDER_TYPE_RADIO,
 
            limit_per_user=1,
 
            order=50,
 
        )
 
        # self.accommodation = self.find_or_make(
 
        #     inv.Category,
 
        #     ("name",),
 
        #     name="Accommodation at University of Tasmania",
 
        #     description="Accommodation at the University of Tasmania colleges "
 
        #                 "and apartments. You can come back and book your "
 
        #                 "accommodation at a later date, provided rooms remain "
 
        #                 "available. Rooms may only be booked from Sunday 15 "
 
        #                 "January--Saturday 21 January. If you wish to stay "
 
        #                 "for only a part of the 6-day period, you must book "
 
        #                 "accommodation for the full 6-day period. Rooms at "
 
        #                 "other hotels, including Wrest Point can be booked "
 
        #                 "elsewhere. For full details, see [LINK]our "
 
        #                 "accommodation page.[/LINK]",
 
        #     required=False,
 
        #     render_type=inv.Category.RENDER_TYPE_RADIO,
 
        #     limit_per_user=1,
 
        #     order=50,
 
        # )
 
        self.extras = self.find_or_make(
 
            inv.Category,
 
            ("name",),
...
 
@@ -176,7 +181,7 @@ class Command(BaseCommand):
 
            ("name", "category",),
 
            category=self.ticket,
 
            name="Student",
 
            price=Decimal("160.00"),
 
            price=Decimal("149.00"),
 
            reservation_duration=hours(24),
 
            order=30,
 
        )
...
 
@@ -270,7 +275,7 @@ class Command(BaseCommand):
 
            ("name", "category",),
 
            category=self.penguin_dinner,
 
            name="Child",
 
            description="Includes a child's meal and soft drink service.",
 
            description="Children 14 and under. Includes a child's meal and soft drink service.",
 
            price=Decimal("50.00"),
 
            reservation_duration=hours(1),
 
            order=20,
...
 
@@ -303,7 +308,7 @@ class Command(BaseCommand):
 
            ("name", "category",),
 
            category=self.speakers_dinner_ticket,
 
            name="Child",
 
            description="Includes a child's meal and soft drink service.",
 
            description="Children 14 and under. Includes a child's meal and soft drink service.",
 
            price=Decimal("60.00"),
 
            reservation_duration=hours(1),
 
            order=20,
...
 
@@ -320,12 +325,12 @@ class Command(BaseCommand):
 
            order=30,
 
        )
 

	
 
        # PDNS breakfast
 
        # PDNS
 

	
 
        self.pdns = self.find_or_make(
 
            inv.Product,
 
            ("name", "category",),
 
            category=self.pdns_breakfast,
 
            category=self.pdns_category,
 
            name="Conference Attendee",
 
            price=Decimal("00.00"),
 
            reservation_duration=hours(1),
...
 
@@ -333,19 +338,19 @@ class Command(BaseCommand):
 
            order=10,
 
        )
 

	
 
        # Accommodation
 
        # # Accommodation
 

	
 
        self.accommodation_week = self.find_or_make(
 
            inv.Product,
 
            ("name", "category",),
 
            category=self.accommodation,
 
            name="Single Bedroom with Shared Bathrooms, includes full "
 
                 "breakfast, Sunday 15 January 2017--Saturday 21 January 2017",
 
            price=Decimal("396.00"),
 
            reservation_duration=hours(24),
 
            limit_per_user=1,
 
            order=10,
 
        )
 
        # self.accommodation_week = self.find_or_make(
 
        #     inv.Product,
 
        #     ("name", "category",),
 
        #     category=self.accommodation,
 
        #     name="Single Bedroom with Shared Bathrooms, includes full "
 
        #          "breakfast, Sunday 15 January 2017--Saturday 21 January 2017",
 
        #     price=Decimal("396.00"),
 
        #     reservation_duration=hours(24),
 
        #     limit_per_user=1,
 
        #     order=10,
 
        # )
 

	
 
        # Extras
 

	
...
 
@@ -367,14 +372,10 @@ class Command(BaseCommand):
 
                "Men's/Straight Cut Size",
 
                ("S", "M", "L", "XL", "2XL", "3XL", "5XL"),
 
            ),
 
            "womens_classic": ShirtGroup(
 
            "womens": ShirtGroup(
 
                "Women's Classic Fit",
 
                ("XS", "S", "M", "L", "XL", "2XL"),
 
            ),
 
            "womens_semi": ShirtGroup(
 
                "Women's Semi-Fitted",
 
                ("S", "M", "L", "XL", "2XL"),
 
            ),
 
        }
 

	
 
        self.shirts = {}
...
 
@@ -408,6 +409,23 @@ 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(
 
            cond.GroupMemberFlag,
 
            ("description", ),
 
            description="Can pre-purchase tickets",
 
            condition=cond.FlagBase.ENABLE_IF_TRUE,
 
        )
 
        hide_all_tickets.group.set([self.group_prepurchase])
 
        hide_all_tickets.products.set([
 
            self.ticket_fairy,
 
            self.ticket_professional,
 
            self.ticket_hobbyist,
 
            self.ticket_student,
 
        ])
 

	
 
        # Set limits.
...
 
@@ -416,7 +434,7 @@ class Command(BaseCommand):
 
            ("description", ),
 
            description="Public ticket cap",
 
            condition=cond.FlagBase.DISABLE_IF_FALSE,
 
            limit=450,
 
            limit=600,
 
        )
 
        public_ticket_cap.products.set([
 
            self.ticket_fairy,
...
 
@@ -425,27 +443,71 @@ class Command(BaseCommand):
 
            self.ticket_student,
 
        ])
 

	
 
        non_public_ticket_cap = self.find_or_make(
 
        student_ticket_cap = self.find_or_make(
 
            cond.TimeOrStockLimitFlag,
 
            ("description", ),
 
            description="Non-public ticket cap",
 
            description="Student ticket cap",
 
            condition=cond.FlagBase.DISABLE_IF_FALSE,
 
            limit=450,
 
            limit=100,
 
        )
 
        non_public_ticket_cap.products.set([
 
            self.ticket_speaker,
 
        public_ticket_cap.products.set([
 
            self.ticket_fairy,
 
            self.ticket_professional,
 
            self.ticket_hobbyist,
 
            self.ticket_student,
 
        ])
 

	
 
        sponsor_ticket_cap = self.find_or_make(
 
            cond.TimeOrStockLimitFlag,
 
            ("description", ),
 
            description="Reserved for sponsors",
 
            condition=cond.FlagBase.DISABLE_IF_FALSE,
 
            limit=70,
 
        )
 
        sponsor_ticket_cap.products.set([
 
            self.ticket_sponsor,
 
            self.ticket_media,
 
        ])
 

	
 
        volunteer_ticket_cap = self.find_or_make(
 
            cond.TimeOrStockLimitFlag,
 
            ("description", ),
 
            description="Reserrved for volunteers and organizers",
 
            condition=cond.FlagBase.DISABLE_IF_FALSE,
 
            limit=62,
 
        )
 
        volunteer_ticket_cap.products.set([
 
            self.ticket_team,
 
            self.ticket_volunteer,
 
        ])
 

	
 
        media_ticket_cap = self.find_or_make(
 
            cond.TimeOrStockLimitFlag,
 
            ("description", ),
 
            description="Reserved for media",
 
            condition=cond.FlagBase.DISABLE_IF_FALSE,
 
            limit=10,
 
        )
 
        media_ticket_cap.products.set([
 
            self.ticket_media,
 
        ])
 

	
 
        speaker_ticket_cap = self.find_or_make(
 
            cond.TimeOrStockLimitFlag,
 
            ("description", ),
 
            description="Reserved for speakers (and miniconf organisers)",
 
            condition=cond.FlagBase.DISABLE_IF_FALSE,
 
            limit=104,
 
        )
 
        speaker_ticket_cap.products.set([
 
            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=450,
 
            limit=900,
 
        )
 
        penguin_dinner_cap.categories.set([
 
            self.penguin_dinner,
...
 
@@ -456,7 +518,7 @@ class Command(BaseCommand):
 
            ("description", ),
 
            description="Speakers dinner ticket cap",
 
            condition=cond.FlagBase.DISABLE_IF_FALSE,
 
            limit=150,
 
            limit=135,
 
        )
 
        speakers_dinner_cap.categories.set([
 
            self.speakers_dinner_ticket,
...
 
@@ -465,12 +527,12 @@ class Command(BaseCommand):
 
        pdns_cap = self.find_or_make(
 
            cond.TimeOrStockLimitFlag,
 
            ("description", ),
 
            description="PDNS breakfast ticket cap",
 
            description="PDNS ticket cap",
 
            condition=cond.FlagBase.DISABLE_IF_FALSE,
 
            limit=400,
 
        )
 
        pdns_cap.categories.set([
 
            self.pdns_breakfast,
 
            self.pdns_category,
 
        ])
 

	
 
        # Volunteer tickets are for volunteers only
...
 
@@ -535,7 +597,7 @@ class Command(BaseCommand):
 
            self.ticket_media,
 
            self.ticket_sponsor,
 
        ])
 
        pdns_by_ticket.categories.set([self.pdns_breakfast, ])
 
        pdns_by_ticket.categories.set([self.pdns_category, ])
 

	
 
        # They are available to speakers
 
        pdns_by_speaker = self.find_or_make(
...
 
@@ -548,7 +610,7 @@ class Command(BaseCommand):
 

	
 
        )
 
        pdns_by_speaker.proposal_kind.set(self.main_conference_proposals)
 
        pdns_by_speaker.categories.set([self.pdns_breakfast, ])
 
        pdns_by_speaker.categories.set([self.pdns_category, ])
 

	
 
        # They are available to staff
 
        pdns_by_staff = self.find_or_make(
...
 
@@ -556,13 +618,26 @@ class Command(BaseCommand):
 
            ("description", ),
 
            description="PDNS available to staff",
 
            condition=cond.FlagBase.ENABLE_IF_TRUE,
 

	
 
        )
 
        pdns_by_staff.group.set([
 
            self.group_team,
 
            self.group_volunteers,
 
        ])
 
        pdns_by_staff.categories.set([self.pdns_breakfast, ])
 
        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(
 
            cond.CategoryFlag,
 
            ("description", ),
 
            description="GottaGettaTicketFirst",
 
            condition=cond.FlagBase.ENABLE_IF_TRUE,
 
            enabling_category = self.ticket
 
        )
 
        needs_a_ticket.categories.set([
 
            self.extras,
 
            self.t_shirt,
 
            self.penguin_dinner,
 
        ])
 

	
 
    def populate_discounts(self):
 

	
...
 
@@ -583,14 +658,6 @@ class Command(BaseCommand):
 
                price=Decimal("150.00"),
 
                quantity=1,  # Per user
 
            )
 
            self.find_or_make(
 
                cond.DiscountForProduct,
 
                ("discount", "product"),
 
                discount=discount,
 
                product=self.ticket_hobbyist,
 
                price=Decimal("100.00"),
 
                quantity=1,  # Per user
 
            )
 

	
 
        def free_category(parent_discount, category, quantity=1):
 
            self.find_or_make(
...
 
@@ -603,12 +670,28 @@ class Command(BaseCommand):
 
            )
 

	
 
        # Early Bird Discount (general public)
 
        early_bird_hobbyist_discount = self.find_or_make(
 
            cond.TimeOrStockLimitDiscount,
 
            ("description", ),
 
            description="Early Bird Hobbyist",
 
            end_time=datetime(year=2017, month=11, day=1),
 
            limit=150,  # Across all users
 
        )
 
        self.find_or_make(
 
                cond.DiscountForProduct,
 
                ("discount", "product"),
 
                discount=early_bird_hobbyist_discount,
 
                product=self.ticket_hobbyist,
 
                price=Decimal("100.00"),
 
                quantity=1,  # Per user
 
        )
 

	
 
        early_bird = self.find_or_make(
 
            cond.TimeOrStockLimitDiscount,
 
            ("description", ),
 
            description="Early Bird",
 
            end_time=datetime(year=2016, month=11, day=1),
 
            limit=165,  # Across all users
 
            end_time=datetime(year=2017, month=11, day=1),
 
            limit=200,  # Across professionals and hobbyists
 
        )
 
        add_early_birds(early_bird)
 

	
0 comments (0 inline, 0 general)