Registration amendments are now limited the products that the user is allowed to add.
This commit is contained in:
		
							parent
							
								
									1152e185d1
								
							
						
					
					
						commit
						b9ee438b89
					
				
					 2 changed files with 28 additions and 11 deletions
				
			
		|  | @ -1,3 +1,4 @@ | |||
| from registrasion.controllers.product import ProductController | ||||
| from registrasion.models import commerce | ||||
| from registrasion.models import inventory | ||||
| 
 | ||||
|  | @ -349,16 +350,31 @@ class VoucherForm(forms.Form): | |||
|     ) | ||||
| 
 | ||||
| 
 | ||||
| class StaffProductsForm(forms.Form): | ||||
|     ''' Form for allowing staff to add an item to a user's cart. ''' | ||||
| def staff_products_form_factory(user): | ||||
|     ''' Creates a StaffProductsForm that restricts the available products to | ||||
|     those that are available to a user. ''' | ||||
| 
 | ||||
|     product = forms.ModelChoiceField( | ||||
|         widget=forms.Select, | ||||
|         queryset=inventory.Product.objects.all(), | ||||
|     ) | ||||
|     products = inventory.Product.objects.all() | ||||
|     products = ProductController.available_products(user, products=products) | ||||
| 
 | ||||
|     quantity = forms.IntegerField( | ||||
|         min_value=0, | ||||
|     ) | ||||
|     product_ids = [product.id for product in products] | ||||
|     product_set = inventory.Product.objects.filter(id__in=product_ids) | ||||
| 
 | ||||
| StaffProductsFormSet = forms.formset_factory(StaffProductsForm) | ||||
|     class StaffProductsForm(forms.Form): | ||||
|         ''' Form for allowing staff to add an item to a user's cart. ''' | ||||
| 
 | ||||
|         product = forms.ModelChoiceField( | ||||
|             widget=forms.Select, | ||||
|             queryset=product_set, | ||||
|         ) | ||||
| 
 | ||||
|         quantity = forms.IntegerField( | ||||
|             min_value=0, | ||||
|         ) | ||||
| 
 | ||||
|     return StaffProductsForm | ||||
| 
 | ||||
| def staff_products_formset_factory(user): | ||||
|     ''' Creates a formset of StaffProductsForm for the given user. ''' | ||||
|     form_type = staff_products_form_factory(user) | ||||
|     return forms.formset_factory(form_type) | ||||
|  |  | |||
|  | @ -819,7 +819,8 @@ def amend_registration(request, user_id): | |||
|     ).select_related("product") | ||||
|     initial = [{"product": i.product, "quantity": i.quantity} for i in items] | ||||
| 
 | ||||
|     formset = forms.StaffProductsFormSet( | ||||
|     StaffProductsFormSet = forms.staff_products_formset_factory(user) | ||||
|     formset = StaffProductsFormSet( | ||||
|         request.POST or None, | ||||
|         initial=initial, | ||||
|         prefix="products", | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Christopher Neugebauer
						Christopher Neugebauer