Files
@ e9ebf5da03ea
Branch filter:
Location: symposion_app/registrasion/templatetags/registrasion_tags.py - annotation
e9ebf5da03ea
2.4 KiB
text/x-python
Writes inventory and overview documentation, and updates docstrings on a LOT of modules.
875f736d67c5 875f736d67c5 f7289c21019b c192fef491c4 36ecf7fd5489 c192fef491c4 36ecf7fd5489 c192fef491c4 c192fef491c4 c192fef491c4 36ecf7fd5489 8d66ed57150d db332da9584d c192fef491c4 c192fef491c4 c192fef491c4 f7289c21019b 36ecf7fd5489 db332da9584d 2c94e7538a6e 2c94e7538a6e 2c94e7538a6e 875f736d67c5 2c94e7538a6e 2c94e7538a6e 2c94e7538a6e 2c94e7538a6e 2c94e7538a6e 2c94e7538a6e 36ecf7fd5489 36ecf7fd5489 36ecf7fd5489 875f736d67c5 36ecf7fd5489 db332da9584d 36ecf7fd5489 36ecf7fd5489 36ecf7fd5489 36ecf7fd5489 36ecf7fd5489 875f736d67c5 36ecf7fd5489 36ecf7fd5489 01b9adbaf46e 01b9adbaf46e 01b9adbaf46e 01b9adbaf46e 01b9adbaf46e 01b9adbaf46e 01b9adbaf46e 36ecf7fd5489 36ecf7fd5489 db332da9584d 36ecf7fd5489 4021aa3c8ebc 4021aa3c8ebc 4021aa3c8ebc 36ecf7fd5489 875f736d67c5 36ecf7fd5489 36ecf7fd5489 53413388e016 53413388e016 36ecf7fd5489 4021aa3c8ebc 4021aa3c8ebc 4021aa3c8ebc 53413388e016 875f736d67c5 36ecf7fd5489 53413388e016 53413388e016 53413388e016 36ecf7fd5489 aa6377f4ce88 12e4d0a3cb24 aa6377f4ce88 aa6377f4ce88 aa6377f4ce88 aa6377f4ce88 | from registrasion.models import commerce
from registrasion.models import inventory
from registrasion.controllers.category import CategoryController
from collections import namedtuple
from django import template
from django.db.models import Sum
register = template.Library()
ProductAndQuantity = namedtuple("ProductAndQuantity", ["product", "quantity"])
@register.assignment_tag(takes_context=True)
def available_categories(context):
''' Returns all of the available product categories '''
return CategoryController.available_categories(context.request.user)
@register.assignment_tag(takes_context=True)
def available_credit(context):
''' Returns the amount of unclaimed credit available for this user. '''
notes = commerce.CreditNote.unclaimed().filter(
invoice__user=context.request.user,
)
ret = notes.values("amount").aggregate(Sum("amount"))["amount__sum"] or 0
return 0 - ret
@register.assignment_tag(takes_context=True)
def invoices(context):
''' Returns all of the invoices that this user has. '''
return commerce.Invoice.objects.filter(cart__user=context.request.user)
@register.assignment_tag(takes_context=True)
def items_pending(context):
''' Returns all of the items that this user has in their current cart,
and is awaiting payment. '''
all_items = commerce.ProductItem.objects.filter(
cart__user=context.request.user,
cart__active=True,
).select_related(
"product",
"product__category",
).order_by(
"product__category__order",
"product__order",
)
return all_items
@register.assignment_tag(takes_context=True)
def items_purchased(context, category=None):
''' Returns all of the items that this user has purchased, optionally
from the given category. '''
all_items = commerce.ProductItem.objects.filter(
cart__user=context.request.user,
cart__active=False,
cart__released=False,
).select_related("product", "product__category")
if category:
all_items = all_items.filter(product__category=category)
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"]))
return out
@register.filter
def multiply(value, arg):
''' Multiplies value by arg '''
return value * arg
|