Re-writes the guided registration to individually track completed categories, and keep the form page the same until every category is finished. Resolves #14
This commit is contained in:
parent
a12460e351
commit
01b9adbaf4
4 changed files with 63 additions and 17 deletions
24
registrasion/migrations/0017_auto_20160408_0731.py
Normal file
24
registrasion/migrations/0017_auto_20160408_0731.py
Normal file
|
@ -0,0 +1,24 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.9.2 on 2016-04-08 07:31
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('registrasion', '0016_auto_20160408_0234'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RemoveField(
|
||||
model_name='attendee',
|
||||
name='highest_complete_category',
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='attendee',
|
||||
name='guided_categories_complete',
|
||||
field=models.ManyToManyField(to='registrasion.Category'),
|
||||
),
|
||||
]
|
|
@ -49,7 +49,7 @@ class Attendee(models.Model):
|
|||
db_index=True,
|
||||
)
|
||||
completed_registration = models.BooleanField(default=False)
|
||||
highest_complete_category = models.IntegerField(default=0)
|
||||
guided_categories_complete = models.ManyToManyField("category")
|
||||
|
||||
|
||||
class AttendeeProfileBase(models.Model):
|
||||
|
|
|
@ -30,7 +30,13 @@ def items_pending(context):
|
|||
all_items = rego.ProductItem.objects.filter(
|
||||
cart__user=context.request.user,
|
||||
cart__active=True,
|
||||
).select_related("product", "product__category")
|
||||
).select_related(
|
||||
"product",
|
||||
"product__category",
|
||||
).order_by(
|
||||
"product__category__order",
|
||||
"product__order",
|
||||
)
|
||||
return all_items
|
||||
|
||||
|
||||
|
|
|
@ -52,6 +52,7 @@ def guided_registration(request, page_id=0):
|
|||
through each category one by one
|
||||
'''
|
||||
|
||||
SESSION_KEY = "guided_registration_categories"
|
||||
next_step = redirect("guided_registration")
|
||||
|
||||
sections = []
|
||||
|
@ -94,19 +95,23 @@ def guided_registration(request, page_id=0):
|
|||
else:
|
||||
# We're selling products
|
||||
|
||||
last_category = attendee.highest_complete_category
|
||||
starting = attendee.guided_categories_complete.count() == 0
|
||||
|
||||
# Get the next category
|
||||
cats = rego.Category.objects
|
||||
cats = cats.filter(id__gt=last_category).order_by("order")
|
||||
if SESSION_KEY in request.session:
|
||||
_cats = request.session[SESSION_KEY]
|
||||
cats = cats.filter(id__in=_cats)
|
||||
else:
|
||||
cats = cats.exclude(
|
||||
id__in=attendee.guided_categories_complete.all(),
|
||||
)
|
||||
|
||||
if cats.count() == 0:
|
||||
# We've filled in every category
|
||||
attendee.completed_registration = True
|
||||
attendee.save()
|
||||
return next_step
|
||||
cats = cats.order_by("order")
|
||||
|
||||
if last_category == 0:
|
||||
request.session[SESSION_KEY] = []
|
||||
|
||||
if starting:
|
||||
# Only display the first Category
|
||||
title = "Select ticket type"
|
||||
current_step = 2
|
||||
|
@ -125,6 +130,12 @@ def guided_registration(request, page_id=0):
|
|||
products=all_products,
|
||||
))
|
||||
|
||||
if len(available_products) == 0:
|
||||
# We've filled in every category
|
||||
attendee.completed_registration = True
|
||||
attendee.save()
|
||||
return next_step
|
||||
|
||||
for category in cats:
|
||||
products = [
|
||||
i for i in available_products
|
||||
|
@ -141,14 +152,17 @@ def guided_registration(request, page_id=0):
|
|||
discounts=discounts,
|
||||
form=products_form,
|
||||
)
|
||||
if products:
|
||||
# This product category does not exist for this user
|
||||
sections.append(section)
|
||||
|
||||
if request.method == "POST" and not products_form.errors:
|
||||
if category.id > attendee.highest_complete_category:
|
||||
# This is only saved if we pass each form with no errors.
|
||||
attendee.highest_complete_category = category.id
|
||||
if products:
|
||||
# This product category has items to show.
|
||||
sections.append(section)
|
||||
# Add this to the list of things to show if the form errors.
|
||||
request.session[SESSION_KEY].append(category.id)
|
||||
|
||||
if request.method == "POST" and not products_form.errors:
|
||||
# This is only saved if we pass each form with no errors,
|
||||
# and if the form actually has products.
|
||||
attendee.guided_categories_complete.add(category)
|
||||
|
||||
if sections and request.method == "POST":
|
||||
for section in sections:
|
||||
|
@ -156,6 +170,8 @@ def guided_registration(request, page_id=0):
|
|||
break
|
||||
else:
|
||||
attendee.save()
|
||||
if SESSION_KEY in request.session:
|
||||
del request.session[SESSION_KEY]
|
||||
# We've successfully processed everything
|
||||
return next_step
|
||||
|
||||
|
|
Loading…
Reference in a new issue