Changeset - 01b9adbaf46e
[Not reviewed]
0 3 1
Christopher Neugebauer - 8 years ago 2016-04-08 09:43:34
chrisjrn@gmail.com
Re-writes the guided registration to individually track completed categories, and keep the form page the same until every category is finished. Resolves #14
4 files changed with 61 insertions and 15 deletions:
0 comments (0 inline, 0 general)
registrasion/migrations/0017_auto_20160408_0731.py
Show inline comments
 
new file 100644
 
# -*- 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'),
 
        ),
 
    ]
registrasion/models.py
Show inline comments
...
 
@@ -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):
registrasion/templatetags/registrasion_tags.py
Show inline comments
...
 
@@ -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
 

	
 

	
registrasion/views.py
Show inline comments
...
 
@@ -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")
 

	
 
        request.session[SESSION_KEY] = []
 

	
 
        if last_category == 0:
 
        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
 
                # 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:
 
                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 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
 

	
0 comments (0 inline, 0 general)