Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion membership/admin.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
from django.contrib import admin
from .models import Business, BusinessTeamMember, Plan, Payment
from .models import Business, BusinessTeamMember, Plan, Payment, Subscription

# Register your models here.
admin.site.register(Business)
admin.site.register(BusinessTeamMember)
admin.site.register(Plan)
admin.site.register(Payment)
admin.site.register(Subscription)
9 changes: 9 additions & 0 deletions membership/forms.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
from django import forms
from .models import Payment


class PaymentForm(forms.ModelForm):

class Meta:
model = Payment
fields = ['phone']
41 changes: 41 additions & 0 deletions membership/templates/membership/payment.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
{% extends 'base.html' %}
{% load crispy_forms_tags %}


{% block content %}
<div class="container">
<div class="row">
<div class="col-md-4"></div>
<div class="col-md-4">
{% if messages %}
<div class="messages">
{% for message in messages %}
<p class="alert alert-warning" >
{{ message }}</p>
{% endfor %}
</div>
{% endif %}
<div class="card">
<div class="card-body text-center">
<form id="paymentForm" action="." method="POST" autocomplete="off">
{% csrf_token %}

{{form|crispy}}

<div class="mb-3 mt-3 form-group">
<button class="btn btn-danger btn-block btn-lg" id="make-payment">Pay Tshs. {{plans.price|floatformat:2}}/=</button>
<p class="mb-2 mt-2 text-secondary">Your Order ID: {{subscription.id}}</p>
</div>
<div class="mb-2">
<small>Please keep your phone in hand. Once you click "Pay" a request to comfirm your M-PESA PIN sent to your phone.</small>
</div>
</form>
</div>
</div>

</div>
<div class="col-md-4"></div>
</div>
</div>

{% endblock %}
29 changes: 22 additions & 7 deletions membership/templates/membership/pricing_page.html
Original file line number Diff line number Diff line change
Expand Up @@ -8,21 +8,36 @@ <h3 class="display-5">Pricing</h3>

<div class="container">
<div class="card-deck mb-3 text-center">
{% for plan in plans %}
{% for plan in object_list %}
<div class="card mb-4 shadow-sm">
<div class="card-header">
<h4 class="my-0 font-weight-normal">{{plan.name}}</h4>
</div>
<div class="card-body">
<h5 class="card-title pricing-card-title">Tshs. {{plan.price}} <small class="text-muted">/ mo</small></h5>
<ul class="list-unstyled mt-3 mb-4">
<li>10 users included</li>
<li>2 GB of storage</li>
<li>Email support</li>
<li>Help center access</li>
<li>3 users included</li>
<li>3 Branch/store</li>
<li>Free support</li>
<li>Centre manager</li>
</ul>
<button type="button" class="btn btn-lg btn-block btn-primary">Get started</button>
<button type="button" class="btn btn-lg btn-block btn-outline-primary">Sign up for free</button>
{% if plan.name == 'Free' %}
{% if plan.name != current_plan %}
<a href="{% url 'accounts:signup' %}" class="btn btn-lg btn-block btn-outline-primary">Sign up for free</a>
{% else %}
<small class="text-danger">This is your current plan</small>
{% endif %}
{% else %}
<form action="" method="POST">
{% csrf_token %}
{% if plan.name != current_plan %}
<button class="btn btn-lg btn-block btn-primary">Get started</button>
{% else %}
<small class="text-danger">This is your current plan</small>
{% endif %}
<input type="hidden" name="plan_id" value="{{plan.id}}">
</form>
{% endif %}
</div>
</div>
{% endfor %}
Expand Down
2 changes: 1 addition & 1 deletion membership/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,5 @@
app_name = 'membership'

urlpatterns = [
# path('', views.PricingPage.as_view(), name='membership')
path('', views.paymentView, name='payment')
]
83 changes: 74 additions & 9 deletions membership/views.py
Original file line number Diff line number Diff line change
@@ -1,19 +1,84 @@
from django.shortcuts import render
from django.views.generic import TemplateView
from .models import Plan
from django.http import HttpResponseRedirect
from django.urls import reverse
from django.views.generic import TemplateView, ListView
from django.contrib import messages
from .models import Plan, Subscription
from .forms import PaymentForm


class PricingPage(TemplateView):
def get_user_plan(request):
user_plan_qs = Subscription.objects.filter(business=request.user.business)
print('user_plan_qs:', user_plan_qs)
if user_plan_qs.exists():
return user_plan_qs.first()
return None


def get_selected_plan(request):
plan_type = request.session['selected_plan_type']
print('plan_type:', plan_type)
selected_plan_qs = Plan.objects.filter(
name=plan_type)
if selected_plan_qs.exists():
return selected_plan_qs.first()
return None


class PricingPage(ListView):
template_name = 'membership/pricing_page.html'
model = Plan

def get_context_data(self, *args, **kwargs):
context = super().get_context_data(**kwargs)
current_plan = get_user_plan(self.request)
context['current_plan'] = str(current_plan.plan)
return context

def post(self, request, *args, **kwargs):
selected_plan_type = request.POST.get('plan_id')

user_subscription = get_user_plan(request)

selected_plan_qs = Plan.objects.filter(
id=selected_plan_type)

if selected_plan_qs.exists():
selected_plan = selected_plan_qs.first()

#VALIDATION
if user_subscription.plan == selected_plan:
if user_subscription != None:
messages.info(request, "Your have already this plan")
return HttpResponseRedirect(request.META.get('HTTP_REFERER'))

#ASIGN TO SESSION
request.session['selected_plan_type'] = selected_plan.name

return HttpResponseRedirect(reverse('membership:payment'))


def paymentView(request):

selected_plan = get_selected_plan(request)

plans = Plan.objects.get(name=selected_plan)



if request.method == 'POST':
form = PaymentForm(request.POST)
if form.is_valid():
form.save()

return HttpResponse('Payment successfully')

def get(self, request, *args, **kwargs):
else:
form = PaymentForm()
context = {'form':form, 'plans':plans}

plans = Plan.objects.all()
return render(request, 'membership/payment.html', context)

context = {
'plans': plans
}

return render(request, self.template_name, context=context)