Quick membership verifier.
authorRadek Czajka <rczajka@rczajka.pl>
Wed, 1 Sep 2021 12:44:43 +0000 (14:44 +0200)
committerRadek Czajka <rczajka@rczajka.pl>
Wed, 1 Sep 2021 12:44:43 +0000 (14:44 +0200)
src/club/templates/club/member_verify.html [new file with mode: 0644]
src/club/urls.py
src/club/views.py

diff --git a/src/club/templates/club/member_verify.html b/src/club/templates/club/member_verify.html
new file mode 100644 (file)
index 0000000..7c64425
--- /dev/null
@@ -0,0 +1,8 @@
+<html>
+  <body>
+    <form method="post">
+      {% csrf_token %}
+      <textarea name="emails" cols="80" rows="20"></textarea>
+      <button type="submit">Sprawdź</button>
+    </form>
+    <textarea cols="100" rows="20">{{ result }}</textarea>
index 8bbb849..d55ef17 100644 (file)
@@ -24,4 +24,6 @@ urlpatterns = [
     path('notify/<int:pk>/', views.PayUNotifyView.as_view(), name='club_payu_notify'),
 
     path('czlonek/', views.MembershipView.as_view(), name='club_membership'),
     path('notify/<int:pk>/', views.PayUNotifyView.as_view(), name='club_payu_notify'),
 
     path('czlonek/', views.MembershipView.as_view(), name='club_membership'),
+
+    path('weryfikacja/', views.member_verify, name='club_member_verify'),
 ]
 ]
index 6a5c7d7..ce76d6b 100644 (file)
@@ -2,7 +2,7 @@
 # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
 #
 from django.conf import settings
 # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
 #
 from django.conf import settings
-from django.contrib.auth.decorators import login_required
+from django.contrib.auth.decorators import login_required, permission_required
 from django.db.models import Sum
 from django.http import HttpResponseRedirect
 from django.shortcuts import get_object_or_404, render
 from django.db.models import Sum
 from django.http import HttpResponseRedirect
 from django.shortcuts import get_object_or_404, render
@@ -185,3 +185,42 @@ class YearSummaryView(DetailView):
         ).order_by('completed_at')
         ctx['total_amount'] = ctx['payments'].aggregate(s=Sum('schedule__amount'))['s']
         return ctx
         ).order_by('completed_at')
         ctx['total_amount'] = ctx['payments'].aggregate(s=Sum('schedule__amount'))['s']
         return ctx
+
+
+@permission_required('club.schedule_view')
+def member_verify(request):
+    if request.method == 'POST':
+        emails = request.POST.get('emails').strip().split('\n')
+        rows = ['email;członek;nazwa użytkownika;aktywny;co najmniej do']
+        for email in emails:
+            row = [email]
+            schedules = models.Schedule.objects.filter(email=email).exclude(payed_at=None)
+            if schedules.exists():
+                row.append('tak')
+                akt = False
+                unames = set()
+                exp = None
+                for s in schedules:
+                    if s.is_active():
+                        akt = True
+                    if s.membership:
+                        unames.add(s.membership.user.username) 
+                    if exp is None or s.expires_at > exp:
+                        exp = s.expires_at
+                row.append(','.join(sorted(unames)))
+                row.append('tak' if akt else 'nie')
+                row.append(exp.date().isoformat())
+            else:
+                row.append('nie')
+            rows.append(';'.join(row))
+        rows = '\n'.join(rows)
+    else:
+        rows = ''
+
+    return render(
+        request,
+        'club/member_verify.html',
+        {
+            'result': rows
+        }
+    )