Private
Public Access
1
0

implemented ics export by email

This commit is contained in:
Sander Roosendaal
2018-11-12 16:40:05 +01:00
parent f660a2650b
commit f62460eeba
5 changed files with 100 additions and 3 deletions

View File

@@ -873,6 +873,28 @@ def handle_sendemail_unrecognizedowner(useremail, userfirstname,
return 1 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 <info@rowsandall.com>'
res = send_template_email(from_email,[fullemail],
subject,'icsemail.html',d,
attach_file=icsfile,**kwargs)
os.remove(icsfile)
return 1
@app.task @app.task
def handle_sendemailkml(first_name, last_name, email, kmlfile,**kwargs): def handle_sendemailkml(first_name, last_name, email, kmlfile,**kwargs):

View File

@@ -0,0 +1,14 @@
{% extends "emailbase.html" %}
{% block body %}
<p>Dear <strong>{{ first_name }}</strong>,</p>
<p>
Please find attached the requested ICS Calendar file. You can import
this file to your calendar app.
</p>
<p>
Best Regards, the Rowsandall Team
</p>
{% endblock %}

View File

@@ -129,7 +129,12 @@
<a <a
href="/rowers/sessions/print/user/{{ rower.user.id }}/?when={{ timeperiod }}"> href="/rowers/sessions/print/user/{{ rower.user.id }}/?when={{ timeperiod }}">
Print View</a> Print View</a>
&nbsp;
<a
href="/rowers/sessions/sendcalendar/user/{{ rower.user.id }}/?when={{ timeperiod }}">
Get Calendar File</a>
</p> </p>
</li> </li>
<li class="grid_4"> <li class="grid_4">
{% if unmatchedworkouts %} {% if unmatchedworkouts %}

View File

@@ -507,6 +507,8 @@ urlpatterns = [
url(r'^sessions/coach/user/\d+/$',views.plannedsessions_coach_view), url(r'^sessions/coach/user/\d+/$',views.plannedsessions_coach_view),
url(r'^sessions/print/?$',views.plannedsessions_print_view), url(r'^sessions/print/?$',views.plannedsessions_print_view),
url(r'^sessions/print/user/(?P<userid>\d+)/$',views.plannedsessions_print_view), url(r'^sessions/print/user/(?P<userid>\d+)/$',views.plannedsessions_print_view),
url(r'^sessions/sendcalendar/$',views.plannedsessions_icsemail_view),
url(r'^sessions/sendcalendar/user/(?P<userid>\d+)/$',views.plannedsessions_icsemail_view),
url(r'^sessions/$',views.plannedsessions_view), url(r'^sessions/$',views.plannedsessions_view),
url(r'^sessions/user/(?P<userid>\d+)$',views.plannedsessions_view), url(r'^sessions/user/(?P<userid>\d+)$',views.plannedsessions_view),
url(r'^sessions/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)$', url(r'^sessions/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)$',

View File

@@ -27,7 +27,7 @@ import codecs
import isodate import isodate
import re import re
import cgi import cgi
from icalendar import Calendar, Event
from django.shortcuts import render from django.shortcuts import render
from django.template.loader import render_to_string from django.template.loader import render_to_string
@@ -160,6 +160,7 @@ from rowers.tasks import (
handle_zip_file,handle_getagegrouprecords, handle_zip_file,handle_getagegrouprecords,
handle_updatefitnessmetric, handle_updatefitnessmetric,
handle_update_empower, handle_update_empower,
handle_sendemailics,
handle_sendemail_userdeleted, handle_sendemail_userdeleted,
) )
@@ -1431,6 +1432,60 @@ def workout_tcxemail_view(request,id=0):
return response 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() @login_required()
def course_kmlemail_view(request,id=0): def course_kmlemail_view(request,id=0):
r = getrower(request.user) r = getrower(request.user)
@@ -14542,7 +14597,6 @@ def plannedsession_teamedit_view(request,
r = getrequestrower(request,userid=userid) r = getrequestrower(request,userid=userid)
try: try:
ps = PlannedSession.objects.get(id=sessionid) ps = PlannedSession.objects.get(id=sessionid)
except PlannedSession.DoesNotExist: except PlannedSession.DoesNotExist:
@@ -14576,7 +14630,7 @@ def plannedsession_teamedit_view(request,
sps = list(set(sps)) 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( sps = PlannedSession.objects.filter(id__in=ids).order_by(
"preferreddate","startdate","enddate") "preferreddate","startdate","enddate")