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