diff --git a/frontend/src/views/TeamManagementView.vue b/frontend/src/views/TeamManagementView.vue index 23d02bb7..bb24ece6 100644 --- a/frontend/src/views/TeamManagementView.vue +++ b/frontend/src/views/TeamManagementView.vue @@ -979,7 +979,7 @@ export default { if (memberIndex < 0 || teamIndex < 0) { return false; } - return memberIndex <= teamIndex; + return memberIndex >= teamIndex; }; const getMemberEligibilityLabel = (member, teamAgeGroup) => { @@ -1218,6 +1218,16 @@ export default { planningDraggingMemberId.value = Number(member?.id); }; + const isEligibleForPlanningTeam = (memberId, teamId) => { + const team = planningLocalTeams.value.find((entry) => Number(entry.id) === Number(teamId)); + if (!team) return false; + const member = planningMemberById.value.get(planningMemberKey(memberId)); + if (!member) return false; + const teamAgeGroup = team.teamAgeGroup || 'adult'; + const teamGender = team.teamGender || 'open'; + return isEligibleForTeam(member, teamAgeGroup, teamGender); + }; + const setPlanningTeamStatus = (teamId, state) => { const key = String(teamId); planningTeamSaveStatus.value = { @@ -1305,10 +1315,20 @@ export default { planningAutosaveTimers.set(key, timer); }; - const onPlanningDropToTeam = (teamId) => { + const onPlanningDropToTeam = async (teamId) => { const memberId = Number(planningDraggingMemberId.value); const targetTeamId = Number(teamId); if (!memberId || !targetTeamId) return; + if (!isEligibleForPlanningTeam(memberId, targetTeamId)) { + await showInfo( + t('messages.warning'), + 'Dieses Mitglied ist für die gewählte Mannschaft nicht spielberechtigt (Geschlecht/Altersklasse).', + '', + 'warning' + ); + planningDraggingMemberId.value = null; + return; + } const previousEntry = planningAssignments.value.find((entry) => Number(entry.memberId) === memberId); const sourceTeamId = previousEntry ? Number(previousEntry.teamId) : null; const withoutMember = planningAssignments.value.filter((entry) => Number(entry.memberId) !== memberId);