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:
0
frontend/src/components/MatchAccountDialog.vue
Normal file
0
frontend/src/components/MatchAccountDialog.vue
Normal 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;
|
||||
|
||||
Reference in New Issue
Block a user