Private
Public Access
1
0

switched to template based class

This commit is contained in:
Sander Roosendaal
2022-10-27 12:01:38 +02:00
parent 27e8096c29
commit 03b763de11
5 changed files with 110 additions and 88 deletions

View File

@@ -1844,53 +1844,6 @@ def agegrouprecordview(request, sex='male', weightcategory='hwt',
'the_div': div,
})
@user_passes_test(ispromember, login_url="/rowers/paidplans",
message="This functionality requires a Pro plan or higher."
" If you are already a Pro user, please log in to access this functionality",
redirect_field_name=None)
@permission_required('rower.is_coach', fn=get_user_by_userid, raise_exception=True)
def forcecurveanalysis_view(request, userid=0):
r = getrequestrower(request, userid=userid)
analyses = ForceCurveAnalysis.objects.filter(rower=r).order_by("-date","-id")
selected = []
div = ""
script = ""
if request.method == 'POST':
form = ForceCurveMultipleCompareForm(request.POST)
if form.is_valid():
cd = form.cleaned_data
selected = cd['analyses']
request.session['analyses'] = [a.id for a in selected]
# now should redirect to analysis
script, div = forcecurve_multi_interactive_chart(selected)
breadcrumbs = [
{
'url': '/rowers/analysis',
'name': 'Analysis'
},
{
'url': reverse('instrokeanalysis_view'),
'name': 'In-Stroke Analysis',
},
]
return render(request, 'forcecurve_analysis.html',
{
'breadcrumbs': breadcrumbs,
'analyses': analyses,
'rower': r,
'the_script': script,
'the_div': div,
'selected': selected,
})
#instroke analysis delete view
class ForceCurveAnalysisDelete(DeleteView):
@@ -1947,51 +1900,103 @@ class ForceCurveAnalysisDelete(DeleteView):
return obj
@user_passes_test(ispromember, login_url="/rowers/paidplans",
message="This functionality requires a Pro plan or higher."
" If you are already a Pro user, please log in to access this functionality",
redirect_field_name=None)
@permission_required('rower.is_coach', fn=get_user_by_userid, raise_exception=True)
def instrokeanalysis_view(request, userid=0):
r = getrequestrower(request, userid=userid)
analyses = InStrokeAnalysis.objects.filter(rower=r).order_by("-date","-id")
class SavedAnalysisView(UserPassesTestMixin, View):
form_class = InStrokeMultipleCompareForm
initial = {}
selected = []
div = ""
script = ""
url = '/rowers/analysis/instrokeanalysis/'
name = 'In-Stroke Analysis'
breadcrumbs = []
analysis_class = InStrokeAnalysis
template_name = 'instroke_analysis.html'
r = None
analyses = None
chart = instroke_multi_interactive_chart
if request.method == 'POST':
form = InStrokeMultipleCompareForm(request.POST)
def handle_no_permission(self):
if self.request.user.is_anonymous:
url = reverse('login')+'?next='+self.request.path
return HttpResponseRedirect(url)
messages.error(self.request, "This functionality requires a Pro plan or higher."
" If you are already a Pro user, please log in to access this functionality")
return HttpResponseRedirect("/rowers/paidplans")
def test_func(self):
return ispromember(self.request.user)
def __init__(self, *args, **kwargs):
self.userid = kwargs.get('userid',0)
self.form_class = kwargs.get('form_class',self.form_class)
self.initial = kwargs.get('initial', self.initial)
self.selected = kwargs.get('selected', self.selected)
self.name = kwargs.get('name', self.name)
self.url = kwargs.get('url', self.url)
self.analysis_class = kwargs.get('analysis_class', self.analysis_class)
self.template_name = kwargs.get('template_name', self.template_name)
self.chart = kwargs.get('chart', self.chart)
self.breadcrumbs = breadcrumbs = [
{
'url': '/rowers/analysis',
'name': 'Analysis'
},
{
'url': self.url,
'name': self.name,
},
]
def setup(self, request, *args, **kwargs):
super(SavedAnalysisView, self).setup(request, *args, **kwargs)
self.r = getrequestrower(request, userid=self.userid)
if self.r is not None and not is_coach_user(self.request.user, self.r.user):
raise PermissionDenied("You are not allowed to see analyses for this user")
self.analyses = self.analysis_class.objects.filter(rower=self.r).order_by("-date","-id")
def get(self, request, *args, **kwargs):
return render(request, self.template_name,
{
'breadcrumbs': self.breadcrumbs,
'analyses': self.analyses,
'rower': self.r,
'the_script': self.script,
'the_div': self.div,
'selected': self.selected,
})
def post(self, request, *args, **kwargs):
form = self.form_class(request.POST)
if form.is_valid():
cd = form.cleaned_data
selected = cd['analyses']
request.session['analyses'] = [a.id for a in selected]
self.selected = cd['analyses']
request.session['analyses'] = [a.id for a in self.selected]
# now should redirect to analysis
script, div = instroke_multi_interactive_chart(selected)
self.script, self.div = self.chart(self.selected)
else:
print(form.errors)
return render(request, self.template_name,
{
'breadcrumbs': self.breadcrumbs,
'analyses': self.analyses,
'rower': self.r,
'the_script': self.script,
'the_div': self.div,
'selected': self.selected,
})
breadcrumbs = [
{
'url': '/rowers/analysis',
'name': 'Analysis'
},
{
'url': reverse('instrokeanalysis_view'),
'name': 'In-Stroke Analysis',
},
]
return render(request, 'instroke_analysis.html',
{
'breadcrumbs': breadcrumbs,
'analyses': analyses,
'rower': r,
'the_script': script,
'the_div': div,
'selected': selected,
})
#instroke analysis delete view
class InStrokeAnalysisDelete(DeleteView):