export forms with workout types
This commit is contained in:
@@ -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(
|
||||
|
||||
@@ -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)
|
||||
|
||||
BIN
rowers/tests/testdata/testdata.tcx.gz
vendored
BIN
rowers/tests/testdata/testdata.tcx.gz
vendored
Binary file not shown.
@@ -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)
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user