143 lines
5.3 KiB
Python
143 lines
5.3 KiB
Python
# -*- coding: utf-8 -*-
|
|
from __future__ import unicode_literals, absolute_import
|
|
|
|
from django.utils import timezone
|
|
from django.conf import settings
|
|
from django.shortcuts import redirect
|
|
from django.views.generic import UpdateView, RedirectView
|
|
|
|
from django.contrib import messages
|
|
from django.contrib.auth.models import Group
|
|
from django.contrib.auth.mixins import LoginRequiredMixin
|
|
|
|
from mhackspace.users.models import User, Membership
|
|
from mhackspace.users.models import MEMBERSHIP_CANCELLED
|
|
from mhackspace.users.forms import MembershipJoinForm
|
|
from mhackspace.subscriptions.payments import select_provider
|
|
from mhackspace.subscriptions.helper import create_or_update_membership, cancel_membership
|
|
|
|
|
|
class MembershipCancelView(LoginRequiredMixin, RedirectView):
|
|
permanent = False
|
|
pattern_name = 'users:detail'
|
|
|
|
def get_redirect_url(self, *args, **kwargs):
|
|
payment_provider = 'gocardless'
|
|
provider = select_provider(payment_provider)
|
|
|
|
member = Membership.objects.filter(user=self.request.user).first()
|
|
|
|
result = provider.cancel_subscription(
|
|
user=self.request.user,
|
|
reference=member.reference
|
|
)
|
|
|
|
# if result.get('success') is True:
|
|
cancel_membership(user=self.request.user)
|
|
messages.add_message(
|
|
self.request,
|
|
messages.SUCCESS,
|
|
'Your membership has now been cancelled')
|
|
kwargs['username'] = self.request.user.get_username()
|
|
return super(MembershipCancelView, self).get_redirect_url(*args, **kwargs)
|
|
|
|
|
|
class MembershipJoinView(LoginRequiredMixin, UpdateView):
|
|
model = User
|
|
fields = []
|
|
|
|
def get_object(self):
|
|
# Only get the User record for the user making the request
|
|
return User.objects.get(username=self.request.user.username)
|
|
|
|
def form_valid(self, form):
|
|
payment_provider = 'gocardless'
|
|
provider = select_provider(payment_provider)
|
|
app_domain = provider.get_redirect_url()
|
|
user_code = str(self.request.user.id).zfill(5)
|
|
# settings.PAYMENT_PROVIDERS[payment_provider]['redirect_url']
|
|
|
|
form_subscription = MembershipJoinForm(data=self.request.POST)
|
|
form_subscription.is_valid()
|
|
|
|
result = {
|
|
'email': self.request.user.email,
|
|
'reference': user_code,
|
|
'amount': form_subscription.cleaned_data.get('amount', 20.00),
|
|
'start_date': timezone.now()
|
|
}
|
|
|
|
create_or_update_membership(
|
|
user=self.request.user,
|
|
signup_details=result,
|
|
complete=False
|
|
)
|
|
|
|
success_url = '%s/membership/%s/success' % (app_domain, payment_provider)
|
|
failure_url = '%s/membership/%s/failure' % (app_domain, payment_provider)
|
|
url = provider.create_subscription(
|
|
user=self.request.user,
|
|
session=self.request.session.session_key,
|
|
amount=form_subscription.cleaned_data.get('amount', 20.00),
|
|
name="Membership your membership id is MH%s" % user_code,
|
|
redirect_success=success_url,
|
|
redirect_failure=failure_url
|
|
)
|
|
|
|
return redirect(url.redirect_url)
|
|
|
|
|
|
class MembershipJoinSuccessView(LoginRequiredMixin, RedirectView):
|
|
permanent = False
|
|
pattern_name = 'users:detail'
|
|
|
|
def get_redirect_url(self, *args, **kwargs):
|
|
payment_provider = 'gocardless'
|
|
provider = select_provider(payment_provider)
|
|
print(self.request.user)
|
|
membership = Membership.objects.get(user=self.request.user)
|
|
|
|
name = "Membership your membership id is MH%s" % membership.reference
|
|
result = provider.confirm_subscription(
|
|
membership=membership,
|
|
session=self.request.session.session_key,
|
|
provider_response=self.request.GET,
|
|
name=name
|
|
)
|
|
|
|
# if something went wrong return to profile with an error
|
|
|
|
result['start_date'] = timezone.now()
|
|
if result.get('success') is False:
|
|
messages.add_message(
|
|
self.request,
|
|
messages.ERROR,
|
|
'Failure something went wrong activating your membership please contact us.')
|
|
return super(MembershipJoinSuccessView, self).get_redirect_url(*args, **kwargs)
|
|
|
|
del(kwargs['provider'])
|
|
|
|
if create_or_update_membership(user=self.request.user,
|
|
signup_details=result,
|
|
complete=True) is True:
|
|
messages.add_message(
|
|
self.request,
|
|
messages.SUCCESS,
|
|
'Success your membership should now be active')
|
|
kwargs['username'] = self.request.user.get_username()
|
|
return super(MembershipJoinSuccessView, self).get_redirect_url(*args, **kwargs)
|
|
|
|
|
|
class MembershipJoinFailureView(LoginRequiredMixin, RedirectView):
|
|
permanent = False
|
|
pattern_name = 'users:detail'
|
|
|
|
def get_redirect_url(self, *args, **kwargs):
|
|
del(kwargs['provider'])
|
|
messages.add_message(
|
|
self.request,
|
|
messages.ERROR,
|
|
'Failed to sign up something went wrong with your payment, please contact us at %s' % settings.EMAIL_SUPPORT)
|
|
kwargs['username'] = self.request.user.get_username()
|
|
return super(MembershipJoinFailureView, self).get_redirect_url(*args, **kwargs)
|