diff --git a/rowers/forms.py b/rowers/forms.py index ad865dd6..6a386947 100644 --- a/rowers/forms.py +++ b/rowers/forms.py @@ -821,6 +821,15 @@ class DateRangeForm(forms.Form): 'autoclose': True, } +# same as above but has check boxes for workout types to show in the selected date range +class DateRangeWorkoutTypeForm(DateRangeForm): + typeselectchoices = [("All", "All")] + for wtype, verbose in mytypes.workouttypes_ordered.items(): + typeselectchoices.append((wtype, verbose)) + + workouttype = forms.ChoiceField(initial='All', choices=typeselectchoices) + + class FitnessMetricForm(forms.Form): startdate = forms.DateField( diff --git a/rowers/tasks.py b/rowers/tasks.py index 04918b30..db535285 100644 --- a/rowers/tasks.py +++ b/rowers/tasks.py @@ -361,7 +361,8 @@ import io import zipfile @app.task -def email_all_user_workouts_zip(rower, start_date=None, end_date=None, debug=False, **kwargs): +def email_all_user_workouts_zip(rower, start_date, end_date, + workouttype, debug=False, **kwargs): # Get all workouts for this user, optionally filtered by date range workouts = Workout.objects.filter(user=rower).order_by('-date') @@ -370,10 +371,9 @@ def email_all_user_workouts_zip(rower, start_date=None, end_date=None, debug=Fal workouts = workouts.filter(date__gte=start_date) if end_date: workouts = workouts.filter(date__lte=end_date) - - # for debug, limit to 5 workouts - if settings.DEBUG: - workouts = workouts[:5] + + if workouttype != 'All': + workouts = workouts.filter(workouttype=workouttype) if not workouts.exists(): dologging('export_all_workouts.log', f"No workouts found for user {rower.user.id} in date range {start_date} to {end_date}") @@ -388,7 +388,7 @@ def email_all_user_workouts_zip(rower, start_date=None, end_date=None, debug=Fal rowdata = rdata(csvfile=workout.csvfilename) workouttype = mytypes.fitmapping.get(workout.workouttype, 'generic') - fit_filename = f"workout_{workout.id}_{workout.date.strftime('%Y%m%d')}.fit" + fit_filename = f"workout_{workouttype}_{workout.id}_{workout.date.strftime('%Y%m%d')}.fit" # exporttofit creates a file, we need to add it to the zip_file rowdata.exporttofit(fit_filename, sport=workouttype, notes=workout.name) zip_file.write(fit_filename, arcname=fit_filename) diff --git a/rowers/tests/testdata/testdata.tcx.gz b/rowers/tests/testdata/testdata.tcx.gz index 326f589b..736f156b 100644 Binary files a/rowers/tests/testdata/testdata.tcx.gz and b/rowers/tests/testdata/testdata.tcx.gz differ diff --git a/rowers/views/exportviews.py b/rowers/views/exportviews.py index 0b62bdc2..f4947d8d 100644 --- a/rowers/views/exportviews.py +++ b/rowers/views/exportviews.py @@ -282,17 +282,18 @@ def export_all_workouts_zip_view(request): r = getrower(request.user) if request.method == 'GET': - form = DateRangeForm() + form = DateRangeWorkoutTypeForm() elif request.method == 'POST': - form = DateRangeForm(request.POST) + form = DateRangeWorkoutTypeForm(request.POST) if not form.is_valid(): messages.error(request, "Invalid date range. Please try again.") return render(request, "export_workouts_daterange.html", {'form': form}) startdate = form.cleaned_data['startdate'] enddate = form.cleaned_data['enddate'] + workouttype = form.cleaned_data['workouttype'] - myqueue(queuehigh, email_all_user_workouts_zip, r, startdate, enddate) + myqueue(queuehigh, email_all_user_workouts_zip, r, startdate, enddate, workouttype) successmessage = "A download link will be sent to you per email" messages.info(request, successmessage) diff --git a/rowers/views/statements.py b/rowers/views/statements.py index 55988dae..06687868 100644 --- a/rowers/views/statements.py +++ b/rowers/views/statements.py @@ -138,6 +138,7 @@ from django.utils.datastructures import MultiValueDictKeyError from django.utils import timezone, translation from django.core.mail import send_mail, BadHeaderError from rowers.forms import ( + DateRangeWorkoutTypeForm, SummaryStringForm, StrokeDataForm, StatsOptionsForm, PredictedPieceForm, DateRangeForm, DeltaDaysForm, FitnessMetricForm, PredictedPieceFormNoDistance,