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", {})