Private
Public Access
1
0

buy now flow complete except email confirmation

This commit is contained in:
Sander Roosendaal
2018-12-19 17:23:34 +01:00
parent fa61957be7
commit d70725f2b3
12 changed files with 512 additions and 113 deletions

View File

@@ -84,7 +84,7 @@ from rowers.models import (
createmicrofillers, createmesofillers,
microcyclecheckdates,mesocyclecheckdates,macrocyclecheckdates,
TrainingMesoCycleForm, TrainingMicroCycleForm,
RaceLogo,RowerBillingAddressForm,
RaceLogo,RowerBillingAddressForm,PaidPlan,
)
from rowers.models import (
RowerPowerForm,RowerForm,GraphImage,AdvancedWorkoutForm,
@@ -738,8 +738,27 @@ def deactivate_user(request):
if request.method == "POST":
user_form = DeactivateUserForm(request.POST, instance=user)
if user_form.is_valid():
r = Rower.objects.get(user=user)
if r.paidplan is not None and r.paidplan.paymentprocessor == 'braintree':
try:
subscriptions = braintreestuff.find_subscriptions(r)
for subscription in subscriptions:
success, themessages,errormessages = braintreestuff.cancel_subscription(r,id)
for message in themessages:
messages.info(request,message)
except ProcessorCustomerError:
pass
r.paidplan = None
r.teamplanexpires = timezone.now()
r.planexpires = timezone.now()
r.clubsize = 0
r.rowerplan = 'basic'
r.save()
deactivate_user = user_form.save(commit=False)
user.is_active = False
user.save()
deactivate_user.save()
# url = reverse(auth_views.logout_then_login)
url = '/logout/?next=/login'
@@ -790,7 +809,17 @@ def remove_user(request):
name = user.first_name+' '+user.last_name
email = user.email
r = Rower.objects.get(user=user)
if r.paidplan is not None and r.paidplan.paymentprocessor == 'braintree':
try:
subscriptions = braintreestuff.find_subscriptions(r)
for subscription in subscriptions:
success, themessages,errormessages = braintreestuff.cancel_subscription(r,id)
for message in themessages:
messages.info(request,message)
except ProcessorCustomerError:
pass
if cd['delete_user']:
user.delete()
res = myqueue(queuehigh,
@@ -998,7 +1027,7 @@ def hasplannedsessions(user):
return result
from rowers.utils import isprorower
from rowers.utils import isprorower,ProcessorCustomerError
# Check if a user is a Pro member
def ispromember(user):
@@ -1056,6 +1085,19 @@ def billing_view(request):
if planselectform.is_valid():
plan = planselectform.cleaned_data['plan']
if billingaddressform.is_valid():
try:
customer_id = braintreestuff.create_customer(r)
except ProcessorCustomerError:
messages.error(request,"Something went wrong registering you as a customer.")
url = reverse(billing_view)
return HttpResponseRedirect(url)
url = reverse(payment_confirm_view,
kwargs={
'planid':plan.id
})
return HttpResponseRedirect(url)
else:
billingaddressform = RowerBillingAddressForm(instance=r)
planselectform = PlanSelectForm(paymentprocessor='braintree')
@@ -1067,50 +1109,66 @@ def billing_view(request):
'planselectform':planselectform,
})
# Experimental - Payments
@login_required()
def payments_view(request):
def plan_stop_view(request):
r = getrequestrower(request)
subscriptions = []
if r.paidplan is not None and r.paidplan.paymentprocessor == 'braintree':
try:
subscriptions = braintreestuff.find_subscriptions(r)
except ProcessorCustomerError:
r.paymentprocessor = None
r.save()
return render(request,
'subscriptions_cancel.html',
{'rower':r,
'subscriptions':subscriptions
})
@login_required()
def plan_tobasic_view(request,id=0):
r = getrequestrower(request)
if r.paidplan.paymentprocessor == 'braintree':
success, themessages,errormessages = braintreestuff.cancel_subscription(r,id)
for message in themessages:
messages.info(request,message)
for message in errormessages:
messages.error(request,message)
url = reverse(plan_stop_view)
return HttpResponseRedirect(url)
@login_required()
def payment_confirm_view(request,planid = 0):
try:
plan = PaidPlan.objects.get(id=planid)
except PaidPlan.DoesNotExist:
messages.error(request,"Something went wrong. Please try again.")
url = reverse(billing_view)
return HttpResponseRedirect(url)
r = getrequestrower(request)
gateway = braintree.BraintreeGateway(
braintree.Configuration(
braintree.Environment.Sandbox,
merchant_id=BRAINTREE_MERCHANT_ID,
public_key=BRAINTREE_PUBLIC_KEY,
private_key=BRAINTREE_PRIVATE_KEY,
)
)
# add code to store customer_id
if not r.customer_id:
result = gateway.customer.create(
{
'first_name':r.user.first_name,
'last_name':r.user.last_name,
'email':r.user.email,
})
if not result.is_success:
messages.error(request,'Failed to create customer. Please try again later')
return render(request,
"payments.html")
else:
r.customer_id = result.customer.id
r.save()
client_token = gateway.client_token.generate({
"customer_id": r.customer_id,
})
client_token = braintreestuff.get_client_token(r)
return render(request,
"payments.html",
{
"paymentconfirm.html",
{
'plan':plan,
'client_token':client_token,
'rower':r,
})
@login_required()
def checkouts_view(request):
@@ -1118,72 +1176,41 @@ def checkouts_view(request):
r = getrequestrower(request)
if request.method != 'POST':
url = reverse(payments_view)
url = reverse(paidplans_view)
return HttpResponseRedirect(url)
# we're still here
gateway = braintree.BraintreeGateway(
braintree.Configuration(
braintree.Environment.Sandbox,
merchant_id=BRAINTREE_MERCHANT_ID,
public_key=BRAINTREE_PUBLIC_KEY,
private_key=BRAINTREE_PRIVATE_KEY,
)
)
form = BillingForm(request.POST)
if form.is_valid():
nonce_from_the_client = form.cleaned_data['payment_method_nonce']
amount = form.cleaned_data['amount']
amount = str(amount)
#for testing
#nonce_from_the_client = 'fake-processor-declined-visa-none'
result = gateway.transaction.sale({
"amount": amount,
"payment_method_nonce": nonce_from_the_client,
"options": {
"submit_for_settlement": True
}
})
if result.is_success:
transaction = result.transaction
if transaction.payment_instrument_type == "credit_card":
country = transaction.credit_card_details.country_of_issuance
if country == 'Unknown':
bin = transaction.credit_card_details.bin
url = "https://lookup.binlist.net/"+str(bin)
headers = {
'Accept-Version':'3',
}
binresult = requests.get(url,headers=headers)
print binresult.status_code
if binresult.status_code == 200:
js = binresult.json()
country = js['country']['name']
print country
amount = transaction.amount
messages.info(request,
"We have successfully received your payment of {amount} Euro".format(
amount=amount
)
)
else:
messages.error(request,"We are sorry but there was an error with the payment")
url = reverse(payments_view)
data = form.cleaned_data
success = braintreestuff.create_subscription(r,data)
if success:
messages.info(request,"Your payment has succeeded and your plan has been updated")
url = reverse(payment_completed_view)
return HttpResponseRedirect(url)
else:
messages.error(request,"There was a problem with your payment")
url = reverse(billing_view)
return HttpResponseRedirect(url)
else:
messages.error(request,"There was an error in the payment form")
url = reverse(payments_view)
url = reverse(billing_view)
return HttpResponseRedirect(url)
url = reverse(payments_view)
return HttpResponseRedirect(url)
@login_required()
def payment_completed_view(request):
r = getrequestrower(request)
return render(request,
"payment_completed.html",
{
'rower':r
})
# User registration
def rower_register_view(request):