Private
Public Access
1
0

alert edit including filters

This commit is contained in:
Sander Roosendaal
2019-08-17 16:19:09 +02:00
parent 8009831ab1
commit 729ed0d4f8
4 changed files with 117 additions and 18 deletions

View File

@@ -55,12 +55,12 @@ def create_alert(manager, rower, measured,period=7, emailalert=True,
# update alert
def alert_add_filters(alert,filter):
def alert_add_filters(alert,filters):
for f in alert.filter.all():
alert.filter.remove(f)
f.delete()
for f in filter:
for f in filters:
m = Condition(
metric = f['metric'],
value1 = f['value1'],

View File

@@ -1,10 +1,10 @@
{% extends "newbase.html" %}
{% load staticfiles %}
{% block title %}Planned Session{% endblock %}
{% block title %}Metric Alert{% endblock %}
{% block main %}
<h1>Alert Edit</h1>
<h1>Alert Create</h1>
<p>
Alerts are useful to give you a regular update on how you are doing. For example, if you are

View File

@@ -1,27 +1,66 @@
{% extends "newbase.html" %}
{% load staticfiles %}
{% block title %}Planned Session{% endblock %}
{% block title %}Metric Alert{% endblock %}
{% block main %}
<h1>Alert Edit</h1>
<p>
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.
</p>
<p>
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 "&gt;" (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).
</p>
<p>
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.
</p>
<ul class="main-content">
<li class="grid_2">
<p>
<form action="" method="post">
<form action="" method="post">
<ul class="main-content">
<li class="grid_2">
<h2>Alert</h2>
<p>
{{ formset.management_form }}
{% csrf_token %}
<table>
{{ form.as_table }}
{{ measuredform.as_table }}
</table>
<input type="submit" value="Save">
</form>
</p>
</li>
</p>
</li>
{% for filter_form in formset %}
<li class="grid_2">
<div class="fav-formset">
<h2>Filter {{ forloop.counter }}</h2>
<table width=100%>
{{ filter_form.as_table }}
</table>
</div>
</li>
{% endfor %}
</ul>
</form>
</ul>
<!-- Include formset plugin - including jQuery dependency -->
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<script src="/static/js/jquery.formset.js"></script>
<script>
$('.fav-formset').formset({
addText: '<div>&nbsp;</div><div>add filter</div>',
deleteText: '<div><p>&nbsp;</p></div><div>remove</div>'
});
</script>
{% endblock %}

View File

@@ -4430,10 +4430,69 @@ def alert_edit_view(request,id=0,userid=0):
r = getrequestrower(request,userid=userid)
alert = Alert.objects.get(id=id)
FilterFormSet = formset_factory(ConditionEditForm, formset=BaseConditionFormSet,extra=0)
if len(alert.filter.all()) == 0:
FilterFormSet = formset_factory(ConditionEditForm, formset=BaseConditionFormSet, extra=1)
filter_data = [{'metric':m.metric,
'value1':m.value1,
'value2':m.value2,
'condition':m.condition}
for m in alert.filter.all()]
form = AlertEditForm(instance=alert)
measuredform = ConditionEditForm(instance=alert.measured)
if request.method == 'POST':
form = AlertEditForm(request.POST)
measuredform = ConditionEditForm(request.POST)
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
period = ad['period']
emailalert = ad['emailalert']
reststrokes = ad['reststrokes']
workouttype = ad['workouttype']
name = ad['name']
m = alert.measured
m.metric = measured['metric']
m.value1 = measured['value1']
m.value2 = measured['value2']
m.condition = measured['condition']
m.save()
alert.period = period
alert.emailalert = emailalert
alert.reststrokes = reststrokes
alert.workouttype = workouttype
alert.name = name
alert.save()
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,
}
)
res = alert_add_filters(alert, filters)
messages.info(request,'Alert was changed')
else:
form = AlertEditForm(instance=alert)
measuredform = ConditionEditForm(instance=alert.measured)
filter_formset = FilterFormSet(initial=filter_data)
@@ -4460,6 +4519,7 @@ def alert_edit_view(request,id=0,userid=0):
'rower':r,
'form':form,
'measuredform':measuredform,
'formset':filter_formset,
})
# alert delete view