Changeset - fd5cf50fabd8
[Not reviewed]
0 1 0
Christopher Neugebauer - 8 years ago 2016-04-29 01:09:36
chrisjrn@gmail.com
Makes items_purchased do more database work
1 file changed with 27 insertions and 10 deletions:
0 comments (0 inline, 0 general)
registrasion/templatetags/registrasion_tags.py
Show inline comments
...
 
@@ -4,7 +4,11 @@ from registrasion.controllers.category import CategoryController
 

	
 
from collections import namedtuple
 
from django import template
 
from django.db.models import Case
 
from django.db.models import Q
 
from django.db.models import Sum
 
from django.db.models import When
 
from django.db.models import Value
 

	
 
register = template.Library()
 

	
...
 
@@ -99,20 +103,33 @@ def items_purchased(context, category=None):
 

	
 
    '''
 

	
 
    all_items = commerce.ProductItem.objects.filter(
 
        cart__user=context.request.user,
 
        cart__status=commerce.Cart.STATUS_PAID,
 
    ).select_related("product", "product__category")
 
    in_cart=(
 
        Q(productitem__cart__user=context.request.user) &
 
        Q(productitem__cart__status=commerce.Cart.STATUS_PAID)
 
    )
 

	
 
    quantities_in_cart = When(
 
        in_cart,
 
        then="productitem__quantity",
 
    )
 

	
 
    quantities_or_zero = Case(
 
        quantities_in_cart,
 
        default=Value(0),
 
    )
 

	
 
    products = inventory.Product.objects
 

	
 
    if category:
 
        all_items = all_items.filter(product__category=category)
 
        products = products.filter(category=category)
 

	
 
    products = products.select_related("category")
 
    products = products.annotate(quantity=Sum(quantities_or_zero))
 
    products = products.filter(quantity__gt=0)
 

	
 
    pq = all_items.values("product").annotate(quantity=Sum("quantity")).all()
 
    products = inventory.Product.objects.all()
 
    out = []
 
    for item in pq:
 
        prod = products.get(pk=item["product"])
 
        out.append(ProductAndQuantity(prod, item["quantity"]))
 
    for prod in products:
 
        out.append(ProductAndQuantity(prod, prod.quantity))
 
    return out
 

	
 

	
0 comments (0 inline, 0 general)