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 {