@@ -6,28 +6,37 @@ from django import template
from django.db.models import Sum
from urllib import urlencode
register = template.Library()
def user_for_context(context):
''' Returns either context.user or context.request.user if the former is
not defined. '''
try:
return context["user"]
except KeyError:
return context.request.user
@register.assignment_tag(takes_context=True)
def available_categories(context):
''' Gets all of the currently available products.
Returns:
[models.inventory.Category, ...]: A list of all of the categories that
have Products that the current user can reserve.
'''
return CategoryController.available_categories(context.request.user)
return CategoryController.available_categories(user_for_context(context))
def missing_categories(context):
''' Adds the categories that the user does not currently have. '''
user = context.request.user
user = user_for_context(context)
categories_available = set(CategoryController.available_categories(user))
items = ItemController(user).items_pending_or_purchased()
categories_held = set()
for product, quantity in items:
@@ -44,38 +53,47 @@ def available_credit(context):
Decimal: the sum of the values of unclaimed credit notes for the
current user.
notes = commerce.CreditNote.unclaimed().filter(
invoice__user=context.request.user,
invoice__user=user_for_context(context),
)
ret = notes.values("amount").aggregate(Sum("amount"))["amount__sum"] or 0
return 0 - ret
def invoices(context):
[models.commerce.Invoice, ...]: All of the current user's invoices. '''
return commerce.Invoice.objects.filter(user=context.request.user)
return commerce.Invoice.objects.filter(user=user_for_context(context))
def items_pending(context):
''' Gets all of the items that the user from this context has reserved.'''
return ItemController(context.request.user).items_pending()
''' Gets all of the items that the user from this context has reserved.
The user will be either `context.user`, and `context.request.user` if
the former is not defined.
return ItemController(user_for_context(context)).items_pending()
def items_purchased(context, category=None):
''' Returns the items purchased for this user. '''
''' Returns the items purchased for this user.
return ItemController(context.request.user).items_purchased(
return ItemController(user_for_context(context)).items_purchased(
category=category
def report_as_csv(context, section):