diff --git a/rowers/alerts.py b/rowers/alerts.py
index 2bbb0e81..fcd7468b 100644
--- a/rowers/alerts.py
+++ b/rowers/alerts.py
@@ -49,7 +49,7 @@ def create_alert(manager, rower, measured,period=7, emailalert=True,
alert.filter.add(m)
- return 1
+ return m.id
diff --git a/rowers/models.py b/rowers/models.py
index 1d0fcc42..7b6d824e 100644
--- a/rowers/models.py
+++ b/rowers/models.py
@@ -1025,21 +1025,28 @@ class Condition(models.Model):
value2 = models.FloatField(default=0)
condition = models.CharField(max_length=20,choices=conditionchoices,null=True)
+class ConditionEditForm(ModelForm):
+ class Meta:
+ model = Condition
+ fields = ['metric','condition','value1','value2']
+
+
rowchoices = []
for key,value in mytypes.workouttypes:
if key in mytypes.rowtypes:
rowchoices.append((key,value))
+
class Alert(models.Model):
- name = models.CharField(max_length=150,verbose_name='Name',null=True,blank=True)
+ name = models.CharField(max_length=150,verbose_name='Alert Name',null=True,blank=True)
manager = models.ForeignKey(User, on_delete=models.CASCADE)
rower = models.ForeignKey(Rower, on_delete=models.CASCADE)
measured = models.OneToOneField(Condition,verbose_name='Measuring',on_delete=models.CASCADE,
related_name='measured')
filter = models.ManyToManyField(Condition, related_name='filters',verbose_name='Filters')
reststrokes = models.BooleanField(default=False,null=True,verbose_name='Include Rest Strokes')
- period = models.IntegerField(default=7,verbose_name='Reporting Period')
+ period = models.IntegerField(default=7,verbose_name='Reporting Period (days)')
next_run = models.DateField(default=timezone.now)
emailalert = models.BooleanField(default=True,verbose_name='Send email alerts')
workouttype = models.CharField(choices=rowchoices,max_length=50,
@@ -1058,7 +1065,10 @@ class Alert(models.Model):
class AlertEditForm(ModelForm):
class Meta:
model = Alert
- fields = ['name','measured','reststrokes','period','emailalert','workouttype']
+ fields = ['name','reststrokes','period','emailalert','workouttype']
+ widgets = {
+ 'reststrokes':forms.CheckboxInput()
+ }
class BasePlannedSessionFormSet(BaseFormSet):
def clean(self):
diff --git a/rowers/templates/alert_create.html b/rowers/templates/alert_create.html
index a637b3bd..267abf40 100644
--- a/rowers/templates/alert_create.html
+++ b/rowers/templates/alert_create.html
@@ -13,6 +13,7 @@
{% csrf_token %}
{{ form.as_table }}
+ {{ measuredform.as_table }}
diff --git a/rowers/templates/alert_edit.html b/rowers/templates/alert_edit.html
index a637b3bd..267abf40 100644
--- a/rowers/templates/alert_edit.html
+++ b/rowers/templates/alert_edit.html
@@ -13,6 +13,7 @@
{% csrf_token %}
{{ form.as_table }}
+ {{ measuredform.as_table }}
diff --git a/rowers/views/analysisviews.py b/rowers/views/analysisviews.py
index 035946cc..7aee9332 100644
--- a/rowers/views/analysisviews.py
+++ b/rowers/views/analysisviews.py
@@ -4324,8 +4324,20 @@ def alerts_view(request,userid=0):
alerts = Alert.objects.filter(rower=r).order_by('next_run')
+ breadcrumbs = [
+ {
+ 'url':'/rowers/analysis',
+ 'name': 'Analysis'
+ },
+ {
+ 'url': reverse('alerts_view'),
+ 'name': 'Alerts',
+ },
+ ]
+
return render(request,'alerts.html',
{
+ 'breadcrumbs':breadcrumbs,
'alerts':alerts,
'rower':r,
})
@@ -4337,12 +4349,51 @@ def alerts_view(request,userid=0):
def alert_create_view(request,userid=0):
r = getrequestrower(request,userid=userid)
- form = AlertEditForm()
+ if request.method == 'POST':
+ form = AlertEditForm(request.POST)
+ measuredform = ConditionEditForm(request.POST)
+ if form.is_valid() and measuredform.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']
+
+ result = create_alert(request.user,r,measured,period=period,emailalert=emailalert,
+ reststrokes=reststrokes,workouttype=workouttype,
+ name=name)
+
+ if result:
+ url = reverse('alert_edit_view',kwargs={'id':result})
+ return HttpResponseRedirect(url)
+ else:
+ form = AlertEditForm()
+ measuredform = ConditionEditForm()
+ breadcrumbs = [
+ {
+ 'url':'/rowers/analysis',
+ 'name': 'Analysis'
+ },
+ {
+ 'url': reverse('alerts_view'),
+ 'name': 'Alerts',
+ },
+ {
+ 'url': reverse('alert_create_view'),
+ 'name': 'Create'
+ }
+ ]
+
return render(request,'alert_create.html',
{
+ 'breadcrumbs':breadcrumbs,
'rower':r,
'form':form,
+ 'measuredform':measuredform,
})
# alert report view
@@ -4354,12 +4405,35 @@ def alert_create_view(request,userid=0):
def alert_edit_view(request,id=0,userid=0):
r = getrequestrower(request,userid=userid)
- form = AlertEditForm()
+ alert = Alert.objects.get(id=id)
+
+
+ form = AlertEditForm(instance=alert)
+ measuredform = ConditionEditForm(instance=alert.measured)
+
+ breadcrumbs = [
+ {
+ 'url':'/rowers/analysis',
+ 'name': 'Analysis'
+ },
+ {
+ 'url':reverse('alerts_view'),
+ 'name':'Alerts',
+ },
+ {
+ 'url': reverse('alert_edit_view',
+ kwargs={'userid':userid,'id':alert.id}),
+ 'name': alert.name,
+ },
+ ]
+
return render(request,'alert_edit.html',
{
+ 'breadcrumbs':breadcrumbs,
'rower':r,
'form':form,
+ 'measuredform':measuredform,
})
# alert delete view
@@ -4385,6 +4459,10 @@ class AlertDelete(DeleteView):
'url':'/rowers/analysis',
'name': 'Analysis'
},
+ {
+ 'url':reverse('alerts_view'),
+ 'name':'Alerts',
+ },
{
'url': reverse('alert_edit_view',
kwargs={'userid':userid,'id':self.object.pk}),
diff --git a/rowers/views/statements.py b/rowers/views/statements.py
index 2f62d5c1..5392e757 100644
--- a/rowers/views/statements.py
+++ b/rowers/views/statements.py
@@ -94,7 +94,7 @@ from rowers.models import (
microcyclecheckdates,mesocyclecheckdates,macrocyclecheckdates,
TrainingMesoCycleForm, TrainingMicroCycleForm,
RaceLogo,RowerBillingAddressForm,PaidPlan,
- AlertEditForm,
+ AlertEditForm, ConditionEditForm,
PlannedSessionComment,CoachRequest,CoachOffer,checkaccessplanuser
)
from rowers.models import (
@@ -208,6 +208,7 @@ import numpy as np
import matplotlib.pyplot as plt
from rowers.emails import send_template_email,htmlstrip
+from rowers.alerts import *
from pytz import timezone as tz,utc
from timezonefinder import TimezoneFinder