537 lines
18 KiB
Python
537 lines
18 KiB
Python
from django.shortcuts import render, redirect
|
|
from .models import UsefulLinks, CalendarEvent, MembershipPerson, Payments, SCHAOfficer, Membership
|
|
from .forms import (
|
|
ChildrenForm,
|
|
CommunityPostForm,
|
|
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 ="https://www.schawheaton.com/"
|
|
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_1P5KBtIbGKYTLTtMJ0Rh1jMu',
|
|
#'price_1P5K7uIbGKYTLTtMFNxbkA8X'
|
|
#'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):
|
|
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("Validating the captcha form")
|
|
print(request.POST.get("captcha",""))
|
|
captchaForm = CaptchaForm({
|
|
"captcha": request.POST.get("captcha","")
|
|
})
|
|
print(f"Captch form is: {captchaForm.is_valid()}")
|
|
|
|
|
|
print(f"peopleForm1 form is: {peopleForm1.is_valid()}")
|
|
print(f"peopleForm2 form is: {peopleForm2.is_valid()}")
|
|
print(f"servicesForm form is: {servicesForm.is_valid()}")
|
|
|
|
|
|
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():
|
|
print("starting to save")
|
|
try:
|
|
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()
|
|
except Exception as e:
|
|
print(e)
|
|
|
|
return redirect("index2")
|
|
|
|
else:
|
|
print("Some field is not valid")
|
|
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", {})
|
|
|
|
|
|
def login(request):
|
|
if request.method == "POST":
|
|
raise NotImplementedError()
|
|
else:
|
|
return render(request, "schasite/signin.html",{})
|
|
|
|
def password_reset(request):
|
|
if request.method == "POST":
|
|
raise NotImplementedError()
|
|
else:
|
|
return render(request, "schasite/password_reset.html",{})
|
|
|
|
def set_password(request):
|
|
if request.method == "POST":
|
|
raise NotImplementedError()
|
|
else:
|
|
return render(request, "schasite/set_password.html",{})
|
|
|
|
def member_directory(request):
|
|
if request.method == "POST":
|
|
raise NotImplementedError()
|
|
else:
|
|
return render(request, "schasite/member_directory.html",{})
|
|
|
|
def member_dashboard(request):
|
|
if request.method == "POST":
|
|
raise NotImplementedError()
|
|
else:
|
|
return render(request, "schasite/member_dashboard.html",{})
|
|
|
|
def member_posts(request):
|
|
if request.method == "POST":
|
|
raise NotImplementedError()
|
|
else:
|
|
posts = CommunityPost.objects.all()[:5]
|
|
return render(request, "schasite/member_posts.html",{"posts":posts})
|
|
|
|
def member_posts_create(request):
|
|
if request.method == "POST":
|
|
community_post_form = CommunityPostForm(request.POST)
|
|
if community_post_form.is_valid():
|
|
community_post_form.save()
|
|
return render(request, "schasite/member_posts.html",{})
|
|
else:
|
|
print(f'Error creating the post: {community_post_form.errors}')
|
|
return render(request, "schasite/member_posts_create.html",{"community_post": community_post_form})
|
|
|
|
else:
|
|
return render(request, "schasite/member_posts_create.html",{"community_post": CommunityPostForm()})
|
|
|
|
def member_posts_detail(request, post_id):
|
|
if request.method == "POST":
|
|
raise NotImplementedError()
|
|
else:
|
|
return render(request, "schasite/member_posts_detail.html",{})
|
|
|
|
def profile(request):
|
|
if request.method == "POST":
|
|
raise NotImplementedError()
|
|
else:
|
|
return render(request, "schasite/profile.html",{})
|