From 6a76ba05fa3836d19e8e7b6027c2eddcbefc6cec Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Wed, 22 Nov 2017 09:14:19 +0100 Subject: [PATCH] email processing looking for Quiske in first line --- rowers/management/commands/processemail.py | 24 ++- rowers/urls.py | 4 + rowers/views.py | 161 ++++++++++++++++++++- 3 files changed, 186 insertions(+), 3 deletions(-) diff --git a/rowers/management/commands/processemail.py b/rowers/management/commands/processemail.py index cae0ccb0..f5b6c8f5 100644 --- a/rowers/management/commands/processemail.py +++ b/rowers/management/commands/processemail.py @@ -4,7 +4,7 @@ import sys import os import zipfile - +import re import time from time import strftime @@ -95,6 +95,24 @@ def processattachment(rower, fileobj, title, uploadoptions,testing=False): return workoutid +def get_from_address(message): + + from_address = message.from_address[0].lower() + + if message.encoded: + body = message.text.splitlines() + else: + body = message.get_body().splitlines() + + first_line = body[0].lower() + + if "quiske" in first_line: + match = re.search(r'[\w\.-]+@[\w\.-]+', first_line) + return match.group(0) + + return from_address + + class Command(BaseCommand): def add_arguments(self, parser): parser.add_argument( @@ -131,7 +149,9 @@ class Command(BaseCommand): uploadoptions = uploads.upload_options(body) - from_address = message.from_address[0].lower() + + from_address = get_from_address(message) + name = message.subject # get a list of users # theusers = User.objects.filter(email=from_address) diff --git a/rowers/urls.py b/rowers/urls.py index 46406980..287d34af 100644 --- a/rowers/urls.py +++ b/rowers/urls.py @@ -131,6 +131,10 @@ urlpatterns = [ url(r'^team-compare-select/team/(?P\d+)/$',views.team_comparison_select), url(r'^team-compare-select/(?P\w+.*)/(?P\w+.*)$',views.team_comparison_select), url(r'^team-compare-select/$',views.team_comparison_select), + url(r'^workouts-join-select/team/(?P\d+)/(?P\w+.*)/(?P\w+.*)$',views.workouts_join_select), + url(r'^workouts-join-select/team/(?P\d+)/$',views.workouts_join_select), + url(r'^workouts-join-select/(?P\w+.*)/(?P\w+.*)$',views.workouts_join_select), + url(r'^workouts-join-select/$',views.workouts_join_select), url(r'^user-boxplot-select/user/(?P\d+)/(?P\w+.*)/(?P\w+.*)$',views.user_boxplot_select), url(r'^user-boxplot-select/user/(?P\d+)/$',views.user_boxplot_select), url(r'^user-boxplot-select/(?P\w+.*)/(?P\w+.*)$',views.user_boxplot_select), diff --git a/rowers/views.py b/rowers/views.py index 58cbdee0..bb22d952 100644 --- a/rowers/views.py +++ b/rowers/views.py @@ -4190,6 +4190,165 @@ def workout_setprivate_view(request,id, }) return HttpResponseRedirect(url) +# Joining workout +@user_passes_test(ispromember,login_url="/",redirect_field_name=None) +def workouts_join_select(request, + startdatestring="", + enddatestring="", + message='', + successmessage='', + startdate=timezone.now()-datetime.timedelta(days=30), + enddate=timezone.now()+datetime.timedelta(days=1), + teamid=0): + + try: + r = getrower(request.user) + except Rower.DoesNotExist: + raise Http404("Rower doesn't exist") + + if 'startdate' in request.session: + startdate = iso8601.parse_date(request.session['startdate']) + + + if 'enddate' in request.session: + enddate = iso8601.parse_date(request.session['enddate']) + + + if 'waterboattype' in request.session: + waterboattype = request.session['waterboattype'] + else: + waterboattype = ['1x','2x','2-','4x','4-','8+'] + + + if 'modalities' in request.session: + modalities = request.session['modalities'] + if len(modalities) > 1: + modality = 'all' + else: + modality = modalities[0] + else: + modalities = [m[0] for m in types.workouttypes] + modality = 'all' + + if request.method == 'POST' and 'daterange' in request.POST: + dateform = DateRangeForm(request.POST) + if dateform.is_valid(): + startdate = dateform.cleaned_data['startdate'] + enddate = dateform.cleaned_data['enddate'] + startdatestring = startdate.strftime('%Y-%m-%d') + enddatestring = enddate.strftime('%Y-%m-%d') + request.session['startdate'] = startdatestring + request.session['enddate'] = enddatestring + else: + dateform = DateRangeForm(initial={ + 'startdate':startdate, + 'enddate':enddate, + }) + + + if request.method == 'POST' and 'modality' in request.POST: + modalityform = TrendFlexModalForm(request.POST) + if modalityform.is_valid(): + modality = modalityform.cleaned_data['modality'] + waterboattype = modalityform.cleaned_data['waterboattype'] + if modality == 'all': + modalities = [m[0] for m in types.workouttypes] + else: + modalities = [modality] + + if modality != 'water': + waterboattype = [b[0] for b in types.boattypes] + + + request.session['modalities'] = modalities + request.session['waterboattype'] = waterboattype + + negtypes = [] + for b in types.boattypes: + if b[0] not in waterboattype: + negtypes.append(b[0]) + + startdate = datetime.datetime.combine(startdate,datetime.time()) + enddate = datetime.datetime.combine(enddate,datetime.time(23,59,59)) + enddate = enddate+datetime.timedelta(days=1) + + if startdatestring: + startdate = iso8601.parse_date(startdatestring) + if enddatestring: + enddate = iso8601.parse_date(enddatestring) + + if enddate < startdate: + s = enddate + enddate = startdate + startdate = s + + try: + theteam = Team.objects.get(id=teamid) + except Team.DoesNotExist: + theteam = 0 + + if r.rowerplan == 'basic' and theteam==0: + raise Http404("Not allowed") + + if theteam and (theteam.viewing == 'allmembers' or theteam.manager == request.user): + workouts = Workout.objects.filter(team=theteam, + startdatetime__gte=startdate, + startdatetime__lte=enddate, + workouttype__in=modalities).order_by("-date", "-starttime").exclude(boattype__in=negtypes) + elif theteam and theteam.viewing == 'coachonly': + workouts = Workout.objects.filter(team=theteam,user=r, + startdatetime__gte=startdate, + startdatetime__lte=enddate, + workouttype__in=modalities).order_by("-date","-starttime").exclude(boattype__in=negtypes) + + + else: + theteam = None + workouts = Workout.objects.filter(user=r, + startdatetime__gte=startdate, + startdatetime__lte=enddate, + workouttype__in=modalities).order_by("-date", "-starttime").exclude(boattype__in=negtypes) + + query = request.GET.get('q') + if query: + query_list = query.split() + workouts = workouts.filter( + reduce(operator.and_, + (Q(name__icontains=q) for q in query_list)) | + reduce(operator.and_, + (Q(notes__icontains=q) for q in query_list)) + ) + + form = WorkoutMultipleCompareForm() + form.fields["workouts"].queryset = workouts + + if theteam: + theid = theteam.id + else: + theid = 0 + + chartform = ChartParamChoiceForm(initial={'teamid':0}) + modalityform = TrendFlexModalForm(initial={ + 'modality':modality, + 'waterboattype':waterboattype + }) + + + messages.info(request,successmessage) + messages.error(request,message) + + return render(request, 'team_compare_select.html', + {'workouts': workouts, + 'dateform':dateform, + 'startdate':startdate, + 'enddate':enddate, + 'team':theteam, + 'form':form, + 'chartform':chartform, + 'modalityform':modalityform, + 'teams':get_my_teams(request.user), + }) + # Team comparison @login_required() def team_comparison_select(request, @@ -5563,7 +5722,7 @@ def workout_fusion_list(request,id=0,message='',successmessage='', }) except Rower.DoesNotExist: raise Http404("User has no rower instance") - + # Basic 'EDIT' view of workout def workout_view(request,id=0): request.session['referer'] = absolute(request)['PATH']