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")