X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/edd562d25bf18c4faf784cf67551af1eb062885b..e7d7354a0b0322ab3ba1fc035e29262786d678a8:/src/club/views.py?ds=inline diff --git a/src/club/views.py b/src/club/views.py index b2657e62f..177989ea2 100644 --- a/src/club/views.py +++ b/src/club/views.py @@ -1,10 +1,11 @@ # 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.http import HttpResponse, HttpResponseRedirect +from django.http import HttpResponse, HttpResponseRedirect, JsonResponse from django.shortcuts import get_object_or_404, render from django.urls import reverse from django.utils.decorators import method_decorator @@ -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 @@ -46,6 +48,7 @@ class DonationStep1(UpdateView): 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 @@ -59,6 +62,17 @@ class DonationStep2(UpdateView): return c +def set_monthly(request, key): + schedule = get_object_or_404(models.Schedule, payed_at=None, key=key) + if request.POST: + schedule.monthly = request.POST.get('monthly') == 'true' + schedule.save(update_fields=['monthly']) + return JsonResponse({ + "amount": schedule.amount, + "monthly": schedule.monthly, + }) + + class JoinView(CreateView): form_class = forms.DonationStep1Form template_name = 'club/donation_step1.html' @@ -272,3 +286,27 @@ def receipt(request): } ) + +@permission_required('club.schedule_view') +def stats(request): + 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 + + days = [] + d = today + while d >= start: + days.append((d.isoformat(), acq.get(d, {}))) + d -= timedelta(1) + + return render(request, 'club/stats.html', + {'days': days}) +