From 156d89a45dac2949bec2af2ae65170ac6942bab0 Mon Sep 17 00:00:00 2001 From: "Torsten Schulz (local)" Date: Tue, 7 Oct 2025 17:16:42 +0200 Subject: [PATCH] =?UTF-8?q?F=C3=BCge=20Logik=20zur=20Aktualisierung=20des?= =?UTF-8?q?=20Datums=20basierend=20auf=20dem=20ausgew=C3=A4hlten=20liturgi?= =?UTF-8?q?schen=20Tag=20hinzu:=20Implementiere=20einen=20Watcher=20f?= =?UTF-8?q?=C3=BCr=20die=20=C3=84nderung=20des=20Tagesnamens=20und=20verme?= =?UTF-8?q?ide=20Endlosschleifen=20durch=20ein=20Flag.=20Protokolliere=20d?= =?UTF-8?q?as=20gesetzte=20Datum=20und=20den=20entsprechenden=20liturgisch?= =?UTF-8?q?en=20Tag=20in=20der=20Konsole.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/content/admin/WorshipManagement.vue | 59 +++++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/src/content/admin/WorshipManagement.vue b/src/content/admin/WorshipManagement.vue index a702989..e095c72 100644 --- a/src/content/admin/WorshipManagement.vue +++ b/src/content/admin/WorshipManagement.vue @@ -136,6 +136,7 @@ export default { selectedYear: currentYear, availableYears: [currentYear, currentYear + 1, currentYear + 2], isLoading: false, + isUpdatingFromDate: false, worshipData: { eventPlaceId: null, date: '', @@ -196,6 +197,14 @@ export default { return filtered; } }, + watch: { + selectedDayName(newValue, oldValue) { + // Nur wenn sich der Wert wirklich ändert und nicht beim initialen Laden + if (newValue && newValue !== oldValue && !this.isUpdatingFromDate) { + this.updateDateFromDayName(); + } + } + }, async created() { await this.fetchEventPlaces(); await this.fetchWorships(); @@ -271,6 +280,9 @@ export default { return; } + // Setze Flag, um Endlosschleife zu vermeiden + this.isUpdatingFromDate = true; + // Normalisiere das Datum (HTML input gibt YYYY-MM-DD zurück) const selectedDate = this.worshipData.date; @@ -288,6 +300,53 @@ export default { } else { console.log('Kein liturgischer Tag gefunden für:', selectedDate); } + + // Reset Flag nach kurzer Verzögerung + this.$nextTick(() => { + this.isUpdatingFromDate = false; + }); + }, + updateDateFromDayName() { + if (!this.selectedDayName || !this.selectedDayName.name) { + return; + } + + // Finde liturgischen Tag mit diesem Namen + // Wenn es mehrere gibt (z.B. mehrere Sonntage), nimm den nächsten in der Zukunft + const today = new Date(); + today.setHours(0, 0, 0, 0); + + const matchingDays = this.liturgicalDays.filter(day => + day.dayName === this.selectedDayName.name + ); + + if (matchingDays.length > 0) { + // Sortiere nach Datum + matchingDays.sort((a, b) => new Date(a.date) - new Date(b.date)); + + // Finde den nächsten Tag in der Zukunft oder heute + let selectedDay = matchingDays.find(day => { + const dayDate = new Date(day.date); + dayDate.setHours(0, 0, 0, 0); + return dayDate >= today; + }); + + // Wenn keiner in der Zukunft, nimm den letzten vergangenen + if (!selectedDay) { + selectedDay = matchingDays[matchingDays.length - 1]; + } + + // Setze das Datum + const dayDate = typeof selectedDay.date === 'string' + ? selectedDay.date + : selectedDay.date.split('T')[0]; + + this.worshipData.date = dayDate; + this.worshipData.dayName = selectedDay.dayName; + console.log('Datum gesetzt auf:', dayDate, 'für', selectedDay.dayName); + } else { + console.log('Kein Datum gefunden für Tag:', this.selectedDayName.name); + } }, async saveWorship() { try {