From 94305332a5e616afc38edaa1e46c03a74dd8b126 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Tue, 9 Nov 2021 21:50:17 +0100 Subject: [PATCH 1/3] prototype working --- rowers/views/paymentviews.py | 25 ++++++++++++++++--------- rowers/views/planviews.py | 4 ++-- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/rowers/views/paymentviews.py b/rowers/views/paymentviews.py index 447e17ca..694bb567 100644 --- a/rowers/views/paymentviews.py +++ b/rowers/views/paymentviews.py @@ -85,9 +85,6 @@ def billing_view(request): 'planselectform':planselectform, }) -@user_passes_test(can_plan,login_url="/rowers/paidplans", - message="This functionality requires a Coach or Self-Coach plan", - redirect_field_name=None) def buy_trainingplan_view(request,id=0): if not PAYMENT_PROCESSING_ON: # pragma: no cover # pragma: no cover url = reverse('promembership') @@ -179,9 +176,7 @@ def buy_trainingplan_view(request,id=0): 'form':form, }) -@user_passes_test(can_plan,login_url="/rowers/paidplans", - message="This functionality requires a Coach or Self-Coach plan", - redirect_field_name=None) + def purchase_checkouts_view(request): if not PAYMENT_PROCESSING_ON: # pragma: no cover # pragma: no cover url = reverse('promembership') @@ -195,6 +190,13 @@ def purchase_checkouts_view(request): }) return HttpResponseRedirect(url) + if r.rowerplan == 'freecoach': + messages.error(request,'You cannot purchase this training plan as a free coach member') + url = reverse('rower_view_instantplan',kwargs={ + 'id':plan.uuid, + }) + return HttpResponseRedirect(url) + form = TrainingPlanBillingForm(request.POST) if form.is_valid(): @@ -219,6 +221,14 @@ def purchase_checkouts_view(request): notes = data['notes'] status = data['status'] startdate = enddate-datetime.timedelta(days=plan.duration) + + # upgrade rower + if r.rowerplan == 'basic': + messages.info(request,'You have been upgraded to the Self-Coach plan for the duration of the plan') + r.rowerplan = 'plan' + r.planexpires = enddate + r.save() + p = TrainingPlan( name=name, #target=target, @@ -266,9 +276,6 @@ def purchase_checkouts_view(request): }) return HttpResponseRedirect(url) # pragma: no cover -@user_passes_test(can_plan,login_url="/rowers/paidplans", - message="This functionality requires a Coach or Self-Coach plan", - redirect_field_name=None) def confirm_trainingplan_purchase_view(request,id = 0): if not PAYMENT_PROCESSING_ON: # pragma: no cover # pragma: no cover url = reverse('promembership') diff --git a/rowers/views/planviews.py b/rowers/views/planviews.py index c5155b94..a61e27c8 100644 --- a/rowers/views/planviews.py +++ b/rowers/views/planviews.py @@ -2615,8 +2615,8 @@ def rower_view_instantplan(request,id='',userid=0): ).order_by("-date") if request.method == 'POST' and not request.user.is_anonymous: - if not can_plan(request.user): # pragma: no cover - messages.error(request,'You must be on a paid plan to use this functionality') + if not can_plan(request.user) and plan.price == 0: # pragma: no cover + messages.error(request,'You must be on a paid plan to use free training plans') url = reverse('rower_view_instantplan',kwargs={ 'id':id, }) From 83e1de9866afaafda2282cd9ef30bebf84399b8b Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Tue, 9 Nov 2021 22:22:42 +0100 Subject: [PATCH 2/3] working --- rowers/braintreestuff.py | 2 +- rowers/tasks.py | 12 +++++++----- rowers/templates/instantplansold.html | 4 ++-- rowers/views/paymentviews.py | 9 +++++++++ rowers/views/statements.py | 1 + 5 files changed, 20 insertions(+), 8 deletions(-) diff --git a/rowers/braintreestuff.py b/rowers/braintreestuff.py index f5969316..1c47d79b 100644 --- a/rowers/braintreestuff.py +++ b/rowers/braintreestuff.py @@ -24,7 +24,7 @@ from rowers.tasks import ( handle_send_email_subscription_update, handle_send_email_subscription_create, handle_send_email_failed_cancel, - handle_send_email_transaction_notification, + #handle_send_email_transaction_notification, ) import pandas as pd diff --git a/rowers/tasks.py b/rowers/tasks.py index 90634228..4f496d26 100644 --- a/rowers/tasks.py +++ b/rowers/tasks.py @@ -1343,15 +1343,15 @@ def handle_send_email_transaction( return 1 @app.task -def handle_send_email_transaction_notification( - username, useremail, amount, additional_text, **kwargs): +def handle_send_email_instantplan_notification( + username, useremail, amount, planname,startdate, enddate, **kwargs): if 'debug' in kwargs: # pragma: no cover debug = kwargs['debug'] else: debug = True - subject = "Rowsandall Payment Confirmation" + subject = "Rowsandall Instant Plan Notification" from_email = 'Rowsandall ' @@ -1359,10 +1359,12 @@ def handle_send_email_transaction_notification( 'name': username, 'siteurl': siteurl, 'amount': amount, - 'reason':additional_text, + 'planname': planname, + 'startdate':startdate, + 'enddate':enddate, } - res = send_template_email(from_email,['support@rowsandall.com'], + res = send_template_email(from_email,['roosendaalsander@gmail.com'], subject, 'instantplansold.html', d, **kwargs) diff --git a/rowers/templates/instantplansold.html b/rowers/templates/instantplansold.html index 4a6935f5..28d6548f 100644 --- a/rowers/templates/instantplansold.html +++ b/rowers/templates/instantplansold.html @@ -4,11 +4,11 @@

