@@ -111,7 +107,7 @@
@@ -235,7 +231,7 @@
// Leere Zellen vor dem 1.
for (let i = 0; i < startWeekDay; i++) {
- days.push({ dayNum: 0, eventType: null, isToday: false });
+ days.push({ dayNum: 0, eventType: null, minMet: null, isToday: false });
}
// Tage
@@ -246,6 +242,7 @@
days.push({
dayNum: d,
eventType: dayEvents ? dayEvents[0].type : null,
+ minMet: this.dayMinStatus(dayEvents || []),
isToday: this.isToday(date)
});
}
@@ -293,6 +290,37 @@
this.currentYear = today.getFullYear();
},
+ // Prüft ob ein Tag priorisierte Events hat (Training, Turnier, Heim-/Auswärtsspiel)
+ // und ob deren Mindestanforderungen erfüllt sind.
+ // Gibt true (alle erfüllt), false (nicht erfüllt) oder null (keine relevanten Events) zurück.
+ dayMinStatus(dayEvts) {
+ const priorityTypes = ['training', 'tournament', 'home_game', 'away_game'];
+ const relevant = dayEvts.filter(e => priorityTypes.includes(e.type));
+ if (!relevant.length) return null;
+ if (relevant.some(e => e.minMet === true)) return true;
+ if (relevant.some(e => e.minMet === false)) return false;
+ return null;
+ },
+
+ // CSS-Klasse für eine Tages-Kachel (Monatsansicht)
+ dayCellClass(day) {
+ if (!day.currentMonth) return 'bg-gray-50 text-gray-400';
+ const status = this.dayMinStatus(this.eventsForDate(day.dateStr));
+ if (status === true) return 'bg-green-50';
+ if (status === false) return 'bg-red-50';
+ if (day.isToday) return 'bg-blue-50';
+ return '';
+ },
+
+ // CSS-Klasse für Mini-Dots (Jahresansicht)
+ miniDotClass(d) {
+ if (d.isToday) return 'bg-blue-600 text-white font-bold';
+ if (d.minMet === true) return 'bg-green-500 text-white';
+ if (d.minMet === false) return 'bg-red-400 text-white';
+ if (d.eventType) return this.eventDotClass(d.eventType);
+ return 'text-gray-600';
+ },
+
// CSS-Klassen für Events in der Monatsansicht
eventBgClass(type) {
const map = {