Coverage for donate\views.py: 35%
34 statements
« prev ^ index » next coverage.py v7.4.4, created at 2024-06-20 12:38 +0100
« prev ^ index » next coverage.py v7.4.4, created at 2024-06-20 12:38 +0100
1import stripe
2from django.conf import settings
3from django.contrib import messages
4from django.contrib.auth import get_user
5from django.shortcuts import redirect
6from stripe.error import StripeError
8from donate.models import StripeTransaction, Payment
9from donation.models import Donation
12def update_user_details(request):
13 user = get_user(request)
14 user.first_name = request.POST['first-name']
15 user.last_name = request.POST['last-name']
16 user.email = request.POST['email']
17 user.save()
20def save_transaction(request, charge):
21 Payment.objects.create(
22 user=get_user(request),
23 donation=Donation.objects.get(id=request.POST['cause']),
24 stripe_payment=StripeTransaction.objects.create(
25 stripe_charge_id=charge['id'],
26 amount=charge['amount'] / 100,
27 )
28 )
31def make_stripe_payment(request):
32 stripe.api_key = settings.STRIPE_SK
33 user = get_user(request)
35 try:
36 return stripe.Charge.create(
37 amount=int(request.POST['custom-amount']) * 100,
38 currency='usd',
39 description=Donation.objects.get(id=request.POST['cause']).title,
40 customer=stripe.Customer.create(
41 email=user.email,
42 name=user.username,
43 source=request.POST['stripeToken']
44 )
45 )
46 except StripeError as e:
47 messages.error(request, str(e))
48 return None
51def donate(request):
52 if request.method == 'POST':
53 update_user_details(request)
54 charge = make_stripe_payment(request)
55 if charge is None:
56 return redirect('donations')
57 save_transaction(request, charge)
58 message = (f'Thank you for your donation of '
59 f'${int(charge["amount"] / 100)}, You may see it in '
60 f'the first row of this table')
61 messages.success(request, message)
62 return redirect('history')