From e0303b90b64210dddcd63276accf3a55cfb5c512 Mon Sep 17 00:00:00 2001
From: Sander Roosendaal
Date: Tue, 27 Nov 2018 12:29:30 +0100
Subject: [PATCH 1/3] automatic expiry of non-recurring users
---
rowers/emails.py | 8 +++++++-
rowers/middleware.py | 24 ++++++++++++++++++++++-
rowers/models.py | 7 +++++++
rowers/tasks.py | 22 +++++++++++++++++++++
rowers/templates/accountexpiredemail.html | 23 ++++++++++++++++++++++
rowsandall_app/settings.py | 1 +
6 files changed, 83 insertions(+), 2 deletions(-)
create mode 100644 rowers/templates/accountexpiredemail.html
diff --git a/rowers/emails.py b/rowers/emails.py
index dff06210..7dfa16d1 100644
--- a/rowers/emails.py
+++ b/rowers/emails.py
@@ -59,8 +59,12 @@ def send_template_email(from_email,to_email,subject,
html_content = htmly.render(context)
text_content = textify(html_content)
+
+ if 'cc' in kwargs:
+ msg = EmailMultiAlternatives(subject, text_content, from_email, to_email,cc=kwargs['cc'])
+ else:
+ msg = EmailMultiAlternatives(subject, text_content, from_email, to_email)
- msg = EmailMultiAlternatives(subject, text_content, from_email, to_email)
msg.attach_alternative(html_content, "text/html")
if 'attach_file' in kwargs:
@@ -82,6 +86,8 @@ def send_template_email(from_email,to_email,subject,
else:
emailbounced = False
+
+
if not emailbounced:
res = msg.send()
else:
diff --git a/rowers/middleware.py b/rowers/middleware.py
index 736af9c0..72c1ed7e 100644
--- a/rowers/middleware.py
+++ b/rowers/middleware.py
@@ -5,8 +5,9 @@ import datetime
from utils import myqueue
import django_rq
queue = django_rq.get_queue('default')
-from rowers.tasks import handle_updatefitnessmetric
+from rowers.tasks import handle_updatefitnessmetric,handle_sendemail_expired
from rowers.mytypes import otwtypes
+from django.contrib import messages
def getrower(user):
try:
@@ -101,3 +102,24 @@ class GDPRMiddleWare(object):
return redirect(
'/rowers/me/gdpr-optin/?next=%s' % nexturl
)
+
+class RowerPlanMiddleWare(object):
+ def process_request(self, request):
+ if request.user.is_authenticated() and request.user.rower.rowerplan != 'basic':
+ if request.user.rower.paymenttype == 'single':
+ if request.user.rower.planexpires < timezone.now().date():
+ messg = 'Your paid plan has expired. We have reset you to a free basic plan.'
+ messages.error(request,messg)
+ r = getrower(request.user)
+ r.rowerplan = 'basic'
+ r.save()
+ # send email
+ job = myqueue(queue,
+ handle_sendemail_expired,
+ r.user.email,
+ r.user.first_name,
+ r.user.last_name,
+ str(r.planexpires))
+ elif request.user.rower.planexpires-datetime.timedelta(days=5)Dear {{ first_name }},
+
+
+ Your Pro account on rowsandall.com expired on {{ expireddate }}. It
+ has now been automatically reset to Basic.
+ Let me know if you have any questions. If you want to continue using Pro membership,
+ just sign up again through the site and I will change your membership back to Pro.
+
+
+
+ If you do not want to continue the Pro membership, I'd be interested to know why you
+ decided to not continue your Pro account. Did it not fulfill your expectations?
+ This information is valuable to improve the site for all users. Thank you!
+
+
+
+ Best Regards, the Rowsandall Team
+
+{% endblock %}
+
diff --git a/rowsandall_app/settings.py b/rowsandall_app/settings.py
index 5de3f066..ab69eeca 100644
--- a/rowsandall_app/settings.py
+++ b/rowsandall_app/settings.py
@@ -96,6 +96,7 @@ MIDDLEWARE_CLASSES = [
'tz_detect.middleware.TimezoneMiddleware',
'rowers.middleware.GDPRMiddleWare',
'rowers.middleware.PowerTimeFitnessMetricMiddleWare',
+ 'rowers.middleware.RowerPlanMiddleWare',
]
ROOT_URLCONF = 'rowsandall_app.urls'
From 5a10d381b534e320d87f8302886c0d13cd0c8d79 Mon Sep 17 00:00:00 2001
From: Sander Roosendaal
Date: Tue, 27 Nov 2018 12:44:09 +0100
Subject: [PATCH 2/3] warning message
---
rowers/middleware.py | 4 +---
templates/newbase.html | 10 ++++++++++
2 files changed, 11 insertions(+), 3 deletions(-)
diff --git a/rowers/middleware.py b/rowers/middleware.py
index 72c1ed7e..95cb5583 100644
--- a/rowers/middleware.py
+++ b/rowers/middleware.py
@@ -120,6 +120,4 @@ class RowerPlanMiddleWare(object):
r.user.first_name,
r.user.last_name,
str(r.planexpires))
- elif request.user.rower.planexpires-datetime.timedelta(days=5)
{% endif %}
+ {% if user.rower.planexpires and user.rower.rowerplan != 'basic' %}
+ {% if user.rower.planexpires|is_future_date %}
+ {% if user.rower.planexpires|date_dif|ddays < 4 %}
+
+
+ You have {{ user.rower.planexpires|date_dif|ddays }} days left of your one year subscription. Please renew on or before {{ user.rower.planexpires }} or your plan will be reset to Basic. Click here to renew your membership.
+
+ {% endif %}
+ {% endif %}
+ {% endif %}
{% if user.rower.protrialexpires and user.rower.protrialexpires|is_future_date %}
{% if user.rower.plantrialexpires and user.rower.rowerplan != 'plan' %}
From ae9f097ee1c04342d8c145aa4eb8926ba727f39e Mon Sep 17 00:00:00 2001
From: Sander Roosendaal
Date: Tue, 27 Nov 2018 13:01:58 +0100
Subject: [PATCH 3/3] added payment type check
---
templates/newbase.html | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/templates/newbase.html b/templates/newbase.html
index 16d00c75..6f6a1c7c 100644
--- a/templates/newbase.html
+++ b/templates/newbase.html
@@ -225,7 +225,7 @@
{% endif %}
- {% if user.rower.planexpires and user.rower.rowerplan != 'basic' %}
+ {% if user.rower.planexpires and user.rower.rowerplan != 'basic' and user.rower.paymenttype == 'single'%}
{% if user.rower.planexpires|is_future_date %}
{% if user.rower.planexpires|date_dif|ddays < 4 %}