diff --git a/frontend/src/views/TournamentsView.vue b/frontend/src/views/TournamentsView.vue
index 760db88..0e9f185 100644
--- a/frontend/src/views/TournamentsView.vue
+++ b/frontend/src/views/TournamentsView.vue
@@ -57,6 +57,9 @@
+
@@ -327,6 +330,7 @@ export default {
matches: [],
showKnockout: false,
showParticipants: false, // Kollaps-Status für Teilnehmerliste
+ hasTrainingToday: false, // Gibt es einen Trainingstag heute?
editingResult: {
matchId: null, // aktuell bearbeitetes Match
set: null, // aktuell bearbeitete Satz‑Nummer
@@ -583,12 +587,36 @@ export default {
const d = await apiClient.get(`/tournament/${this.currentClub}`);
this.dates = d.data;
console.log('Loaded tournaments:', this.dates);
+
+ // Prüfe, ob es einen Trainingstag heute gibt
+ await this.checkTrainingToday();
} catch (error) {
console.error('Fehler beim Laden der Turniere:', error);
this.dates = [];
}
},
+ async checkTrainingToday() {
+ try {
+ const today = new Date().toISOString().split('T')[0]; // YYYY-MM-DD Format
+ const response = await apiClient.get(`/diary/${this.currentClub}`);
+
+ console.log('Training check response:', response.data);
+
+ // Die API gibt alle Trainingstage zurück, filtere nach heute
+ const trainingData = response.data;
+ if (Array.isArray(trainingData)) {
+ this.hasTrainingToday = trainingData.some(training => training.date === today);
+ } else {
+ this.hasTrainingToday = false;
+ }
+ console.log('Training today:', this.hasTrainingToday);
+ } catch (error) {
+ console.error('Fehler beim Prüfen des Trainingstags:', error);
+ this.hasTrainingToday = false;
+ }
+ },
+
async createTournament() {
try {
const r = await apiClient.post('/tournament', {
@@ -1050,6 +1078,90 @@ export default {
this.showParticipants = !this.showParticipants;
},
+ async loadParticipantsFromTraining() {
+ try {
+ const today = new Date().toISOString().split('T')[0]; // YYYY-MM-DD Format
+ const response = await apiClient.get(`/diary/${this.currentClub}`);
+
+ console.log('Training response:', response.data);
+ console.log('Looking for date:', today);
+
+ // Die API gibt alle Trainingstage zurück, filtere nach heute
+ const trainingData = response.data;
+
+ if (Array.isArray(trainingData)) {
+ console.log('Available training dates:', trainingData.map(t => t.date));
+
+ // Finde den Trainingstag für heute
+ const todayTraining = trainingData.find(training => training.date === today);
+ console.log('Today training found:', todayTraining);
+
+ if (todayTraining) {
+ // Lade die Teilnehmer für diesen Trainingstag über die Participant-API
+ const participantsResponse = await apiClient.get(`/participants/${todayTraining.id}`);
+ console.log('Participants response:', participantsResponse.data);
+
+ const participants = participantsResponse.data;
+
+ if (participants && participants.length > 0) {
+ // Lade die Member-Details für jeden Teilnehmer
+ const trainingParticipants = [];
+ for (const participant of participants) {
+ try {
+ // Lade Member-Details über die Member-API
+ const memberResponse = await apiClient.get(`/clubmembers/get/${this.currentClub}/true`);
+ const member = memberResponse.data.find(m => m.id === participant.memberId);
+
+ if (member) {
+ trainingParticipants.push({
+ clubMemberId: participant.memberId,
+ member: member
+ });
+ }
+ } catch (memberError) {
+ console.error('Fehler beim Laden der Member-Details:', memberError);
+ }
+ }
+
+ if (trainingParticipants.length > 0) {
+ // Füge alle Trainingsteilnehmer zum Turnier hinzu
+ for (const participant of trainingParticipants) {
+ await this.addParticipantFromTraining(participant);
+ }
+
+ // Lade Turnierdaten neu
+ await this.loadTournamentData();
+ } else {
+ alert('Keine gültigen Teilnehmer im heutigen Trainingstag gefunden!');
+ }
+ } else {
+ alert('Keine Teilnehmer im heutigen Trainingstag gefunden!');
+ }
+ } else {
+ alert('Kein Trainingstag für heute gefunden!');
+ }
+ } else {
+ alert('Kein Trainingstag für heute gefunden!');
+ }
+ } catch (error) {
+ console.error('Fehler beim Laden der Trainingsteilnehmer:', error);
+ alert('Fehler beim Laden der Trainingsteilnehmer: ' + (error.response?.data?.error || error.message));
+ }
+ },
+
+ async addParticipantFromTraining(participant) {
+ try {
+ await apiClient.post('/tournament/participant', {
+ clubId: this.currentClub,
+ tournamentId: this.selectedDate,
+ participant: participant.clubMemberId
+ });
+ } catch (error) {
+ console.error('Fehler beim Hinzufügen des Teilnehmers:', error);
+ // Ignoriere Fehler, da Teilnehmer möglicherweise bereits existiert
+ }
+ },
+
getMatchDisplayText(player1Id, player2Id, groupId) {
const liveResult = this.getMatchLiveResult(player1Id, player2Id, groupId);
if (!liveResult) return '-';
@@ -1314,6 +1426,26 @@ button {
display: flex;
gap: 0.5rem;
align-items: center;
+ flex-wrap: wrap;
+}
+
+.training-btn {
+ background-color: #28a745;
+ color: white;
+ border: none;
+ padding: 0.5rem 1rem;
+ border-radius: 4px;
+ cursor: pointer;
+ font-size: 0.9em;
+ transition: background-color 0.2s ease;
+}
+
+.training-btn:hover {
+ background-color: #218838;
+}
+
+.training-btn:active {
+ background-color: #1e7e34;
}
.no-match {