X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/cfd875594597d9d44b7b89839c4c53897646a1d7..a7d1e3cd75cd56c3f9a5ddceb63196aad9d1db65:/src/club/payment_methods.py diff --git a/src/club/payment_methods.py b/src/club/payment_methods.py index c20768546..e74ae83ca 100644 --- a/src/club/payment_methods.py +++ b/src/club/payment_methods.py @@ -3,12 +3,16 @@ # from django.conf import settings from django.urls import reverse +from django.utils.timezone import now 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]) @@ -16,6 +20,7 @@ class PaymentMethod(object): class PayU(PaymentMethod): is_onetime = True + expiration_reliable = True slug = 'payu' name = 'PayU' template_name = 'club/payment/payu.html' @@ -39,6 +44,9 @@ class PayURe(PaymentMethod): 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 @@ -53,13 +61,41 @@ class PayURe(PaymentMethod): ip = request.META['REMOTE_ADDR'] else: ip = '127.0.0.1' + + if request is None: + if not self.needs_retry(schedule): + return + order = PayUOrder.objects.create( pos_id=self.pos_id, customer_ip=ip, schedule=schedule, ) return order.put() + + def needs_retry(self, schedule): + retry_last = schedule.payuorder_set.exclude( + created_at=None).order_by('-created_at').first() + if retry_last is None: + return True + + n = now().date() + days_since_last = (n - retry_last.created_at.date()).days + + retry_start = max( + schedule.expires_at.date(), + settings.CLUB_RETRIES_START + ) + retry_days = (n - retry_start).days + if retry_days > settings.CLUB_RETRY_DAYS_MAX: + print('expired') + return False + if retry_days > settings.CLUB_RETRY_DAYS_DAILY: + print('retry less often now') + return days_since_last > settings.CLUB_RETRY_LESS + return days_since_last > 0 + class PayPal(PaymentMethod): slug = 'paypal'