From f62460eeba7b85412bfb0ca0625cd35d7592ccb4 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Mon, 12 Nov 2018 16:40:05 +0100 Subject: [PATCH] implemented ics export by email --- rowers/tasks.py | 22 ++++++++++ rowers/templates/icsemail.html | 14 +++++++ rowers/templates/plannedsessions.html | 5 +++ rowers/urls.py | 2 + rowers/views.py | 60 +++++++++++++++++++++++++-- 5 files changed, 100 insertions(+), 3 deletions(-) create mode 100644 rowers/templates/icsemail.html diff --git a/rowers/tasks.py b/rowers/tasks.py index fbe58f3f..51e86064 100644 --- a/rowers/tasks.py +++ b/rowers/tasks.py @@ -873,6 +873,28 @@ def handle_sendemail_unrecognizedowner(useremail, userfirstname, return 1 +@app.task +def handle_sendemailics(first_name, last_name, email, icsfile, **kwargs): + # send email with attachment + fullemail = first_name + " " + last_name + " " + "<" + email + ">" + subject = "Calendar File from Rowsandall.com" + + + d = {'first_name':first_name, + 'siteurl':siteurl, + } + + from_email = 'Rowsandall ' + + + res = send_template_email(from_email,[fullemail], + subject,'icsemail.html',d, + attach_file=icsfile,**kwargs) + + os.remove(icsfile) + return 1 + + @app.task def handle_sendemailkml(first_name, last_name, email, kmlfile,**kwargs): diff --git a/rowers/templates/icsemail.html b/rowers/templates/icsemail.html new file mode 100644 index 00000000..ffab16ea --- /dev/null +++ b/rowers/templates/icsemail.html @@ -0,0 +1,14 @@ +{% extends "emailbase.html" %} + +{% block body %} +

Dear {{ first_name }},

+ +

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

+ +

+ Best Regards, the Rowsandall Team +

+{% endblock %} diff --git a/rowers/templates/plannedsessions.html b/rowers/templates/plannedsessions.html index b2f0fdca..8500b376 100644 --- a/rowers/templates/plannedsessions.html +++ b/rowers/templates/plannedsessions.html @@ -129,7 +129,12 @@ Print View +   + + Get Calendar File

+
  • {% if unmatchedworkouts %} diff --git a/rowers/urls.py b/rowers/urls.py index eeb3a70e..37a0354b 100644 --- a/rowers/urls.py +++ b/rowers/urls.py @@ -507,6 +507,8 @@ urlpatterns = [ url(r'^sessions/coach/user/\d+/$',views.plannedsessions_coach_view), url(r'^sessions/print/?$',views.plannedsessions_print_view), url(r'^sessions/print/user/(?P\d+)/$',views.plannedsessions_print_view), + url(r'^sessions/sendcalendar/$',views.plannedsessions_icsemail_view), + url(r'^sessions/sendcalendar/user/(?P\d+)/$',views.plannedsessions_icsemail_view), url(r'^sessions/$',views.plannedsessions_view), url(r'^sessions/user/(?P\d+)$',views.plannedsessions_view), url(r'^sessions/(?P\d+-\d+-\d+)/(?P\d+-\d+-\d+)$', diff --git a/rowers/views.py b/rowers/views.py index c412e2a8..b2ab8752 100644 --- a/rowers/views.py +++ b/rowers/views.py @@ -27,7 +27,7 @@ import codecs import isodate import re import cgi - +from icalendar import Calendar, Event from django.shortcuts import render from django.template.loader import render_to_string @@ -160,6 +160,7 @@ from rowers.tasks import ( handle_zip_file,handle_getagegrouprecords, handle_updatefitnessmetric, handle_update_empower, + handle_sendemailics, handle_sendemail_userdeleted, ) @@ -1431,6 +1432,60 @@ def workout_tcxemail_view(request,id=0): return response +@login_required() +def plannedsessions_icsemail_view(request,userid=0): + r = getrequestrower(request,userid=userid) + startdate,enddate = get_dates_timeperiod(request) + + sps = get_sessions(r,startdate=startdate,enddate=enddate) + + 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) + + icsfilename = 'calendar_{id}.ics'.format(id=request.user.id) + + with open(icsfilename,'wb') as f: + f.write(cal.to_ical()) + + res = myqueue(queuehigh,handle_sendemailics, + request.user.first_name, + request.user.last_name, + request.user.email,icsfilename, + emailbounced = r.emailbounced + ) + + + successmessage = "The calendar file was sent to you per email" + messages.info(request,successmessage) + url = reverse(plannedsessions_view, + kwargs = { + 'userid':r.user.id, + }) + startdatestring = startdate.strftime('%Y-%m-%d') + enddatestring = enddate.strftime('%Y-%m-%d') + url+='?when='+startdatestring+'/'+enddatestring + + + response = HttpResponseRedirect(url) + + return response + + @login_required() def course_kmlemail_view(request,id=0): r = getrower(request.user) @@ -14542,7 +14597,6 @@ def plannedsession_teamedit_view(request, r = getrequestrower(request,userid=userid) - try: ps = PlannedSession.objects.get(id=sessionid) except PlannedSession.DoesNotExist: @@ -14576,7 +14630,7 @@ def plannedsession_teamedit_view(request, sps = list(set(sps)) - ids = [ps.id for ps in sps] + ids = [pps.id for pps in sps] sps = PlannedSession.objects.filter(id__in=ids).order_by( "preferreddate","startdate","enddate")