Private
Public Access
1
0

Merge branch 'release/v20.4.0'

This commit is contained in:
2024-01-20 15:36:07 +01:00
6 changed files with 81 additions and 26 deletions
+19
View File
@@ -1265,6 +1265,25 @@ class ForceCurveMultipleCompareForm(forms.Form):
widget=forms.CheckboxSelectMultiple()
)
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(
+1 -4
View File
@@ -97,10 +97,7 @@
<form enctype="multipart/form-data" method="post">
<h3>Bulk Operation</h3>
<p>Please select workouts from the list to do a bulk operation on.</p>
<select name="selectworkouts_operation" id="selectworkouts_operation">
<option value="">--Please choose an option--</option>
<option value="remove">Remove</option>
</select>
{{ actionform.as_p }}
{% csrf_token %}
<input name='selectworkouts' type="submit" value="Submit">
</li>
+19 -14
View File
@@ -7,23 +7,28 @@
{% block main %}
<h1>Bulk Actions</h1>
<ul class="main-content">
<li class="grid_2">
<p>
Edit and confirm the action you want to perform on the following workouts:
</p>
{% for workout in workouts %}
<p>{{ workout }}</p>
{% endfor %}
<p>
Action: {{ action }}
</p>
</li>
<li class="grid_2">
<form action="" method="post">
<li class="grid_4">
<form action="" method="post">
<p>
Edit and confirm the action you want to perform on the following workouts:
</p>
<p>
{{ form.as_p }}
</p>
<p>
{{ actionform.as_p }}
</p>
{% if action == 'export' %}
<p>
{{ exportchoice.as_p }}
</p>
{% endif %}
</li>
<li class="grid_2">
{% csrf_token %}
<input type="submit" value="Confirm">
</li>
</form>
</li>
</ul>
Binary file not shown.
+1
View File
@@ -96,6 +96,7 @@ from django.http import (
)
from django.contrib.auth import authenticate, login, logout
from rowers.forms import (
WorkoutBulkActions, ExportChoices,
ForceCurveOptionsForm, HistoForm, TeamMessageForm,
LoginForm, DocumentsForm, UploadOptionsForm, ImageForm, CourseForm,
CourseConfirmForm, ResampleForm,
+41 -8
View File
@@ -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
@@ -2040,7 +2041,6 @@ def workouts_bulk_actions(request):
workouts = []
try:
for encid in workoutids:
print(encid)
w = get_workout_by_opaqueid(request, encid)
if w.user == r:
workouts.append(w)
@@ -2048,15 +2048,45 @@ def workouts_bulk_actions(request):
pass
if request.method == 'POST':
if action == 'remove':
for w in workouts:
messages.info(request,'Removed workout '+str(encoder.encode_hex(w.id)))
w.delete()
url = reverse('workouts_view')
return HttpResponseRedirect(url)
actionform = WorkoutBulkActions(request.POST)
form = WorkoutMultipleCompareForm(request.POST)
if form.is_valid() and actionform.is_valid():
workouts = form.cleaned_data['workouts']
action = actionform.cleaned_data['action']
if action == 'remove':
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()
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,
'actionform':actionform,
'form':form,
'workouts':workouts})
# List Workouts
@@ -2078,7 +2108,7 @@ def workouts_view(request, message='', successmessage='',
if request.method == 'POST':
if 'selectworkouts' in request.POST:
request.session['action']=request.POST['selectworkouts_operation']
request.session['action']=request.POST['action']
request.session['ids'] = request.POST.getlist('workoutid')
url = reverse('workouts_bulk_actions')
return HttpResponseRedirect(url)
@@ -2261,10 +2291,13 @@ def workouts_view(request, message='', successmessage='',
Click <a href="/rowers/workouts/setrpe">here</a> to update them. \
You can switch off this warning in <a href="/rowers/me/edit">settings</a>.')
actionform = WorkoutBulkActions()
return render(request, 'list_workouts.html',
{'workouts': workouts,
'active': 'nav-workouts',
'rower': r,
'actionform': actionform,
'searchform': searchform,
'breadcrumbs': breadcrumbs,
'dateform': dateform,