Erweitert den MatchReportApiDialog um Validierungslogik für Mindestspielerzahlen und Doppel. Fügt Methoden zur Überprüfung der Spieleranzahl und Doppelformationen basierend auf dem Spielmodus hinzu. Implementiert Fehlermeldungen zur Anzeige von Validierungsfehlern für Heim- und Gastteams. Verbessert die Benutzeroberfläche mit neuen CSS-Stilen für Fehlermeldungen.

This commit is contained in:
Torsten Schulz (local)
2025-10-03 23:01:13 +02:00
parent a0fdf256e7
commit c6bb534a0d
2 changed files with 215 additions and 1 deletions

View File

@@ -135,6 +135,10 @@
Aufstellung signieren
</button>
</div>
<!-- Fehlermeldung für Mindestspielerzahlen -->
<div v-if="getPlayerCountErrorMessage('home')" class="pin-error-message">
{{ getPlayerCountErrorMessage('home') }}
</div>
</div>
</div>
@@ -226,6 +230,10 @@
Aufstellung signieren
</button>
</div>
<!-- Fehlermeldung für Mindestspielerzahlen -->
<div v-if="getPlayerCountErrorMessage('guest')" class="pin-error-message">
{{ getPlayerCountErrorMessage('guest') }}
</div>
</div>
</div>
@@ -2255,7 +2263,198 @@ Wir wünschen den Spielen einen schönen, spannenden und fairen Verlauf und begr
canSignLineup(team) {
const pin = team === 'home' ? this.homePin : this.guestPin;
return pin && pin.length > 0;
// PIN prüfen
if (!pin || pin.length === 0) {
return false;
}
// Mindestspielerzahlen prüfen
if (!this.hasMinimumPlayerCount(team)) {
return false;
}
// Mindestdoppelzahlen prüfen
if (!this.hasMinimumDoubleCount(team)) {
return false;
}
return true;
},
// Prüfe Mindestspielerzahlen basierend auf Spielmodus
hasMinimumPlayerCount(team) {
const playMode = this.getPlayMode();
const selectedPlayers = this.getSelectedPlayerCount(team);
const requiredPlayers = this.getRequiredPlayerCount(playMode);
return selectedPlayers >= requiredPlayers;
},
// Prüfe Mindestdoppelzahlen basierend auf Spielmodus
hasMinimumDoubleCount(team) {
const playMode = this.getPlayMode();
const doubleCount = this.getDoubleCount(team);
const selectedPlayers = this.getSelectedPlayerCount(team);
const requiredDoubles = this.getMinimumDoubleRequirement(playMode, selectedPlayers);
return doubleCount >= requiredDoubles;
},
// Bestimme erforderliche Mindestdoppelzahl basierend auf Spielmodus und Spieleranzahl
getMinimumDoubleRequirement(playMode, playerCount) {
const mode = (playMode || '').toLowerCase();
// 6er System
if (mode.includes('6')) {
if (playerCount === 6) {
return 6; // Alle 6 müssen Doppel spielen
} else {
return 4; // 4-5 Spieler: 4 müssen Doppel spielen
}
}
// Braunschweiger System
if (mode.includes('braunschweiger')) {
if (playerCount === 2) {
return 2; // Alle 2 müssen Doppel spielen
} else if (playerCount === 3) {
return 2; // 2 von 3 müssen Doppel spielen
} else if (playerCount >= 4) {
return playerCount; // Alle müssen Doppel spielen
}
return 0;
}
// Andere 4er Systeme (paarkreuz, bundessystem, werner-scheffler, etc.)
if (mode.includes('4') || mode.includes('paarkreuz') || mode.includes('bundes') || mode.includes('werner')) {
if (playerCount === 3) {
return 2; // 2 von 3 müssen Doppel spielen
} else if (playerCount >= 4) {
return playerCount; // Alle müssen Doppel spielen
}
return Math.min(playerCount, 1); // Mindestens 1 Doppel
}
// 3er System
if (mode.includes('3')) {
return Math.min(playerCount, 1); // Mindestens 1 Doppel
}
// Default: Mindestens 1 Doppel
return Math.min(playerCount, 1);
},
// Zähle Anzahl der Doppel für ein Team
getDoubleCount(team) {
try {
if (team === 'home') {
const homePlayers = this.meetingDetails?.teamLineupHomePlayers || this.teamLineupHomePlayers || [];
return homePlayers.reduce((count, player) => {
return count + (player.positionDouble ? 1 : 0);
}, 0);
} else if (team === 'guest') {
const guestPlayers = this.meetingDetails?.teamLineupGuestPlayers || this.teamLineupGuestPlayers || [];
return guestPlayers.reduce((count, player) => {
return count + (player.positionDouble ? 1 : 0);
}, 0);
}
return 0;
} catch (error) {
console.error('❌ getDoubleCount Fehler:', error);
return 0;
}
},
// Hole aktuellen Spielmodus
getPlayMode() {
return (this.meetingDetails && this.meetingDetails.playMode) ||
(this.meetingData && (this.meetingData.playMode || this.meetingData.matchSystem || this.meetingData.system)) ||
'';
},
// Bestimme erforderliche Mindestspielerzahl für Spielmodus
getRequiredPlayerCount(playMode) {
const mode = (playMode || '').toLowerCase();
// 6er System: 4 Spieler erforderlich
if (mode.includes('6')) {
return 4;
}
// 3er System: 2 Spieler erforderlich
if (mode.includes('3')) {
return 2;
}
// Braunschweiger System: 2 Spieler erforderlich
if (mode.includes('braunschweiger')) {
return 2;
}
// Alle anderen 4-Spieler-Systeme: 3 Spieler erforderlich
// (paarkreuz-system, bundessystem, werner-scheffler-system, etc.)
return 3;
},
// Hole Fehlermeldung für Mindestspielerzahlen und Doppel
getPlayerCountErrorMessage(team) {
const playMode = this.getPlayMode();
const selectedPlayers = this.getSelectedPlayerCount(team);
const requiredPlayers = this.getRequiredPlayerCount(playMode);
const doubleCount = this.getDoubleCount(team);
const requiredDoubles = this.getMinimumDoubleRequirement(playMode, selectedPlayers);
const teamName = team === 'home' ? 'Heim' : 'Gast';
const playModeName = playMode || 'unbekanntes System';
const errors = [];
// Spielerfehler
if (selectedPlayers < requiredPlayers) {
errors.push(`${teamName}team hat nur ${selectedPlayers}/${requiredPlayers} Spieler (${playModeName} benötigt mindestens ${requiredPlayers} Spieler)`);
}
// Doppelfehler
if (doubleCount < requiredDoubles) {
const mode = playMode.toLowerCase();
let explanation = '';
// Spezielle Erklärungen basierend auf System und Spieleranzahl
if (mode.includes('6')) {
if (selectedPlayers === 6 && requiredDoubles === 6) {
explanation = 'alle 6 Spieler müssen Doppel spielen';
} else if (requiredDoubles === 4) {
explanation = '4 Spieler müssen Doppel spielen';
}
} else if (mode.includes('braunschweiger')) {
if (selectedPlayers === 2) {
explanation = 'beide Spieler müssen Doppel spielen';
} else if (selectedPlayers === 3) {
explanation = '2 von 3 Spielern müssen Doppel spielen';
} else if (requiredDoubles === selectedPlayers) {
explanation = `alle ${selectedPlayers} Spieler müssen Doppel spielen`;
}
} else if (mode.includes('4') || mode.includes('paarkreuz') || mode.includes('bundes') || mode.includes('werner')) {
if (selectedPlayers === 3 && requiredDoubles === 2) {
explanation = '2 von 3 Spielern müssen Doppel spielen';
} else if (requiredDoubles === selectedPlayers) {
explanation = `alle ${selectedPlayers} Spieler müssen Doppel spielen`;
}
} else {
explanation = `mindestens ${requiredDoubles} Doppel erforderlich`;
}
errors.push(`${teamName}team hat nur ${doubleCount}/${requiredDoubles} Doppel-spieler (${playModeName} erfordert: ${explanation})`);
}
if (errors.length === 0) {
return '';
}
return `⚠️ ${errors.join(', ')}`;
},
// Hash4096 - 4096-mal SHA-512 (wie nuscore verwendet!)
@@ -3296,6 +3495,21 @@ Wir wünschen den Spielen einen schönen, spannenden und fairen Verlauf und begr
background-color: #6c757d;
}
/* Fehlermeldung bei PIN-Eingabe */
.pin-error-message {
margin-top: 8px;
padding: 8px 12px;
background-color: #fee;
border: 1px solid #fcc;
border-radius: 4px;
color: #c33;
font-size: 14px;
font-weight: 500;
display: flex;
align-items: center;
gap: 6px;
}
/* Zertifizierung-Styles */
.section-btn.certified {
background-color: #d4edda;