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…
	
	Add table
		
		Reference in a new issue
	
	 Christopher Neugebauer
						Christopher Neugebauer