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
|
||||
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'],
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 ">" (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> </div><div>add filter</div>',
|
||||
deleteText: '<div><p> </p></div><div>remove</div>'
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
{% endblock %}
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user