@@ -83,6 +83,17 @@ {% endfor %} +

    + + Get Calendar File +

    + {% if rower|is_coach:rowers %} +

    + + Send Calendar File to all rowers + +

    + {% endif %} {% if unmatchedworkouts %} diff --git a/rowers/templatetags/rowerfilters.py b/rowers/templatetags/rowerfilters.py index 3ee2a7e2..820c8a54 100644 --- a/rowers/templatetags/rowerfilters.py +++ b/rowers/templatetags/rowerfilters.py @@ -66,6 +66,17 @@ def strfdelta(tdelta): return res +from rowers.teams import rower_get_managers + +@register.filter +def is_coach(rower,rowers): + for r in rowers: + if rower not in rower_get_managers(r): + print(r,rower) + return False + + return True + def strfdeltah(tdelta): hours, rest = divmod(tdelta.seconds,3600) minutes,seconds = divmod(rest,60) diff --git a/rowers/urls.py b/rowers/urls.py index a2271402..02d7b112 100644 --- a/rowers/urls.py +++ b/rowers/urls.py @@ -673,6 +673,9 @@ urlpatterns = [ name='plannedsessions_coach_view'), re_path(r'^sessions/coach/user/(?P\d+)/$',views.plannedsessions_coach_view, name='plannedsessions_coach_view'), + re_path(r'^sessions/coach/sendcalendar/user/(?P\d+)/$', + views.plannedsessions_coach_icsemail_view, + name='plannedsessions_coach_icsemail_view'), re_path(r'^sessions/print/?/$',views.plannedsessions_print_view, name='plannedsessions_print_view'), re_path(r'^sessions/(?P\d+)/comments/user/(?P\d+)/$',views.plannedsession_comment_view, diff --git a/rowers/views/exportviews.py b/rowers/views/exportviews.py index 66496a55..eb9588c8 100644 --- a/rowers/views/exportviews.py +++ b/rowers/views/exportviews.py @@ -71,6 +71,69 @@ def plannedsessions_icsemail_view(request,userid=0): return response +@login_required() +def plannedsessions_coach_icsemail_view(request,userid=0): + therower = getrequestplanrower(request,userid=userid) + startdate,enddate = get_dates_timeperiod(request) + + if 'coach' in request.user.rower.rowerplan: + sps = get_sessions_manager(request.user,teamid=0, + enddate=enddate, + startdate=startdate) + else: + rteams = therower.team.filter(viewing='allmembers') + sps = get_sessions(therower,startdate=startdate,enddate=enddate) + + if therower.rowerplan != 'freecoach': + rowers = [therower] + else: + rowers = [] + + rowers = list(set(rowers)) + + cal = Calendar() + cal.add('prodid','rowsandall') + cal.add('version','1.0') + + for ps in sps: + event = Event() + comment = '{d} {u} {c}'.format( + d=ps.sessionvalue, + u = ps.sessionunit, + c = ps.criterium) + event.add('summary',ps.name) + event.add('dtstart',ps.preferreddate) + event.add('dtend',ps.preferreddate) + event['uid'] = 'plannedsession_'+str(ps.id) + event.add('description',ps.comment) + event.add('comment',comment) + cal.add_component(event) + + + icalstring = cal.to_ical() + fname = "media/training_plan_{d1}_{d2}".format( + d1 = startdate.strftime("%Y%m%d"), + d2 = enddate.strftime("%Y%m%d"), + ) + + url = reverse('plannedsessions_coach_view')+'?when={d1}/{d2}'.format( + d1 = startdate.strftime("%Y-%m-%d"), + d2 = enddate.strftime("%Y-%m-%d"), + ) + + for rower in rowers: + fname2 = fname+"_{u}.ics".format(u=rower.id) + with open(fname2,'wb') as fop: + fop.write(icalstring) + + job = myqueue(queue,handle_sendemail_ical, + rower.user.first_name, + rower.user.last_name, + rower.user.email, + url, + fname2,debug=False) + + return HttpResponseRedirect(url) @login_required() def course_kmldownload_view(request,id=0): diff --git a/rowers/views/statements.py b/rowers/views/statements.py index dd155ce5..5dd22c60 100644 --- a/rowers/views/statements.py +++ b/rowers/views/statements.py @@ -183,6 +183,7 @@ from rowers.tasks import ( handle_sendemail_userdeleted, handle_sendemail_raceregistration, handle_sendemail_racesubmission, + handle_sendemail_ical, ) from scipy.signal import savgol_filter