Changes in club payments.
authorRadek Czajka <rczajka@rczajka.pl>
Wed, 17 Apr 2019 13:44:26 +0000 (15:44 +0200)
committerRadek Czajka <rczajka@rczajka.pl>
Wed, 17 Apr 2019 13:44:26 +0000 (15:44 +0200)
src/club/migrations/0008_membership_name.py [new file with mode: 0644]
src/club/models.py
src/club/templates/club/schedule.html
src/club/urls.py
src/club/views.py
src/wolnelektury/urls.py

diff --git a/src/club/migrations/0008_membership_name.py b/src/club/migrations/0008_membership_name.py
new file mode 100644 (file)
index 0000000..ce30b25
--- /dev/null
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.20 on 2019-04-17 13:39
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('club', '0007_auto_20190416_1625'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='membership',
+            name='name',
+            field=models.CharField(blank=True, max_length=255),
+        ),
+    ]
index f5cbf6e..1128070 100644 (file)
@@ -102,6 +102,7 @@ class Membership(models.Model):
     """ Represents a user being recognized as a member of the club. """
     user = models.OneToOneField(settings.AUTH_USER_MODEL, verbose_name=_('user'), on_delete=models.CASCADE)
     created_at = models.DateTimeField(_('created at'), auto_now_add=True)
+    name = models.CharField(max_length=255, blank=True)
     honorary = models.BooleanField(default=False)
 
     class Meta:
@@ -183,7 +184,8 @@ class PayUOrder(payu_models.Order):
 
     def status_updated(self):
         if self.status == 'COMPLETED':
-            new_exp = self.schedule.plan.get_next_installment(now())
+            since = self.schedule.expires_at or now()
+            new_exp = self.schedule.plan.get_next_installment(since)
             if self.schedule.expires_at is None or self.schedule.expires_at < new_exp:
                 self.schedule.expires_at = new_exp
                 self.schedule.save()
index 6baa9a4..b1e1907 100644 (file)
@@ -9,30 +9,69 @@
 
 <h1>Plan płatności</h1>
 
-<div>{{ schedule.email }}</div>
-<div>{{ schedule.amount }}</div>
-<div>{{ schedule.plan.get_interval_display }}</div>
-
-<div>{{ schedule.is_active|yesno:"Aktywne,Nieaktywne" }}</div>
+<div>E-mail: {{ schedule.email }}</div>
+<div>Składka: {{ schedule.amount }} zł {{ schedule.plan.get_interval_display }}</div>
+<div>Wybrana metoda płatności: {{ schedule.get_payment_method.name }}</div>
+
+{% if schedule.is_active %}
+  {% if schedule.plan.is_perpetual %}
+    Opłacona na zawsze.
+  {% endif %}
+  Aktualnie opłacona do: {{ schedule.expires_at }}
+
+  {% if schedule.get_payment_method.is_recurring %}
+  <form method='post' action="{% url 'club_cancel' schedule.key %}">
+        {% csrf_token %}
+        <button type="submit">Anuluj kolejną płatność</button>
+  </form>
+  {% else %}
+  <form method='post' action=''>
+       {% csrf_token %}
+       <button type="submit">Opłać kolejny okres</button>
+  </form>
+  {% endif %}
 
-<div>Start: {{ schedule.started_at }}</div>
-<div>Opłacone do: {{ schedule.expires_at|default:"brak" }} {% if schedule.is_cancelled %}(anulowana){% endif %}</div>
 
-{% if schedule.expires_at and not schedule.is_cancelled %}
-<form method='post' action="{% url 'club_cancel' schedule.key %}">
-       {% csrf_token %}
-       <button type="submit">Anuluj płatność</button>
-</form>
+{% else %}
+ {% if schedule.is_expired %}
+   Członkostwo wygasło.
+   <form method='post' action=''>
+        {% csrf_token %}
+        <button type="submit">Opłać kolejny okres</button>
+   </form>
+
+
+ {% else %}
+   Składka nie została jeszcze opłacona.
+   {% if schedule.payuorder_set.exists %}
+     Czekamy na potwierdzenie płatności.
+   {% else %}
+
+     <form method='post' action=''>
+        {% csrf_token %}
+        <button type="submit">Zapłać składkę</button>
+     </form>
+
+   {% endif %}
+ {% endif %}
 {% endif %}
 
-{% if schedule.is_expired %}
-  Płatność wygasła. <a href="{% url 'club_join' %}">Wykonaj nową płatność</a>.
-{% endif %}
+<hr>
+
+
 
 {% if schedule.membership %}
   <p>
   Członek/członkini Towarzystwa nr {{ schedule.membership.id }} ({{ schedule.membership.user }}).
   </p>
+
+  <form method='post' action='{% url "club_membership" %}'>
+         {% csrf_token %}
+         Imię i nazwisko na legitymację: <br>
+         <input name="name" value="{{ schedule.membership.name|default:schedule.membership.user.username }}"><br>
+         <button type="submit">Zapisz</button>
+  </form>
+
 {% else %}
 <p>
 Płatność nie przypisana do członkostwa.<br>
index f489661..506f42b 100644 (file)
@@ -16,4 +16,5 @@ urlpatterns = [
 
     url(r'notify/(?P<pk>\d+)/', views.PayUNotifyView.as_view(), name='club_payu_notify'),
 
+    url(r'czlonek/', views.MembershipView.as_view(), name='club_membership'),
 ]
index af59b1e..9816b4b 100644 (file)
@@ -1,7 +1,7 @@
 from django.contrib.auth.decorators import login_required
 from django.http import HttpResponseRedirect
 from django.shortcuts import get_object_or_404, render
-from django.views.generic import FormView, CreateView, TemplateView, DetailView
+from django.views.generic import FormView, CreateView, TemplateView, DetailView, UpdateView
 from django.views import View
 from .payu import POSS
 from .payu import views as payu_views
@@ -67,10 +67,7 @@ class ScheduleView(DetailView):
 
     def post(self, request, key):
         schedule = self.get_object()
-        if not schedule.is_active():
-            return HttpResponseRedirect(schedule.initiate_payment(request))
-        else:
-            return HttpResponseRedirect(schedule.get_absolute_url())
+        return HttpResponseRedirect(schedule.initiate_payment(request))
 
 
 @login_required
@@ -123,3 +120,13 @@ class PayURecPayment(payu_views.RecPayment):
 class PayUNotifyView(payu_views.NotifyView):
     order_model = models.PayUOrder
 
+
+class MembershipView(UpdateView):
+    fields = ['name']
+
+    def get_success_url(self):
+        # TODO: get only current schedule if multiple.
+        return self.object.schedule_set.first().get_absolute_url()
+
+    def get_object(self):
+        return self.request.user.membership
index 72a5249..8b02fda 100644 (file)
@@ -50,6 +50,10 @@ urlpatterns += [
     url(r'^newsletter/', include('newsletter.urls')),
     url(r'^formularz/', include('contact.urls')),
     url(r'^isbn/', include('isbn.urls')),
+
+    url(r'^paypal/app-form/$', RedirectView.as_view(
+        url='/towarzystwo/dolacz/?app=1', permanent=True)),
+
     url(r'^paypal/', include('paypal.urls')),
     url(r'^powiadomienie/', include('push.urls')),
     url(r'^towarzystwo/', include('club.urls')),