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

EVENTS: Kurse PDF Eckdatenblatt #993

Open
4 tasks
codez opened this issue Sep 19, 2024 · 0 comments
Open
4 tasks

EVENTS: Kurse PDF Eckdatenblatt #993

codez opened this issue Sep 19, 2024 · 0 comments

Comments

@codez
Copy link
Contributor

codez commented Sep 19, 2024

Als Kursadmin möchte ich für die Kursleitungen und die Klassenleitungen ein Eckdatenblatt erzeugen können, um relevante Informationen zu einem bestimmten Zeitpunkt abzuspeichern.

Frontend

Dazu gibt es zwei mögliche Einstiegspunkte. Diese sind nur für Kurse und dort nur für die Kursadmin sichtbar, also falls can?(:create, event).

  • Auf dem Kurs Info Tab wird zuhinterst ein neuer Button "Alle Eckdatenblätter erzeugen" hinzugefügt. Mit diesem wird für alle Teilnehmenden Personen, welche entweder die Rolle Hauptleitung/Kursleitung oder Leitung/Klassenleitung haben, je ein Eckdatenblatt erzeugt.
  • Auf der Seite der Teilnahme wird zuhinterst ein neuer Button "Eckdatenblatt erzeugen" hinzugefügt, falls die Person entweder die Rolle Hauptleitung/Kursleitung oder Leitung/Klassenleitung hat.

Also Icon für die Buttons kann ein PDF Dokument (file-pdf) verwendet werden.

Die Darstellung der Anhänge eines Anlass soll im Core in eine Tabelle überführt werden, damit die Sichtbarkeits-Icons und das Löschen Icon über alle Anhänge ausgerichtet sind. Die Breite der Tabelle soll dynamisch sein, kann also bei kurzen Dateinamen relativ schmall sein, bei längeren Dateinamen breiter. Ansonsten soll kein Styling auf der Tabelle sein (kein Rand, kein zusätzliches Padding, keine Hintergrundfarben), so dass die Liste bis auf die Ausrichtung der Icons gleich aussieht wie bisher.

Backend

Es kann ein neuer Controller Event::Courses::KeyDataSheetsController mit einer create Action erstellt werden, welcher beide obigen Fälle abhandelt. Als Berechtigung wird ebenfalls :create, event geprüft.

Die Eckdatenblätter werden als PDF erzeugt und als Anhang dem Kurs hinzugefügt, welcher nur für das Leitungsteam sichtbar ist. Der Dateiname ist "Eckdatenblatt_['Kursleiter' | 'Klassenleiter'][Vorname][Nachname]_[YYYY_MM_DD_hhmm].pdf "

Danach erfolgt ein Redirect auf die Event Show Seite mit der Flash Message "Das Eckdatenblatt / Die Eckdatenblätter wurden erzeugt und dem Kurs als Anhang hinzugefügt." Falls keine Personen mit den entsprechenden Rollen vorhanden sind, wird als Fehlermeldung "Es konnte kein Eckdatenblatt erzeugt werden, da keine Kursleitung definiert ist." angezeigt.

PDF

Eckdatenblatt.pdf

Das PDF wird mit Prawn erzeugt und soll ungefähr der obigen Vorlage entsprechen. Dazu eine entsprechende Klasse Export::Pdf::Participation::KeyDataSheet erstellen. Es kann mit einer einfachen Prawn Table aufgebaut werden, die Masse müssen dabei nicht 100% übereinstimmen. Der Seitenumbruch kann beliebig erfolgen. Die Fusszeile soll auf allen Seiten angezeigt werden.

Als Sprache wird die im Kurs eingestellte Sprache verwendet. Falls diese "Deutsch/Französich" ist, wird das PDF auf Deutsch erzeugt.

