first model of basic alert functions
This commit is contained in:
81
rowers/alerts.py
Normal file
81
rowers/alerts.py
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
from rowers.models import Alert, Condition, User, Rower
|
||||||
|
from rowers.teams import coach_getcoachees
|
||||||
|
|
||||||
|
## BASIC operations
|
||||||
|
|
||||||
|
# create alert
|
||||||
|
def create_alert(manager, rower, measured,period=7, emailalert=True,
|
||||||
|
reststrokes=False, workouttype='water',
|
||||||
|
name=name,**kwargs):
|
||||||
|
|
||||||
|
# check if manager is coach of rower. If not return 0
|
||||||
|
if manager.rower != rower:
|
||||||
|
if rower not in coach_getcoachees(manager.rower):
|
||||||
|
return 0
|
||||||
|
|
||||||
|
m = Condition(
|
||||||
|
metric = measured['metric'],
|
||||||
|
value1 = measured['value1'],
|
||||||
|
value2 = measured['value2'],
|
||||||
|
condition=measured['condition']
|
||||||
|
)
|
||||||
|
|
||||||
|
m.save()
|
||||||
|
|
||||||
|
alert = Alert(name=name,
|
||||||
|
manager=manager,
|
||||||
|
rower=rower,
|
||||||
|
measured=m,
|
||||||
|
restrokes=reststrokes,
|
||||||
|
period=period,
|
||||||
|
emailalert=emailalert,
|
||||||
|
workouttype=workouttype
|
||||||
|
)
|
||||||
|
|
||||||
|
alert.save()
|
||||||
|
|
||||||
|
if 'filter' in kwargs:
|
||||||
|
for f in filter:
|
||||||
|
m = Condition(
|
||||||
|
metric = f['metric'],
|
||||||
|
value1 = f['value1'],
|
||||||
|
value2 = f['value2'],
|
||||||
|
condition = f['condition']
|
||||||
|
)
|
||||||
|
|
||||||
|
m.save()
|
||||||
|
|
||||||
|
alert.filter.add(m)
|
||||||
|
|
||||||
|
|
||||||
|
return 1
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# update alert
|
||||||
|
def alert_add_filters(alert,filter):
|
||||||
|
for f in alert.filter.all():
|
||||||
|
alert.filter.remove(f)
|
||||||
|
f.delete()
|
||||||
|
|
||||||
|
for f in filter:
|
||||||
|
m = Condition(
|
||||||
|
metric = f['metric'],
|
||||||
|
value1 = f['value1'],
|
||||||
|
value2 = f['value2'],
|
||||||
|
condition = f['condition']
|
||||||
|
)
|
||||||
|
|
||||||
|
m.save()
|
||||||
|
|
||||||
|
alert.filter.add(m)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# get alert stats
|
||||||
|
# nperiod = 0: current period, i.e. next_run - n days to today
|
||||||
|
# nperiod = 1: 1 period ago , i.e. next_run -2n days to next_run -n days
|
||||||
|
def alert_get_stats(alert,nperiod=0):
|
||||||
|
return {}
|
||||||
|
|
||||||
|
# run alert report
|
||||||
@@ -1018,11 +1018,12 @@ class Condition(models.Model):
|
|||||||
('<','<'),
|
('<','<'),
|
||||||
('>','>'),
|
('>','>'),
|
||||||
('=','='),
|
('=','='),
|
||||||
|
('between','between')
|
||||||
)
|
)
|
||||||
metric = models.CharField(max_length=50,choices=parchoicesy1,verbose_name='Metric')
|
metric = models.CharField(max_length=50,choices=parchoicesy1,verbose_name='Metric')
|
||||||
value = models.FloatField(default=0)
|
value1 = models.FloatField(default=0)
|
||||||
|
value2 = models.FloatField(default=0)
|
||||||
condition = models.CharField(max_length=2,choices=conditionchoices,null=True)
|
condition = models.CharField(max_length=2,choices=conditionchoices,null=True)
|
||||||
alert = models.ForeignKey('Alert',on_delete=models.CASCADE,null=True)
|
|
||||||
|
|
||||||
rowchoices = []
|
rowchoices = []
|
||||||
for key,value in mytypes.workouttypes:
|
for key,value in mytypes.workouttypes:
|
||||||
@@ -1031,10 +1032,15 @@ for key,value in mytypes.workouttypes:
|
|||||||
|
|
||||||
|
|
||||||
class Alert(models.Model):
|
class Alert(models.Model):
|
||||||
|
name = models.CharField(max_length=150,verbose_name='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,
|
measured = models.OneToOneField(Condition,verbose_name='Measuring',on_delete=models.CASCADE,
|
||||||
related_name='measured')
|
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')
|
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')
|
||||||
|
next_run = models.DateField(default=timezone.now)
|
||||||
emailalert = models.BooleanField(default=True,verbose_name='Send email alerts')
|
emailalert = models.BooleanField(default=True,verbose_name='Send email alerts')
|
||||||
workouttype = models.CharField(choices=rowchoices,max_length=50,
|
workouttype = models.CharField(choices=rowchoices,max_length=50,
|
||||||
verbose_name='Exercise/Boat Class',default='water')
|
verbose_name='Exercise/Boat Class',default='water')
|
||||||
|
|||||||
Reference in New Issue
Block a user