From 8009831ab14e0bba5f39d9054abfa7e365ca5d45 Mon Sep 17 00:00:00 2001
From: Sander Roosendaal
+ Alerts are useful to give you a regular update on how you are doing. For example, if you are
+ worried about rowing too short, you can set an alert on drive length, and the site will automatically
+ tell you how well you are doing.
+
+ To set an alert on a minimum drive length, you would select "Drive Length (degree)" as the metric in the
+ form below, then set the condition to ">" (greater than), and value 1 to the minimum drive length
+ that you find acceptable. The value 2 is only relevant for alerts where you want to have a metric
+ between two values. Set the workout type to "Standard Racing Shell", or whatever boat class you
+ want this metric to run for, select the period over which you want to monitor and get regular
+ reports (7 days).
+
+ Optionally, you can add filters. With filters, the alert considers only those strokes that
+ fulfill all filters. For example, you could set a filter on power between 200 and 300 Watt,
+ to only look at drive length in that power zone.
+
- Alert Edit
+
+
-
Rower: {{ rower.user.first_name }}
- ++ Try out Alerts +
{% endblock %} diff --git a/rowers/views/analysisviews.py b/rowers/views/analysisviews.py index 7aee9332..5d099933 100644 --- a/rowers/views/analysisviews.py +++ b/rowers/views/analysisviews.py @@ -4348,11 +4348,14 @@ def alerts_view(request,userid=0): redirect_field_name=None) def alert_create_view(request,userid=0): r = getrequestrower(request,userid=userid) + FilterFormSet = formset_factory(ConditionEditForm, formset=BaseConditionFormSet,extra=1) + filter_formset = FilterFormSet() if request.method == 'POST': form = AlertEditForm(request.POST) measuredform = ConditionEditForm(request.POST) - if form.is_valid() and measuredform.is_valid(): + filter_formset = FilterFormSet(request.POST) + if form.is_valid() and measuredform.is_valid() and filter_formset.is_valid(): ad = form.cleaned_data measured = measuredform.cleaned_data @@ -4362,11 +4365,31 @@ def alert_create_view(request,userid=0): workouttype = ad['workouttype'] name = ad['name'] - result = create_alert(request.user,r,measured,period=period,emailalert=emailalert, - reststrokes=reststrokes,workouttype=workouttype, - name=name) + filters = [] + + for filter_form in filter_formset: + metric = filter_form.cleaned_data.get('metric') + condition = filter_form.cleaned_data.get('condition') + value1 = filter_form.cleaned_data.get('value1') + value2 = filter_form.cleaned_data.get('value2') + + filters.append( + { + 'metric':metric, + 'condition':condition, + 'value1':value1, + 'value2':value2, + } + ) + + result,message = create_alert(request.user,r,measured,period=period,emailalert=emailalert, + reststrokes=reststrokes,workouttype=workouttype, + filter = filters, + name=name) if result: + messages.info(request,message) + url = reverse('alert_edit_view',kwargs={'id':result}) return HttpResponseRedirect(url) else: @@ -4391,6 +4414,7 @@ def alert_create_view(request,userid=0): return render(request,'alert_create.html', { 'breadcrumbs':breadcrumbs, + 'formset': filter_formset, 'rower':r, 'form':form, 'measuredform':measuredform, @@ -4411,6 +4435,8 @@ def alert_edit_view(request,id=0,userid=0): form = AlertEditForm(instance=alert) measuredform = ConditionEditForm(instance=alert.measured) + + breadcrumbs = [ { 'url':'/rowers/analysis', diff --git a/rowers/views/statements.py b/rowers/views/statements.py index 5392e757..06c33325 100644 --- a/rowers/views/statements.py +++ b/rowers/views/statements.py @@ -113,7 +113,7 @@ from rowers.models import ( ) from rowers.models import ( FavoriteForm,BaseFavoriteFormSet,SiteAnnouncement,BasePlannedSessionFormSet, - get_course_timezone + get_course_timezone,BaseConditionFormSet, ) from rowers.metrics import rowingmetrics,defaultfavoritecharts,nometrics from rowers import metrics as metrics