more progress on alerts
This commit is contained in:
@@ -49,7 +49,7 @@ def create_alert(manager, rower, measured,period=7, emailalert=True,
|
||||
alert.filter.add(m)
|
||||
|
||||
|
||||
return 1
|
||||
return m.id
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
{% csrf_token %}
|
||||
<table>
|
||||
{{ form.as_table }}
|
||||
{{ measuredform.as_table }}
|
||||
</table>
|
||||
<input type="submit" value="Save">
|
||||
</form>
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
{% csrf_token %}
|
||||
<table>
|
||||
{{ form.as_table }}
|
||||
{{ measuredform.as_table }}
|
||||
</table>
|
||||
<input type="submit" value="Save">
|
||||
</form>
|
||||
|
||||
@@ -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}),
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user