Swtich from person list to new overview page

This commit is contained in:
Peter Stockings
2025-01-27 01:17:23 +11:00
parent 0ed0c20e93
commit 6b741e50d0
7 changed files with 8 additions and 256 deletions

45
app.py
View File

@@ -6,7 +6,7 @@ import jinja_partials
from jinja2_fragments import render_block
from decorators import validate_person, validate_topset, validate_workout
from db import DataBase
from utils import get_people_and_exercise_rep_maxes, convert_str_to_date, get_earliest_and_latest_workout_date, filter_workout_topsets, first_and_last_visible_days_in_month, generate_plot
from utils import get_people_and_exercise_rep_maxes, convert_str_to_date, first_and_last_visible_days_in_month, generate_plot
from flask_htmx import HTMX
import minify_html
from urllib.parse import quote
@@ -75,45 +75,6 @@ def get_person_list():
people = db.get_people_and_workout_count(-1)
return render_template('partials/people_link.html', people=people)
@ app.route("/person/<int:person_id>/workout/list", methods=['GET'])
@ validate_person
def get_person(person_id):
person = db.get_person(person_id)
tags = db.get_tags_for_person(person_id)
(min_date, max_date) = get_earliest_and_latest_workout_date(person)
min_date = request.args.get(
'min_date', default=min_date, type=convert_str_to_date)
max_date = request.args.get(
'max_date', default=max_date, type=convert_str_to_date)
selected_exercise_ids = request.args.getlist('exercise_id', type=int)
all_exercise_ids_for_person = [e['ExerciseId']
for e in person['Exercises']]
if not selected_exercise_ids and htmx.trigger_name != 'exercise_id':
selected_exercise_ids = all_exercise_ids_for_person
person['Workouts'] = [filter_workout_topsets(workout, selected_exercise_ids) for workout in person['Workouts'] if
workout['StartDate'] <= max_date and workout['StartDate'] >= min_date]
# Filter out workouts that dont contain any of the selected exercises
person['Workouts'] = [workout for workout in person['Workouts'] if
workout['TopSets']]
filtered_exercises = filter(
lambda e: e['ExerciseId'] in selected_exercise_ids, person['Exercises'])
person['FilteredExercises'] = list(filtered_exercises)
person['ExerciseProgressGraphs'] = list(filter(lambda e: e['ExerciseId'] in selected_exercise_ids, person['ExerciseProgressGraphs']))
if htmx:
return render_block(app.jinja_env, 'person.html', 'content', person=person, selected_exercise_ids=selected_exercise_ids, max_date=max_date, min_date=min_date, tags=tags), 200, {"HX-Trigger": "refreshStats"}
return render_template('person.html', person=person, selected_exercise_ids=selected_exercise_ids, max_date=max_date, min_date=min_date, tags=tags), 200, {"HX-Trigger": "refreshStats"}
@ app.route("/person/<int:person_id>/workout/overview", methods=['GET'])
def person_overview(person_id):
min_date = request.args.get('min_date', type=convert_str_to_date)
@@ -154,8 +115,8 @@ def get_calendar(person_id):
'date'), '%Y-%m-%d') or date.today()
selected_view = request.args.get('view') or 'month'
if selected_view == 'all':
return redirect(url_for('get_person', person_id=person_id))
if selected_view == 'overview':
return redirect(url_for('person_overview', person_id=person_id))
elif selected_view == 'notes':
return redirect(url_for('get_person_notes', person_id=person_id))