inital check in
This commit is contained in:
199
schasite/views.py
Normal file
199
schasite/views.py
Normal file
@@ -0,0 +1,199 @@
|
||||
from django.shortcuts import render, redirect
|
||||
from .models import UsefulLinks, CalendarEvent, MembershipPerson, Payments
|
||||
from .forms import ChildrenForm, AddressForm, PeopleForm, CommitteeForm, ServicesForm#, CaptchaForm
|
||||
from django.db import transaction, IntegrityError
|
||||
# Stripe required imports
|
||||
from django.conf import settings # new
|
||||
from django.http.response import JsonResponse, HttpResponse
|
||||
from django.views.decorators.csrf import csrf_exempt # new
|
||||
import stripe
|
||||
|
||||
"""
|
||||
Strip Stuff
|
||||
Tutorial: https://testdriven.io/blog/django-stripe-tutorial/
|
||||
"""
|
||||
def dues(request):
|
||||
return render(request, "schasite/dues.html", {})
|
||||
|
||||
@csrf_exempt
|
||||
def stripe_config(request):
|
||||
if request.method == 'GET':
|
||||
stripe_config = {'publicKey': settings.STRIPE_PUBLISHABLE_KEY}
|
||||
return JsonResponse(stripe_config, safe=False)
|
||||
|
||||
@csrf_exempt
|
||||
def create_checkout_session(request):
|
||||
if request.method == 'GET':
|
||||
domain_url = "http://localhost:8000/"
|
||||
stripe.api_key = settings.STRIPE_SECRET_KEY
|
||||
try:
|
||||
checkout_session = stripe.checkout.Session.create(
|
||||
success_url = domain_url+'success?session_id={CHECKOUT_SESSION_ID}',
|
||||
cancel_url = domain_url+'cancelled/',
|
||||
payment_method_types=['card'],
|
||||
mode="payment",
|
||||
line_items = [{
|
||||
# 'name':'SCHA Dues',
|
||||
'quantity': 1,
|
||||
# 'currency': 'usd',
|
||||
'price': 'price_1OxZLfDV0RPXOyxG5ipjhUXk',
|
||||
}]
|
||||
)
|
||||
return JsonResponse({'sessionId': checkout_session['id']})
|
||||
except Exception as e:
|
||||
return JsonResponse({'error': str(e)})
|
||||
|
||||
def stripe_success(request):
|
||||
return render(request, "schasite/dues_success.html", {})
|
||||
|
||||
def stripe_cancelled(request):
|
||||
return render(request, "schasite/dues_cancelled.html", {})
|
||||
|
||||
@csrf_exempt
|
||||
def stripe_webhook(request):
|
||||
stripe.api_key = settings.STRIPE_SECRET_KEY
|
||||
endpoint_secret = settings.STRIPE_ENDPOINT_SECRET
|
||||
payload = request.body
|
||||
sig_header = request.META['HTTP_STRIPE_SIGNATURE']
|
||||
event = None
|
||||
|
||||
try:
|
||||
event = stripe.Webhook.construct_event(
|
||||
payload, sig_header, endpoint_secret
|
||||
)
|
||||
except ValueError as e:
|
||||
# Invalid payload
|
||||
return HttpResponse(status=400)
|
||||
except stripe.error.SignatureVerificationError as e:
|
||||
# Invalid signature
|
||||
return HttpResponse(status=400)
|
||||
|
||||
# Handle the checkout.session.completed event
|
||||
if event['type'] == 'checkout.session.completed':
|
||||
email = None
|
||||
try:
|
||||
email = event['data']['object']['customer_details']['email']
|
||||
except:
|
||||
pass
|
||||
person = MembershipPerson.objects.filter(email=email).first() # just take the first
|
||||
|
||||
payment = Payments.objects.create(
|
||||
email=email,
|
||||
person = person
|
||||
)
|
||||
# try to link to a member
|
||||
payment.save()
|
||||
# TODO: run some custom code here
|
||||
|
||||
return HttpResponse(status=200)
|
||||
|
||||
"""
|
||||
Django Stuff
|
||||
"""
|
||||
def useful_links(request):
|
||||
useful_links = UsefulLinks.objects.all()
|
||||
return render(request, "schasite/useful_links.html", {"links": useful_links})
|
||||
|
||||
def index(request):
|
||||
return render(request, "schasite/index.html", {})
|
||||
|
||||
def about_us(request):
|
||||
return render(request, "schasite/about_us.html", {})
|
||||
|
||||
def calendar(request):
|
||||
all_events = CalendarEvent.objects.all()
|
||||
future_events = [event if event.future_event() else None for event in all_events]
|
||||
past_events = [event if event.past_event() else None for event in all_events]
|
||||
# remove none for each list
|
||||
sanitized_future_events = [i for i in future_events if i is not None]
|
||||
sanitized_past_events = [i for i in past_events if i is not None]
|
||||
return render(request, "schasite/calendar.html", {'future_events': sanitized_future_events,
|
||||
'past_events': sanitized_past_events})
|
||||
|
||||
def newsletters(request):
|
||||
return render(request, "schasite/newsletters.html", {})
|
||||
|
||||
def membership_form(request):
|
||||
def sanitize_phone_number(data):
|
||||
if len(data) > 0:
|
||||
data = data.replace('-','')
|
||||
if not data.startswith('+1'):
|
||||
data = '+1' + data
|
||||
|
||||
return data
|
||||
if request.method == "POST":
|
||||
# before we pass in the data we want to sanitize the phone numbers
|
||||
post_data = request.POST.copy()
|
||||
post_data.update({'person1-phone_number':sanitize_phone_number(post_data['person1-phone_number'])})
|
||||
post_data.update({'person2-phone_number':sanitize_phone_number(post_data['person2-phone_number'])})
|
||||
membershipForm = ChildrenForm(post_data)
|
||||
addressForm = AddressForm(post_data)
|
||||
peopleForm1 = PeopleForm(post_data, prefix='person1')
|
||||
peopleForm2 = PeopleForm(post_data, prefix='person2')
|
||||
servicesForm = ServicesForm(post_data)
|
||||
committeeForm= CommitteeForm(post_data)
|
||||
# captchaForm = CaptchaForm(post_data)
|
||||
|
||||
|
||||
if membershipForm.is_valid() and addressForm.is_valid() and committeeForm.is_valid() and (peopleForm1.is_valid() or peopleForm2.is_valid()) and servicesForm.is_valid(): # and captchaForm.is_valid():
|
||||
with transaction.atomic():
|
||||
membershipForm = ChildrenForm({**post_data})
|
||||
membership = membershipForm.save(commit=False)
|
||||
membership.save()
|
||||
|
||||
if peopleForm1.is_valid():
|
||||
people1_obj = peopleForm1.save(commit=False)
|
||||
people1_obj.membership = membership
|
||||
people1_obj.save()
|
||||
|
||||
if peopleForm2.is_valid():
|
||||
people2_obj = peopleForm2.save(commit=False)
|
||||
people2_obj.membership = membership
|
||||
people2_obj.save()
|
||||
|
||||
committee_obj = committeeForm.save(commit=False)
|
||||
committee_obj.membership = membership
|
||||
committee_obj.save()
|
||||
|
||||
services_obj = servicesForm.save(commit=False)
|
||||
services_obj.membership = membership
|
||||
services_obj.save()
|
||||
|
||||
address_obj = addressForm.save(commit=False)
|
||||
address_obj.membership = membership
|
||||
address_obj.save()
|
||||
|
||||
return redirect('index')
|
||||
|
||||
|
||||
else:
|
||||
return render(request,
|
||||
"schasite/membership_form.html",
|
||||
{
|
||||
'membershipForm': ChildrenForm,
|
||||
'peopleForm1': peopleForm1,
|
||||
'peopleForm2': peopleForm2,
|
||||
'addressForm': addressForm,
|
||||
'committeeForm' : committeeForm,
|
||||
'servicesForm': servicesForm,
|
||||
# 'captchaForm': captchaForm,
|
||||
} )
|
||||
else:
|
||||
return render(request,
|
||||
"schasite/membership_form.html",
|
||||
{'membershipForm': ChildrenForm(),
|
||||
'peopleForm1': PeopleForm(prefix='person1'),
|
||||
'peopleForm2': PeopleForm(prefix='person2'),
|
||||
'committeeForm' : CommitteeForm(),
|
||||
'servicesForm': ServicesForm(),
|
||||
# 'captchaForm': CaptchaForm(),
|
||||
"addressForm": AddressForm(
|
||||
initial={
|
||||
"city": "Wheaton",
|
||||
"state": "IL",
|
||||
"zip_code": 60189,
|
||||
}
|
||||
)})
|
||||
|
||||
def scha_board(request):
|
||||
return render(request, "schasite/scha_board.html", {})
|
||||
Reference in New Issue
Block a user