Private
Public Access
1
0

more progress on alerts

This commit is contained in:
Sander Roosendaal
2019-08-16 19:38:42 +02:00
parent 40ad973b33
commit 451d2a419b
6 changed files with 98 additions and 7 deletions

View File

@@ -49,7 +49,7 @@ def create_alert(manager, rower, measured,period=7, emailalert=True,
alert.filter.add(m)
return 1
return m.id

View File

@@ -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):

View File

@@ -13,6 +13,7 @@
{% csrf_token %}
<table>
{{ form.as_table }}
{{ measuredform.as_table }}
</table>
<input type="submit" value="Save">
</form>

View File

@@ -13,6 +13,7 @@
{% csrf_token %}
<table>
{{ form.as_table }}
{{ measuredform.as_table }}
</table>
<input type="submit" value="Save">
</form>

View File

@@ -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)
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}),

View File

@@ -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