Files
scha/schasite/views.py

462 lines
16 KiB
Python

from django.shortcuts import render, redirect
from .models import UsefulLinks, CalendarEvent, MembershipPerson, Payments, SCHAOfficer, Membership
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 index2(request):
return render(request, "schasite/index2.html", {})
def about_us2(request):
return render(request, "schasite/about_us2.html", {})
def newsletters2(request):
return render(request, "schasite/newsletters2.html", {})
def calendar2(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/calendar2.html",
{
"future_events": sanitized_future_events,
"past_events": sanitized_past_events,
},
)
def scha_board2(request):
def get_officer(position_name):
try:
return SCHAOfficer.objects.get(position=position_name)
except:
return None
officers = [
get_officer("President"),
get_officer("1st Vice President"),
get_officer("2nd Vice President"),
get_officer("Treasurer"),
get_officer("Secretary"),
get_officer("Website"),
get_officer("Membership"),
get_officer("Directory"),
get_officer("Facebook"),
get_officer("Eblasts"),
]
return render(request, "schasite/scha_board2.html", {"officers": officers})
def dues2(request):
return render(request, "schasite/dues2.html", {})
def membership_form2(request):
print(request)
print(request.POST)
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
address_data = {
"address_1": request.POST.get("streetAddress", ""),
"address_2": request.POST.get("unit", ""),
"city": request.POST.get("city", "60189"),
"state": request.POST.get("state", "IL"),
"zip_code": request.POST.get("zipCode", "60189"),
}
print(address_data)
addressForm = AddressForm(address_data)
print(f"is addressForm valid: {addressForm.is_valid()}")
if not addressForm.is_valid():
print(f"addressForm Errors: {addressForm.errors}")
services_data = {
"babysitting": True if request.POST.get("babysitting", "") == "on" else False,
"lawn_mowing": True if request.POST.get("lawn_mowing", "") == "on" else False,
"snow_shoveling": True if request.POST.get("snow_shoveling", "") == "on" else False,
"leaf_raking": True if request.POST.get("leaf_raking", "") == "on" else False,
"petsitting": True if request.POST.get("petsitting", "") == "on" else False,
"house_sitting": True if request.POST.get("house_sitting", "") == "on" else False,
"other": True if request.POST.get("other", "") == "on" else False,
"other_desc": True if request.POST.get("other_desc", "") == "on" else False,
}
committee_data = {
"block_captain": True if request.POST.get("block_captain", "") == "on" else False,
"coordinator": True if request.POST.get("coordinator", "") == "on" else False,
"egg_hunt": True if request.POST.get("egg_hunt", "") == "on" else False,
"spring_garage_sale": True if request.POST.get("spring_garage_sale", "") == "on" else False,
"golf_outing": True if request.POST.get("golf_outing", "") == "on" else False,
"ice_cream_social": True if request.POST.get("ice_cream_social", "") == "on" else False,
"fall_garage_sale": True if request.POST.get("fall_garage_sale", "") == "on" else False,
"halloween_party": True if request.POST.get("halloween_party", "") == "on" else False,
"santa_visit": True if request.POST.get("santa_visit", "") == "on" else False,
"website": True if request.POST.get("website", "") == "on" else False,
"civic_affair": True if request.POST.get("civic_affair", "") == "on" else False,
"phone_directory": True if request.POST.get("phone_directory", "") == "on" else False,
"no_preference": True if request.POST.get("no_preference", "") == "on" else False,
}
servicesForm = ServicesForm(services_data)
committeeForm = CommitteeForm(committee_data)
person1_data = {
"first_name": request.POST.get("firstName1"),
"last_name": request.POST.get("lastName1"),
"email": request.POST.get("email1"),
"phone_number": sanitize_phone_number(request.POST.get("phone1")),
}
person2_data = {
"frist_name": request.POST.get("firstName2"),
"last_name": request.POST.get("lastName2"),
"email": request.POST.get("email2"),
"phone_number": sanitize_phone_number(request.POST.get("phone2")),
}
peopleForm1 = PeopleForm(person1_data)
peopleForm2 = PeopleForm(person2_data)
print(peopleForm1)
breakpoint()
for form in [addressForm, servicesForm, committeeForm, peopleForm1, peopleForm2]:
print(f"is form valid: {form.is_valid()}")
if not form.is_valid():
print(f"form Errors: {form.errors}")
# captchaForm = CaptchaForm(post_data)
if (
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():
membership = Membership.objects.create()
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("index2")
else:
return render(
request,
"schasite/membership_form2.html",
{
"peopleForm1": peopleForm1,
"peopleForm2": peopleForm2,
"addressForm": addressForm,
"committeeForm": committeeForm,
"servicesForm": servicesForm,
# 'captchaForm': captchaForm,
},
)
else:
return render(
request,
"schasite/membership_form2.html",
{
"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 useful_links2(request):
useful_links = UsefulLinks.objects.all()
return render(request, "schasite/useful_links2.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", {})