From 16482ee929230570f4f421497155496b20a0bb50 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Wed, 24 Jan 2024 19:12:55 +0100 Subject: [PATCH] bug fixes for bulk actions --- rowers/models.py | 2 ++ rowers/tests/testdata/testdata.tcx.gz | Bin 3999 -> 4001 bytes rowers/views/workoutviews.py | 16 ++++++++++++---- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/rowers/models.py b/rowers/models.py index 20be9e6f..6d0adf97 100644 --- a/rowers/models.py +++ b/rowers/models.py @@ -3600,6 +3600,8 @@ class Workout(models.Model): ) except ValueError: stri = self.name + except AttributeError: + return "No workout" else: try: stri = u'{d} {n} {dist}m {duration} {workouttype} {boattype} {ownerfirst} {ownerlast}'.format( diff --git a/rowers/tests/testdata/testdata.tcx.gz b/rowers/tests/testdata/testdata.tcx.gz index f3b3717493a93eea0ecf925869aa69f73a34cab3..60191a7df2776d5bcfb90372078d487d7c2c0c48 100644 GIT binary patch delta 3644 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 O2mb>;b}uNzfB^s&Gm13; delta 3642 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 MKW~qmtHgi-0QmKX5C8xG diff --git a/rowers/views/workoutviews.py b/rowers/views/workoutviews.py index e2134167..e09c2fc0 100644 --- a/rowers/views/workoutviews.py +++ b/rowers/views/workoutviews.py @@ -2039,14 +2039,17 @@ def workouts_setrpe_view(request,userid=0): @login_required() def workouts_bulk_actions(request): r = getrower(request.user) - action = request.session['action'] - workoutids = request.session['ids'] + action = request.session.get('action','export') + workoutids = request.session.get('ids',[]) workouts = [] + exportchoice = 'strava' try: for encid in workoutids: w = get_workout_by_opaqueid(request, encid) if w.user == r: workouts.append(w) + else: + messages.error(request,'Bulk actions are not accessible to coaches') except KeyError: pass @@ -2055,6 +2058,9 @@ def workouts_bulk_actions(request): form = WorkoutMultipleCompareForm(request.POST) if form.is_valid() and actionform.is_valid(): workouts = form.cleaned_data['workouts'] + if len(workouts) == 0: + url = reverse('workouts_view') + return HttpResponseRedirect(url) action = actionform.cleaned_data['action'] if action == 'remove': for w in workouts: @@ -2075,7 +2081,10 @@ def workouts_bulk_actions(request): destination=destination)) url = reverse('workouts_view') return HttpResponseRedirect(url) - + else: + if len(workouts) == 0: + url = reverse(workouts_view) + return HttpResponseRedirect(url) else: exportchoice = ExportChoices() actionform = WorkoutBulkActions() @@ -2084,7 +2093,6 @@ def workouts_bulk_actions(request): form.fields["workouts"].queryset = Workout.objects.filter(id__in=[w.id for w in workouts]) form.fields["workouts"].initial = workouts - return render(request,'workout_bulk_actions.html', {'action':action, 'exportchoice':exportchoice,