diff --git a/app.py b/app.py index b3efca0..e9cd524 100644 --- a/app.py +++ b/app.py @@ -35,12 +35,32 @@ def response_minify(response): @ app.route("/") def dashboard(): all_topsets = db.get_all_topsets() + + exercises = db.get_exercises() + people = db.get_people() + + selected_person_ids = [int(i) + for i in request.args.getlist('person_id')] + if not selected_person_ids and htmx.trigger_name != 'person_id': + selected_person_ids = [p['PersonId'] for p in people] + + selected_exercise_ids = [int(i) + for i in request.args.getlist('exercise_id')] + if not selected_exercise_ids and htmx.trigger_name != 'exercise_id': + selected_exercise_ids = [e['ExerciseId'] for e in exercises] + + min_date = convert_str_to_date(request.args.get( + 'min_date'), '%Y-%m-%d') or min([t['StartDate'] for t in all_topsets]) + max_date = convert_str_to_date(request.args.get( + 'max_date'), '%Y-%m-%d') or max([t['StartDate'] for t in all_topsets]) + people_and_exercise_rep_maxes = get_people_and_exercise_rep_maxes( - all_topsets) + all_topsets, selected_person_ids, selected_exercise_ids, min_date, max_date) + if htmx: return render_template('partials/page/dashboard.html', - model=people_and_exercise_rep_maxes), 200, {"HX-Trigger": "updatedPeople"} - return render_template('dashboard.html', model=people_and_exercise_rep_maxes) + model=people_and_exercise_rep_maxes, people=people, exercises=exercises, min_date=min_date, max_date=max_date, selected_person_ids=selected_person_ids, selected_exercise_ids=selected_exercise_ids), 200, {"HX-Trigger": "updatedPeople"} + return render_template('dashboard.html', model=people_and_exercise_rep_maxes, people=people, exercises=exercises, min_date=min_date, max_date=max_date, selected_person_ids=selected_person_ids, selected_exercise_ids=selected_exercise_ids) @ app.route("/person/list", methods=['GET']) diff --git a/templates/dashboard.html b/templates/dashboard.html index 6890643..5989fa2 100644 --- a/templates/dashboard.html +++ b/templates/dashboard.html @@ -3,6 +3,7 @@ {% block content %} {{ render_partial('partials/page/dashboard.html', -model=model) }} +model=model, people=people, exercises=exercises, min_date=min_date, max_date=max_date, +selected_person_ids=selected_person_ids, selected_exercise_ids=selected_exercise_ids) }} {% endblock %} \ No newline at end of file diff --git a/templates/partials/page/dashboard.html b/templates/partials/page/dashboard.html index 3cfd95d..01c67ff 100644 --- a/templates/partials/page/dashboard.html +++ b/templates/partials/page/dashboard.html @@ -1,3 +1,85 @@ +
+
+
+
+
+ +
+
+ +
+
+
+
+
+
+ +
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+ +
{% for p in model['People'] %}
diff --git a/utils.py b/utils.py index 5f95835..d020cdf 100644 --- a/utils.py +++ b/utils.py @@ -73,21 +73,24 @@ def get_rep_maxes_for_person(person_topsets): return rep_maxes_in_exercises -def get_people_and_exercise_rep_maxes(topsets): +def get_people_and_exercise_rep_maxes(topsets, selected_person_ids, selected_exercise_ids, min_date, max_date): # Get all unique workout_ids (No duplicates) - people_ids = set([t['PersonId'] for t in topsets]) + people_ids = set([t['PersonId'] + for t in topsets]) + filtered_people_ids = [p for p in people_ids if p in selected_person_ids] # Group topsets into workouts people = [] - for person_id in people_ids: + for person_id in filtered_people_ids: workouts_for_person = [ - t for t in topsets if t['PersonId'] == person_id] - people.append({ - 'PersonId': person_id, - 'PersonName': workouts_for_person[0]['PersonName'], - 'NumberOfWorkouts': len(list(set([t['WorkoutId'] for t in workouts_for_person if t['WorkoutId'] is not None]))), - 'Exercises': get_rep_maxes_for_person(workouts_for_person) - }) + t for t in topsets if t['PersonId'] == person_id and t['ExerciseId'] in selected_exercise_ids and t['StartDate'] >= min_date and t['StartDate'] <= max_date] + if workouts_for_person: + people.append({ + 'PersonId': person_id, + 'PersonName': workouts_for_person[0]['PersonName'], + 'NumberOfWorkouts': len(list(set([t['WorkoutId'] for t in workouts_for_person if t['WorkoutId'] is not None]))), + 'Exercises': get_rep_maxes_for_person(workouts_for_person) + }) return {"People": people, "Stats": get_stats_from_topsets(topsets)}