From de6d498717fe81d0115dad9e8b1530734d629ffb Mon Sep 17 00:00:00 2001
From: Sander Roosendaal
Date: Fri, 16 Aug 2019 14:52:42 +0200
Subject: [PATCH] basic views (not complete)
---
rowers/models.py | 10 ++-
rowers/templates/alert_delete_confirm.html | 29 +++++++
rowers/templates/alerts.html | 73 ++++++++++++++++++
rowers/urls.py | 5 ++
rowers/views/analysisviews.py | 89 ++++++++++++++++++++++
rowers/views/statements.py | 1 +
6 files changed, 206 insertions(+), 1 deletion(-)
create mode 100644 rowers/templates/alert_delete_confirm.html
create mode 100644 rowers/templates/alerts.html
diff --git a/rowers/models.py b/rowers/models.py
index dfc5f807..9d81610f 100644
--- a/rowers/models.py
+++ b/rowers/models.py
@@ -1045,7 +1045,15 @@ class Alert(models.Model):
workouttype = models.CharField(choices=rowchoices,max_length=50,
verbose_name='Exercise/Boat Class',default='water')
-
+
+ def __str__(self):
+ stri = u'Alert {name} on {metric} for {workouttype}'.format(
+ name = self.name,
+ metric = self.measured.metric,
+ workouttype = self.workouttype
+ )
+
+ return stri
class BasePlannedSessionFormSet(BaseFormSet):
def clean(self):
diff --git a/rowers/templates/alert_delete_confirm.html b/rowers/templates/alert_delete_confirm.html
new file mode 100644
index 00000000..dc9a5417
--- /dev/null
+++ b/rowers/templates/alert_delete_confirm.html
@@ -0,0 +1,29 @@
+{% extends "newbase.html" %}
+{% load staticfiles %}
+
+{% block title %}Planned Session{% endblock %}
+
+{% block main %}
+Confirm Delete
+This will permanently delete the alert
+
+
+
+
+
+
+
+
+{% endblock %}
+
+{% block sidebar %}
+{% include 'menu_analytics.html' %}
+{% endblock %}
diff --git a/rowers/templates/alerts.html b/rowers/templates/alerts.html
new file mode 100644
index 00000000..4693136d
--- /dev/null
+++ b/rowers/templates/alerts.html
@@ -0,0 +1,73 @@
+{% extends "newbase.html" %}
+{% load staticfiles %}
+{% load rowerfilters %}
+
+{% block title %}Rowsandall - Analysis {% endblock %}
+
+{% block main %}
+
+Alerts for {{ rower.user.first_name }} {{ rower.user.last_name }}
+Set up automatic alerting for your workouts
+
+
+
+ {% if alerts %}
+ -
+
+
+
+ | Name |
+ metric |
+ Workout type |
+ Next Run |
+
+
+
+ {% for alert in alerts %}
+
+ | {{ alert.name }} |
+ {{ alert.measured.metric }} |
+ {{ alert.workouttype }} |
+ {{ alert.next_run }} |
+
+
+
+
+ |
+
+
+
+
+ |
+
+
+
+
+ |
+
+ {% endfor %}
+
+
+
+ {% else %}
+ -
+
You have not set any alerts for {{ rower.user.first_name }}
+
+ {% endif %}
+ -
+
+ Create new alert
+
+
+
+
+
+
+{% endblock %}
+
+{% block sidebar %}
+{% include 'menu_analytics.html' %}
+{% endblock %}
diff --git a/rowers/urls.py b/rowers/urls.py
index 02d7b112..d6150c1a 100644
--- a/rowers/urls.py
+++ b/rowers/urls.py
@@ -417,6 +417,11 @@ urlpatterns = [
name='multi_compare_view'),
re_path(r'^multi-compare/workout/(?P\b[0-9A-Fa-f]+\b)/$',views.multi_compare_view,name='multi_compare_view'),
re_path(r'^multi-compare/$',views.multi_compare_view,name='multi_compare_view'),
+ re_path(r'^alerts/(?P\d+)/$',views.alerts_view,name='alerts_view'),
+ re_path(r'^alerts/$',views.alerts_view,name='alerts_view'),
+ re_path(r'^alerts/(?P\d+)/delete/$',views.AlertDelete.as_view(),name='alert_delete_view'),
+ re_path(r'^alerts/(?P\d+)/edit/user/(?P\d+)/$',views.alert_edit_view,name='alert_edit_view'),
+ re_path(r'^alerts/(?P\d+)/edit/$',views.alert_edit_view,name='alert_edit_view'),
re_path(r'^user-boxplot/user/(?P\d+)/$',views.boxplot_view,name='boxplot_view'),
re_path(r'^user-boxplot/$',views.boxplot_view,name='boxplot_view'),
re_path(r'^user-boxplot-data/$',views.boxplot_view_data,name='boxplot_view_data'),
diff --git a/rowers/views/analysisviews.py b/rowers/views/analysisviews.py
index 07c4d8a5..13fa1b89 100644
--- a/rowers/views/analysisviews.py
+++ b/rowers/views/analysisviews.py
@@ -4314,3 +4314,92 @@ def agegrouprecordview(request,sex='male',weightcategory='hwt',
'active':'nav-analysis',
'the_div':div,
})
+
+# alert overview view
+@user_passes_test(ispromember, login_url="/rowers/paidplans",
+ message="This functionality requires a Pro plan or higher",
+ redirect_field_name=None)
+def alerts_view(request,userid=0):
+ r = getrequestrower(request,userid=userid)
+
+ alerts = Alert.objects.filter(rower=r).order_by('next_run')
+
+ return render(request,'alerts.html',
+ {
+ 'alerts':alerts,
+ 'rower':r,
+ })
+
+# alert create view
+@user_passes_test(ispromember, login_url="/rowers/paidplans",
+ message="This functionality requires a Pro plan or higher",
+ redirect_field_name=None)
+def alert_create_view(request,userid=0):
+ r = getrequestrower(request,userid=userid)
+
+ return render(request,'alert_create.html',
+ {
+ 'rower':r,
+ })
+
+# alert report view
+
+# alert edit view
+@user_passes_test(ispromember, login_url="/rowers/paidplans",
+ message="This functionality requires a Pro plan or higher",
+ redirect_field_name=None)
+def alert_edit_view(request,id=0,userid=0):
+ r = getrequestrower(request,userid=userid)
+
+ return render(request,'alert_edit.html',
+ {
+ 'rower':r,
+ })
+
+# alert delete view
+class AlertDelete(DeleteView):
+ login_requird = True
+ model = Alert
+ template_name = 'alert_delete_confirm.html'
+
+ # extra parameters
+ def get_context_data(self, **kwargs):
+ context = super(AlertDelete, self).get_context_data(**kwargs)
+
+ if 'userid' in kwargs:
+ userid = kwargs['userid']
+ else:
+ userid = 0
+
+ context['rower'] = getrequestrower(self.request,userid=userid)
+ context['alert'] = self.object
+
+ breadcrumbs = [
+ {
+ 'url':'/rowers/analysis',
+ 'name': 'Analysis'
+ },
+ {
+ 'url': reverse('alert_edit_view',
+ kwargs={'userid':userid,'id':self.object.pk}),
+ 'name': 'Alert',
+ },
+ {
+ 'url': reverse('alert_delete_view',kwargs={'pk':self.object.pk}),
+ 'name': 'Delete'
+ }
+ ]
+
+ context['breadcrumbs'] = breadcrumbs
+
+ return context
+
+ def get_success_url(self):
+ return reverse('alerts_view')
+
+ def get_object(self, *args, **kwargs):
+ obj = super(AlertDelete, self).get_object(*args, **kwargs)
+
+ # some checks
+
+ return obj
diff --git a/rowers/views/statements.py b/rowers/views/statements.py
index b3a0745f..23d6e377 100644
--- a/rowers/views/statements.py
+++ b/rowers/views/statements.py
@@ -108,6 +108,7 @@ from rowers.models import (
VirtualRaceForm,VirtualRaceResultForm,RowerImportExportForm,
IndoorVirtualRaceResultForm,IndoorVirtualRaceResult,
IndoorVirtualRaceForm,PlannedSessionCommentForm,
+ Alert, Condition
)
from rowers.models import (
FavoriteForm,BaseFavoriteFormSet,SiteAnnouncement,BasePlannedSessionFormSet,