Private
Public Access
1
0
This commit is contained in:
Sander Roosendaal
2022-01-01 11:10:09 +01:00
parent b2c57a5eb4
commit ea5283d2d8
4 changed files with 95 additions and 65 deletions

View File

@@ -520,7 +520,7 @@ class TeamRequest(models.Model):
from rowers.utils import ( from rowers.utils import (
workflowleftpanel,workflowmiddlepanel, workflowleftpanel,workflowmiddlepanel,
defaultleft,defaultmiddle,landingpages, defaultleft,defaultmiddle,landingpages,landingpages2,
steps_read_fit, steps_write_fit, ps_dict_order steps_read_fit, steps_write_fit, ps_dict_order
) )
@@ -993,6 +993,10 @@ class Rower(models.Model):
max_length=200, max_length=200,
choices=landingpages, choices=landingpages,
verbose_name="Default Landing Page") verbose_name="Default Landing Page")
defaultlandingpage2 = models.CharField(default='workout_delete',
max_length=200,
choices=landingpages2,
verbose_name="Alternative Landing Page")
# Access tokens # Access tokens
c2token = models.CharField(default='',max_length=200,blank=True,null=True) c2token = models.CharField(default='',max_length=200,blank=True,null=True)
@@ -4280,6 +4284,7 @@ class AccountRowerForm(ModelForm):
'fav_analysis', 'fav_analysis',
'usersmooth', 'usersmooth',
'defaultlandingpage', 'defaultlandingpage',
'defaultlandingpage2',
'offercoaching','autojoin','emailalternatives'] 'offercoaching','autojoin','emailalternatives']
widgets = { widgets = {

View File

@@ -35,46 +35,7 @@
<ul class="main-content"> <ul class="main-content">
<li class="grid_2" style="min-height:200px;"> <li class="grid_4">
<p>
Total meters: {{ totalmeters }}. Total time {{ totalhours }}:{{ totalminutes }}h.
<a href="/rowers/history/">Dig deeper</a>.
</p>
<p>
Activity chart by
<a href="{{ request.get_path }}?yaxis=trimp">TRIMP</a>,
<a href="{{ request.get_path }}?yaxis=rscore">rScore</a>,
<a href="{{ request.get_path }}?yaxis=duration">Time</a>.
</p>
<link rel="stylesheet" href="https://cdn.pydata.org/bokeh/release/bokeh-2.2.3.min.css" type="text/css" />
<link rel="stylesheet" href="https://cdn.pydata.org/bokeh/release/bokeh-widgets-2.2.3.min.css" type="text/css" />
<script src="https://cdn.pydata.org/bokeh/release/bokeh-2.2.3.min.js"></script>
<script async="true" type="text/text/javascript">
Bokeh.set_log_level("info")
</script>
{{ interactiveplot |safe }}
{{ the_div |safe }}
</li>
<li class="grid_2">
<p>Filter on date
<form enctype="multipart/form-data" method="post">
<table>
{{ dateform.as_table }}
</table>
{% csrf_token %}
</p>
<p>and keyword</p>
<p>
{{ searchform }}
</p>
<p>
<input name='daterange' type="submit" value="Select workouts">
</form>
</p>
<p>
<p>
<span> <span>
{% if workouts.has_previous %} {% if workouts.has_previous %}
{% if request.GET.q %} {% if request.GET.q %}
@@ -118,7 +79,6 @@
{% endif %} {% endif %}
{% endif %} {% endif %}
</span> </span>
</p>
</li> </li>
{% if workouts %} {% if workouts %}
@@ -154,18 +114,25 @@
{% if workout|may_edit:request %} {% if workout|may_edit:request %}
<a class="small" <a class="small"
href={% url rower.defaultlandingpage id=workout.id|encode %} href={% url rower.defaultlandingpage id=workout.id|encode %}
title="Edit"> title="{{ rower.defaultlandingpage|verbose }}">
<i class="fas fa-search fa-fw"></i></a> <i class="{{ rower.defaultlandingpage|landingicon }}"></i></a>
{% else %} {% else %}
&nbsp; &nbsp;
{% endif %} {% endif %}
</div> </div>
<div class="workoutelement"> <div class="workoutelement">
{% if workout|may_edit:request %} {% if workout|may_edit:request %}
{% if rower.defaultlandingpage2 != 'workout_delete' %}
<a class="small" <a class="small"
href="/rowers/workout/{{ workout.id|encode }}/delete/" href={% url rower.defaultlandingpage2 id=workout.id|encode %}
title="Delete"> title="{{ rower.defaultlandingpage2|verbose }}">
<i class="fas fa-trash-alt fa-fw"></i></a> <i class="{{ rower.defaultlandingpage2|landingicon }}"></i></a>
{% else %}
<a class="small"
href={% url rower.defaultlandingpage2 pk=workout.id|encode %}
title="{{ rower.defaultlandingpage2|verbose }}">
<i class="{{ rower.defaultlandingpage2|landingicon }}"></i></a>
{% endif %}
{% else %} {% else %}
&nbsp; &nbsp;
{% endif %} {% endif %}
@@ -178,6 +145,45 @@
{% else %} {% else %}
<li> No workouts found </li> <li> No workouts found </li>
{% endif %} {% endif %}
<li class="grid_4">
<p>Filter on date
<form enctype="multipart/form-data" method="post">
<table>
{{ dateform.as_table }}
</table>
{% csrf_token %}
</p>
<p>and keyword</p>
<p>
{{ searchform }}
</p>
<p>
<input name='daterange' type="submit" value="Select workouts">
</form>
</p>
</li>
<li class="grid_4" style="min-height:400px;">
<p>
Total meters: {{ totalmeters }}. Total time {{ totalhours }}:{{ totalminutes }}h.
<a href="/rowers/history/">Dig deeper</a>.
</p>
<p>
Activity chart by
<a href="{{ request.get_path }}?yaxis=trimp">TRIMP</a>,
<a href="{{ request.get_path }}?yaxis=rscore">rScore</a>,
<a href="{{ request.get_path }}?yaxis=duration">Time</a>.
</p>
<link rel="stylesheet" href="https://cdn.pydata.org/bokeh/release/bokeh-2.2.3.min.css" type="text/css" />
<link rel="stylesheet" href="https://cdn.pydata.org/bokeh/release/bokeh-widgets-2.2.3.min.css" type="text/css" />
<script src="https://cdn.pydata.org/bokeh/release/bokeh-2.2.3.min.js"></script>
<script async="true" type="text/text/javascript">
Bokeh.set_log_level("info")
</script>
{{ interactiveplot |safe }}
{{ the_div |safe }}
</li>
{% if announcements %} {% if announcements %}
<li class="grid_4"> <li class="grid_4">
<h3>What's New?</h3> <h3>What's New?</h3>

View File

@@ -27,7 +27,7 @@ from rowers.mytypes import (
otwtypes,adaptivetypes,sexcategories,weightcategories,workouttypes, otwtypes,adaptivetypes,sexcategories,weightcategories,workouttypes,
workouttypes_icons, workouttypes_icons,
) )
from rowers.utils import NoTokenError, step_to_string from rowers.utils import NoTokenError, step_to_string, landingpages2
import rowers.payments as payments import rowers.payments as payments
@@ -72,16 +72,29 @@ favanalysisdict = {}
for key,value in favanalysischoices: for key,value in favanalysischoices:
favanalysisdict[key] = value favanalysisdict[key] = value
favanalysisicons = { landingpagedict = {}
'compare':'fa-balance-scale', for key, value in landingpages2:
'stats':'fa-table', landingpagedict[key] = value
'boxplot':'fa-box-open',
'trendflex':'fa-chart-line', landingpageicons = {
'histogram':'fa-chart-bar', 'workout_view':'fas fa-search fa-fw',
'flexall':'fa-chart-line', 'workout_edit_view':'fas fa-pencil-alt fa-fw',
'cp':'fa-user-chart', 'workout_workflow_view':'fas fa-tachometer-alt fa-fw',
'workout_stats_view':'fal fa-table fa-fw',
'workout_data_view':'fal fa-table fa-fw',
'workout_summary_edit_view':'fas fa-pause fa-fw',
'workout_flexchart_stacked_view':'fas fa-align-justify fa-fw',
'workout_flexchart3_view':'fas fa-chart-line fa-fw',
'workout_delete':'fas fa-trash-alt fa-fw'
} }
@register.filter
def landingicon(landingpage):
try:
return landingpageicons[landingpage]
except KeyError:
return 'fas fa-search fa-fw'
@register.filter @register.filter
def steptostring(steps): def steptostring(steps):
res = ps_dict_get_description_html(steps,short=True) res = ps_dict_get_description_html(steps,short=True)
@@ -91,16 +104,9 @@ def steptostring(steps):
@register.filter @register.filter
def verbose(s): def verbose(s):
try: try:
return favanalysisdict[s] return landingpagedict[s]
except KeyError: # pragma: no cover except KeyError: # pragma: no cover
return '' return 'Details'
@register.filter
def icon(s):
try:
return favanalysisicons[s]
except KeyError: # pragma: no cover
return 'fa-chart-line'
@register.filter @register.filter
def datarows(data): # pragma: no cover def datarows(data): # pragma: no cover

View File

@@ -46,6 +46,19 @@ landingpages = (
('workout_flexchart3_view','Workout Flex Chart') ('workout_flexchart3_view','Workout Flex Chart')
) )
landingpages2 = (
('workout_view', 'Workout View'),
('workout_edit_view','Edit View'),
('workout_workflow_view','Workflow View'),
('workout_stats_view','Stats View'),
('workout_data_view','Data Explore View'),
('workout_summary_edit_view','Intervals Editor'),
('workout_flexchart_stacked_view','Workout Stacked Chart'),
('workout_flexchart3_view','Workout Flex Chart'),
('workout_delete','Remove Workout')
)
workflowmiddlepanel = ( workflowmiddlepanel = (