ecamp / ecamp3

eCamp v3 is a web-based app for camp and course planning. The application is specialized for camps and courses of youth associations and for Y+S offers in the sport of camp sports/trekking.
https://ecamp3.ch
GNU Affero General Public License v3.0
113 stars 50 forks source link

CampTypes, Organisationen und J+S #806

Closed carlobeltrame closed 1 year ago

carlobeltrame commented 3 years ago

Anforderungen

eCamp soll von diversen Gruppen (Pfadi, Jubla, Cevi, Schulklassen ...) für verschiedene Arten von Lagern (J+S- und nicht-J+S-Lager, Kurse, Klassenlager, Musiklager, ...) nutzbar sein. Die Regeln für diese Kombinationen können sich laufend ändern, alte Lager sollen nach Regeländerungen weiterhin unverändert verfügbar bleiben, und jedes Lager bringt eigene Spezialfälle mit sich. Daher möchte ich die Neuentwicklung von eCamp dazu nutzen, eCamp v3 flexibler zu gestalten als eCamp v2.

Einige grobe strukturelle Punkte in denen sich Lager unterscheiden können sind:

Diese Faktoren beeinflussen drei grobe Bereiche, und zwar jeweils für ein ganzes Lager wie auch für einen einzelnen Block:

Da die Lager auch z.B. innerhalb einer einzigen Organisation (PBS) stark variieren können, reicht es vermutlich nicht aus, für jede Organisation eine angepasste Instanz von eCamp v3 zu betreiben. Meiner Meinung nach sollte Konfiguration der Regeln und verfügbaren Features durch die Lagerleitung wo möglich über hart ausprogrammierte Regeln bevorzugt werden. Ausserdem sollte z.B. bei ändernder Formulierung eines PBS-Ausbildungsziels keinerlei Aufwand durch Programmierer nötig sein. Aus diesen Gründen erscheint mir der bisherige Approach mit CampTypes und ausprogrammierten Regeln à la if is_j_s then / if is_course then nicht besonders gut geeignet.

tl;dr beschlossene Massnahmen

Ziel: Bis 23. Februar

Vision

Ich möchte der Lagerleitung in den angesprochenen Punkten möglichst grosse Flexibilität mit einfacher Benutzbarkeit bieten. Dazu schlage ich die Herangehensweise "alles erlauben und durch Vorlagen vereinfachen" sowie "intelligent sortierte, suchbare, globale Listen von Vorlagen und ContentTypes" vor (überspitzt formuliert).

mockup

Wenn ich eCamp von null auf neu bauen würde, würde ich es mir ungefähr wie folgt vorstellen (grosse Teile davon sind klar Post-MVP-Territorium):

Speicherbare Daten

Kontrollen und Regeln

Exporte

(alle Exporte könnten stattdessen auch als externe Services implementiert werden, die mit der API sprechen)

Vorschlag für MVP

Es ist klar, dass die oben beschriebene Vision grosse Änderungen am bestehenden Modell mit sich bringen würde. Der grösste Teil dieser Änderungen und Details kann auch noch Post-MVP genauer spezifiziert und umgesetzt werden. Fürs MVP schlage ich folgende Änderungen vor, um den Weg für zukünftige Erweiterungen in diese Richtung offen zu halten:

Nachteile dieser Herangehensweise

Vergleich zum bisherigen Approach mit CampTypes (siehe auch https://github.com/ecamp/ecamp3/pull/691#issuecomment-741128463)

pmattmann commented 3 years ago

Ich kann mich mit dem Vorschlag gut anfreunden. Als Diskussionsgrundlage habe ich versucht ein entsprechendes UML zu erstellen.

UML

Meine Gedanken:

CampTemplate / Camp Options

Gemäss Skizze von @carlobeltrame sollten Features ein-/ausgeschalten werden. Hier bin ich unsicher, ob dies Spalten auf CampTemplate / Camp sind, oder ob es hier weitere Normalisierung bedarf.

ActivityCategory / ContentTypeConfig

Sobald das Lager erstellt ist - und die Initialen ActivityCategories und ContentTypeConfigs anhand deren Templates erstellt wurden, können diese beliebig verändert werden.

ContentTypeConfig

Obwohl CantentTypeConfig Einstellungen wie 'Required' und 'Multiple' haben, könnte ich mir vorstellen, dass man diese innerhalb der Activity beliebig verletzen darf - so dass die Benutzer freie Hand haben. Zugleich könnten wir ausweisen, wo diese Einstellungen verletzt werden. Was einem Coach/Experten einen Quercheck erlaubt.

z.B. ActivityCategory "LS" muss ContentType "Block-Ziel" enthalten (Required ContentType) Kontrolle würde fehlende ContentTypes ausweisen.

Anhand von 'Required' könnten wir neue Activities mit einem initialen ContentType-Set erstellen.

ActivityContent

Es dürfen auch ActivityContents mit ContentTypes erstellt werden, welche innerhalb von ContentTypeConfig nicht vorhanden sind. Diese gemäss dem Vorschlag von @carlobeltrame "... weiter Inhalte".

Weitere Ideen:

Zeiger auf Template

Jeweils zur Dokumentation welches Template verwendet wurde. Zeigt auf, welche Templates wie oft verwendet werden. Zeiger sind 'nullable' und ohne Logik.

CampTemplate

Für MVP denk ich, stellen wir eine Liste von CampTemplates zur Verfügung. Post-MVP kann ich mir vorstellen, dass man eigne CampTemplates erstellen kann. Dazu gibt es dann wieder bissel was zu diskutieren:

Camp aus Camp erstellen

Theoretisch könnte man aus einem Camp eine Vorlage erstellen - und diese so wiederverwenden. Damit die Menge an Vorlagen nicht explodiert, könnten wir Post-MVP auch die Funktion "Camp aus Camp" erstellen. Hierbei würden die Orangen Entitäten kopiert - jedoch nicht die weissen.

manuelmeister commented 3 years ago

Meeting Discussion

Nachteile:

Anpassungen an der Spec

Abgrenzungen

Todos bis Core Meeting am 23. Februar

carlobeltrame commented 1 year ago

The decided MVP points from this issue have been implemented, resulting in the camp templates and the flexible activity layouts we have today. In the domains of rules + checks as well as exports for different types of camps, we can work on those after the go-live.