Implemented payment success and failure urls

This commit is contained in:
Oliver Marks 2017-02-09 20:12:59 +00:00
parent 6fec0e64bd
commit 2a9eade76d
4 changed files with 47 additions and 13 deletions

View File

@ -9,7 +9,7 @@ from django.views.generic import TemplateView
from django.views import defaults as default_views from django.views import defaults as default_views
from mhackspace.contact.views import contact from mhackspace.contact.views import contact
from mhackspace.members.views import MemberListView from mhackspace.members.views import MemberListView
from mhackspace.subscriptions.views import MembershipJoinView from mhackspace.subscriptions import views as subscription
from mhackspace.base.feeds import LatestEntriesFeed from mhackspace.base.feeds import LatestEntriesFeed
urlpatterns = [ urlpatterns = [
@ -33,7 +33,9 @@ urlpatterns = [
# Your stuff: custom urls includes go here # Your stuff: custom urls includes go here
url(r'^latest/$', LatestEntriesFeed()), url(r'^latest/$', LatestEntriesFeed()),
url(r'membership/join/$', MembershipJoinView.as_view(), name='join_hackspace'), url(r'membership/join/$', subscription.MembershipJoinView.as_view(), name='join_hackspace'),
url(r'membership/(?P<provider>[\w\-]+)/success$', subscription.MembershipJoinSuccessView.as_view(), name='join_hackspace_success'),
url(r'membership/(?P<provider>\w{0,50})/failure$', subscription.MembershipJoinFailureView.as_view(), name='join_hackspace_failure'),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

View File

@ -6,8 +6,7 @@
background-image: url('/static/images/membership_card_background.png'); background-image: url('/static/images/membership_card_background.png');
width: 430px; width: 430px;
height: 240px; height: 240px;
margin-left: 20px; margin: auto;
text-shadow: 1px 1px #FFF; text-shadow: 1px 1px #FFF;
position: relative; position: relative;
float: right;
} }

View File

@ -5,11 +5,12 @@ from django.conf import settings
from django.contrib.auth.models import AbstractUser from django.contrib.auth.models import AbstractUser
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.db import models from django.db import models
from django.contrib import messages
from django.utils.encoding import python_2_unicode_compatible from django.utils.encoding import python_2_unicode_compatible
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from django.shortcuts import redirect from django.shortcuts import redirect
from django.views.generic import UpdateView from django.views.generic import UpdateView, RedirectView
from django.contrib.auth.mixins import LoginRequiredMixin from django.contrib.auth.mixins import LoginRequiredMixin
from mhackspace.users.models import User from mhackspace.users.models import User
@ -37,8 +38,8 @@ class MembershipJoinView(LoginRequiredMixin, UpdateView):
form_subscription = MembershipJoinForm(data=self.request.POST) form_subscription = MembershipJoinForm(data=self.request.POST)
form_subscription.is_valid() form_subscription.is_valid()
success_url = '%s/profile/membership/%s/success' % (app_domain, payment_provider) success_url = '%s/membership/%s/success' % (app_domain, payment_provider)
failure_url = '%s/profile/membership/%s/failure' % (app_domain, payment_provider) failure_url = '%s/membership/%s/failure' % (app_domain, payment_provider)
url = provider.create_subscription( url = provider.create_subscription(
amount=form_subscription.cleaned_data.get('amount', 20.00), amount=form_subscription.cleaned_data.get('amount', 20.00),
name="Membership your membership id is MH%s" % user_code, name="Membership your membership id is MH%s" % user_code,
@ -47,3 +48,31 @@ class MembershipJoinView(LoginRequiredMixin, UpdateView):
) )
return redirect(url) return redirect(url)
class MembershipJoinSuccessView(LoginRequiredMixin, RedirectView):
permanent = False
pattern_name = 'users:detail'
def get_redirect_url(self, *args, **kwargs):
del(kwargs['provider'])
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')
kwargs['username'] = self.request.user.get_username()
return super(MembershipJoinFailureView, self).get_redirect_url(*args, **kwargs)

View File

@ -25,21 +25,25 @@
<p>Amount: &pound;{{membership.payment}}</p> <p>Amount: &pound;{{membership.payment}}</p>
</div> </div>
<div class="col-md-6"> <div class="col-md-6">
{% if membership.get_status %}
<div id="membercard" class="registered"> <div id="membercard" class="registered">
<div class="date">Joined {{membership.date}}</div> <div class="date">Joined {{membership.date}}</div>
<div class="container"> <div class="container">
<div class="middle"> <div class="middle">
<form method="POST" action="{% url 'join_hackspace' %}" class="contact_us_form">
{% csrf_token %}
{{ membership_form|crispy }}
<button class="btn btn-primary" type="submit" name="action">{% trans "Send" %}</button>
</form>
<p>MHS{{ user.id|stringformat:"05d" }}</p><p>{{user.name}}{{user.last_name}}</p> <p>MHS{{ user.id|stringformat:"05d" }}</p><p>{{user.name}}{{user.last_name}}</p>
<a href="/profile/membership/cancel">Cancel Membership</a> <a href="/profile/membership/cancel">Cancel Membership</a>
</div> </div>
</div> </div>
</div> </div>
{% endif %}
<div>
<h2>Sign up below</h2>
<form method="POST" action="{% url 'join_hackspace' %}" class="contact_us_form">
{% csrf_token %}
{{ membership_form|crispy }}
<button class="btn btn-primary" type="submit" name="action">{% trans "Send" %}</button>
</form>
</div>
</div> </div>
</div> </div>