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

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 

6 

7from payments.models import Payment 

8from pizzas.decorators import organiser_only 

9from pizzas.models import FoodEvent, FoodOrder 

10 

11 

12@method_decorator(organiser_only, name="dispatch") 

13class PizzaOrderSummary(TemplateView): 

14 template_name = "pizzas/admin/summary.html" 

15 admin = None 

16 

17 def get_context_data(self, **kwargs): 

18 event = get_object_or_404(FoodEvent, pk=kwargs.get("pk")) 

19 

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 ) 

36 

37 product_list = {} 

38 orders = FoodOrder.objects.filter(food_event=event).prefetch_related("product") 

39 

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 

50 

51 product_list = sorted(product_list.values(), key=lambda x: x["name"]) 

52 

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 ) 

61 

62 return context 

63 

64 

65@method_decorator(organiser_only, name="dispatch") 

66class PizzaOrderDetails(TemplateView): 

67 template_name = "pizzas/admin/orders.html" 

68 admin = None 

69 

70 def get_context_data(self, **kwargs): 

71 event = get_object_or_404(FoodEvent, pk=kwargs.get("pk")) 

72 

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 ) 

89 

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 ) 

101 

102 return context