示例#1
0
def make_donation(request):
    if request.method != 'POST':
        return HttpResponse(json.dumps({"error": "only POST supported"}))

    donor_form = DonorForm(request.POST)
    donation_form = DonationForm(request.POST)

    if not donor_form.is_valid():
        context = RequestContext(request)
        context.update({"donor_form": donor_form, "donation_form": donation_form})
        template = loader.get_template('support/donate_ajax.html')
        return HttpResponse(json.dumps({"html": template.render(context)}))

    if not donation_form.is_valid():
        return HttpResponse(json.dumps({"error": "Server Error; please reload and try again."}))

    donation_data = donation_form.cleaned_data
    donation_type = donation_data["donation_type"]
    donation_amount = donation_data["donation"]

    if donation_type == "C" or donation_type == "B":
        if donation_type == "C":
            account = balanced.Card.find(donation_data["cc_token"])
        elif donation_type == "B":

            account = balanced.BankAccount.find(donation_data["bank_token"])
            account.verify()

        resp = account.debit(amount=donation_amount, appears_on_statement_as="DCPython.org" )

        return HttpResponse(json.dumps(resp))
示例#2
0
def donor_update(request, secret=None):
    donor = get_object_or_404(Donor, secret=secret)
    if request.method == 'POST':
        form = DonorForm(request.POST, instance=donor)
        if form.is_valid():
            form.save()
    else:
        form = DonorForm(instance=donor)
    context = RequestContext(request)
    context.update({"secret": secret, "form": form, "name": donor.name})
    return render(request, 'support/donor_update.html', context)
示例#3
0
def support(request):
    # get all donors that are not pending and that have a valid donation
    all_donors = Donor.objects.active()
    context = RequestContext(request)

    #Pairs like ("Platnum", [donor_obj])
    all_sorted_donors = OrderedDict([(level[1], []) for level in LEVEL_DATA])

    for donor in all_donors:
        all_sorted_donors[donor.get_level()[1]].append(donor)

    context.update({"donor_form": DonorForm(),
                    "donation_form": DonationForm,
                    "stripe_public": settings.STRIPE_PUBLIC,
                    "all_donors": all_sorted_donors,
                    "no_logo_tiers": ["Other", "Individual"]})
    return render(request, 'support/support.html', context)
示例#4
0
def donor_update(request, secret=None):
    donor = get_object_or_404(Donor, secret=secret)
    if request.method == 'POST':
        form = DonorForm(request.POST, instance=donor)
        public_form = PublicDonorForm(request.POST,
                                      request.FILES,
                                      instance=donor)
        if form.is_valid() and public_form.is_valid():
            donor = form.save()
            # public_form = PublicDonorForm(request.POST, request.FILES, instance=donor)
            donor = public_form.save()
    else:
        form = DonorForm(instance=donor)
        public_form = PublicDonorForm(instance=donor)
    context = RequestContext(request)
    context.update({"secret": secret,
                    "form": form,
                    "public_form": public_form,
                    "name": donor.name,
                    'donor': donor})
    return render(request, 'support/donor_update.html', context)
示例#5
0
def make_donation(request):
    """
    this method is called via ajax by the donate page.
    if form is invalid, returns form containing error messages else,
    makes debit and redirects.
    """
    if request.method != 'POST':
        return HttpResponse(json.dumps({"error": "only POST supported"}))

    donor_form = DonorForm(request.POST)
    donation_form = DonationForm(request.POST)

    if not donor_form.is_valid():
        context = RequestContext(request)
        context.update({"donor_form": donor_form,
                        "donation_form": donation_form})
        template = loader.get_template('support/donate_ajax.html')
        return HttpResponse(json.dumps({"html": template.render(context)}))

    if not donation_form.is_valid():
        return HttpResponse(json.dumps(
            {"error": "Server Error; please reload and try again."}))

    donation_data = donation_form.cleaned_data
    donation_type = donation_data["donation_type"]
    donation_amount = donation_data["donation"]

    donor_data = donor_form.cleaned_data

    if donation_type == "C":

        # Create the charge on Stripe's servers - this will charge the user's card
        try:
            resp = stripe.Charge.create(
                amount=donation_amount*100, # amount in cents, again
                currency="usd",
                card=donation_data['cc_token'],
                description=donor_data['email']
            )
        except stripe.CardError as e:
            resp = {"payment_error": str(e)}
            return HttpResponse(json.dumps(resp))

        # we have a completed charge. save donor and donation to db.
        donor = donor_form.save()
        donation = Donation(
            donor=donor,
            datetime=datetime.datetime.fromtimestamp(resp.created),
            type='C',
            completed=True,
            donation=resp.amount / 100.0,
            transaction_id=resp.id)
        donation.save()

    if donation_type == "G":
        # we have a pending donation. save donor and donation to db.
        donor = donor_form.save()
        donation = Donation(donor=donor,
                            datetime=datetime.datetime.utcnow(),
                            type='G',
                            completed=False,
                            donation=donation_amount)
        donation.save()

    body = \
"""
Dear {},

Thank you for your generous {} of ${} DCPython.

You can update your profile at any time by accessing the following link:

http://dcpython.org/donor/{}

{}

Best,

Alex Clark
President, DCPython
"""

    donation = 'We will process your donation shortly. It may take several days before it is reflected on the website.'
    pledge = 'We will contact you shortly regarding your pledge.'
    body = body.format(donor.name, 'pledge' if donation_type == 'G' else
                       'donation', donation_amount, donor.secret, pledge if
                       donation_type == 'G' else donation)

    send_mail('Thank you for your support.',
              body,
              '*****@*****.**',
              [donor.email],
              fail_silently=False)

    mail_admins('Donation pending',
                'Donation pending',
                fail_silently=False,
                connection=None,
                html_message=None)
    resp = {'redirect': '/donor/{}'.format(donor.secret)}
    return HttpResponse(json.dumps(resp))