User {{ name }} made a payment.

- {{ additional_text }} + Plan: {{ planname }}, starting on {{ startdate }} and ending on {{ enddate }}

- Price: €{{ price }}. + Price: €{{ amount }}.

diff --git a/rowers/views/paymentviews.py b/rowers/views/paymentviews.py index 694bb567..8c71af15 100644 --- a/rowers/views/paymentviews.py +++ b/rowers/views/paymentviews.py @@ -243,6 +243,15 @@ def purchase_checkouts_view(request): p.rowers.add(r) create_sessions_from_json(plansteps,r,startdate,r.user) + print('aap') + job = myqueue(queuehigh,handle_send_email_instantplan_notification, + r.user.username, + r.user.email, + plan.price, + plan.name, + startdate, + enddate) + print(job,'noot') url = reverse('plannedsessions_view') timeperiod = startdate.strftime('%Y-%m-%d')+'/'+enddate.strftime('%Y-%m-%d') diff --git a/rowers/views/statements.py b/rowers/views/statements.py index 13434a98..98ace3a6 100644 --- a/rowers/views/statements.py +++ b/rowers/views/statements.py @@ -221,6 +221,7 @@ from rowers.tasks import ( handle_sendemail_optout, handle_sendemail_ical, handle_c2_async_workout, + handle_send_email_instantplan_notification, ) from scipy.signal import savgol_filter From d42d12d6294179f4879ba93158d65931362b6cf2 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Tue, 9 Nov 2021 22:29:52 +0100 Subject: [PATCH 3/3] remove temp file --- rowers/tests/testdata/testdata.tcx.gz | Bin 0 -> 4001 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 rowers/tests/testdata/testdata.tcx.gz diff --git a/rowers/tests/testdata/testdata.tcx.gz b/rowers/tests/testdata/testdata.tcx.gz new file mode 100644 index 0000000000000000000000000000000000000000..0b404dce329eb41fc98fef03475824e916e388e5 GIT binary patch literal 4001 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 H#DD<+EpI@^ literal 0 HcmV?d00001