_filtered_discounts is now called _filtered_clauses, and it no longer cares about specific products or categories
This commit is contained in:
		
							parent
							
								
									b3491cab8e
								
							
						
					
					
						commit
						162a1f23dd
					
				
					 1 changed files with 24 additions and 29 deletions
				
			
		|  | @ -50,7 +50,22 @@ class DiscountController(object): | |||
|         categories and products. The discounts also list the available quantity | ||||
|         for this user, not including products that are pending purchase. ''' | ||||
| 
 | ||||
|         filtered_clauses = cls._filtered_discounts(user, categories, products) | ||||
|         filtered_clauses = cls._filtered_clauses(user, categories, products) | ||||
| 
 | ||||
|         # clauses that match provided categories | ||||
|         categories = set(categories) | ||||
|         # clauses that match provided products | ||||
|         products = set(products) | ||||
|         # clauses that match categories for provided products | ||||
|         product_categories = set(product.category for product in products) | ||||
|         # (Not relevant: clauses that match products in provided categories) | ||||
|         all_categories = categories | product_categories | ||||
| 
 | ||||
|         filtered_clauses = ( | ||||
|             clause for clause in filtered_clauses | ||||
|             if hasattr(clause, 'product') and clause.product in products or | ||||
|             hasattr(clause, 'category') and clause.category in all_categories | ||||
|         ) | ||||
| 
 | ||||
|         discounts = [] | ||||
| 
 | ||||
|  | @ -84,7 +99,7 @@ class DiscountController(object): | |||
|         return discounts | ||||
| 
 | ||||
|     @classmethod | ||||
|     def _filtered_discounts(cls, user, categories, products): | ||||
|     def _filtered_clauses(cls, user): | ||||
|         ''' | ||||
| 
 | ||||
|         Returns: | ||||
|  | @ -98,37 +113,17 @@ class DiscountController(object): | |||
|             i for i in types if issubclass(i, conditions.DiscountBase) | ||||
|         ] | ||||
| 
 | ||||
|         # discounts that match provided categories | ||||
|         category_discounts = conditions.DiscountForCategory.objects.filter( | ||||
|             category__in=categories | ||||
|         ) | ||||
|         # discounts that match provided products | ||||
|         product_discounts = conditions.DiscountForProduct.objects.filter( | ||||
|             product__in=products | ||||
|         ) | ||||
|         # discounts that match categories for provided products | ||||
|         product_category_discounts = conditions.DiscountForCategory.objects | ||||
|         product_category_discounts = product_category_discounts.filter( | ||||
|             category__in=(product.category for product in products) | ||||
|         ) | ||||
|         # (Not relevant: discounts that match products in provided categories) | ||||
| 
 | ||||
|         product_discounts = product_discounts.select_related( | ||||
|         product_clauses = conditions.DiscountForProduct.objects.all() | ||||
|         product_clauses = product_clauses.select_related( | ||||
|             "product", | ||||
|             "product__category", | ||||
|         ) | ||||
| 
 | ||||
|         all_category_discounts = ( | ||||
|             category_discounts | product_category_discounts | ||||
|         ) | ||||
|         all_category_discounts = all_category_discounts.select_related( | ||||
|         category_clauses = conditions.DiscountForCategory.objects.all() | ||||
|         category_clauses = category_clauses.select_related( | ||||
|             "category", | ||||
|         ) | ||||
| 
 | ||||
|         valid_discounts = conditions.DiscountBase.objects.filter( | ||||
|             Q(discountforproduct__in=product_discounts) | | ||||
|             Q(discountforcategory__in=all_category_discounts) | ||||
|         ) | ||||
|         valid_discounts = conditions.DiscountBase.objects.all() | ||||
| 
 | ||||
|         all_subsets = [] | ||||
| 
 | ||||
|  | @ -145,8 +140,8 @@ class DiscountController(object): | |||
|         from_filter = dict((i.id, i) for i in filtered_discounts) | ||||
| 
 | ||||
|         clause_sets = ( | ||||
|             product_discounts.filter(discount__in=filtered_discounts), | ||||
|             all_category_discounts.filter(discount__in=filtered_discounts), | ||||
|             product_clauses.filter(discount__in=filtered_discounts), | ||||
|             category_clauses.filter(discount__in=filtered_discounts), | ||||
|         ) | ||||
| 
 | ||||
|         clause_sets = ( | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Christopher Neugebauer
						Christopher Neugebauer