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

+ + + + + + +{% 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,