File diff cbf3f5814bb5 → 6c87b9d08a2d
registripe/views.py
Show inline comments
...
 
@@ -9,58 +9,68 @@ from django.http import HttpResponse
 
from django.shortcuts import redirect, render
 

	
 
from registrasion.controllers.invoice import InvoiceController
 
from registrasion.models import commerce
 

	
 
from pinax.stripe import actions
 
from stripe.error import StripeError
 

	
 
from symposion.conference.models import Conference
 

	
 
CURRENCY = settings.INVOICE_CURRENCY
 
CONFERENCE_ID = settings.CONFERENCE_ID
 

	
 

	
 
def pubkey_script(request):
 
    ''' Returns a JS snippet that sets the Stripe public key for Stripe.js. '''
 

	
 
    script_template = "Stripe.setPublishableKey('%s');"
 
    script = script_template % settings.PINAX_STRIPE_PUBLIC_KEY
 

	
 
    return HttpResponse(script, content_type="text/javascript")
 

	
 

	
 
def card(request, invoice_id):
 
    ''' View that shows and processes a Stripe CreditCardForm to pay the given
 
    invoice. Redirects back to the invoice once the invoice is fully paid.
 

	
 
    Arguments:
 
        invoice_id (castable to str): The invoice id for the invoice to pay.
 

	
 
    '''
 

	
 
    form = forms.CreditCardForm(request.POST or None)
 

	
 
    inv = InvoiceController.for_id_or_404(str(invoice_id))
 

	
 
    if not inv.can_view(user=request.user):
 
        raise Http404()
 

	
 
    to_invoice = redirect("invoice", inv.invoice.id)
 

	
 
    if inv.invoice.balance_due() <= 0:
 
        return to_invoice
 

	
 
    if request.POST and form.is_valid():
 
        try:
 
            inv.validate_allowed_to_pay()  # Verify that we're allowed to do this.
 
            process_card(request, form, inv)
 
            return to_invoice
 
        except StripeError as e:
 
            form.add_error(None, ValidationError(e))
 
        except ValidationError as ve:
 
            form.add_error(None, ve)
 

	
 
    data = {
 
        "invoice": inv.invoice,
 
        "form": form,
 
    }
 

	
 
    return render(
 
        request, "registrasion/stripe/credit_card_payment.html", data
 
    )
 

	
 

	
 
@transaction.atomic
 
def process_card(request, form, inv):
 
    ''' Processes the given credit card form