From 35ec3e3f8dfbebd3400fb79c277d95ea32b7ba1e Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Sat, 20 Jan 2024 15:15:16 +0100 Subject: [PATCH] adding export form --- rowers/forms.py | 13 +++++++++++++ rowers/templates/workout_bulk_actions.html | 5 +++++ rowers/views/statements.py | 2 +- rowers/views/workoutviews.py | 16 ++++++++++++++++ 4 files changed, 35 insertions(+), 1 deletion(-) diff --git a/rowers/forms.py b/rowers/forms.py index 812a8a8b..8dce9f6d 100644 --- a/rowers/forms.py +++ b/rowers/forms.py @@ -1267,11 +1267,24 @@ class ForceCurveMultipleCompareForm(forms.Form): bulkactions = ( ('remove','remove'), + ('export','export'), ) +destinations = ( + ('C2','C2'), + ('strava','strava'), + ('sporttracks','sporttracks'), + ('trainingpeaks','trainingpeaks') +) + class WorkoutBulkActions(forms.Form): action = forms.ChoiceField( choices=bulkactions, label='Action', required=True, initial='remove') +class ExportChoices(forms.Form): + destination = forms.ChoiceField( + choices=destinations, label='Destination', required=False, initial='strava' + ) + class WorkoutMultipleCompareForm(forms.Form): workouts = forms.ModelMultipleChoiceField( queryset=Workout.objects.filter(), diff --git a/rowers/templates/workout_bulk_actions.html b/rowers/templates/workout_bulk_actions.html index 8bd51d62..4fcb356b 100644 --- a/rowers/templates/workout_bulk_actions.html +++ b/rowers/templates/workout_bulk_actions.html @@ -18,6 +18,11 @@

{{ actionform.as_p }}

+ {% if action == 'export' %} +

+ {{ exportchoice.as_p }} +

+ {% endif %}
  • {% csrf_token %} diff --git a/rowers/views/statements.py b/rowers/views/statements.py index d2690946..4c7706e3 100644 --- a/rowers/views/statements.py +++ b/rowers/views/statements.py @@ -96,7 +96,7 @@ from django.http import ( ) from django.contrib.auth import authenticate, login, logout from rowers.forms import ( - WorkoutBulkActions, + WorkoutBulkActions, ExportChoices, ForceCurveOptionsForm, HistoForm, TeamMessageForm, LoginForm, DocumentsForm, UploadOptionsForm, ImageForm, CourseForm, CourseConfirmForm, ResampleForm, diff --git a/rowers/views/workoutviews.py b/rowers/views/workoutviews.py index dfa8f823..1b2705ac 100644 --- a/rowers/views/workoutviews.py +++ b/rowers/views/workoutviews.py @@ -2,6 +2,7 @@ from shutil import copyfile from rowers.views.statements import * import rowers.mytypes as mytypes +from rowers.integrations import importsources import numpy import rowers.uploads as uploads import rowers.utils as utils @@ -2056,10 +2057,24 @@ def workouts_bulk_actions(request): for w in workouts: messages.info(request,'Removed workout '+str(encoder.encode_hex(w.id))) w.delete() + elif action == 'export': + exportchoice = ExportChoices(request.POST) + if exportchoice.is_valid(): + destination = exportchoice.cleaned_data['destination'] + for w in workouts: + integration = importsources[destination](request.user) + try: + id = integration.workout_export(w) + messages.info(request,'Workout {id} exported to {destination}'.format(id=encoder.encode_hex(w.id), + destination=destination)) + except NoTokenError: + messages.error(request,'Export to {destination} of workout {id} failed'.format(id=encoder.encode_hex(w.id), + destination=destination)) url = reverse('workouts_view') return HttpResponseRedirect(url) else: + exportchoice = ExportChoices() actionform = WorkoutBulkActions() actionform.fields["action"].initial = action form = WorkoutMultipleCompareForm() @@ -2069,6 +2084,7 @@ def workouts_bulk_actions(request): return render(request,'workout_bulk_actions.html', {'action':action, + 'exportchoice':exportchoice, 'actionform':actionform, 'form':form, 'workouts':workouts})