diff --git a/rowers/forms.py b/rowers/forms.py index bbd919b8..20882308 100644 --- a/rowers/forms.py +++ b/rowers/forms.py @@ -31,6 +31,12 @@ formaxlabels = axlabels.copy() formaxlabels.pop('None') parchoices = list(sorted(formaxlabels.items(), key = lambda x:x[1])) +class SurveyForm(forms.Form): + surveydone = forms.ChoiceField( + required=True, + choices=(('YES','YES'),('NO','NO')), + label='Will you take a 2 minute survey to help improve rowsandall?', + widget = forms.RadioSelect) class FlexibleDecimalField(forms.DecimalField): diff --git a/rowers/middleware.py b/rowers/middleware.py index 7b9abb86..03a7cb2c 100644 --- a/rowers/middleware.py +++ b/rowers/middleware.py @@ -22,10 +22,10 @@ def getrower(user): def do_update(user,mode='rower',days=42): r = getrower(user) - + startdate = timezone.now()-datetime.timedelta(days=days) - # test if not something already done + # test if not something already done now_date = timezone.now().strftime('%Y-%m-%d') ms = PowerTimeFitnessMetric.objects.filter( user=user, @@ -37,11 +37,11 @@ def do_update(user,mode='rower',days=42): else: max_workout_id = max([m.last_workout for m in ms]) last_update_date = ms[0].date.strftime('%Y-%m-%d') - + #last_update_date = max([m.date.strftime('%Y-%m-%d') for m in ms]) - + if mode == 'rower': workouts = Workout.objects.filter( user=r, @@ -59,7 +59,7 @@ def do_update(user,mode='rower',days=42): except ValueError: max_id = 0 - + if last_update_date < now_date and max_workout_id < max_id: job = myqueue(queuelow, handle_updatefitnessmetric, @@ -73,7 +73,7 @@ def do_update(user,mode='rower',days=42): class PowerTimeFitnessMetricMiddleWare(object): def __init__(self, get_response): self.get_response = get_response - + def __call__(self, request): # Code to be executed before the view is called if request.user.is_authenticated: @@ -83,7 +83,7 @@ class PowerTimeFitnessMetricMiddleWare(object): response = self.get_response(request) return response - + from django.shortcuts import redirect @@ -98,8 +98,28 @@ allowed_paths = [ '/rowers/me/gdpr-optin-confirm' '/rowers/exportallworkouts/', '/rowers/exportallworkouts', + '/rowers/survey/' ] +class SurveyMiddleWare(object): + def __init__(self, get_response): + self.get_response = get_response + + def __call__(self, request): + if request.user.is_authenticated and request.path not in allowed_paths: + r = getrower(request.user) + nexturl = request.path + if 'survey' in nexturl: + nexturl = '/rowers/list-workouts' + if not r.surveydone: + return redirect( + '/rowers/survey/?next=%s' % nexturl + ) + + response = self.get_response(request) + + return response + class GDPRMiddleWare(object): def __init__(self, get_response): self.get_response = get_response @@ -137,7 +157,7 @@ class RowerPlanMiddleWare(object): r.paidplan = basicplans[0] r.save() # remove from Free Coach groups - + # send email job = myqueue(queue, handle_sendemail_expired, diff --git a/rowers/models.py b/rowers/models.py index fd830b37..6d9b7ac9 100644 --- a/rowers/models.py +++ b/rowers/models.py @@ -730,6 +730,8 @@ class Rower(models.Model): # Privacy Data gdproptin = models.BooleanField(default=False) gdproptindate = models.DateTimeField(blank=True,null=True) + surveydone = models.BooleanField(default=False) + surveydonedate = models.DateTimeField(blank=True,null=True) # Heart Rate Zone data diff --git a/rowers/templates/survey.html b/rowers/templates/survey.html new file mode 100644 index 00000000..1e5fc0fb --- /dev/null +++ b/rowers/templates/survey.html @@ -0,0 +1,47 @@ +{% extends "newbase.html" %} +{% load staticfiles %} +{% load rowerfilters %} + +{% block title %}File loading{% endblock %} + +{% block meta %} + + + +{% endblock %} + +{% block main %} +