From 9024aa7686bd19b2dff9fb8b015caae42d8111bf Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Fri, 9 Aug 2019 16:12:50 +0200 Subject: [PATCH] first model of basic alert functions --- rowers/alerts.py | 81 ++++++++++++++++++++++++++++++++++++++++++++++++ rowers/models.py | 10 ++++-- 2 files changed, 89 insertions(+), 2 deletions(-) create mode 100644 rowers/alerts.py diff --git a/rowers/alerts.py b/rowers/alerts.py new file mode 100644 index 00000000..96101d3b --- /dev/null +++ b/rowers/alerts.py @@ -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 diff --git a/rowers/models.py b/rowers/models.py index d10dfa8e..e97e5d47 100644 --- a/rowers/models.py +++ b/rowers/models.py @@ -1018,11 +1018,12 @@ class Condition(models.Model): ('<','<'), ('>','>'), ('=','='), + ('between','between') ) 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) - alert = models.ForeignKey('Alert',on_delete=models.CASCADE,null=True) rowchoices = [] for key,value in mytypes.workouttypes: @@ -1031,10 +1032,15 @@ for key,value in mytypes.workouttypes: 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, 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') + 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, verbose_name='Exercise/Boat Class',default='water')