Jahresplanimport und Ablgeich von Untis
This commit is contained in:
@@ -1160,6 +1160,38 @@ Lerngruppen, die aus mehreren Klassen zusammengesetzt sind." Zwei Ursachen, nach
|
||||
nur bei diesem konkreten Bugfix, sondern auch bei jeder künftigen Korrektur der Zuordnung durch
|
||||
den Nutzer selbst.
|
||||
|
||||
**Nachtrag zu 4.3, siebzehnte Iteration (schulweiter ClassyPlan-Jahresplan):** Zusätzlich zum
|
||||
persönlichen WebUntis-Stundenplan existiert ein schulweiter Jahresplan mit Konferenzen,
|
||||
Fortbildungen, Abschlussprüfungen, Fahrten und weiteren Terminen. Vor der Implementierung wurden
|
||||
CSV- und iCal-Export desselben Stands vollständig verglichen: jeweils 562 eindeutige Termine,
|
||||
keine fehlenden IDs und vollständige Übereinstimmung von Titel, Beschreibung, Ort und Zeit. iCal
|
||||
ist die Primärquelle, weil es darüber hinaus stabile UIDs, Änderungsmetadaten und für 264 in der
|
||||
CSV gruppenlose Zeilen die Information `X-GROUPNAME:Öffentlich` liefert. 186 der 562 Einträge sind
|
||||
echte DATE-Ganztags-/Mehrtagstermine.
|
||||
|
||||
- **Strikte fachliche Trennung:** `AnnualPlanEvent` ist reine Kalenderinformation und besitzt
|
||||
weder `SubstitutionKind` noch Stunden-/Pausennummer oder Lerngruppen-Mapping. Der neue
|
||||
`AnnualPlanSyncService` greift auf kein Stundenplan-/Vertretungsrepository zu. Erst die
|
||||
Anzeigeprojektion im Dashboard führt Jahresplan, Unterricht, Klausuren und Sitzungen zusammen.
|
||||
- **Eigener Parser:** `AnnualPlanIcsParser` unterstützt DATE-Werte mit exklusivem RFC-5545-DTEND,
|
||||
mehrtägige Termine, UTC→Europe/Berlin, Escaping und Line-Folding. Anders als der fail-soft
|
||||
WebUntis-Parser bricht er bei jedem ungültigen VEVENT den gesamten Import ab; dadurch kann ein
|
||||
Teilabruf niemals den übrigen lokalen Jahresplan als "verschwunden" löschen.
|
||||
- **Lokaler Vollabgleich:** `AnnualPlanEventRepository` wird idempotent über iCal-UID aktualisiert;
|
||||
erst nach erfolgreichem Vollparse werden nicht mehr enthaltene Termine entfernt. Wie die
|
||||
Untis-Snapshots feuert der wiederherstellbare externe Cache bewusst kein `db.OnChange` und
|
||||
erzeugt damit keine hunderte App-Sync-Ereignisse je Abruf. Automatischer Abruf alle sechs
|
||||
Stunden plus initialer Abruf beim Aufbau des Dashboards.
|
||||
- **Einstellungen/Anzeige:** Der gemeinsame Tab "Untis-Einbettung" bündelt zwei klar getrennte
|
||||
Bereiche für persönlichen Stundenplan-Abgleich und schulweiten Jahresplan, damit die
|
||||
Einstellungsnavigation kompakt bleibt. Der Jahresplanbereich bietet verschlüsselt gespeicherte
|
||||
iCal-URL, Status, manuellen Abruf und Entfernen inklusive Cache-Bereinigung. Im Dashboard orange
|
||||
markiert; Mehrtagstermine erscheinen an jedem betroffenen Tag, Detailzeilen zeigen Uhrzeit,
|
||||
Gruppe, Ort und Beschreibung. Jahresplantermine laufen parallel zum Unterricht und ersetzen
|
||||
ihn nie.
|
||||
- Tests decken Parservarianten, strikten Teilimport-Schutz, Snapshot-Idempotenz/-Bereinigung,
|
||||
verschlüsselte Einstellungen, Bereichsabfragen und die parallele Dashboard-Anzeige ab.
|
||||
|
||||
### 4.4 Wochen-/Tagesansicht
|
||||
- [x] **4.4.1** Kalenderansicht über alle Gruppen: Woche und Tag — siehe Nachtrag zu 4.3
|
||||
("Heute"-Tab: Tagesliste unten angedockt, gruppenübergreifendes Wochenraster darüber, inkl.
|
||||
|
||||
Reference in New Issue
Block a user