Adds the first pass at a “guided” registration form

This commit is contained in:
Christopher Neugebauer 2016-03-23 19:39:07 +11:00
parent d50d6bac48
commit eb530bd485
2 changed files with 53 additions and 13 deletions

View file

@ -2,6 +2,8 @@ from django.conf.urls import url, patterns
urlpatterns = patterns( urlpatterns = patterns(
"registrasion.views", "registrasion.views",
url(r"^register$", "guided_registration", name="guided_registration"),
url(r"^register/([0-9]+)$", "guided_registration", name="guided_registration"),
url(r"^category/([0-9]+)$", "product_category", name="product_category"), url(r"^category/([0-9]+)$", "product_category", name="product_category"),
url(r"^checkout$", "checkout", name="checkout"), url(r"^checkout$", "checkout", name="checkout"),
url(r"^invoice/([0-9]+)$", "invoice", name="invoice"), url(r"^invoice/([0-9]+)$", "invoice", name="invoice"),

View file

@ -12,9 +12,45 @@ from django.shortcuts import redirect
from django.shortcuts import render from django.shortcuts import render
@login_required
def guided_registration(request, page_id=0):
''' Goes through the registration process in order,
making sure user sees all valid categories.
WORK IN PROGRESS: the finalised version of this view will allow
grouping of categories into a specific page. Currently, page_id simply
refers to the category_id. Future versions will have pages containing
categories.
'''
page_id = int(page_id)
if page_id != 0:
ret = product_category_inner(request, page_id)
if ret is not True:
return ret
# Go to next page in the guided registration
cats = rego.Category.objects
cats = cats.filter(id__gt=page_id).order_by("order")
if len(cats) > 0:
return redirect("guided_registration", cats[0].id)
else:
return redirect("dashboard")
@login_required @login_required
def product_category(request, category_id): def product_category(request, category_id):
''' Registration selections form for a specific category of items ''' ret = product_category_inner(request, category_id)
if ret is not True:
return ret
else:
return redirect("dashboard")
def product_category_inner(request, category_id):
''' Registration selections form for a specific category of items.
It returns a rendered template if this page needs to display stuff,
otherwise it returns True.
'''
PRODUCTS_FORM_PREFIX = "products" PRODUCTS_FORM_PREFIX = "products"
VOUCHERS_FORM_PREFIX = "vouchers" VOUCHERS_FORM_PREFIX = "vouchers"
@ -41,20 +77,11 @@ def product_category(request, category_id):
current_cart.apply_voucher(voucher) current_cart.apply_voucher(voucher)
except Exception as e: except Exception as e:
voucher_form.add_error("voucher", e) voucher_form.add_error("voucher", e)
# Re-visit current page.
elif cat_form.is_valid(): elif cat_form.is_valid():
try: try:
with transaction.atomic(): handle_valid_cat_form(cat_form, current_cart)
for product_id, quantity, field_name \ return True
in cat_form.product_quantities():
product = rego.Product.objects.get(pk=product_id)
try:
current_cart.set_quantity(
product, quantity, batched=True)
except ValidationError as ve:
cat_form.add_error(field_name, ve)
if cat_form.errors:
raise ValidationError("Cannot add that stuff")
current_cart.end_batch()
except ValidationError as ve: except ValidationError as ve:
pass pass
@ -89,6 +116,17 @@ def product_category(request, category_id):
return render(request, "product_category.html", data) return render(request, "product_category.html", data)
@transaction.atomic
def handle_valid_cat_form(cat_form, current_cart):
for product_id, quantity, field_name in cat_form.product_quantities():
product = rego.Product.objects.get(pk=product_id)
try:
current_cart.set_quantity(product, quantity, batched=True)
except ValidationError as ve:
cat_form.add_error(field_name, ve)
if cat_form.errors:
raise ValidationError("Cannot add that stuff")
current_cart.end_batch()
@login_required @login_required
def checkout(request): def checkout(request):