Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Courses #4936

Open
manuelmeister opened this issue Apr 13, 2024 · 15 comments
Open

Courses #4936

manuelmeister opened this issue Apr 13, 2024 · 15 comments
Assignees
Labels
Epic Meeting Discuss Am nächsten Core-Meeting besprechen

Comments

@manuelmeister
Copy link
Member

manuelmeister commented Apr 13, 2024

Kursziele/Kursanforderungen

Strukturierte Anforderungen/Ziele/Kompetenzen von einer Instanz (Schule, Verband, Bundesamt & eigenen Erwartungen) welche man Aktivitäten zuordnen kann. Die Use Cases sind:

  • richtet sich der Aktivitätsinhalt nach den Anforderungen?
  • sind alle Anforderungen an ein Lager/Kurs durch das Programm abgedeckt?

A) Administration

  1. Als User möchte ich einen/mehrere Anforderungsbaum (zB PBS, SLRG und J+S) erfassen können.
    Die Anforderungsbäume haben eine maximale Tiefe (aktuell 3)
  2. Als Kursleitende Person möchte ich Anforderungsbäume aus einer Templatebibliothek importieren können, spätere Änderungen am Template haben keine Auswirkung auf bereits importierte Anforderungsbäume.
  3. Als Poweruser (zB Verbandsleitung/Sekretariat) kann ich die Template-Anforderungsbäume erstellen/ergänzen/verändern/löschen.
    In Zukunft werden diese Bäume (und sehr wahrscheinlich auch Lagervorlagen) wohl noch zusätzliche Metadaten benötigen (Sprache, Organisation, User Access,…)
  4. Als Kursleitende Person möchte ich einzelne Anforderungsbäume aus existierenden Lager/Kursen importieren können.
  5. Als Kursleitende Person möchte ich beim erstellen eines Lagers von einer Vorlage sämtliche Anforderungsbäume mit kopieren.
    Auf den globalen Lagervorlagen möchte das eCamp Core Team aktuell keine Anforderungsbäume erfassen, weil sonst die Anzahl benötigte Lagervorlagen explodieren würde (würde separate Vorlagen pro Kursart, Verband und Sprache nötig machen, anstatt nur pro Sprache)

B) Activity Ebene

  1. Als User möchte ich in der Aktivität beliebig viele Anforderungen/Ziele aus den Anforderungsbäumen auswählen.
    In Zukunft könnten wir dem User ermöglichen, zu verbieten den Knoten auszuwählen
  2. Als User kann ich einen ContentType "Anforderungen/Ziele" einer Aktivität/Aktivitätsvorlage (Category) hinzufügen.
  3. In Zukunft kann im ContentNode die Baumauswahl beschränkt werden.

C) Reporting

  1. Anforderungsorientiert: Als User kann ich für jede Anforderung sehen durch welche ScheduleEntries diese Anforderung abgedeckt ist.
  2. ScheduleEntry orientiert: Für Felder die pro ScheduleEntry ausgewertet werden soll, wird ein eigener ContentType erstellt. Aktuell sind das Anforderungsbaum, Blockziele & Blockinhalte. PDF, fix, ein Knopf.
@manuelmeister manuelmeister added Epic Meeting Discuss Am nächsten Core-Meeting besprechen WIP Work in progress and removed Meeting Discuss Am nächsten Core-Meeting besprechen WIP Work in progress labels Apr 13, 2024
@pmattmann
Copy link
Member

pmattmann commented Apr 13, 2024

Variante 1 Variante 2 Variante 3
Variante 1 Variante 2 Variante 3
>> Variante 3 <<

