Merge branch 'feature/planmeso' into develop
This commit is contained in:
+21
-2
@@ -358,6 +358,7 @@ class TeamUploadOptionsForm(forms.Form):
|
|||||||
class Meta:
|
class Meta:
|
||||||
fields = ['make_plot','plottype']
|
fields = ['make_plot','plottype']
|
||||||
|
|
||||||
|
|
||||||
# This form is used on the Workout Split page
|
# This form is used on the Workout Split page
|
||||||
class WorkoutSplitForm(forms.Form):
|
class WorkoutSplitForm(forms.Form):
|
||||||
splitchoices = (
|
splitchoices = (
|
||||||
@@ -513,15 +514,20 @@ class DateRangeForm(forms.Form):
|
|||||||
startdate = forms.DateField(
|
startdate = forms.DateField(
|
||||||
initial=timezone.now()-datetime.timedelta(days=365),
|
initial=timezone.now()-datetime.timedelta(days=365),
|
||||||
# widget=SelectDateWidget(years=range(1990,2050)),
|
# widget=SelectDateWidget(years=range(1990,2050)),
|
||||||
widget=AdminDateWidget(),
|
widget=AdminDateWidget(format='%Y-%m-%d'),
|
||||||
label='Start Date')
|
label='Start Date')
|
||||||
enddate = forms.DateField(
|
enddate = forms.DateField(
|
||||||
initial=timezone.now(),
|
initial=timezone.now(),
|
||||||
widget=AdminDateWidget(),
|
widget=AdminDateWidget(format='%Y-%m-%d'),
|
||||||
label='End Date')
|
label='End Date')
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
fields = ['startdate','enddate']
|
fields = ['startdate','enddate']
|
||||||
|
input_formats=("%Y-%m-%d")
|
||||||
|
dateTimeOptions = {
|
||||||
|
'format': '%Y-%m-%d',
|
||||||
|
'autoclose': True,
|
||||||
|
}
|
||||||
|
|
||||||
class FitnessMetricForm(forms.Form):
|
class FitnessMetricForm(forms.Form):
|
||||||
startdate = forms.DateField(
|
startdate = forms.DateField(
|
||||||
@@ -1201,6 +1207,19 @@ class WorkoutRaceSelectForm(forms.Form):
|
|||||||
|
|
||||||
# self.fields['evaluate_after'] =
|
# self.fields['evaluate_after'] =
|
||||||
|
|
||||||
|
# Form to select team by rower
|
||||||
|
class RowerTeamForm(forms.Form):
|
||||||
|
team = forms.ModelChoiceField(
|
||||||
|
queryset=Team.objects.all(),
|
||||||
|
required=False,
|
||||||
|
)
|
||||||
|
|
||||||
|
def __init__(self, user, *args, **kwargs):
|
||||||
|
super(RowerTeamForm, self).__init__(*args, **kwargs)
|
||||||
|
|
||||||
|
self.fields['team'].queryset = Team.objects.filter(manager=user)
|
||||||
|
|
||||||
|
|
||||||
class PlannedSessionTeamForm(forms.Form):
|
class PlannedSessionTeamForm(forms.Form):
|
||||||
team = forms.ModelMultipleChoiceField(
|
team = forms.ModelMultipleChoiceField(
|
||||||
queryset=Team.objects.all(),
|
queryset=Team.objects.all(),
|
||||||
|
|||||||
@@ -2982,6 +2982,9 @@ def auto_delete_image_on_delete(sender,instance, **kwargs):
|
|||||||
print("couldn't find the file "+instance.filename)
|
print("couldn't find the file "+instance.filename)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Form to update Workout data
|
# Form to update Workout data
|
||||||
class WorkoutForm(ModelForm):
|
class WorkoutForm(ModelForm):
|
||||||
# duration = forms.TimeInput(format='%H:%M:%S.%f')
|
# duration = forms.TimeInput(format='%H:%M:%S.%f')
|
||||||
|
|||||||
@@ -486,6 +486,10 @@ def remove_rower_session(r,ps):
|
|||||||
|
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
|
def get_team(request):
|
||||||
|
teamid = request.GET.get('team')
|
||||||
|
return teamid
|
||||||
|
|
||||||
def get_dates_timeperiod(request,startdatestring='',enddatestring='',
|
def get_dates_timeperiod(request,startdatestring='',enddatestring='',
|
||||||
defaulttimeperiod='thisweek'):
|
defaulttimeperiod='thisweek'):
|
||||||
# set start end date according timeperiod
|
# set start end date according timeperiod
|
||||||
|
|||||||
@@ -61,11 +61,6 @@
|
|||||||
<i class="far fa-calendar-plus fa-fw"></i> Add Session
|
<i class="far fa-calendar-plus fa-fw"></i> Add Session
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li id="plan-teamsession">
|
|
||||||
<a href="/rowers/sessions/teamcreate/?when={{ timeperiod }}">
|
|
||||||
<i class="fas fa-whistle fa-fw"></i> Add Group Session
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li id="plan-microcycle">
|
<li id="plan-microcycle">
|
||||||
<a href="/rowers/sessions/multicreate/?when={{ timeperiod }}">
|
<a href="/rowers/sessions/multicreate/?when={{ timeperiod }}">
|
||||||
<i class="fas fa-expand fa-fw"></i>Plan Microcycle
|
<i class="fas fa-expand fa-fw"></i>Plan Microcycle
|
||||||
@@ -78,6 +73,31 @@
|
|||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
|
{% if request.user|user_teams %}
|
||||||
|
<li class="has-children" id="teamplan">
|
||||||
|
<input type="checkbox" name="group-plan" id="group-teamplan">
|
||||||
|
<label for="group-teamplan">
|
||||||
|
<i class="fas fa-calendar-plus fa-fw"></i> Plan Group Sessions
|
||||||
|
</label>
|
||||||
|
<ul>
|
||||||
|
<li id="plan-teamsession">
|
||||||
|
<a href="/rowers/sessions/teamcreate/?when={{ timeperiod }}">
|
||||||
|
<i class="fas fa-whistle fa-fw"></i> Add Group Session
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li id="plan-microcycle">
|
||||||
|
<a href="/rowers/sessions/multicreate/?when={{ timeperiod }}&team={{ request.user|user_team1 }}">
|
||||||
|
<i class="fas fa-expand fa-fw"></i>Plan Group Microcycle
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li id="plan-microcycle">
|
||||||
|
<a href="/rowers/sessions/multiclone/user/{{ rower.user.id }}/?when={{ timeperiod }}">
|
||||||
|
<i class="fas fa-layer-plus fa-fw"></i>Clone Multiple Group Sessions
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
{% endif %}
|
||||||
</ul><!-- cd-accordion-menu -->
|
</ul><!-- cd-accordion-menu -->
|
||||||
|
|
||||||
<p> </p>
|
<p> </p>
|
||||||
|
|||||||
@@ -5,7 +5,11 @@
|
|||||||
{% block title %}Plan entire microcycle{% endblock %}
|
{% block title %}Plan entire microcycle{% endblock %}
|
||||||
|
|
||||||
{% block main %}
|
{% block main %}
|
||||||
|
{% if team %}
|
||||||
|
<h1>Create Group Sessions for {{ team.name }}</h1>
|
||||||
|
{% else %}
|
||||||
<h1>Create Sessions for {{ rower.user.first_name }} {{ rower.user.last_name }}</h1>
|
<h1>Create Sessions for {{ rower.user.first_name }} {{ rower.user.last_name }}</h1>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
<ul class="main-content">
|
<ul class="main-content">
|
||||||
<li class="grid_2">
|
<li class="grid_2">
|
||||||
@@ -14,6 +18,9 @@
|
|||||||
<table>
|
<table>
|
||||||
{{ dateform.as_table }}
|
{{ dateform.as_table }}
|
||||||
</table>
|
</table>
|
||||||
|
<table>
|
||||||
|
{{ teamform.as_table }}
|
||||||
|
</table>
|
||||||
<input type="Submit" value="Set Date Range">
|
<input type="Submit" value="Set Date Range">
|
||||||
</form>
|
</form>
|
||||||
</p>
|
</p>
|
||||||
@@ -66,9 +73,15 @@
|
|||||||
{% endfor %}
|
{% endfor %}
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
{% if team %}
|
||||||
|
<a href="/rowers/sessions/multicreate/user/{{ rower.user.id }}/extra/{{ extrasessions }}/?when={{ timeperiod }}&team={{ team.id }}">
|
||||||
|
Add More
|
||||||
|
</a>
|
||||||
|
{% else %}
|
||||||
<a href="/rowers/sessions/multicreate/user/{{ rower.user.id }}/extra/{{ extrasessions }}/?when={{ timeperiod }}">
|
<a href="/rowers/sessions/multicreate/user/{{ rower.user.id }}/extra/{{ extrasessions }}/?when={{ timeperiod }}">
|
||||||
Add More
|
Add More
|
||||||
</a>
|
</a>
|
||||||
|
{% endif %}
|
||||||
or
|
or
|
||||||
<a href="/rowers/sessions/multiclone/user/{{ rower.user.id }}/?when={{ timeperiod }}">
|
<a href="/rowers/sessions/multiclone/user/{{ rower.user.id }}/?when={{ timeperiod }}">
|
||||||
Clone multiple sessions
|
Clone multiple sessions
|
||||||
|
|||||||
@@ -64,7 +64,11 @@
|
|||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
{% if team %}
|
||||||
|
<h1>Clone Multiple Sessions for {{ team.name }}</h1>
|
||||||
|
{% else %}
|
||||||
<h1>Clone Multiple Sessions for {{ rower.user.first_name }} {{ rower.user.last_name }}</h1>
|
<h1>Clone Multiple Sessions for {{ rower.user.first_name }} {{ rower.user.last_name }}</h1>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
<ul class="main-content">
|
<ul class="main-content">
|
||||||
<li class="grid_2">
|
<li class="grid_2">
|
||||||
@@ -73,6 +77,9 @@
|
|||||||
<table>
|
<table>
|
||||||
{{ dateform.as_table }}
|
{{ dateform.as_table }}
|
||||||
</table>
|
</table>
|
||||||
|
<table>
|
||||||
|
{{ teamform.as_table }}
|
||||||
|
</table>
|
||||||
<input type="Submit" value="Set Date Range">
|
<input type="Submit" value="Set Date Range">
|
||||||
</form>
|
</form>
|
||||||
</p>
|
</p>
|
||||||
|
|||||||
@@ -142,6 +142,10 @@
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="4">
|
<td colspan="4">
|
||||||
|
<a href="/rowers/macrocycle/{{ macrocycle.0.id }}/planbymonths/user/{{ rower.user.id }}">
|
||||||
|
Replan by Months
|
||||||
|
</a>
|
||||||
|
/
|
||||||
<a href='/rowers/sessions/user/{{ rower.user.id }}?when={{ macrocycle.0.startdate|date:"Y-m-d" }}/{{ macrocycle.0.enddate|date:"Y-m-d" }}'>view sessions</a>
|
<a href='/rowers/sessions/user/{{ rower.user.id }}?when={{ macrocycle.0.startdate|date:"Y-m-d" }}/{{ macrocycle.0.enddate|date:"Y-m-d" }}'>view sessions</a>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@@ -263,6 +267,10 @@
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="4">
|
<td colspan="4">
|
||||||
|
<a href="/rowers/mesocycle/{{ mesocycle.0.id }}/planbyweeks/user/{{ rower.user.id }}">
|
||||||
|
Replan by Weeks
|
||||||
|
</a>
|
||||||
|
/
|
||||||
<a href='/rowers/sessions/user/{{ rower.user.id }}?when={{ mesocycle.0.startdate|date:"Y-m-d" }}/{{ mesocycle.0.enddate|date:"Y-m-d" }}'>view sessions</a>
|
<a href='/rowers/sessions/user/{{ rower.user.id }}?when={{ mesocycle.0.startdate|date:"Y-m-d" }}/{{ mesocycle.0.enddate|date:"Y-m-d" }}'>view sessions</a>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|||||||
@@ -355,6 +355,18 @@ def user_teams(user):
|
|||||||
|
|
||||||
return teams
|
return teams
|
||||||
|
|
||||||
|
@register.filter
|
||||||
|
def user_team1(user):
|
||||||
|
try:
|
||||||
|
therower = Rower.objects.get(user=user)
|
||||||
|
teams1 = therower.team.all()
|
||||||
|
teams2 = Team.objects.filter(manager=user)
|
||||||
|
teams = list(set(teams1).union(set(teams2)))
|
||||||
|
except TypeError:
|
||||||
|
teams = []
|
||||||
|
|
||||||
|
return teams[0].id
|
||||||
|
|
||||||
@register.filter
|
@register.filter
|
||||||
def announcements(request):
|
def announcements(request):
|
||||||
announcements = SiteAnnouncement.objects.filter(
|
announcements = SiteAnnouncement.objects.filter(
|
||||||
|
|||||||
@@ -182,7 +182,7 @@ def plannedsession_multiclone_view(
|
|||||||
|
|
||||||
|
|
||||||
startdate,enddate = get_dates_timeperiod(request)
|
startdate,enddate = get_dates_timeperiod(request)
|
||||||
|
teamid = get_team(request)
|
||||||
|
|
||||||
if request.method == 'POST' and 'daterange' in request.POST:
|
if request.method == 'POST' and 'daterange' in request.POST:
|
||||||
dateform = DateRangeForm(request.POST)
|
dateform = DateRangeForm(request.POST)
|
||||||
@@ -245,6 +245,17 @@ def plannedsession_multiclone_view(
|
|||||||
"startdate","preferreddate","enddate").exclude(
|
"startdate","preferreddate","enddate").exclude(
|
||||||
sessiontype='race')
|
sessiontype='race')
|
||||||
|
|
||||||
|
if teamid:
|
||||||
|
sps = sps.filter(team__in=[teamid])
|
||||||
|
try:
|
||||||
|
team = Team.objects.get(id=teamid)
|
||||||
|
if team.manager != request.user:
|
||||||
|
team = None
|
||||||
|
except Team.DoesNotExist:
|
||||||
|
team = None
|
||||||
|
else:
|
||||||
|
team = None
|
||||||
|
|
||||||
query = request.GET.get('q')
|
query = request.GET.get('q')
|
||||||
if query:
|
if query:
|
||||||
query_list = query.split()
|
query_list = query.split()
|
||||||
@@ -285,6 +296,13 @@ def plannedsession_multiclone_view(
|
|||||||
'enddate':enddate,
|
'enddate':enddate,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
if len(Team.objects.filter(manager=request.user))>=1:
|
||||||
|
teamform = RowerTeamForm(request.user)
|
||||||
|
if teamid:
|
||||||
|
teamform = RowerTeamForm(request.user,initial={'team':teamid})
|
||||||
|
else:
|
||||||
|
teamform = None
|
||||||
|
|
||||||
return render(request, 'plannedsessions_multiclone_select.html',
|
return render(request, 'plannedsessions_multiclone_select.html',
|
||||||
{'plannedsessions':sps,
|
{'plannedsessions':sps,
|
||||||
'breadcrumbs':breadcrumbs,
|
'breadcrumbs':breadcrumbs,
|
||||||
@@ -297,6 +315,8 @@ def plannedsession_multiclone_view(
|
|||||||
'rower':r,
|
'rower':r,
|
||||||
'active':'nav-plan',
|
'active':'nav-plan',
|
||||||
'timeperiod':timeperiod,
|
'timeperiod':timeperiod,
|
||||||
|
'team':team,
|
||||||
|
'teamform':teamform,
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -454,6 +474,7 @@ def plannedsession_multicreate_view(request,
|
|||||||
|
|
||||||
|
|
||||||
startdate,enddate = get_dates_timeperiod(request)
|
startdate,enddate = get_dates_timeperiod(request)
|
||||||
|
teamid = get_team(request)
|
||||||
try:
|
try:
|
||||||
trainingplan = TrainingPlan.objects.filter(
|
trainingplan = TrainingPlan.objects.filter(
|
||||||
startdate__lte = startdate,
|
startdate__lte = startdate,
|
||||||
@@ -472,6 +493,16 @@ def plannedsession_multicreate_view(request,
|
|||||||
).order_by("startdate","preferreddate","enddate").exclude(
|
).order_by("startdate","preferreddate","enddate").exclude(
|
||||||
sessiontype='race')
|
sessiontype='race')
|
||||||
|
|
||||||
|
if teamid:
|
||||||
|
qset = qset.filter(team__in=[teamid])
|
||||||
|
try:
|
||||||
|
team = Team.objects.get(id=teamid)
|
||||||
|
if team.manager != request.user:
|
||||||
|
team = None
|
||||||
|
except Team.DoesNotExist:
|
||||||
|
team = None
|
||||||
|
else:
|
||||||
|
team = None
|
||||||
|
|
||||||
|
|
||||||
initial = {
|
initial = {
|
||||||
@@ -500,6 +531,8 @@ def plannedsession_multicreate_view(request,
|
|||||||
for ps in instances:
|
for ps in instances:
|
||||||
ps.save()
|
ps.save()
|
||||||
add_rower_session(r,ps)
|
add_rower_session(r,ps)
|
||||||
|
if team:
|
||||||
|
add_team_session(team,ps)
|
||||||
messages.info(request,"Saved changes for Planned Session "+str(ps))
|
messages.info(request,"Saved changes for Planned Session "+str(ps))
|
||||||
for obj in ps_formset.deleted_objects:
|
for obj in ps_formset.deleted_objects:
|
||||||
messages.info(request,"Deleted Planned Session "+str(obj))
|
messages.info(request,"Deleted Planned Session "+str(obj))
|
||||||
@@ -515,6 +548,9 @@ def plannedsession_multicreate_view(request,
|
|||||||
startdatestring = startdate.strftime('%Y-%m-%d')
|
startdatestring = startdate.strftime('%Y-%m-%d')
|
||||||
enddatestring = enddate.strftime('%Y-%m-%d')
|
enddatestring = enddate.strftime('%Y-%m-%d')
|
||||||
url += '?when='+startdatestring+'/'+enddatestring
|
url += '?when='+startdatestring+'/'+enddatestring
|
||||||
|
|
||||||
|
if team:
|
||||||
|
url += '&team={teamid}'.format(teamid=team.id)
|
||||||
|
|
||||||
return HttpResponseRedirect(url)
|
return HttpResponseRedirect(url)
|
||||||
|
|
||||||
@@ -537,16 +573,25 @@ def plannedsession_multicreate_view(request,
|
|||||||
'enddate':enddate
|
'enddate':enddate
|
||||||
})
|
})
|
||||||
|
|
||||||
|
if len(Team.objects.filter(manager=request.user))>=1:
|
||||||
|
teamform = RowerTeamForm(request.user)
|
||||||
|
if teamid:
|
||||||
|
teamform = RowerTeamForm(request.user,initial={'team':teamid})
|
||||||
|
else:
|
||||||
|
teamform = None
|
||||||
|
|
||||||
context = {
|
context = {
|
||||||
'ps_formset':ps_formset,
|
'ps_formset':ps_formset,
|
||||||
'breadcrumbs':breadcrumbs,
|
'breadcrumbs':breadcrumbs,
|
||||||
'rower':r,
|
'rower':r,
|
||||||
'active':'nav-plan',
|
'active':'nav-plan',
|
||||||
'dateform':dateform,
|
'dateform':dateform,
|
||||||
|
'teamform':teamform,
|
||||||
'plan':trainingplan,
|
'plan':trainingplan,
|
||||||
'timeperiod':timeperiod,
|
'timeperiod':timeperiod,
|
||||||
'teams':get_my_teams(request.user),
|
'teams':get_my_teams(request.user),
|
||||||
'extrasessions': extrasessions+1
|
'extrasessions': extrasessions+1,
|
||||||
|
'team':team,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -81,7 +81,7 @@ from rowers.forms import (
|
|||||||
FusionMetricChoiceForm,BoxPlotChoiceForm,MultiFlexChoiceForm,
|
FusionMetricChoiceForm,BoxPlotChoiceForm,MultiFlexChoiceForm,
|
||||||
TrendFlexModalForm,WorkoutSplitForm,WorkoutJoinParamForm,
|
TrendFlexModalForm,WorkoutSplitForm,WorkoutJoinParamForm,
|
||||||
AnalysisOptionsForm, AnalysisChoiceForm,
|
AnalysisOptionsForm, AnalysisChoiceForm,
|
||||||
PlannedSessionMultipleCloneForm,SessionDateShiftForm,
|
PlannedSessionMultipleCloneForm,SessionDateShiftForm,RowerTeamForm,
|
||||||
)
|
)
|
||||||
from rowers.models import (
|
from rowers.models import (
|
||||||
Workout, User, Rower, WorkoutForm,FavoriteChart,
|
Workout, User, Rower, WorkoutForm,FavoriteChart,
|
||||||
|
|||||||
Reference in New Issue
Block a user