Adds the first pass at a “guided” registration form
This commit is contained in:
parent
d50d6bac48
commit
eb530bd485
2 changed files with 53 additions and 13 deletions
|
@ -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"),
|
||||||
|
|
|
@ -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):
|
||||||
|
|
Loading…
Reference in a new issue