[ContentNode]
[ColumnLayout|data]
[ChecklistNode;#selectedChecklist]
[Checklist|Name;Organisation;Language]
[ChecklistItem|Text]

[ContentNode]^[ChecklistNode]
[ContentNode]^[ColumnLayout]

[Camp]<>-*>[Checklist]
[Checklist]<>-*>[ChecklistItem]
[ChecklistItem]<*children-<>[ChecklistItem]

[Camp]<>-*>[Activity]
[Activity]rootContentNode-1>[ColumnLayout]
[ContentNode]<* children-<>[ContentNode]
[ColumnLayout]<>       des-*>[ContentNode]

[Checklist]-.-option[ChecklistNode]
[ChecklistNode]<*-*>[ChecklistItem]

@carlobeltrame carlobeltrame added the Meeting Discuss Am nächsten Core-Meeting besprechen label Jun 4, 2024
@manuelmeister
Copy link
Member Author

manuelmeister commented Jun 4, 2024

Core Meeting Decision

We choose Variant 3.
Relation Checklist -> Camp can be nullable.

In the future we can still elevate the n:m relation to its own entity and a theoretical future camp checklist will just be a TodoList.

@manuelmeister manuelmeister removed the Meeting Discuss Am nächsten Core-Meeting besprechen label Jun 4, 2024
@pmattmann
Copy link
Member

pmattmann commented Jun 8, 2024

I'm afraid we'll have to discuss the naming again.

For the first implementation we need to name three entities:

  • 'Checklist', which can be created (or imported) per camp
  • 'ChecklistNode', tree structure within a 'Checklist'
  • 'ChecklistContentNode', a derivative of ContentNode, defines which Checklist has been selected; and which ChecklistNodes are selected from it.

My suggestion
(see UML 'Variante 3')
As identical as possible to material lists:

  • Checklist
  • Checklist-Item
  • Checklist-Node

@pmattmann pmattmann added the Meeting Discuss Am nächsten Core-Meeting besprechen label Jun 8, 2024
@pmattmann
Copy link
Member

pmattmann commented Jun 8, 2024

FYI:
I started to work on the backend:
https://github.com/pmattmann/ecamp3/tree/feature/checklist

CI (mandatory checks)

Backend

  • Checklist Entity
  • Checklist UnitTests
  • ChecklistItem Entity
  • ChecklistItem UnitTests
  • ChecklistNode Entity
  • ChecklistNode UnitTests

Frontend

...

@manuelmeister
Copy link
Member Author

Core Meeting Decision

We go with the version 3:

In the future we may want to rename our contentnodes to reflect that they are Nodes or Layouts. This should be first sketched in a issue before renaming all the things.

@manuelmeister
Copy link
Member Author

Currently while prototyping the frontend (#5460), I thought to myself, that we probably need an (optional) numbering system for the checklist items, similar to the schedule entries? What do you think?

@manuelmeister
Copy link
Member Author

How many characters [for the checklist item text] should be supported?
@pmattmann

I don't know. Who gathered the different checklists (PBS, J+S, Jubla, Cevi, …)? Maybe we should decide based on actual data, or find out what people want (maybe even a short and long reference to a checklist item?)

@manuelmeister
Copy link
Member Author

Core Meeting Decision

  • We try out 256 chars for the checklist item title. If @carlobeltrame doesn't find more outliers that would need more chars.
  • The numbering system needs to be more stable. For every parent (including null) the position should be ordered. We might consider per checklist different numbering styles in the future. The parent numbering concatination should be done by the frontend (e.g. 1.3.2).

@manuelmeister manuelmeister removed the Meeting Discuss Am nächsten Core-Meeting besprechen label Jul 9, 2024
@pmattmann
Copy link
Member

Core Meeting Decision

  • We try out 256 chars for the checklist item title. If @carlobeltrame doesn't find more outliers that would need more chars.
  • The numbering system needs to be more stable. For every parent (including null) the position should be ordered. We might consider per checklist different numbering styles in the future. The parent numbering concatination should be done by the frontend (e.g. 1.3.2).

ChecklistItem text length is changed to 256 in 233b47d
Improve numbering system is done in d080c5f

@manuelmeister
Copy link
Member Author

@pmattmann what happens/should happen when we delete a checklist that is referenced in a contentnode?

@manuelmeister
Copy link
Member Author

manuelmeister commented Aug 27, 2024

Core Meeting Decision

@simfeld can you gather all PBS checklists?

@pmattmann can you sketch requirement A2? How do we manage this?

@pmattmann pmattmann pinned this issue Aug 27, 2024
@pmattmann
Copy link
Member

Copy Checklist

Copy Checklist ist im Backend teilweise implementiert.
Siehe hier, hier und hier

Feature A2

Als Kursleitende Person möchte ich Anforderungsbäume aus einer Templatebibliothek importieren können, spätere Änderungen am Template haben keine Auswirkung auf bereits importierte Anforderungsbäume.

Variante 1:

Checkliste-Vorlagen werden an ein Camp-Prototype gehängt.
GUI loopt über alle Camp-Prototypes und sucht alle Checklisten zusammen.
Alle Checklisten, welche gefunden werden, als Vorlage (Prototype) angeboten.
Beim erstellen einer neuen Checkliste kann optional eine Vorlage ausgewählt werden.
Checkliste-Vorlagen werden per SQL (Migration) eingefügt.

Pro:

  • Kann schnell implementiert werden

Cons:

  • Wer Zugriff auf ein Camp-Prototype hat, kann Checklist-Vorlagen erstellen
    -> enge Kopplung

Variante 2:

Im Backend wird pro Vorlage ein JSON-File abgelegt (auf Disk).
Ein eigener Endpunkt für Checkliste-Vorlagen liest die Files von der Disk und bietet diese als Entitäten an.

File-Content:

{
  "id": "a1b2c3d4",
  "name": "Basiskurs Pfadistufe",
  "sprache": "de",
  "items": [
    {
      "text": "First-Level-Eintrag",
      "items": [
        { "text": "Second-Level-Eintrag", "items": [] },
        {
          "text": "Second-Level-Eintrag 2",
          "items": [
            { ... }
          ]
        }
      ]
    }
  ]
}

Endpunkt: /api/checklist_prototypes{?sprache=de}

{
  "_links": { "self": { } },
  "totalItems": 3,
  "_embedded": {
    "items": [
      {
        "_links": { "self": { } },
        "id": "a1b2c3d4",
        "name": "Basiskurs Pfadistufe",        
      },
    ]
  }
}

Pro:

  • JSON-File ist einfach genug, dass man diese extern geben kann.

Cons:

  • Zusätzlicher Mechanismus

@pmattmann pmattmann added the Meeting Discuss Am nächsten Core-Meeting besprechen label Aug 27, 2024
@manuelmeister
Copy link
Member Author

manuelmeister commented Aug 27, 2024

Core Meeting Decision

We want variant 1

  • Checklist add prototype-flag
  • ref. auf Camp nullable
  • api auth anpassen, so dass prototype-checklist readable ist.
  • api auth anpassen, so dass prototype-checklist von admin writeable

Frontend:

  • Admin-GUI zur Bearbeitung von Prototype-Checklists
  • Checklist-Create-Dialog Auswahl von Prototype-Checklist ergänzen

@pmattmann pmattmann self-assigned this Aug 27, 2024
@pmattmann
Copy link
Member

pmattmann commented Sep 28, 2024

Open requirements

  • Delete Checklist on Camp
    Check, if any ChecklistItem is used in any ChecklistNode - if it is, disallow deleting
    @manuelmeister

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Epic Meeting Discuss Am nächsten Core-Meeting besprechen
Projects
None yet
Development

No branches or pull requests

4 participants