diff --git a/rowers/plannedsessions.py b/rowers/plannedsessions.py index 73f3a364..561904b5 100644 --- a/rowers/plannedsessions.py +++ b/rowers/plannedsessions.py @@ -29,7 +29,7 @@ import metrics import numpy as np import dataprep import courses - +import iso8601 from rowers.tasks import handle_check_race_course def get_todays_micro(plan,thedate=date.today()): @@ -400,8 +400,12 @@ def remove_rower_session(r,ps): return 1 -def get_dates_timeperiod(timeperiod): +def get_dates_timeperiod(timeperiod,startdatestring='',enddatestring=''): # set start end date according timeperiod + + if not timeperiod: + timeperiod = 'thisweek' + daterangetester = re.compile('^(\d+-\d+-\d+)\/(\d+-\d+-\d+)') if timeperiod=='today': @@ -445,11 +449,11 @@ def get_dates_timeperiod(timeperiod): enddate = enddate.replace(day=1) enddate = enddate-timezone.timedelta(days=1) elif daterangetester.match(timeperiod): - startdatestring = daterangetester.match(timeperiod).group(1) - enddatestring = daterangetester.match(timeperiod).group(2) + tstartdatestring = daterangetester.match(timeperiod).group(1) + tenddatestring = daterangetester.match(timeperiod).group(2) try: - startdate = dt.datetime.strptime(startdatestring,'%Y-%m-%d').date() - enddate = dt.datetime.strptime(enddatestring,'%Y-%m-%d').date() + startdate = dt.datetime.strptime(tstartdatestring,'%Y-%m-%d').date() + enddate = dt.datetime.strptime(tenddatestring,'%Y-%m-%d').date() if startdate > enddate: startdate2 = enddate enddate = startdate @@ -460,6 +464,19 @@ def get_dates_timeperiod(timeperiod): else: startdate = date.today() enddate = date.today() + + + if startdatestring != '': + try: + startdate = iso8601.parse_date(startdatestring) + except ParseError: + pass + + if enddatestring != '': + try: + enddate = iso8601.parse_date(enddatestring) + except ParseError: + pass return startdate,enddate diff --git a/rowers/templates/menu_plan.html b/rowers/templates/menu_plan.html index ee1e2cb2..008567cf 100644 --- a/rowers/templates/menu_plan.html +++ b/rowers/templates/menu_plan.html @@ -29,22 +29,22 @@
  • - +  Sessions
  • - +  Link Workouts
  • - +  Coach View
  • - +  Print View
  • @@ -57,17 +57,17 @@
    • - +  Add Session
    • - +  Add Team Session
    • - + Plan Microcycle
    • diff --git a/rowers/templates/plannedsessioncreate.html b/rowers/templates/plannedsessioncreate.html index e66d61d0..a47cbfe2 100644 --- a/rowers/templates/plannedsessioncreate.html +++ b/rowers/templates/plannedsessioncreate.html @@ -7,6 +7,8 @@ {% block main %}

      Create Sessions for {{ rower.user.first_name }} {{ rower.user.last_name }}

      +

      {{ timeperiod }}

      +
      • Plan

        @@ -59,7 +61,8 @@
      • New Session

        -
        + {% if form.errors %}

        Please correct the error{{ form.errors|pluralize }} below. diff --git a/rowers/templates/plannedsessions.html b/rowers/templates/plannedsessions.html index e4c7e514..41c18019 100644 --- a/rowers/templates/plannedsessions.html +++ b/rowers/templates/plannedsessions.html @@ -114,7 +114,7 @@ by your coach if you are part of a team. You can create your own planned workouts by purchasing the "Coach" or "Self-Coach" plans. {% endif %}

        - Print View

        diff --git a/rowers/urls.py b/rowers/urls.py index e329cc21..489b093f 100644 --- a/rowers/urls.py +++ b/rowers/urls.py @@ -472,6 +472,10 @@ urlpatterns = [ url(r'^sessions/create/$',views.plannedsession_create_view), url(r'^sessions/create/user/(?P\d+)$', views.plannedsession_create_view), + url(r'^sessions/create/(?P\d+-\d+-\d+)/(?P\d+-\d+-\d+)/$', + views.plannedsession_create_view), + url(r'^sessions/create/(?P\d+-\d+-\d+)/(?P\d+-\d+-\d+)/user/(?P\d+)$', + views.plannedsession_create_view), url(r'^sessions/multiclone/$',views.plannedsession_multiclone_view), url(r'^sessions/multiclone/user/(?P\d+)/$', views.plannedsession_multiclone_view), diff --git a/rowers/views.py b/rowers/views.py index 3c59cf5f..0647b1f7 100644 --- a/rowers/views.py +++ b/rowers/views.py @@ -13952,19 +13952,12 @@ def agegrouprecordview(request,sex='male',weightcategory='hwt', redirect_field_name=None) def plannedsession_multiclone_view( request, - userid=0, - startdate=timezone.now()-datetime.timedelta(days=30), - enddate=timezone.now()): + userid=0,): r = getrequestrower(request,userid=userid) when = request.GET.get('when') - if when: - timeperiod = when - else: - timeperiod = 'thisweek' - - startdate,enddate = get_dates_timeperiod(timeperiod) + startdate,enddate = get_dates_timeperiod(when) if request.method == 'POST' and 'daterange' in request.POST: @@ -14044,9 +14037,21 @@ def plannedsession_multiclone_view( except IndexError: trainingplan = None - + timeperiod = startdate.strftime('%Y-%m-%d')+'/'+enddate.strftime('%Y-%m-%d') + breadcrumbs = [ + { + 'url': reverse(plannedsessions_view), + 'name': 'Planned Sessions' + }, + { + 'url': reverse(plannedsessions_multiclone_view), + 'name': 'Clone Multiple Sessions' + } + ] + return render(request, 'plannedsessions_multiclone_select.html', {'plannedsessions':sps, + 'breadcrumbs':breadcrumbs, 'plan':trainingplan, 'dateform':dateform, 'startdate':startdate, @@ -14064,19 +14069,19 @@ def plannedsession_multiclone_view( message="This functionality requires a Coach or Self-Coach plan", redirect_field_name=None) def plannedsession_create_view(request, - userid=0): + userid=0, + startdatestring='', + enddatestring=''): r = getrequestrower(request,userid=userid) - + + when = request.GET.get('when') - if when: - timeperiod = when - else: - timeperiod = 'thisweek' - - startdate,enddate = get_dates_timeperiod(timeperiod) - + startdate,enddate = get_dates_timeperiod(when,startdatestring=startdatestring, + enddatestring=enddatestring) + + if request.method == 'POST': sessioncreateform = PlannedSessionForm(request.POST) if sessioncreateform.is_valid(): @@ -14116,15 +14121,11 @@ def plannedsession_create_view(request, add_rower_session(r,ps) + request.session['fstartdate'] = str(arrow.get(startdate)) request.session['fenddate'] = str(arrow.get(enddate)) request.session['fprefdate'] = str(arrow.get(preferreddate)) - url = reverse(plannedsession_create_view, - kwargs = { - 'userid':r.user.id, - }) - return HttpResponseRedirect(url) else: if 'fstartdate' in request.session: try: @@ -14182,6 +14183,7 @@ def plannedsession_create_view(request, except IndexError: trainingplan = None + timeperiod = startdate.strftime('%Y-%m-%d')+'/'+enddate.strftime('%Y-%m-%d') return render(request,'plannedsessioncreate.html', { @@ -14205,12 +14207,7 @@ def plannedsession_multicreate_view(request, r = getrequestrower(request,userid=userid) when = request.GET.get('when') - if when: - timeperiod = when - else: - timeperiod = 'thisweek' - - startdate,enddate = get_dates_timeperiod(timeperiod) + startdate,enddate = get_dates_timeperiod(when) try: trainingplan = TrainingPlan.objects.filter( startdate__lte = startdate, @@ -14296,9 +14293,21 @@ def plannedsession_multicreate_view(request, ps_formset = PlannedSessionFormSet(queryset = qset, initial=initials) + timeperiod = startdate.strftime('%Y-%m-%d')+'/'+enddate.strftime('%Y-%m-%d') + breadcrumbs = [ + { + 'url': reverse(plannedsessions_view), + 'name': 'Planned Sessions' + }, + { + 'url': reverse(plannedsessions_multicreate_view), + 'name': 'Plan MicroCycle' + } + ] context = { 'ps_formset':ps_formset, + 'breadcrumbs':breadcrumbs, 'rower':r, 'active':'nav-plan', 'plan':trainingplan, @@ -14318,10 +14327,6 @@ def plannedsession_teamcreate_view(request, therower = getrequestrower(request,userid=userid) when = request.GET.get('when') - if when: - timeperiod = when - else: - timeperiod = 'thisweek' teams = Team.objects.filter(manager=request.user) if len(teams)>0: @@ -14411,10 +14416,23 @@ def plannedsession_teamcreate_view(request, request.user ) - return render(request,'plannedsessionteamcreate.html', + timeperiod = startdate.strftime('%Y-%m-%d')+'/'+enddate.strftime('%Y-%m-%d') + breadcrumbs = [ + { + 'url': reverse(plannedsessions_view), + 'name': 'Planned Sessions' + }, + { + 'url': reverse(plannedsessions_teamcreate_view), + 'name': 'Add Team Session' + } + ] + + return render(request,'plannedsessionteamcreate.html', { 'teams':get_my_teams(request.user), 'plan':trainingplan, + 'breadcrumbs':breadcrumbs, 'form':sessioncreateform, 'teamform':sessionteamselectform, 'timeperiod':timeperiod, @@ -14432,11 +14450,6 @@ def plannedsession_teamedit_view(request, r = getrequestrower(request,userid=userid) when = request.GET.get('when') - if when: - timeperiod = when - else: - timeperiod = 'thisweek' - try: ps = PlannedSession.objects.get(id=sessionid) @@ -14546,10 +14559,24 @@ def plannedsession_teamedit_view(request, sessionrowerform.fields['members'].initial = ps.rower.all() + timeperiod = startdate.strftime('%Y-%m-%d')+'/'+enddate.strftime('%Y-%m-%d') + breadcrumbs = [ + { + 'url': reverse(plannedsessions_view), + 'name': 'Planned Sessions' + }, + { + 'url': reverse(plannedsessions_teamcreate_view), + 'name': 'Add Team Session' + } + ] + + return render(request,'plannedsessionteamedit.html', { 'plannedsession':ps, 'plan':trainingplan, + 'breadcrumbs':breadcrumbs, 'rower':r, 'active':'nav-plan', 'teams':get_my_teams(request.user), @@ -14569,10 +14596,6 @@ def plannedsessions_coach_view(request, therower = getrower(request.user) when = request.GET.get('when') - if when: - timeperiod = when - else: - timeperiod = 'thisweek' startdate,enddate = get_dates_timeperiod(timeperiod) @@ -14624,10 +14647,23 @@ def plannedsessions_coach_view(request, myteams = Team.objects.filter(manager=request.user) + timeperiod = startdate.strftime('%Y-%m-%d')+'/'+enddate.strftime('%Y-%m-%d') + breadcrumbs = [ + { + 'url': reverse(plannedsessions_view), + 'name': 'Planned Sessions' + }, + { + 'url': reverse(plannedsessions_coach_view), + 'name': 'Coach View' + } + ] + return render(request,'plannedsessionscoach.html', { 'myteams':myteams, 'plannedsessions':sps, + 'breadcrumbs':breadcrumbs, 'plan':trainingplan, 'statusdict':statusdict, 'timeperiod':timeperiod, @@ -14660,18 +14696,8 @@ def plannedsessions_view(request, when = request.GET.get('when') - if when: - timeperiod = when - startdate,enddate = get_dates_timeperiod(timeperiod) - else: - timeperiod = 'thisweek' - startdate1,enddate1 = get_dates_timeperiod(timeperiod) - - if not startdatestring: - startdate = startdate1 - - if not enddatestring: - enddate = enddate1 + startdate,enddate = get_dates_timeperiod(when,startdatestring=startdatestring, + enddatestring=enddatestring) try: trainingplan = TrainingPlan.objects.filter( @@ -14687,6 +14713,10 @@ def plannedsessions_view(request, completeness = {} actualvalue = {} completiondate = {} + + if not sps and request.user.rower.rowerplan == 'basic': + messages.error(request, + "You must purchase Coach or Self-coach plans or be part of a team to get planned sessions") for ps in sps: ratio,status,cdate = is_session_complete(r,ps) @@ -14700,9 +14730,18 @@ def plannedsessions_view(request, plannedsession=None, date__gte=startdate,date__lte=enddate) + timeperiod = startdate.strftime('%Y-%m-%d')+'/'+enddate.strftime('%Y-%m-%d') + breadcrumbs = [ + { + 'url': reverse(plannedsessions_view), + 'name': 'Planned Sessions' + }, + ] + return render(request,'plannedsessions.html', { 'teams':get_my_teams(request.user), + 'breadcrumbs':breadcrumbs, 'plannedsessions':sps, 'plan':trainingplan, 'active': 'nav-plan', @@ -14720,10 +14759,6 @@ def plannedsessions_print_view(request,userid=0): r = getrequestrower(request,userid=userid) when = request.GET.get('when') - if when: - timeperiod = when - else: - timeperiod = 'thisweek' startdate,enddate = get_dates_timeperiod(timeperiod) @@ -17038,6 +17073,10 @@ def planmesocyclebyweek(request,id=0,userid=0): #we're still here. We have permission sundays = [s for s in allsundays(cycle.startdate,cycle.enddate)] + + if sundays[-1] < cycle.enddate: + sundays = sundays+[cycle.enddate] + for i in range(len(sundays)): if i==0: monday = cycle.startdate @@ -17047,6 +17086,7 @@ def planmesocyclebyweek(request,id=0,userid=0): monday = cycle.startdate nextsunday = sundays[i] + micro = TrainingMicroCycle(startdate = monday, enddate = nextsunday, plan = cycle,