From d0b0c3767450dbcd627bd9606aa11395ae640132 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Sun, 22 Sep 2019 12:56:53 +0200 Subject: [PATCH] first changes for template planned sessions --- rowers/models.py | 2 + rowers/plannedsessions.py | 5 +- rowers/templates/plannedsessioncreate.html | 40 ++++++++++++++++ .../plannedsessiondeleteconfirm.html | 2 + rowers/templates/plannedsessionedit.html | 36 ++++++++++++++ rowers/tests/testdata/testdata.csv.gz | Bin 12642 -> 12642 bytes rowers/urls.py | 1 + rowers/views/planviews.py | 45 +++++++++++++++++- 8 files changed, 129 insertions(+), 2 deletions(-) diff --git a/rowers/models.py b/rowers/models.py index 7d4cc3e9..e3e23ada 100644 --- a/rowers/models.py +++ b/rowers/models.py @@ -2128,6 +2128,8 @@ class PlannedSession(models.Model): hasranking = models.BooleanField(default=False) + is_template = models.BooleanField(default=False) + def __str__(self): name = self.name diff --git a/rowers/plannedsessions.py b/rowers/plannedsessions.py index 8682aaa7..f3c33b4e 100644 --- a/rowers/plannedsessions.py +++ b/rowers/plannedsessions.py @@ -600,6 +600,7 @@ def get_sessions_manager(m,teamid=0,startdate=date.today(), manager=m, startdate__lte=enddate, enddate__gte=startdate, + is_template=False, ).order_by("preferreddate","startdate","enddate").exclude( sessiontype='race').exclude(sessiontype='indoorrace') else: @@ -607,7 +608,8 @@ def get_sessions_manager(m,teamid=0,startdate=date.today(), manager=m, startdate__lte=enddate, enddate__gte=startdate, - ).order_by("preferreddate","startdate","enddate").exclude( + is_template=False, + ).order_by("preferreddate","startdate","enddate").exclude( sessiontype='race').exclude(sessiontype='indoorrace') return sps @@ -619,6 +621,7 @@ def get_sessions(r,startdate=date.today(), rower__in=[r], startdate__lte=enddate, enddate__gte=startdate, + is_template=False, ).order_by("preferreddate","startdate","enddate").exclude( sessiontype='race').exclude(sessiontype='indoorrace') diff --git a/rowers/templates/plannedsessioncreate.html b/rowers/templates/plannedsessioncreate.html index 7daf599b..b2056844 100644 --- a/rowers/templates/plannedsessioncreate.html +++ b/rowers/templates/plannedsessioncreate.html @@ -60,6 +60,7 @@ Edit Clone Delete + Template @@ -88,11 +89,50 @@ Delete + + Save + {% endfor %} +
  • +

    Templates

    +

    + Click on session name to clone to current period +

    + + + + + + + + + + + {% for ps in sessiontemplates %} + + + + + + + {% endfor %} + +
    NameValue Delete
    + {% if ps.name != '' %} + {{ ps.name }} + {% else %} + Unnamed Session + {% endif %} + {{ ps.sessionvalue }} {{ ps.sessionunit }} + Delete +
    +
  • {% endblock %} diff --git a/rowers/templates/plannedsessiondeleteconfirm.html b/rowers/templates/plannedsessiondeleteconfirm.html index a299e6b0..f196304f 100644 --- a/rowers/templates/plannedsessiondeleteconfirm.html +++ b/rowers/templates/plannedsessiondeleteconfirm.html @@ -18,6 +18,7 @@

    + {% if not object.is_template %}
  • Session {{ psdict.name.1 }}

    @@ -32,6 +33,7 @@ {% endfor %}
  • + {% endif %} diff --git a/rowers/templates/plannedsessionedit.html b/rowers/templates/plannedsessionedit.html index 7c8e13aa..9e1cf82d 100644 --- a/rowers/templates/plannedsessionedit.html +++ b/rowers/templates/plannedsessionedit.html @@ -110,6 +110,42 @@ +
  • +

    Templates

    +

    + Click on session name to clone to current period +

    + + + + + + + + + + + {% for ps in sessiontemplates %} + + + + + + + {% endfor %} + +
    NameValue Delete
    + {% if ps.name != '' %} + {{ ps.name }} + {% else %} + Unnamed Session + {% endif %} + {{ ps.sessionvalue }} {{ ps.sessionunit }} + Delete +
    +
  • {% endblock %} diff --git a/rowers/tests/testdata/testdata.csv.gz b/rowers/tests/testdata/testdata.csv.gz index fea10cad8250560ff1462282122ff3fc71ef0542..118da389aefa1feb99b5b506deb4a5720abd8cee 100644 GIT binary patch delta 15 WcmaEq^eBl\d+)/edit/$',views.plannedsession_edit_view), + re_path(r'^sessions/(?P\d+)/maketemplate/$',views.plannedsession_totemplate_view), re_path(r'^sessions/(?P\d+)/compare/$', views.plannedsession_compare_view, name='plannedsession_compare_view'), diff --git a/rowers/views/planviews.py b/rowers/views/planviews.py index e29d6e1d..ba6af2b6 100644 --- a/rowers/views/planviews.py +++ b/rowers/views/planviews.py @@ -240,6 +240,7 @@ def plannedsession_multiclone_view( sps = PlannedSession.objects.filter( manager=request.user, rower__in=[r], + is_template=False, startdate__lte=enddate, enddate__gte=startdate).order_by( "startdate","preferreddate","enddate").exclude( @@ -435,6 +436,10 @@ def plannedsession_create_view(request, sps = get_sessions(r,startdate=startdate,enddate=enddate).exclude( sessiontype='race') + + + sessiontemplates = PlannedSession.objects.filter(manager=request.user,is_template=True) + try: trainingplan = TrainingPlan.objects.filter( startdate__lte = startdate, @@ -458,6 +463,7 @@ def plannedsession_create_view(request, 'form':sessioncreateform, 'active':'nav-plan', 'plannedsessions':sps, + 'sessiontemplates':sessiontemplates, 'rower':r, 'timeperiod':timeperiod, }) @@ -1412,13 +1418,16 @@ def plannedsession_clone_view(request,id=0,userid=0): teams = ps.team.all() ps.pk = None + ps.id = None + if not ps.is_template: + ps.name += ' (copy)' + ps.is_template = False deltadays = ps.enddate-ps.startdate ps.startdate = timezone.now().date() ps.enddate = (timezone.now()+deltadays).date() ps.preferreddate = ps.preferreddate+deltadays - ps.name += ' (copy)' ps.save() @@ -1441,6 +1450,37 @@ def plannedsession_clone_view(request,id=0,userid=0): return HttpResponseRedirect(url) +@user_passes_test(hasplannedsessions, login_url="/rowers/paidplans/", + message="This functionality requires a Coach or Self-Coach plan", + redirect_field_name=None) +def plannedsession_totemplate_view(request,id=0): + + r = getrequestplanrower(request) + + startdate, enddate = get_dates_timeperiod(request) + + try: + ps = PlannedSession.objects.get(id=id) + except PlannedSession.DoesNotExist: + raise Http404("Planned Session does not exist") + + if ps.manager != request.user: + raise PermissionDenied("You can only store your own sessions as a template") + + ps.pk = None + ps.id = None + ps.is_template = True + ps.startdate = datetime.date(1970,1,1) + ps.enddate = datetime.date(1970,1,1) + ps.save() + + url = reverse(plannedsession_create_view,kwargs={'userid':request.user.id}) + + startdatestring = startdate.strftime('%Y-%m-%d') + enddatestring = enddate.strftime('%Y-%m-%d') + url += '?when='+startdatestring+'/'+enddatestring + + return HttpResponseRedirect(url) # Edit an existing planned session @user_passes_test(hasplannedsessions,login_url="/rowers/paidplans/", @@ -1547,6 +1587,8 @@ def plannedsession_edit_view(request,id=0,userid=0): ] + sessiontemplates = PlannedSession.objects.filter(manager=request.user,is_template=True) + dateform = DateRangeForm(initial={ 'startdate':startdate, 'enddate':enddate, @@ -1564,6 +1606,7 @@ def plannedsession_edit_view(request,id=0,userid=0): 'plannedsessions':sps, 'thesession':ps, 'dateform':dateform, + 'sessiontemplates':sessiontemplates, 'rower':r, 'timeperiod':timeperiod, })