alert edit including filters
This commit is contained in:
@@ -55,12 +55,12 @@ def create_alert(manager, rower, measured,period=7, emailalert=True,
|
|||||||
|
|
||||||
|
|
||||||
# update alert
|
# update alert
|
||||||
def alert_add_filters(alert,filter):
|
def alert_add_filters(alert,filters):
|
||||||
for f in alert.filter.all():
|
for f in alert.filter.all():
|
||||||
alert.filter.remove(f)
|
alert.filter.remove(f)
|
||||||
f.delete()
|
f.delete()
|
||||||
|
|
||||||
for f in filter:
|
for f in filters:
|
||||||
m = Condition(
|
m = Condition(
|
||||||
metric = f['metric'],
|
metric = f['metric'],
|
||||||
value1 = f['value1'],
|
value1 = f['value1'],
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
{% extends "newbase.html" %}
|
{% extends "newbase.html" %}
|
||||||
{% load staticfiles %}
|
{% load staticfiles %}
|
||||||
|
|
||||||
{% block title %}Planned Session{% endblock %}
|
{% block title %}Metric Alert{% endblock %}
|
||||||
|
|
||||||
{% block main %}
|
{% block main %}
|
||||||
<h1>Alert Edit</h1>
|
<h1>Alert Create</h1>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
Alerts are useful to give you a regular update on how you are doing. For example, if you are
|
Alerts are useful to give you a regular update on how you are doing. For example, if you are
|
||||||
|
|||||||
@@ -1,27 +1,66 @@
|
|||||||
{% extends "newbase.html" %}
|
{% extends "newbase.html" %}
|
||||||
{% load staticfiles %}
|
{% load staticfiles %}
|
||||||
|
|
||||||
{% block title %}Planned Session{% endblock %}
|
{% block title %}Metric Alert{% endblock %}
|
||||||
|
|
||||||
{% block main %}
|
{% 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 ">" (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">
|
<form action="" method="post">
|
||||||
<li class="grid_2">
|
<ul class="main-content">
|
||||||
<p>
|
<li class="grid_2">
|
||||||
<form action="" method="post">
|
<h2>Alert</h2>
|
||||||
|
<p>
|
||||||
|
{{ formset.management_form }}
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<table>
|
<table>
|
||||||
{{ form.as_table }}
|
{{ form.as_table }}
|
||||||
{{ measuredform.as_table }}
|
{{ measuredform.as_table }}
|
||||||
</table>
|
</table>
|
||||||
<input type="submit" value="Save">
|
<input type="submit" value="Save">
|
||||||
</form>
|
</p>
|
||||||
</p>
|
</li>
|
||||||
</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> </div><div>add filter</div>',
|
||||||
|
deleteText: '<div><p> </p></div><div>remove</div>'
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|||||||
@@ -4430,10 +4430,69 @@ def alert_edit_view(request,id=0,userid=0):
|
|||||||
r = getrequestrower(request,userid=userid)
|
r = getrequestrower(request,userid=userid)
|
||||||
|
|
||||||
alert = Alert.objects.get(id=id)
|
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()]
|
||||||
|
|
||||||
|
if request.method == 'POST':
|
||||||
form = AlertEditForm(instance=alert)
|
form = AlertEditForm(request.POST)
|
||||||
measuredform = ConditionEditForm(instance=alert.measured)
|
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,
|
'rower':r,
|
||||||
'form':form,
|
'form':form,
|
||||||
'measuredform':measuredform,
|
'measuredform':measuredform,
|
||||||
|
'formset':filter_formset,
|
||||||
})
|
})
|
||||||
|
|
||||||
# alert delete view
|
# alert delete view
|
||||||
|
|||||||
Reference in New Issue
Block a user