from django.shortcuts import render, redirect from .models import UsefulLinks, CalendarEvent, MembershipPerson, Payments, SCHAOfficer 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): 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_form2.html", { "membershipForm": ChildrenForm, "peopleForm1": peopleForm1, "peopleForm2": peopleForm2, "addressForm": addressForm, "committeeForm": committeeForm, "servicesForm": servicesForm, # 'captchaForm': captchaForm, }, ) else: return render( request, "schasite/membership_form2.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 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", {})