Learn session forecasts from training blocks and clarify progress UI

This commit is contained in:
Peter Stockings
2026-09-06 16:20:15 +10:00
parent 499d859478
commit 86fade54f1
13 changed files with 1008 additions and 343 deletions
+14 -4
View File
@@ -5,7 +5,9 @@ from flask_login import login_required, current_user
from extensions import db
from decorators import validate_workout, validate_topset, require_ownership, validate_person
from utils import convert_str_to_date
from collections import defaultdict # Import defaultdict
from collections import defaultdict # Import defaultdict
from datetime import date
from dateutil.relativedelta import relativedelta
workout_bp = Blueprint('workout', __name__)
htmx = HTMX()
@@ -301,6 +303,11 @@ def get_exercise_history(person_id, exercise_id):
limit = request.args.get('limit', type=int, default=5)
offset = request.args.get('offset', type=int, default=0)
source_topset_id = request.args.get('source_topset_id', type=int)
epoch = request.args.get('epoch', default='All')
min_date = convert_str_to_date(request.args.get('min_date'))
max_date = convert_str_to_date(request.args.get('max_date'))
if epoch in ('1M', '3M', '6M'):
min_date = date.today() - relativedelta(months=int(epoch[0]))
forecast_enabled = request.args.get('forecast', '').lower() in ('1', 'true', 'yes', 'on')
forecast_weeks = request.args.get('forecast_weeks', type=int, default=8)
forecast_weeks = max(4, min(forecast_weeks, 52))
@@ -308,7 +315,7 @@ def get_exercise_history(person_id, exercise_id):
if forecast_target_reps is not None:
forecast_target_reps = max(1, min(forecast_target_reps, 20))
topsets = db.get_recent_topsets_for_exercise(person_id, exercise_id, limit, offset)
topsets = db.get_recent_topsets_for_exercise(person_id, exercise_id, limit, offset, min_date, max_date)
title = "History"
best_fit_formula = None
@@ -321,7 +328,9 @@ def get_exercise_history(person_id, exercise_id):
exercise_progress = db.get_exercise_progress_for_user(
person_id,
exercise_id,
epoch='all',
epoch=epoch,
min_date=min_date,
max_date=max_date,
forecast_enabled=forecast_enabled,
forecast_weeks=forecast_weeks,
forecast_target_reps=forecast_target_reps)
@@ -348,7 +357,8 @@ def get_exercise_history(person_id, exercise_id):
forecast=forecast,
forecast_enabled=forecast_enabled,
forecast_weeks=forecast_weeks,
forecast_target_reps=forecast_target_reps)
forecast_target_reps=forecast_target_reps,
selected_epoch=epoch, min_date=min_date, max_date=max_date)
@workout_bp.route("/person/<int:person_id>/workout/<int:workout_id>", methods=['GET'])
def show_workout(person_id, workout_id):