+
+class YearSummaryView(DetailView):
+ model = models.Schedule
+ slug_field = slug_url_kwarg = 'key'
+ template_name = 'club/year_summary.html'
+
+ def get_context_data(self, *args, **kwargs):
+ ctx = super().get_context_data(*args, **kwargs)
+ ctx['payments'] = models.PayUOrder.objects.filter(
+ status='COMPLETED',
+ completed_at__year=self.kwargs['year'],
+ schedule__email=self.object.email,
+ ).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
+ }
+ )