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( | ||||
|     "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"^checkout$", "checkout", name="checkout"), | ||||
|     url(r"^invoice/([0-9]+)$", "invoice", name="invoice"), | ||||
|  |  | |||
|  | @ -12,9 +12,45 @@ from django.shortcuts import redirect | |||
| 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 | ||||
| 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" | ||||
|     VOUCHERS_FORM_PREFIX = "vouchers" | ||||
|  | @ -41,20 +77,11 @@ def product_category(request, category_id): | |||
|                 current_cart.apply_voucher(voucher) | ||||
|             except Exception as e: | ||||
|                 voucher_form.add_error("voucher", e) | ||||
|             # Re-visit current page. | ||||
|         elif cat_form.is_valid(): | ||||
|             try: | ||||
|                 with transaction.atomic(): | ||||
|                     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() | ||||
|                 handle_valid_cat_form(cat_form, current_cart) | ||||
|                 return True | ||||
|             except ValidationError as ve: | ||||
|                 pass | ||||
| 
 | ||||
|  | @ -89,6 +116,17 @@ def product_category(request, category_id): | |||
| 
 | ||||
|     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 | ||||
| def checkout(request): | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Christopher Neugebauer
						Christopher Neugebauer