Coverage for website/sales/views.py: 92.50%

30 statements  

« prev     ^ index     » next       coverage.py v7.6.7, created at 2025-08-14 10:31 +0000

1from django.contrib import messages 

2from django.contrib.auth.decorators import login_required 

3from django.shortcuts import get_object_or_404, redirect, render 

4from django.utils.decorators import method_decorator 

5from django.utils.translation import gettext_lazy as _ 

6from django.views import View 

7 

8from sales import services 

9from sales.models.order import Order 

10 

11 

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

13class OrderPaymentView(View): 

14 def get(self, request, *args, **kwargs): 

15 order = get_object_or_404(Order, pk=kwargs["pk"]) 

16 if order.payment: 

17 messages.warning(request, _("This order was already paid for.")) 

18 return redirect("index") 

19 if order.payer is not None and order.payer != request.member: 

20 messages.warning(request, _("This order is not yours.")) 

21 return redirect("index") 

22 

23 order.payer = request.member 

24 order.save() 

25 

26 if order.age_restricted and not services.is_adult(request.member): 

27 messages.error( 

28 request, 

29 _( 

30 "The age restrictions on this order do not allow you to pay for this order." 

31 ), 

32 ) 

33 return redirect("index") 

34 

35 if ( 35 ↛ 40line 35 didn't jump to line 40

36 order.age_restricted 

37 and services.is_adult(request.member) 

38 and order.total_amount == 0 

39 ): 

40 messages.success( 

41 request, _("You have successfully identified yourself for this order.") 

42 ) 

43 return redirect("index") 

44 

45 if order.total_amount == 0: 

46 messages.info(request, _("This order doesn't require payment.")) 

47 return redirect("index") 

48 

49 return render(request, "sales/order_payment.html", {"order": order})