fix
[wolnelektury.git] / src / club / views.py
index a55f284..3f283af 100644 (file)
@@ -1,6 +1,7 @@
 # This file is part of Wolne Lektury, licensed under GNU Affero GPLv3 or later.
 # Copyright © Fundacja Wolne Lektury. See NOTICE for more information.
 #
 # This file is part of Wolne Lektury, licensed under GNU Affero GPLv3 or later.
 # Copyright © Fundacja Wolne Lektury. See NOTICE for more information.
 #
+from datetime import date, timedelta
 from django.conf import settings
 from django.contrib.auth.decorators import login_required, permission_required
 from django.db.models import Sum
 from django.conf import settings
 from django.contrib.auth.decorators import login_required, permission_required
 from django.db.models import Sum
@@ -30,6 +31,7 @@ class ClubView(TemplateView):
 
 
 
 
 
 
+@method_decorator(never_cache, name='dispatch')
 class DonationStep1(UpdateView):
     queryset = models.Schedule.objects.filter(payed_at=None)
     form_class = forms.DonationStep1Form
 class DonationStep1(UpdateView):
     queryset = models.Schedule.objects.filter(payed_at=None)
     form_class = forms.DonationStep1Form
@@ -46,6 +48,7 @@ class DonationStep1(UpdateView):
         return reverse('donation_step2', args=[self.object.key])
 
 
         return reverse('donation_step2', args=[self.object.key])
 
 
+@method_decorator(never_cache, name='dispatch')
 class DonationStep2(UpdateView):
     queryset = models.Schedule.objects.filter(payed_at=None)
     form_class = forms.DonationStep2Form
 class DonationStep2(UpdateView):
     queryset = models.Schedule.objects.filter(payed_at=None)
     form_class = forms.DonationStep2Form
@@ -62,7 +65,7 @@ class DonationStep2(UpdateView):
 def set_monthly(request, key):
     schedule = get_object_or_404(models.Schedule, payed_at=None, key=key)
     if request.POST:
 def set_monthly(request, key):
     schedule = get_object_or_404(models.Schedule, payed_at=None, key=key)
     if request.POST:
-        schedule.monthly = True
+        schedule.monthly = request.POST.get('monthly') == 'true'
         schedule.save(update_fields=['monthly'])
     return JsonResponse({
         "amount": schedule.amount,
         schedule.save(update_fields=['monthly'])
     return JsonResponse({
         "amount": schedule.amount,
@@ -283,3 +286,37 @@ def receipt(request):
         }
     )
 
         }
     )
 
+
+@permission_required('club.schedule_view')
+def stats(request):
+    maxes = {}
+    acq = {}
+    today = date.today()
+    start = today - timedelta(365)
+    for schedule in models.Schedule.objects.filter(
+        payed_at__gte=start,
+    ):
+        d = schedule.payed_at.date()
+        m = schedule.method.replace('-', '_')
+        acq.setdefault(d, {})
+        acq[d].setdefault(m, 0)
+        acq[d][m] += schedule.amount
+
+    for a in acq.values():
+        for m, v in a.items():
+            maxes.setdefault(m, 0)
+            if v > maxes[m]:
+                maxes[m] = v
+
+    days = []
+    d = today
+    while d >= start:
+        a = acq.get(d, {})
+        for k, v in a.items():
+            a[k] = (v, 100 * v/(maxes[k] or 1))
+        days.append((d.isoformat(), a))
+        d -= timedelta(1)
+
+    return render(request, 'club/stats.html',
+                  {'days': days})
+