Private
Public Access
1
0

basic withdraw and upgrade

This commit is contained in:
Sander Roosendaal
2021-11-10 21:44:05 +01:00
parent 6efae814af
commit 1926f7073d
5 changed files with 53 additions and 2 deletions

View File

@@ -27,6 +27,8 @@ from rowers.tasks import (
#handle_send_email_transaction_notification,
)
from rowers import credits
import pandas as pd
from rowsandall_app.settings import (
@@ -268,6 +270,7 @@ def update_subscription(rower,data,method='up'):
if result.is_success:
yesterday = (timezone.now()-datetime.timedelta(days=1)).date()
rower.paidplan = plan
eurocredits = credits.upgrade(int(amount),rower)
rower.planexpires = result.subscription.billing_period_end_date
rower.teamplanexpires = result.subscription.billing_period_end_date
rower.clubsize = plan.clubsize

26
rowers/credits.py Normal file
View File

@@ -0,0 +1,26 @@
from rowers.models import Rower
class InsufficientCreditError(Exception):
"""Raised when trying to subtract more than available"""
pass
def upgrade(amount, rower):
if rower.eurocredits > amount:
return rower.eurocredits
else:
rower.eurocredits = amount
rower.save()
return rower.eurocredits
return rower.eurocredits
def withdraw(amount, rower):
if rower.eurocredits < amount:
rower.eurocredits = 0
rower.save()
raise InsufficientCreditError
else:
rower.eurocredits = rower.eurocredits - amount
rower.save()
return rower.eurocredits
return rower.eurocredits

View File

@@ -878,6 +878,8 @@ class Rower(models.Model):
null=True,blank=True,
default='braintree')
eurocredits = models.IntegerField(default=0)
paidplan = models.ForeignKey(PaidPlan,null=True,default=None,on_delete=models.SET_NULL)
planexpires = models.DateField(default=current_day)

View File

@@ -6,6 +6,8 @@ from __future__ import unicode_literals
from rowers.views.statements import *
from django.core.mail import EmailMessage
from rowers import credits
@csrf_exempt
def braintree_webhook_view(request):
with open('braintreewebhooks.log','a') as f:
@@ -212,6 +214,11 @@ def purchase_checkouts_view(request):
return HttpResponseRedirect(reverse('rower_select_instantplan'))
amount, success = braintreestuff.make_payment(r,data)
diff = plan.price - amount
eurocredits = credits.withdraw(diff,r)
if success:
messages.info(request,"Your payment was completed and the sessions are copied to your calendar")
@@ -243,7 +250,7 @@ def purchase_checkouts_view(request):
p.rowers.add(r)
create_sessions_from_json(plansteps,r,startdate,r.user)
job = myqueue(queuehigh,handle_send_email_instantplan_notification,
r.user.username,
r.user.email,
@@ -251,7 +258,6 @@ def purchase_checkouts_view(request):
plan.name,
startdate,
enddate)
print(job,'noot')
url = reverse('plannedsessions_view')
timeperiod = startdate.strftime('%Y-%m-%d')+'/'+enddate.strftime('%Y-%m-%d')

View File

@@ -2621,10 +2621,24 @@ def rower_view_instantplan(request,id='',userid=0):
'id':id,
})
return HttpResponseRedirect(url)
# check if plan is free or credits are sufficient
if plan.price > 0:
if plan.price > r.eurocredits:
messages.error(request,'You did not have enough credit to purchase this plan')
url = reverse('rower_view_instantplan',kwargs={
'id':id,
})
return HttpResponseRedirect(url)
form = InstantPlanSelectForm(request.POST,targets=targets)
if form.is_valid():
if plan.price > 0:
eurocredits = credits.withdraw(plan.price,r)
plansteps = response.json()
name = form.cleaned_data['name']
try: