Coverage for website/pizzas/admin_views.py: 45.00%
36 statements
« prev ^ index » next coverage.py v7.6.7, created at 2025-08-14 10:31 +0000
« prev ^ index » next coverage.py v7.6.7, created at 2025-08-14 10:31 +0000
1from django.shortcuts import get_object_or_404
2from django.utils.decorators import method_decorator
3from django.utils.text import capfirst
4from django.utils.translation import gettext_lazy as _
5from django.views.generic import TemplateView
7from payments.models import Payment
8from pizzas.decorators import organiser_only
9from pizzas.models import FoodEvent, FoodOrder
12@method_decorator(organiser_only, name="dispatch")
13class PizzaOrderSummary(TemplateView):
14 template_name = "pizzas/admin/summary.html"
15 admin = None
17 def get_context_data(self, **kwargs):
18 event = get_object_or_404(FoodEvent, pk=kwargs.get("pk"))
20 context = super().get_context_data(**kwargs)
21 context.update(
22 {
23 **self.admin.admin_site.each_context(self.request),
24 "has_delete_permission": False,
25 "has_editable_inline_admin_formsets": False,
26 "app_label": "pizzas",
27 "opts": FoodEvent._meta,
28 "is_popup": False,
29 "save_as": False,
30 "save_on_top": False,
31 "title": capfirst(_("order summary")),
32 "original": capfirst(_("summary")),
33 "food_event": event,
34 }
35 )
37 product_list = {}
38 orders = FoodOrder.objects.filter(food_event=event).prefetch_related("product")
40 for order in orders:
41 if order.product.id not in product_list:
42 product_list[order.product.id] = {
43 "name": order.product.name,
44 "price": order.product.price,
45 "amount": 0,
46 "total": 0,
47 }
48 product_list[order.product.id]["amount"] += 1
49 product_list[order.product.id]["total"] += order.product.price
51 product_list = sorted(product_list.values(), key=lambda x: x["name"])
53 context.update(
54 {
55 "event": event,
56 "product_list": product_list,
57 "total_money": sum(map(lambda x: x["total"], product_list)),
58 "total_products": len(orders),
59 }
60 )
62 return context
65@method_decorator(organiser_only, name="dispatch")
66class PizzaOrderDetails(TemplateView):
67 template_name = "pizzas/admin/orders.html"
68 admin = None
70 def get_context_data(self, **kwargs):
71 event = get_object_or_404(FoodEvent, pk=kwargs.get("pk"))
73 context = super().get_context_data(**kwargs)
74 context.update(
75 {
76 **self.admin.admin_site.each_context(self.request),
77 "has_delete_permission": False,
78 "has_editable_inline_admin_formsets": False,
79 "app_label": "pizzas",
80 "opts": FoodEvent._meta,
81 "is_popup": False,
82 "save_as": False,
83 "save_on_top": False,
84 "title": capfirst(_("order overview")),
85 "original": str(event),
86 "food_event": event,
87 }
88 )
90 context.update(
91 {
92 "event": event,
93 "payment": Payment,
94 "orders": (
95 FoodOrder.objects.filter(food_event=event)
96 .prefetch_related("member", "product")
97 .order_by("member__first_name")
98 ),
99 }
100 )
102 return context