Source code for pizzas.services
from events.services import is_organiser
from .models import Product, Order, PizzaEvent
[docs]def gen_stats_pizza_orders():
"""
Generate statistics about number of orders per product
:return: Dict with key, value being resp. name, order count of a product.
"""
total = {}
for product in Product.objects.all():
total.update(
{product.name: Order.objects.filter(product=product).count(),}
)
return {
i[0]: i[1]
for i in sorted(total.items(), key=lambda x: x[1], reverse=True)[:5]
if i[1] > 0
}
[docs]def gen_stats_current_pizza_orders():
"""
Generate statistics about number of orders
per product of the active pizza event
:return: Dict with key, value being resp. name, order count of a product.
"""
total = {}
current_pizza_event = PizzaEvent.current()
if not current_pizza_event:
return None
for product in Product.objects.filter():
total.update(
{
product.name: Order.objects.filter(
product=product, pizza_event=current_pizza_event,
).count(),
}
)
return {
i[0]: i[1]
for i in sorted(total.items(), key=lambda x: x[1], reverse=True)[:5]
if i[1] > 0
}
[docs]def can_change_order(member, pizza_event):
"""
Determine if a certain member can edit orders of an event
:param member: Member who wants to change and order
:param pizza_event: The event for which we want to change an order
:return: True if we can change an order else False
"""
return (
pizza_event
and member.has_perm("pizzas.change_order")
and is_organiser(member, pizza_event.event)
)