Key: kalender · App: apps/events · Plan: Basis (gratis) · Seit: v0.18.0/v0.18.1 (Juli 2026)
Zentraler Vereinskalender (/clucore/kalender/) mit Monats-/Wochen-/Listen-Ansicht, Swipe-Navigation, Serien-Baukasten und farbigen Kategorien.
Die App ist das führende System; externe Kalender sind reine Anzeige. Deshalb:
Serientermine werden materialisiert (jedes Vorkommen = eigene Event-Zeile, Outlook-Muster: freq/interval/weekdays/monthly_mode/nth, Ende via count oder until) statt zur Laufzeit expandiert — einfaches Editieren einzelner Vorkommen. Sicherheitskappe: max. 104 Vorkommen.
invite_mode)| Art | Verhalten |
|---|---|
silent |
ohne Info in die Kalender der Empfänger buchen |
inform |
Info-Mail, Status fixed |
request |
Anfrage mit Zusage/Absage, Status pending/accepted/declined |
Bei Zeitänderung je nach Art: request → alle Invites zurück auf pending + neue Anfrage; inform → Info-Mail; silent → still.
EventRecipient = Person, Gruppe oder ganzer Verein. Gruppen/Verein werden laufend synchronisiert (Django-Signals): Gruppenbeitritt erzeugt nachträglich Invites für künftige Termine, Austritt löst Absage-Mails aus (nur bei fixed/accepted — Abgelehnte werden still entfernt). Neue Personen bekommen automatisch Invites für künftige „Ganzer Verein"-Termine.
Gegenseitige Sichtbarkeit (Eingeladene sehen sich): ab 19 Empfängern zwangsweise deaktiviert (MUTUAL_VISIBILITY_MAX=18).
GET /kalender/antwort/<token>/ — Bestätigungsseite ohne Login; bewusst kein Ein-Klick („kein Ein-Klick-Unfall"): erst der POST setzt den Status. ?a=zusagen|absagen steuert die Vorauswahl. Token wird nach Terminende/Absage ungültigGET /kalender/ics/<token>.ics — persönlicher Feed pro Person (Token OneToOne, ohne Login). Abgelehnte Termine fehlen; Horizont 90 Tage rückwärts; Antwort-Link in der Beschreibung; Cache-Control: private, max-age=300Bis v0.28.126 entschied die Checkbox «Haushalt mit-informieren» (Event.expand_household, nur mit Mehrpersonen-Addon, bei zwei von 340 Terminen gesetzt) je Termin, ob Eltern Mails und Stellvertreter-Links bekamen. Seit v0.28.127 ist die Checkbox weg (D33, Migration events 0006): Betreuende, die im Register Mitglied-Empfänger den Haken «Termine» (oder «Mitgliederportal») tragen, werden Mit-Informierte und Stellvertreter (EventInviteProxy) für alle Teilnehmenden derselben Mitgliedschaft; die Mail bekommt nur, wer «Termine» trägt. sync_proxies läuft bei Einladung, bei jeder Link-Änderung (Signal am Link statt an der Person) und still für künftige Termine. Erinnerungen, Änderungen und Absagen gehen auch an Stellvertretungen (P16). «Ganzer Verein» = Personen mit Haken «macht mit» plus ihre Betreuenden als Stellvertretung, archivierte nie; vorher standen Eltern als Teilnehmende im U12-Training. Stellvertretungen:
responded_by protokolliert wer)Löst ein Token kein Invite auf, wird er automatisch als Proxy-Token versucht.
event_create liefert eine no_email-Liste zur Warnungfail_silently=True — kein Retry, keine Queue („robustes Mail-System folgt separat")organizer ist reine Fach-Info (nicht der Ersteller)/api/events/ (Zeitfenster mit Überlappungslogik), create/, <uuid> GET/PATCH/DELETE mit scope=single|series, preview-recipients/ (Live-Zähler inkl. Haushalts-Personen), categories/Kopfleiste › Aktionen › Export: Termine eines Zeitraums (angezeigter Zeitraum, Kalenderjahr, kommende 12 Monate, alle) als Excel oder CSV, mit Blatt «Teilnehmer» (Status, Quelle, Antwort). Teilnehmer nur für Termine, deren Liste man im Detail sehen darf. Details: Listen-Export.
Was kann es: Ein neuer Termin entsteht in vier Schritten. Terminart als Kacheln mit Bild und Erklärung: Info-Termin (nur im Kalender, keine Mail), Termin mit Mitteilung (Mail, fix eingetragen), Termin mit An-/Abmeldung (Mail mit Zusagen/Absagen). Was und wann mit Wiederholungs-Vorgaben (jede Woche, alle zwei Wochen, jeden Monat, erweitert). Wer mit Empfängern, Organisator (die Checkbox «Haushalt mit-informieren» gab es bis v0.28.126; seit v0.28.127 folgen Stellvertretungen dem Register «Mitglied-Empfänger») und «Eingeladene sehen sich gegenseitig» (Teilnehmerliste für alle sichtbar, ab 19 Personen immer verborgen), bei An-/Abmeldung dazu Antwortfrist und Erinnerung in Tagen vor dem Termin. Prüfen zeigt die Zusammenfassung und sagt, was beim Speichern passiert. Bearbeiten nutzt dieselben Schritte als Register. «Duplizieren» im Termin-Detail startet den Wizard als Kopie. Die Erinnerung geht einmalig an alle, die noch nicht geantwortet haben (täglicher Lauf 05:40).
Warum so: Die Terminart entscheidet alles Weitere (Mail ja oder nein, Antwort ja oder nein), darum steht sie zuerst und mit Beispielen. Die beiden Häkchen tragen jetzt ihre Wirkung im Text, statt sie zu verbergen. Die Vorgaben decken neun von zehn Wiederholungen ab, das vollständige Muster bleibt unter «Erweitert».
Was kann es: Die vierte Terminart «Training, Kurse & Probe» im Wizard («Für wiederkehrende Kurse, Übungen, Trainings oder Proben»), mit Anmeldemodus «angemeldet, Abmelden möglich» oder «Zusage nötig», Leitung und Stellvertretung mit gleichen Rechten (bis v0.28.128 hiess es für alle Vereinsarten «Leitung»; seit v0.28.129 kommt das Rollenwort aus dem Wortschatz der Vereinsart — Turnverein «Leiterin / Leiter», Fussball «Trainerin / Trainer», Musik «Dirigentin / Dirigent», allgemein «Leitung» — in Kalender, Mitgliederportal, Mails, Export und ICS; der technische Rollenschlüssel bleibt leitung, Bauplan D48/B14). Im Portal, in Mails und im Export kommt das Wort «Training» nicht vor; dort heisst es «Termin» oder «Termin mit Anwesenheitskontrolle», und die Karten nennen den Titel des Termins (v0.28.31). Teilnehmende sehen das Training im Portal unter «Meine Termine» als «Angemeldet» und melden sich dort je Termin ab oder wieder an. Die Anwesenheit führt ausschliesslich die Leitung — im Werkzeug Leitung im Portal: laufendes oder nächstes Training zuerst, Blättern durch alle eigenen Trainings, je Person Status und Anwesenheit per Tipp (anwesend, abwesend, entschuldigt), Notiz, Zähler je Training, Gäste hinzufügen (bestehende oder neue Person), Training absagen mit Mail. Wer unter «Meine Daten» den Haken «Telefon sichtbar» setzt, zeigt der Leitung und Mit-Teilnehmenden seine Nummer; sonst bleibt sie verborgen. Bei Trainings und bei «Eingeladene sehen sich gegenseitig» gibt es auf der Terminkarte den Knopf «Teilnehmende».
Warum so: Ein Training ist kein Anlass mit Zusage, sondern eine Serie mit festem Kreis; darum «angemeldet, Abmelden möglich» als Standard. Für die Terminart gibt es kein neutrales Nomen, das Training, Probe, Übung und Kurs abdeckt; statt eines Auswahlfelds oder einer Kopplung an die Kategorie nennt die Kachel die Beispiele, und alle anderen Texte kommen ohne das Nomen aus (Entscheid 13.10.2026). Die Anwesenheit kennt drei Werte, damit Quoten etwas aussagen. Ein Selbst-Eintrag der Teilnehmenden (bis v0.28.27 möglich) wurde entfernt: Anwesenheitskontrolle ist Sache der Leitung, sonst taugt sie nicht als Nachweis. Telefonnummern sind Opt-in je Person, nicht Vereinsentscheid. Gäste bleiben beim Sync der Gruppen erhalten, weil sie bewusst hinzugefügt wurden.
Was kann es:
Warum so: Eine Serie mit zwanzig Terminen soll nicht zwanzig Mails erzeugen; angemeldet ist man für alles, abgemeldet wird einzeln — das entspricht dem Vereinsalltag. Im Portal bleibt dagegen jeder Termin auf seinem Tag, weil die Liste chronologisch gelesen wird und eine zusammengefasste Karte die Termine aus der Zeitachse reisst. Der Grund ist Pflicht, weil die Leitung sonst nicht planen kann; die Frist macht «kurzfristig» sichtbar, ohne eine Abmeldung zu verhindern. Die Übersicht ist bewusst ein Popup im Werkzeug statt einer neuen Seite, damit die Leitung am Platz mit einem Tipp die ganze Saison sieht. Das Werkzeug wurde nicht umbeschriftet, sondern um den Knopf ergänzt.
Im Clu-Core öffnet der Knopf Anwesenheit im Termin-Detail die Matrix der ganzen Serie: Personen in den Zeilen, Termine in den Spalten, Klick auf eine Zelle wechselt offen, anwesend, abwesend, entschuldigt. Totals je Person mit Quote und je Termin. Export als Excel oder CSV mit drei Blättern: Anwesenheit (Matrix), Termine (mit Leitung und Zählern) und J+S (Name, Vorname, Geburtsdatum, «x» je Training) für die Anwesenheitskontrolle. Nur vergangene Termine zählen in Totals und Export.
Warum so: Die Leitung führt die Anwesenheit am Platz im Portal, der Vorstand wertet im Clu-Core aus und exportiert. Das J+S-Blatt ist bewusst schlicht gehalten, damit es sich in die offiziellen Vorlagen übernehmen lässt; ein direkter Upload bleibt dem geplanten J+S-Addon vorbehalten.
Das Rollenwort der Leitung kommt aus dem Wortschatz der Vereinsart (vocab['leader']): Kalender-Seite, Serien- und Erinnerungs-Mails, Export, ICS-Präfix, Werkzeug und Chip im Mitgliederportal. Vereinsart «allgemein» sagt weiterhin «Leitung». Zusammensetzungen («Teilnehmerliste», «Anwesenheit führen», Terminart «Training, Kurse & Probe») bleiben bewusst stehen; «Training» kommt im Mitgliederportal, in Mails und im Export weiterhin nicht vor (v0.28.31). Die Checkbox «Haushalt mit-informieren» und das Mehrpersonen-Addon sind weg (v0.28.127/.129); Stellvertretungen folgen dem Register Mitglied-Empfänger.