From fca58e740f7ec9da79815511213b7ed366038afc Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Wed, 31 Jul 2019 14:12:06 +0200 Subject: [PATCH] adding calendar to all team members sending funct --- rowers/tasks.py | 38 +++++++++++++ rowers/teams.py | 7 +++ rowers/templates/icsemail.html | 6 ++- rowers/templates/plannedsessionscoach.html | 15 +++++- rowers/templatetags/rowerfilters.py | 11 ++++ rowers/urls.py | 3 ++ rowers/views/exportviews.py | 63 ++++++++++++++++++++++ rowers/views/statements.py | 1 + 8 files changed, 141 insertions(+), 3 deletions(-) diff --git a/rowers/tasks.py b/rowers/tasks.py index 05a0534d..065ecca4 100644 --- a/rowers/tasks.py +++ b/rowers/tasks.py @@ -1321,6 +1321,44 @@ def handle_sendemailcsv(first_name, last_name, email, csvfile,**kwargs): return 1 +@app.task +def handle_sendemail_ical(first_name, last_name, email, url, icsfile, **kwargs): + # send email with attachment + fullemail = first_name + " " + last_name + " " + "<" + email + ">" + subject = "Calendar File for your sessions from Rowsandall.com" + + if 'debug' in kwargs: + debug = kwargs['debug'] + else: + debug = False + + siteurl = SITE_URL + if debug: + progressurl = SITE_URL_DEV + siteurl = SITE_URL_DEV + + + d = {'first_name':first_name, + 'siteurl':siteurl, + 'url':url, + } + + from_email = 'Rowsandall ' + + + res = send_template_email(from_email,[fullemail], + subject,'icsemail.html',d, + attach_file=icsfile,**kwargs) + + + try: + os.remove(csvfile) + except: + pass + + return 1 + + @app.task def handle_sendemailfile(first_name, last_name, email, csvfile,**kwargs): diff --git a/rowers/teams.py b/rowers/teams.py index 5e550cc0..a11cbdae 100644 --- a/rowers/teams.py +++ b/rowers/teams.py @@ -171,6 +171,13 @@ def remove_coach(coach,rower): return (1,'Coach removed') +def rower_get_managers(rower): + managers = [] + for team in rower.team.all(): + managers.append(team.manager.rower) + + return managers + def rower_get_coaches(rower): coaches = [] for group in rower.coachinggroups.all(): diff --git a/rowers/templates/icsemail.html b/rowers/templates/icsemail.html index ffab16ea..4914a4a0 100644 --- a/rowers/templates/icsemail.html +++ b/rowers/templates/icsemail.html @@ -4,10 +4,14 @@

Dear {{ first_name }},

- Please find attached the requested ICS Calendar file. You can import + Please find attached the ICS Calendar file for your training sessions. You can import this file to your calendar app.

+

+ You can see the training plan here: {{ siteurl }}{{ url }} +

+

Best Regards, the Rowsandall Team

diff --git a/rowers/templates/plannedsessionscoach.html b/rowers/templates/plannedsessionscoach.html index dd0a76fa..23540b2d 100644 --- a/rowers/templates/plannedsessionscoach.html +++ b/rowers/templates/plannedsessionscoach.html @@ -6,9 +6,9 @@ {% block main %} {% if theteam %} -

Coach Overview. Team {{ theteam.name }}

+

Group Overview. Team {{ theteam.name }}

{% else %} -

Coach Overview

+

Group Overview

{% endif %}
    @@ -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