fix
[wolnelektury.git] / src / club / payment_methods.py
index 7657701..0c187a8 100644 (file)
@@ -3,11 +3,15 @@
 #
 from django.conf import settings
 from django.urls import reverse
+from paypal.rest import agreement_approval_url
 
 
 class PaymentMethod(object):
     is_onetime = False
     is_recurring = False
+    expiration_reliable = False
+    cancellable = False
+    updateable = False
 
     def initiate(self, request, schedule):
         return reverse('club_dummy_payment', args=[schedule.key])
@@ -15,6 +19,7 @@ class PaymentMethod(object):
 
 class PayU(PaymentMethod):
     is_onetime = True
+    expiration_reliable = True
     slug = 'payu'
     name = 'PayU'
     template_name = 'club/payment/payu.html'
@@ -34,10 +39,13 @@ class PayU(PaymentMethod):
 
 
 class PayURe(PaymentMethod):
-    slug='payu-re'
-    name = 'PayU (płatność odnawialna)'
+    slug = 'payu-re'
+    name = 'PayU recurring'
     template_name = 'club/payment/payu-re.html'
     is_recurring = True
+    expiration_reliable = True
+    cancellable = True
+    updateable = True
 
     def __init__(self, pos_id):
         self.pos_id = pos_id
@@ -61,24 +69,50 @@ class PayURe(PaymentMethod):
         
 
 class PayPal(PaymentMethod):
-    slug='paypal'
-    name = 'PayPal (płatność odnawialna)'
+    slug = 'paypal'
+    name = 'PayPal'
     template_name = 'club/payment/paypal.html'
     is_recurring = True
-    is_onetime = True
+    is_onetime = False
 
     def initiate(self, request, schedule):
-        return reverse('club_dummy_payment', args=[schedule.key])
+        app = request.GET.get('app')
+        return agreement_approval_url(schedule.amount, schedule.key, app=app)
 
+    def pay(self, request, schedule):
+        from datetime import date, timedelta, datetime
+        from pytz import utc
+        tomorrow = datetime(*(date.today() + timedelta(2)).timetuple()[:3], tzinfo=utc)
+        any_active = False
+        for ba in schedule.billingagreement_set.all():
+            active = ba.check_agreement()
+            ba.active = active
+            ba.save()
+            if active:
+                any_active = True
+        if any_active:
+            schedule.expires_at = tomorrow
+            schedule.save()
+
+
+methods = []
 
 pos = getattr(settings, 'CLUB_PAYU_RECURRING_POS', None)
 if pos:
     recurring_payment_method = PayURe(pos)
+    methods.append(recurring_payment_method)
 else:
     recurring_payment_method = None
 
 pos = getattr(settings, 'CLUB_PAYU_POS', None)
 if pos:
     single_payment_method = PayU(pos)
+    methods.append(single_payment_method)
 else:
     single_payment_method = None
+
+
+
+methods.append(
+    PayPal()
+)