Show monthly stats in calendar view

This commit is contained in:
Peter Stockings
2026-02-01 10:55:28 +11:00
parent a59cef5c95
commit bc2a350e90
3 changed files with 46 additions and 2 deletions

View File

@@ -212,6 +212,25 @@ def get_calendar(person_id):
# Add view-specific data # Add view-specific data
if selected_view == 'month': if selected_view == 'month':
calendar_view_data['days'] = _process_workouts_for_month_view(grouped_workouts, start_date, end_date, selected_date) calendar_view_data['days'] = _process_workouts_for_month_view(grouped_workouts, start_date, end_date, selected_date)
# Calculate summary stats for the selected month
total_workouts = 0
total_sets = 0
unique_exercises = set()
for workout_date, workouts in grouped_workouts.items():
if workout_date.month == selected_date.month and workout_date.year == selected_date.year:
total_workouts += len(workouts)
for workout in workouts.values():
total_sets += len(workout.get('sets', []))
for topset in workout.get('sets', []):
if topset.get('exercise_name'):
unique_exercises.add(topset.get('exercise_name'))
calendar_view_data['summary_stats'] = {
'total_workouts': total_workouts,
'total_sets': total_sets,
'total_exercises': len(unique_exercises)
}
elif selected_view == 'year': elif selected_view == 'year':
calendar_view_data['months'] = _process_workouts_for_year_view(grouped_workouts, selected_date) calendar_view_data['months'] = _process_workouts_for_year_view(grouped_workouts, selected_date)

File diff suppressed because one or more lines are too long

View File

@@ -39,7 +39,32 @@
</span> </span>
</div> </div>
<div class="mr-4"> <div class="flex items-center space-x-2 mr-4">
{% if view == 'month' %}
<div
class="hidden lg:flex items-center space-x-3 text-xs font-medium text-gray-500 border-l border-gray-200 pl-4 h-6">
<div class="flex items-center">
<span class="text-blue-600 mr-1">{{ summary_stats.total_workouts }}</span>
<span class="uppercase tracking-wider">Workouts</span>
</div>
<div class="flex items-center">
<span class="text-blue-600 mr-1">{{ summary_stats.total_sets }}</span>
<span class="uppercase tracking-wider">Sets</span>
</div>
{% if summary_stats.total_workouts > 0 %}
<div class="flex items-center">
<span class="text-blue-600 mr-1">{{ (summary_stats.total_sets / summary_stats.total_workouts) |
round(1) }}</span>
<span class="uppercase tracking-wider">Sets/Session</span>
</div>
{% endif %}
<div class="flex items-center">
<span class="text-blue-600 mr-1">{{ summary_stats.total_exercises }}</span>
<span class="uppercase tracking-wider">Exercises</span>
</div>
</div>
{% endif %}
{{ render_partial('partials/custom_select.html', {{ render_partial('partials/custom_select.html',
name='view', name='view',
options=[ options=[