+ def get(self, request, key):
+ schedule = self.get_object()
+ schedule.method = 'payu'
+ schedule.save(update_fields=['method'])
+ return HttpResponseRedirect(schedule.initiate_payment(request))
+
+
+
+class PayURecPayment(payu_views.RecPayment):
+ form_class = PayUCardTokenForm
+
+ def get_schedule(self):
+ return get_object_or_404(models.Schedule, key=self.kwargs['key'])
+
+ def get_pos(self):
+ pos_id = recurring_payment_method.pos_id
+ return POSS[pos_id]
+
+ def get_success_url(self):
+ schedule = self.get_schedule()
+ schedule.method = 'payu-re'
+ schedule.save(update_fields=['method'])
+ return schedule.pay(self.request)
+
+
+class PayUNotifyView(payu_views.NotifyView):
+ order_model = models.PayUOrder
+
+
+class ScheduleThanksView(DetailView):
+ model = models.Schedule
+ template_name = 'club/2022/donation_step4.html'
+ slug_field = slug_url_kwarg = 'key'
+ step = 4
+
+ def get_context_data(self, *args, **kwargs):
+ ctx = super().get_context_data(*args, **kwargs)
+ ctx['active_menu_item'] = 'club'
+ return ctx
+
+
+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:
+ email = email.strip()
+ 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