diff --git a/frontend/src/components/MatchReportApiDialog.vue b/frontend/src/components/MatchReportApiDialog.vue index e2e68dd..dc16cc3 100644 --- a/frontend/src/components/MatchReportApiDialog.vue +++ b/frontend/src/components/MatchReportApiDialog.vue @@ -735,8 +735,8 @@ Wir wünschen den Spielen einen schönen, spannenden und fairen Verlauf und begr // Spezielle Behandlung für Braunschweiger System if (matrixConfig && typeof matrixConfig === 'object' && matrixConfig.matrices) { - const homePlayerCount = this.getSelectedPlayerCount('home'); - const guestPlayerCount = this.getSelectedPlayerCount('guest'); + const homePlayerCount = this.getEffectivePlayerCount('home'); + const guestPlayerCount = this.getEffectivePlayerCount('guest'); // Erstelle Key basierend auf Spielerzahlen (z.B. "3-4", "4-4") const playerCountKey = `${homePlayerCount}-${guestPlayerCount}`; @@ -750,6 +750,7 @@ Wir wünschen den Spielen einen schönen, spannenden und fairen Verlauf und begr // Standard-Verhalten für andere Systeme return matrixConfig || []; }, + // Prüfe ob das Match bereits abgeschlossen ist isMatchCompleted() { return this.match && this.match.isCompleted === true; @@ -761,6 +762,20 @@ Wir wünschen den Spielen einen schönen, spannenden und fairen Verlauf und begr this.initializeFinalPins(); }, methods: { + // Effektive Spieleranzahl (berücksichtigt Braunschweiger-Regel) + getEffectivePlayerCount(team) { + const actualCount = this.getSelectedPlayerCount(team); + const playMode = this.getPlayMode(); + + // Spezieller Fall für Braunschweiger System: 2er-Mannschaften werden als 3er-Mannschaften gewertet + if (playMode && playMode.toLowerCase().includes('braunschweiger') && actualCount === 2) { + console.log(`🎯 Braunschweiger System: ${team} hat ${actualCount} Spieler, wird als 3er-Mannschaft gewertet`); + return 3; + } + + return actualCount; + }, + // Methoden für Abschluss-Seite getHomeDoublePairs() { if (!this.results || this.results.length === 0) return []; @@ -1577,6 +1592,20 @@ Wir wünschen den Spielen einen schönen, spannenden und fairen Verlauf und begr const key = team === 'home' ? 'teamLineupHomePlayers' : 'teamLineupGuestPlayers'; const list = (this.meetingDetails && this.meetingDetails[key]) ? this.meetingDetails[key] : []; + // Prüfe zuerst, ob überhaupt genügend Spieler für diese Position vorhanden sind + const selectedPlayers = list.filter(p => p.isSelected); + + // Für Braunschweiger System: 2er-Mannschaften werden als 3er-Mannschaften gewertet + let effectivePlayerCount = selectedPlayers.length; + const playMode = this.getPlayMode(); + if (playMode && playMode.toLowerCase().includes('braunschweiger') && selectedPlayers.length === 2) { + effectivePlayerCount = 3; + } + + if (effectivePlayerCount < rank) { + // Nicht genügend Spieler für diese Position → Position bleibt leer + return ''; + } // Suche nach Spieler mit entsprechender Position // Zuerst nach A1, A2, etc. in positions Array (für Standard-Aufstellungen) @@ -1589,21 +1618,18 @@ Wir wünschen den Spielen einen schönen, spannenden und fairen Verlauf und begr // Falls immer noch nicht gefunden, nach Reihenfolge in der Liste der ausgewählten Spieler if (!player) { - const selectedPlayers = list.filter(p => p.isSelected); - // Sortiere nach der Reihenfolge, in der sie in der UI angezeigt werden - // (zuerst die mit Positionen, dann die ohne) + // Da wir bereits oben geprüft haben, dass genügend Spieler vorhanden sind, + // können wir sicher den entsprechenden Spieler verwenden const sortedPlayers = selectedPlayers.sort((a, b) => { const aPos = (a.positions && a.positions.length > 0) ? a.positions[0] : 'Z'; const bPos = (b.positions && b.positions.length > 0) ? b.positions[0] : 'Z'; return aPos.localeCompare(bPos); }); - // Verwende modulo, um bei mehr Positionen als Spielern zu zirkulieren - const playerIndex = (rank - 1) % sortedPlayers.length; - player = sortedPlayers[playerIndex]; + player = sortedPlayers[rank - 1]; } - if (!player) return token; + if (!player) return ''; const result = [player.firstname || player.firstName || '', player.lastname || player.lastName || ''].filter(Boolean).join(' ').trim(); return result; }