feat(TrainingStats): enhance training statistics view and participant details

- Updated TrainingStatsService to include member details (first name, last name) in participant data.
- Modified TrainingDetailsDialog to remove unnecessary time display for training sessions.
- Added new filters for training days in TrainingStatsView, allowing users to select specific training days and view attending members.
- Enhanced localization files to support new training day filter and participant-related strings across multiple languages.
This commit is contained in:
Torsten Schulz (local)
2026-03-28 13:35:34 +01:00
parent 0df8674353
commit cb7830571b
19 changed files with 372 additions and 23 deletions

View File

@@ -205,7 +205,12 @@ class TrainingStatsService {
include: [{
model: Participant,
as: 'participantList',
attributes: ['id', 'attendanceStatus']
attributes: ['id', 'memberId', 'attendanceStatus'],
include: [{
model: Member,
as: 'member',
attributes: ['id', 'firstName', 'lastName']
}]
}],
order: [['date', 'DESC']]
});
@@ -215,7 +220,22 @@ class TrainingStatsService {
date: day.date,
participantCount: day.participantList
? day.participantList.filter((participant) => !participant.attendanceStatus || participant.attendanceStatus === 'present').length
: 0
: 0,
participants: day.participantList
? day.participantList
.filter((participant) => !participant.attendanceStatus || participant.attendanceStatus === 'present')
.map((participant) => ({
id: participant.member?.id || participant.memberId,
firstName: participant.member?.firstName || '',
lastName: participant.member?.lastName || '',
}))
.filter((participant) => Number.isFinite(Number(participant.id)))
.sort((a, b) => {
const lastCompare = String(a.lastName || '').localeCompare(String(b.lastName || ''), 'de', { sensitivity: 'base' });
if (lastCompare !== 0) return lastCompare;
return String(a.firstName || '').localeCompare(String(b.firstName || ''), 'de', { sensitivity: 'base' });
})
: []
}));
const totalParticipants12Months = formattedTrainingDays.reduce((sum, day) => sum + (day.participantCount || 0), 0);