Im folgenden die Information zu den vorhandenen Inhalten. Falls nichts anderes angegeben ist, werden Texte als fixe Bausteine ins Locale File übernommen.

  • Das Logo muss in allen Sprachen aus den entsprechenden SVG Dateien in app/assets/images in ein PNG mit einer passenden Grösse konvertiert werden und ebenfalls ins Git eingecheckt werden. Achtung, ein PNG sollte etwa doppelt so viele Pixel haben, wie es im PDF in Punkten gerendert wird. Wir verzichten hier auf den Einbau vom prawn-svg Gem.
  • "SAC Kurse / Touren [Jahr]": Jahr entspricht dem Jahr des ersten Kursdatums.
  • "Hallo [Vorname]": Vorname der Person, für welche das Eckdatenblatt generiert wird.
  • Veranstaltungs-Nr.: Kursnummer
  • Bezeichnung / Titel: Kursname
  • Angebot / Stufe: Label Kursstufe (level via event kind)
  • Leitung: Name aller Personen mit Rolle Hauptleitung, kommagetrennt
  • Block mit "Tageshonorar" usw: siehe unten
  • Durchführungsdatum: Alle Kursdaten, pro Bereich eine Zeile
  • Durchführungsort: Alle Orte aus den Kursdaten, pro Ort eine Zeile
  • Unterkunft: Falls Flag reserve_accommodation true: "Wird reserviert durch SAC"; sonst "Wird reserviert durch Kursleitung"
  • Unterkunft Budget: siehe unten
  • Unterkunft Kategorie: Übersetztes Label aus Kurs Accommodation
  • Durchführungssprache: Übersetztes Label aus Kurs Sprache
  • Inhalt / Programm: Fixtext, übersetzt
  • Teilnehmeranforderungen: Fixtext, übersetzt
  • Detailprogramm Teilnehmer Kurse: Fixtext, übersetzt
  • Detailprogramm Teilnehmer Touren: Fixtext, übersetzt
  • Anmeldeschluss: Datum aus Kurs Anmeldeschluss (nicht wie PDF "28 Tage vor ...")
  • Minimale Teilnehmerzahl: Attribut Kurs
  • Maximale Teilnehmerzahl: Attribut Kurs
  • Durchführung - ja/nein?: Fixtext, übersetzt
  • Durchführung – Absage: Fixtext, übersetzt
  • Ideale Klassengrösse: Attribut Kurs
  • Maximale Klassengrösse: Attribut Kurs
  • Klassenlehrer: Fixtext, übersetzt

Tageshonorar Block

In der Kursart sind Vergütungskategorien (course_compensation_categories) zugewiesen. Falls diese am Datum des ersten Kurstages einen gültigen Vergütungsansatz haben, werden sie hier angezeigt, sonst nicht. Jede Kategorie wird auf einer eigenen Zeile dargestellt. Die Spalten aus dem PDF werden beibehalten, ausser "à CHF" wird zusammengeführt. Die Spaltenbreiten können so gewählt werden, dass es ausser in der ersten Spalte keine Zeilenumbrüche gibt (Achtung unterschiedliche Sprachen, allenfalls Text Width in Prawn berechnen (cell.natural_content_width)).

Je nach der Rolle der Person, für welche das Eckdatenblatt erzeugt wird, wir als Label in der ersten Spalte das Attribut name_leader oder name_assistant_leader in der entsprechenden Sprache angezeigt. Als Betrag wird die entsprechende rate auf dem gültigen Vergütungsansatz verwendet.

Zuerst werden die Kategorien mit Art Tag (kind day) aufgelistet. Die Anzahl Tage wird als Summe aller Tage aller Kursdaten berechnet. Falls ein Kurs am Abend beginnt (start_point_of_time == :evening), wird ein halber Tag abgezogen. Die Zeiten der Kursdaten sind also nicht relevant.

Danach werden die Kategorien mit Art Pauschal (kind flat) aufgelistet. Die Anzahl Tage ist immer 1.0

Pro Art werden die Kategorien nach dem short_name sortiert.

Unterkunft Budget Block

Ahnlich wie im Tageshonorar Block werden hier die zugeteilten Kategorien mit Art Budget (kind budget) aufgelistet, welche einen gültigen Ansatz haben. Dies ist neu ebenfalls möglich. Anders als in der Vorlage wird pro Kategorie eine Zeile gerendert (aus der Vorlage wären "SAC Hütte" und "Hotel / Pension" je eine Zeile). Entsprechend hat jede Zeile 3 Spalten. Die Kategorien werden nach dem short_name sortiert.

ToDo

  • Domainklasse für PDF erstellen
  • View/Controller anpassen
  • Specs schreiben
  • Mit angemessener Rolle "durchklicken"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants