Git Product home page Git Product logo

hitobito_sac_cas's Introduction

hitobito_sac_cas's People

Contributors

amaierhofer avatar carlobeltrame avatar codez avatar daniel-illi avatar hunchr avatar kronn avatar largo avatar mtnstar avatar njaeggi avatar olibrian avatar openscript avatar rnestler avatar thewalkingleek avatar tobiasstern avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Forkers

njaeggi largo

hitobito_sac_cas's Issues

PEOPLE: Mitgliedernummer

Die Mitgliedernummer soll auf Basis der Navision ID (contact id) weitergeführt werden. So können alle Mitglieder ihre bisherige Mitgliedernummer behalten.
Für in Hitobito neu erstellte Personen wird eine neue Nummer oberhalb des bestehenden Range erstellt.

  • Die Nummer wird immer automatisch vergeben und kann nicht manuell editiert werden
  • Jede Person (Person entity) in Hitobito, egal ob Mitglied, Kontakt oder Mitarbeiter, erhält eine solche eindeutige Nummer (z.B. auch Hüttenwarte, Autoren, Athleten, usw.)

Tech-Spec

  • Nummer-Range: 100000 - 999999 (Validierung)
  • Die aktuell höchste Nummer in Navision ist 478'554 503'353
  • Personen werden mit rake import:mitglieder nur importiert falls eine mitglieder-nr vorhanden ist
  • In Hitobito neu erstellte Personen erhalten eine Nummer >= 600'000

ToDo

  • Rename des Person Attributs navision_id -> membership_number
    • alle XLSX/Navision Importe anpassen (navision_id ist dort zentral)
    • Validierung ergänzen
  • Sicherstellen das dieses Attribut in allen Exporten vorhanden ist (tabular)
  • Anzeige der Mitgliedernummer auf Person#show
  • Validation und Auto-Inkrement für die Mitgliedernummer erstellen
  • In allen Importen Nummerformat validieren und sicherstellen das Nr < 500'000
  • Mit angemessener Rolle durchclicken
  • Changelog Eintrag

PEOPLE: Konzeption Geschenkmitgliedschaft

Im 2022 wurden 306 Mitgliedschaften geschenkt

evtl. Lösung nur in der Buchhaltung ?

evtl. zusätzliche Rolle Geschenkmitgliedschaft (bereits so vorhanden) als Basis für Verrechnung.

PEOPLE: Personen-Import und Familien

blocked_by: #98

Der Personen-Import soll so angepasst werden das Familien importiert werden.

  • Im XLSX Export File gibt es die Spalte Familien-Nr. sowie Kategorie FAMILIE

Tech-Spec

ToDo

PEOPLE: QR Code Mitgliederausweis auf Profil

Als SAC Mitglied
will ich den Mitgliederausweis auf meinem Hitobito Profil anzeigen
um mich auszuweisen.

Als SAC Hüttenwart will ich
den Mitgliederausweis QR Code eines Kunden scannen
um zu prüfen, ob die Mitgliedschaft gültig ist.

Der PDF Ausweis wie er im Prototyp vorhanden ist wird entfernt und es soll direkt ein QR-Code angezeigt werden.

329987697-8c591d60-f23b-43fc-b683-87c6246c79de

Smart-Phone view:

329987887-c2551533-d26b-42e3-841f-fd116be97ff3

Important

In den Mockups wird auf dem QR Code ein SAC Logo angezeigt.
Für das MVP rendern wir den QR Code aber OHNE Logo.

Tech-Spec

ToDo

  • Sektion "Dokumente" und Link auf Mitgliederausweis entfernen (inkl. PDF domain class entfernen)
  • QR Code rendering implementieren
  • QR Code auf person#show view anzeigen analog mockup
  • Specs schreiben
  • Mit angemessener Rolle durchklicken

PEOPLE: Abbilden/Import Hauptsektion vs. Zusatzsektion

Alle Mitglieder haben eine Hauptsektion.

Teilweise sind Personen Mitglieder in mehreren Sektionen. Neben der Hauptsektion kennt man beim SAC die Zusatzsektion. Für die zusätzliche Sektion bezahlen Mitglieder nur den Anteil der Zusatzsektion, nicht jedoch den NV Beitrag nochmals.

  • Mitglieder sollen selbstständig einer Zusatzsektion beitreten können. Umsetzung mit #119
  • Anpassen des Sektions Personen Imports sodass Zusatzsektionsmitglieder entsprechend angelegt werden
  • Auf einer Rolle wird angezeigt ob es sich um die Hauptsektion (mit dem Stern) oder um eine Zusatzsektion (Text) handelt
  • Zusatzsektion ist nur für Einzel oder Jugend Mitglieder möglich, nicht für ganze Familien

Tech-Spec

Neuer Import Personen Zusatzsektion

blocked by: #117

  • es gibt ein File pro Sektion mit allen Zusatzmitgliedschaften. Der Import dieser Zusatzmitgliedschaften soll nach dem Import aller Hauptmitgliedschaften aller Sektionen erfolgen
  • Sektion ID im Dateinamen unterbringen. zusatzmitglieder-1650.xlsx, 1650 = navision_id
  • test files
  • Aktive Zusatzmitglieder werden nur importiert falls diese bereits eine aktive Hauptsektion haben, sonst werden diese als Fehlerhaft markiert

Hauptsektion == Hitobito Hauptgruppe (primary_group)

image

  • Die Hauptsektion wird via primary_group festgelegt
  • Falls eine Person eine Mitglied Rolle hat, muss zwingend eine dieser Rolle die primary_group sein
  • Mitglieder können die Hauptsektion/primary_group nicht selber ändern (sac wagon permission Anpassung), Stern auch im UI read-only
  • Via dem Stern wird die aktuelle Hauptsektion angezeigt (Hovertext für Mitglied Rolle anpassen, Hauptsektion anstatt Hauptgruppe)
  • Ist die Primärgruppe auf eine Nicht-Mitgliederrolle gesetzt (z.b. ExternerKontakt), wird Hauptgruppe als Begriff verwendet)
  • Erhält eine Person eine Mitglied/Neuanmeldung Rolle und hatte vorher keine aktive dieser Rollen, wird die Gruppe der neuen Rolle gleich als primary group der Person gesetzt.
  • Wird die Hauptsektion Rolle einer Person gelöscht oder terminiert, wird automatisch die nächste Zusatzsektion Rolle als Hauptsektion gesetzt falls eine solche vorhanden ist

image

Zusatzsektion

Beitragskategorie Calculator

ToDo

  • Primary Group / Hauptsektion Stern/Text anpassen
  • Role-Model Validierungen implementieren
  • Anpassen Beitragkategorie Calculator
  • Erstellen Import Personen Zusatzsektion
  • manuelles Testen
  • CHANGELOG entry

PEOPLE: Vereinsmitgliederjahre

Die Anzahl Mitgliederjahre sind für viele Mitglieder interessant. Ausserdem wird man ab einer gewissen Anzahl Mitgliederjahre Begünstigt und muss keinen jährlichen Beitrag mehr bezahlen.

Mit diesem Ticket soll die Berechnung dieser Anzahl Jahre umgesetzt werden.

Mockup

image

Tech-Spec

  • Setzt #150 voraus (blockiert durch #150)
  • Umsetzung im SAC Wagon
  • Die Grundidee ist, dass auf jeder Stammsektions-Mitgliederrolle gespeichert / berechnet wird, wie viele Mitgliederjahre diese Rolle dem Mitglied vergibt.
  • Achtung: Es sind auch Kommazahlen möglich, nicht nur ganze Jahre, z.B. bei den untenstehenden Edge Cases
  • Daher speichern / rechnen wir lieber mit Tagen statt ganzen Jahren, und rechnen das dann für die Anzeige herunter auf Jahre
  • Schaltjahre werden vorerst aufgrund der Komplexität der Berechnung ignoriert. Die Mitgliederjahre der Mitglieder zählen halt nach jedem Schaltjahr einen Tag früher hoch.
  • Es existiert aktuell ein dummy Getter Person#membership_years. Dieser muss ersetzt werden.
  • Für die Anzeige der Mitgliederjahre einer Person runden wir die berechneten Jahre auf die nächste ganze Zahl ab. Bei einzelnen Rollen zeigen wir die Kommazahlen an, allenfalls gerundet auf zwei Nachkommastellen.

Edge Case 1

  1. Person tritt am 1. August eines Jahres ein mit der Beitragskategorie Jugend
  2. Person wird einen Monat später 22 Jahre alt
  3. Mit der Fakturierung z.B. am 1. Dezember findet ein Beitragskateogrie-Wechsel statt
  4. Die Rolle mit Beitragskategorie Jugend wird terminiert und eine neue erstellt mit Einzel

Edge Case 2

  1. Person tritt Anfang Jahr in eine Sektion ein, und bezahlt bis Ende Jahr die Mitgliedschaft
  2. Person wechselt mitte Jahr die Stammsektion, und ihre Mitgliedschaftsrolle wird sofort terminiert und eine neue Rolle in der neuen Sektion wird erstellt.

Edge Case 3

Person pausiert Mitgliedschaft für ein paar Monate

Abgrenzung: Mitglieder Import Sektion

Beim Import müssen wir auch berücksichtigen, dass teils unerklärte Mitgliederjahre in den zu importierenden Daten vorhanden sind. Dies ist aber ein Import-Thema und kann hier ignoriert werden.
Siehe #147

ToDo

  • Dummy Getter membership_years auf Person entfernen
  • Neuer Scope Role#with_membership_years, welcher die Berechnung der Mitgliederjahre direkt in der Datenbank ausführt und diese als neues Feld exponiert
    • Berechnung soll direkt in der Datenbank passieren
    • Zur Berechnung ungefähr folgende Regeln verwenden:
      • Gibt immer 0 zurück wenn die Rolle keine Mitgliederrolle ist (bei FutureRoles ebenfalls 0), oder eine Zusatzsektions-Mitgliederrolle ist
      • LEAST(CURDATE(), role.deleted_at, role.delete_on) - role.created_at
  • Neuer Scope Person#with_membership_years, welcher die Berechnung der Mitgliederjahre direkt in der Datenbank ausführt und diese als neues Feld membership_years exponiert
    • Berechnung soll in der Datenbank passieren, damit es auch bei Filtern und Sortierung etc. verwendet werden kann
    • Zur Berechnung einfach alle membership_years aller Rollen der Person berechnen und summieren und abrunden
  • Anzeige des berechneten Werts auf PeopleController#show
  • membership_years auf /api/people/42 exponieren, read-only
  • Neue TableDisplay-Column damit es als "weitere Spalte" auswähl- und exportierbar ist
  • Auf dem Verlaufs-Tab der Person die membership_years jeder Hauptsektions-Rolle anzeigen
    • auf zwei Nachkommastellen abrunden
  • Überprüfen / testen ob mehrere Rollen summiert zusammen auf genau 1 Jahr kommen können, oder ob wir wegen floating point errors lieber erst ganz am Schluss bei der Anzeige durch 365 teilen müssten
  • Kunde wegen Übersetzungen informieren
  • Mit angemessener Rolle "durchklicken"
  • CHANGELOG-Eintrag unter "unreleased" unten hinzufügen

Grundpaket: Mehrsprachigkeit

Gewünschte Sprachen: DE, FR

  • settings.yml
  • transifex -> eigenes Projekt (für Wagon spezifische Übersetzungen)
  • Anbindung an transifex
  • Kunde berechtigen und instruieren

See: #1

GROUPS: Faktura Stammdaten NV/Sektion

Für die spätere Fakturierung werden diverse Stammdaten/Attribute auf Natioal/Sektions-Ebene benötigt.

Die Faktura-Stammdaten stehen in einem XLSX-Export aus Navision zum Import bereit.

Die Preise sollen künftig pro Kalenderjahr festgelegt werden. mounted_attr wird dazu entsprechend erweitert. Umsetzung mit #93

root_layer attribute

Alpengebühr | EINZEL
Alpengebühr | FAMILIE
Alpengebühr | JUGEND
Auslandsporto Alpen | EINZEL
Auslandsporto Alpen | FAMILIE
Auslandsporto Alpen | JUGEND
ZV-Beitrag | EINZEL
ZV-Beitrag | FAMILIE
ZV-Beitrag | FREI FAM
ZV-Beitrag | FREI KIND
ZV-Beitrag | JUGEND
ZV-Eintrittsgebühr | EINZEL
ZV-Eintrittsgebühr | FAMILIE
ZV-Eintrittsgebühr | FREI FAM
ZV-Eintrittsgebühr | FREI KIND
ZV-Eintrittsgebühr | JUGEND

sektion

Hütten-Solitaritätsbeitrag | EINZEL
Hütten-Solitaritätsbeitrag | FAMILIE
Hütten-Solitaritätsbeitrag | FREI FAM
Hütten-Solitaritätsbeitrag | FREI KIND
Hütten-Solitaritätsbeitrag | JUGEND
Bulletin Porto Ausland | EINZEL
Bulletin Porto Ausland | FAMILIE
Bulletin Porto Ausland | FREI FAM
Bulletin Porto Ausland | FREI KIND
Bulletin Porto Ausland | JUGEND
Sektionsbeitrag | EINZEL
Sektionsbeitrag | FAMILIE
Sektionsbeitrag | FREI FAM
Sektionsbeitrag | FREI KIND
Sektionsbeitrag | JUGEND
Sektionseintrittsgebühr | EINZEL
Sektionseintrittsgebühr | FAMILIE
Sektionseintrittsgebühr | FREI FAM
Sektionseintrittsgebühr | FREI KIND
Sektionseintrittsgebühr | JUGEND

Mockup

Neues Tab auf edit Root/Sektion Mitgliederfaktura

image

Die Attribute sollen vorerst nicht auf Group#show aufgelistet werden.

Tech-Spec

ToDo

  • Definition aller Attribute auf root layer (Group::SacCas) (mounted_attr, inkl. Validierungen)
    • mounted_attr category: :membership_accounting
  • Definition aller Attribute auf Sektion (mounted_attr, inkl. Validierungen)
  • Erstellen neues Import-Script auf Basis der bestehenden Importe für Sektionen/Personen (XLSX)
  • Specs ...

PEOPLE: sac-cas membership years auf person

Auf dem Personenmodel sollen folgende Custom Attributes eingerichtet werden:

  • membership_years, als methode auf person, spalte auswählbar machen auf personen liste, irgend einen wert zurück geben vorerst

  • Als Spalte für Export/Anzeige auf Personenliste auswählbar

  • In JSON:API auf person#show ausgeben (optional)

  • Bei den Personen Listen Exporten bei Alle Angaben sowie falls als Spalte selektiert exportieren

  • Wert auf Person#show anzeigen

Platzhalter für Authentifizierungs-Themen

Hier mal ein paar Links zum Thema Authentifizierung bei hitobito via Azure AD und OpenID Connect:

  • Wir verwenden in hitobito Devise für die Authentifizierung.
  • Devise bietet eine Anbindung an OmniAuth, was eine Library für OAuth-Logins ist.
  • Es existieren OmniAuth-Plugins für Azure AD sowie OpenID Connect.
  • Die Anbindung solcher Drittsysteme muss immer mit einem hohen Grad an Zusammenarbeit mit den Betreibern der Authentifizierungslösung (Azure AD bzw. WSO2) geschehen. Aufwandschätzung tbd.

Weitere, bereits gelöste Themen im Bereich Authentifizierung:

  • hitobito ist bereits ein OAuth v2 und OpenID Connect Server / Identity Provider, via die doorkeeper bzw. doorkeeper-openid_connect Gems welche mit Devise zusammenarbeiten.
  • Zusätzliche OIDC Claims können in hitobito via Code-Änderung eingefügt werden. Es wäre also aus heutiger Sicht denkbar, WSO2 ganz durch hitobito abzulösen.
  • hitobito bietet eine lesende und schreibende JSON:API. Diese wurde erst vor kurzem von Null auf neu gebaut, und soll die alte read-only API ersetzen. Daher sind in der neuen API noch nicht viele Endpoints vorhanden, die Grundlage dafür ist aber geschaffen.
    • Authentifizieren kann man sich bei der API auf mehrere Arten:
      • Entweder mit einem OIDC Token (wenn das der externen Applikation in hitobito von einem Admin erlaubt wurde, d.h. der entsprechende Scope auf der OIDC Applikation im hitobito UI aktiviert ist). Dann greift man "im Namen des OIDC authentifizierten Users" auf die API zu, und hat entsprechend nur Zugriff auf die Daten, die der User auch lesen oder schreiben könnte.
      • Oder mit einem Service Token, was unpersönlichen API-Zugriff erlaubt. Service Tokens können durch die User auf jedem Layer (z.B. Zentralverband oder Sektion, aber nicht z.B. Ressort) definiert werden und unterschiedliche Berechtigungen erteilt bekommen.
    • Erlaubte CORS Origins können bei beiden Arten von Authentifizierung in hitobito von den Admins konfiguriert werden.

PEOPLE: Neuanmeldungen verwalten

Manche SAC Sektionen entscheiden für jedes neue Mitglied selber, ob das Mitglied aufgenommen werden soll oder nicht. (Bei anderen SAC Sektionen ist der Prozess automatisiert). Damit die Sektions-Admins die neuen Mitglieder überprüfen und zulassen/ablehnen können, muss die eigens dafür vorgesehenen Gruppe "Neuanmeldungen (Zur Freigabe)" wie folgt angepasst werden.

Allgemeine Anpassungen

  • Titel der Seite bzw. Name der Gruppe ändern zu "Neuanmeldungen (Zur Freigabe)"
  • Standard Filter: Ändern von "Mitglieder" zu Neuanmeldungen"

Unnötige Dinge streichen

Für die Verwaltung der Neuanmeldung braucht es in der Gruppe nur die Tabs "Info, "Personen" und "Log".
Im Tab "Personen" braucht es einige der Buttons und Aktionen auch nicht: "Rechnung erstellen", "Liste importieren", "Zu Veranstaltung hinzufügen", "Zu Abo hinzufügen".

-> Optional falls dies einfach möglich ist

Neue Aktionen Übernehmen / Ablehnen bei Tabelle

Für die Einträge in der Tabelle werden zwei neue Aktionen benötigt.
image

Beschreibung der Buttons:

  • icon ist "user-check" bzw "user-slash"
  • Label des Buttons ist "Übernehmen" bzw. "Ablehnen"
  • Auswahl einer der Aktionen öffnet das Confirmation modal

Bestätigung im Confirmation Modal

Wenn eine der beiden Aktionen gewählt wird, dann muss der User die Aktion im Confirmation modal nochmals bestätigen, vgl. Bild:
image

Die Texte im Confirmation Modal sind je nach Anzahl gewählter Einträge und nach gewählter Aktion wie folgt:

Titel
Beschreibung
[Primary Button] Secondarybutton

Anmeldung übernehmen
Bitte bestätigen Sie die Übernahme der ausgewählten Anmeldung.
[1 übernehmen] Abbrechen

Anmeldungen übernehmen
Bitte bestätigen Sie die Übernahme der ausgewählten Anmeldungen.
[3 übernehmen] Abbrechen

*Anmeldung ablehnen
Bitte bestätigen Sie die Ablehnung der ausgewählten Anmeldung.
[1 ablehnen] Abbrechen

*Anmeldungen ablehnen
Bitte bestätigen Sie die Ablehnung der ausgewählten Anmeldungen.
[4 ablehnen] Abbrechen

Beim Ablehnen soll zudem ein Textfeld angezeigt werden, in dem eine optionale Bemerkung angegeben werden kann, vgl Bild:
image

Success Message

Wenn der User die Aktion bestätigt hat, wird diese durchgeführt, die Liste wird aktualisiert und eine Erfolgsmeldung/Success Message wird angezeigt.

image

Texte für die Meldung:

  • Die ausgewählte Anmeldung wurde übernommen
  • Die ausgewählte Anmeldung wurde abgelehnt
  • Die ausgewählten Anmeldungen wurden übernommen
  • Die ausgewählten Anmeldungen wurden abgelehnt

Tech-Spec

  • Umsetzung rein im SAC wagon
  • Bei akzeptieren wird die Neuanmeldung Rolle der Person in NeuanmeldungenSektion durch eine in NeuanmeldungenNv in gleichen Layer ersetzt.
  • Beim Ablehnen:
    • wird die Neuanmeldung Rolle per sofort terminiert
    • Login der Person wird gesperrt
    • Die Bemerkung die beim Ablehnen erfasst werden kann wird als Notiz auf der Person hinterlegt
  • soll später auch mit Rollen mit Startdatum in der Zukunft funktionieren, siehe #97 , wird mit #114 umgesetzt
  • Neuer Controller im SAC wagon, sowas wie Roles::NeuanmeldungenSektion::ConfirmationController
    • #show: modal fenster Rendern
    • #create: Akzeptieren und Rolle verschieben in NeuanmeldungenNv
    • #delete: Ablehnen

ToDo

  • Controller erstellen und create, delete actions implementieren (mits species)
  • index action buttons ergänzen
  • Controller show, für modalfenster implementieren
  • Action Buttons auf Person#show ergänzen
  • Ausblenden unnötige Elemente/Tabs auf Neuanmeldungsgruppen (ggf. follow up ticket erstellen)
  • Ticket #114 noch ergänzen falls es da noch Anpassungen braucht, oder dieses Ticket löschen/schliessen
  • Feature spec im sac wagon
  • manuell testen
  • CHANGELOG entry

MESSAGES: Konzeption Die Alpen Versand

wie am besten Versand / Bestellung die Alpen verwalten?

es gibt auch nicht-mitglieder die nur das Magazin abonniert haben

  • Globales Abo auf Top-Layer: 'Die Alpen / Les Alpes'
  • Gibt es die Alpen auch rein digital?
  • Sprache des Magazins wird aufgrund der Personen Sprache definiert
  • Nicht Mitglieder die das Magazin abonniert haben, werden unter einer sep. Gruppe unter dem Top-Layer abgelegt

PEOPLE: Selbstregistrierungsformular Erfassen Familie

Blocked by: #96, #102

Bisher befindet sich die Auswahl für die Mitgliedskategorie, das Erfassen von Familienmitgliedern aber auch die Abfrage weitere Anmeldedetails komplett auf der Website des SAC. Neu springt man direkt auf Hitobito ab und alle Angaben erfolgen dort:

Neues Selbstregistrierungsformular

  • Im SAC Wagon wird das Selbstregistrierungsformular so erweitert, dass zusätzlich zum sich registrierenden Hauptmitglied auch weitere Familienmitglieder erfasst werden können.
  • Die erfassten Personen werden erstellt und im gleichen Haushalt verknüpft. Eine Validierung wird mit #98 ergänzt.
  • Beim Button "Registrieren" wird die gewählte Mitgliedschaft als Text integriert, z.B. als "Weiter mit Familienmitgliedschaft". Das soll verhindern das Leute sich mit der falschen Option Registrieren (was in der Vergangenheit oft passiert ist)
  • Das Registrierungsformular soll in DE, FR, IT und EN zur Verfügung stehen. Sprachen IT und EN als UI Sprachen ergänzen/aktivieren

Siehe auch Ablaufdiagramm in #94

Mockup und UI-Prototyp

  • Siehe PDF in #94

Wahl der Mitgliedschaft

  • Die Hauptperson gibt ihre eigenen Daten in Schritt 1 an. Ohne Angabe von weiteren Personen gilt die Anmeldung als Einzel-/Jugendmitgliedschaft
  • Weitere Personen können in Schritt 2 angegeben werden. Falls sie das tut, gilt die Anmeldung als Familienmitgliedschaft

Validierung Anmeldung Familienmitgliedschaft

Die Familienmitgliedschaft ist zulässig für:

  • Personen im gleichen Haushalt (es kann nur eine Adresse bei der Hauptperson angegeben werden)
  • 1 bis 2 Erwachsene im Alter ab 23 Jahren
  • 0 bis n Kinder im Alter zwischen 6 und 17 Jahren
  • Insgesamt mindestens 2 Personen

Diese Kriterien werden in Schritt 2 des Formulars validiert. Sind die Kriterien nicht erfüllt, kann nicht mit Schritt 3 weitergefahren werden

Aufbauend auf diesem Ticket

  • Werden die Preisinformationen sowie andere Hinweise angezeigt ticket #...
  • Validierung Familie mit Partner/Kinder (Alter, Anzahl) #98
  • Maske für den Eintrittsgrund ergänzt #101

Tech-Spec

Das man Personen im gleichen Haushalt gleichzeitig über das Selbstregistrierungsformular erfassen kann sehen wir mal im Core vor. Falls es zu aufwändig wird, dann wir dies ein reines SAC Wagon feature.
Falls im Core, Registrierung für mehrere Personen kann auf der Gruppe aktiviert/deaktiviert werden. Default: deaktiviert

  • PartnerIn und Kinder mit erfassen im Selbstregistrierungsformular

    • PartnerIn und Kinder werden als zusätzliche Personen erfasst und als 'wohnt im gleichen Haushalt mit' der Hauptperson verknüpft
  • Alle neu erstellten Personen erhalten die gleiche Rolle (Neuanmeldung)

    • Die für die Selbstregistrierung konfigurierte Rolle berücksichtigen
  • #102: Logik um die Beitragskategorie zu bestimmen wiederverwenden

  • Submit Button Text anpassen je nach dem was für eine Beitragskategorie bestimmt wurde: [ Registrieren ] Neuanmeldung Familie (mit Logik aus #102)

ToDo

SAC Wagon

  • UI Sprachen IT und EN für Hitobito SAC aktivieren
  • Erweiterung sodass im Selbstregistrierungsformular mehrere Schritte definiert werden können (evtl. im Core)
  • Schritt 2: Weitere Personen implementieren
  • Schritt 3: Zusammenfassung/Registrieren implementieren (Später wird dies Schritt 4)
  • Manuell testen
  • CHANGELOG entry

GROUPS: Neue Gruppetypen für Neuanmeldungen

  1. Neuanmeldungen Sektion

Diese Neuanmeldungen werden durch die Sektion verwaltet/bearbeitet

  1. Neuanmeldungen ZV

Diese Neuanmeldungen werden durch den ZV verwaltet/bearbeitet

Beide Gruppen haben die Rollen Neuanmeldung Einzel, Jugend, Familie

PEOPLE: Registrierungsformular Zusatzdaten

Eintrittsdatum angeben

Bei der Neuanmeldung muss das neue Mitglied auswählen, per wann es eintreten will. Grund ist, dass es Vergünstigungen geben kann, wenn das Mitglied spät im Jahr eintritt, und je nach dem möchte man diese Vergünstigung bereits früher im Jahr nutzen.

Die genaue Logik wird noch abgeklärt. Hypothese für den Moment:
Wenn der 1. Juli des aktuellen Jahres bereits vorbei ist, ist die Option 1. Juli deaktiviert.
Wenn der 1. Oktober des aktuellen Jahres bereits vorbei ist, ist die Option 1. Oktober deaktiviert.

Eintrittsgrund angeben

Bei der Neuanmeldung beim SAC muss das neue Mitglied einen Eintrittsgrund angeben. Gemäss https://saccas.atlassian.net/browse/HIT-146 soll:

  • Die Auswahl des Eintrittgrunds per Radio Button -Auswahl möglich sein
  • Die Eintrittsgründe werden zentral unter den Globalen Einstellungen verwaltet und sind mehrsprachig (de, fr, it, en)

Weitere Angaben

Siehe Mockup. Genaue Optionen sind noch zu klären, aber Newsletter und Privacy Policy kommen sicher mal hierhin. Fürs MVP können die Statuten, Beitragsreglement und Datenschutzerklärung auch in ein einziges Privacy Policy PDF kombiniert werden.

Mockup

Screenshot 2023-11-30 at 18-18-18 SAC Hitobito Balsamiq-Mockups pdf

Quelle: https://raw.githubusercontent.com/hitobito/hitobito_sac_cas/master/doc/SAC%20Hitobito%20Balsamiq-Mockups.pdf#page=7

Anmerkung Tobi s.: Aus User-Sicht wäre es besser, wenn man auch gar keinen Grund angeben könnte, also wenn dies kein Pflichtfeld ist.
-> Antwort aus Diskussion mit Stefan: Sie können einfach im hitobito UI einen weiteren Grund "Sonstiges" erfassen, dieser ist dann als Radio Button verfügbar, ohne Freitextfeld.

ToDo

  • Attribute auf Person ergänzen (Migration, view, nicht manuell bearbeitbar)
    • self_registration_reason_id, belongs_to zu self_registration_reason
  • Im Selbstregistrierungsformular den Schritt "summary" zu Zusatzdaten umbenennen
  • Wenn wir schon dran sind, Schritt 1 "Haupt-Email" gleich zu "E-Mail" umbenennen und in den Übersetzungen auf dieser Maske überall von E-Mail statt von Haupt-E-Mail reden
  • "Eintrittsdatum per" als Radio Buttons
    • Wenn der 1. Juli des aktuellen Jahres bereits vorbei ist, ist die Option 1. Juli deaktiviert.
    • Wenn der 1. Oktober des aktuellen Jahres bereits vorbei ist, ist die Option 1. Oktober deaktiviert.
    • Beim Erstellen der Rolle(n) ggf. das "Eintrittsdatum per" als create_on der Rolle(n) verwenden
  • Eintrittsgründe aus der self_registration_reasons Tabelle als Radio Buttons rendern, und auf Person speichern
  • Je nach dem ob eine Einzelmitgliedschaft oder eine Familienmitgliedschaft erfasst wird einen anderen Text anzeigen (Texte werden vom SAC geliefert)
  • Bemerkungen-Feld von Main Person Partial in dieses Partial verschieben
  • Feature Specs schreiben
  • manuell Testen
  • CHANGELOG entry

PEOPLE: Mitgliederrollen vs. Beitragskategorie

blocked_by #96

Beim SAC gibt es verschiedene Beitragskategorien für eine Mitgliedschaft. Heute sind dies:

EINZEL, JUGEND, FAMILIE, FREI FAM, FREI KIND

Zurzeit sind diese Kategorien teilweise noch als einzelne Rollen in Hitobito abgebildet.

Neu gibt es aber nur noch die Rolle Mitglied bzw. Neuanmeldung:

  • Auf dem Rollenmodel gibt es neu ein i18n enum :category
  • Auf der Rolle Mitglied/Neuanmeldung (NeuanmeldungenNV, Neuanmeldungen, SektionsMitglieder) werden folgende Kategorien/Beitragskategorien definiert:
    • Einzel
    • Jugend
    • Familie
  • Frei Fam, Frei Kind wird nicht mehr benötigt (Abbildung über Familienkonstrukt #98)
  • Die Kategorie wird bei der Rolle im UI angezeigt (vor optionaler Bezeichnung), ist jedoch nicht manuell editierbar

image

Mechano um die richtige Beitragskategorie zu bestimmen: (siehe auch #98)

  • Falls keine PartnerIn/Kinder vorhanden, sowie 22 Jahre und älter -> Einzel
  • Falls keine PartnerIn/Kinder vorhanden, sowie jünger als 22 Jahre -> Jugend, min. 6 Jahre Alt
  • Falls PartnerIn und/oder Kinder vorhanden, sowie 22 Jahre und älter -> Familie

Die Beitragskategorie wird beim Erstellen der Rolle bestimmt und persistiert und kann vorerst später nicht mehr geändert werden (attr_readonly)

Die Logik um die Beitragskategorie einer Person zu bestimmen soll in eine eigene Domainklasse untergebracht werden. So kann diese Logik auch beim Selbstregistrierungsformular verwendet werden. (Umsetzung mit #95)

Tech-Spec

ToDo

  • Sicherstellen das es nur noch die Rolle Mitglied in den erwähnten Gruppen gibt (siehe auch #96)
  • Domain Logik um zu bestimmen welche Beitragskategorie ein Mitglied/Rolle hat
  • Import Mitglieder anpassen (angepasste Rollen/Kategorien verwenden)
    • Inkl. Specs
    • Beitragskategorie aus Import File übernehmen und nicht via Domain Logik bestimmen
  • Ticket #103 aktualisieren (Tech-Spec usw. mit Know-How aus diesem Ticket)
  • Manuell Testen
  • CHANGELOG entry

PEOPLE: Mitgliedernummer als Spalte in Exporten

Die Mitglied-Nr soll als Standard-Spalte in allen Exporten (Tabular, CSV, XLSX) vorhanden sein

Tech-Spec

  • Mitglied-Nr ist person#id (primary key)

ToDo

  • Anpassen Tabular Export
  • Manuelles Testen
  • CHANGELOG entry

GROUPS: Anpassungen Selbst-Registrierungsformular

Image

Alles im SAC Wagon, ausser wo explizit anders erwähnt.

  • Felder im Screenshot im Registrierungsformular exponieren
  • Zusätzliche Angaben als Textarea exponieren, ev. mit dem Titel "Bemerkungen"
  • Checkbox für Newsletter, welche bei Registrierung ein Tag vergibt
  • Neues Feld "Promocode" im Selbstregistrierungsformular anbieten
  • Autocompletion Adresse für Selbstregistrierungsformular (im Core)

PEOPLE: Onboarding / Selbstregistrierung (Prio 02.24)

Selbstregistrierung für Mitgliedschaft

Diese Teil des Epics beschreibt den Workflow für die Online-Beantragung der Mitgliedschaft für Neumitglieder.

Übergreifende Themen

Neuanmeldungen Sektion (Mitgliedschaft)

  • #281 Selbstregistrierungsformular Registrierung von 6jährigem Familienoberhaupt verhindern, unter 23 Jahren keine Familienmitglieder
  • #283 Bei Selbstregistrierung dürfen nicht mehr als 2 23-jährige oder älter (inkl. Haupt-Person) in der gleichen Familie sein
  • #289 Selbstregistrierung hitobito-DSE-Mechanismus für Sektionen
  • hitobito/hitobito#2404 Selbstregistrierung Hauptperson: Checkbox "Zustimmung Erziehungsberechtigte"
  • #288 Selbstregistrierung Promocode entfernen, Newsletter Checkbox soll nicht mehr ein Tag vergeben, sondern bei nicht aktivieren ein Opt-Out auf dem korrekten Abo auf dem Dachverband erstellen
  • #295 Selbstregistrierung ab zukünftigem Datum: Nur die eine nächste Option im gleichen Jahr anzeigen, und nicht wenn sie schon vorbei sind. Beschreibungs-Text auch abhängig vom Datum.
  • #299 Selbstregistrierungsformular Land Schweiz vorauswählen
  • #305
  • #298 Selbstregistrierung bis Schritt 4, dann Zurück, Zurück, Weiter, dann ist man wieder auf Schritt 4 statt 3
  • #284 Feature Specs für Selbstregistrierung
  • #293 People Liste: Auswählbare Spalte "Vordefinierter Eintrittsgrund" sollte "Eintrittsgrund" heissen
  • hitobito/hitobito#2426
  • hitobito/hitobito#2423
  • #339
  • #344
  • #411
  • #414
  • #415
  • #417
  • #418

In Abklärung / Konzeption

Selbstregistrierungen für Abo Magazin (Die Alpen)

Selbstregistrierung für Basiskonto

  • #297 Selbstregistrierung Fan-Accounts: Felder gleich wie bei "Die Alpen", aber nur Vorname, Name, Mailadresse, Geburtsdatum sind Pflichtfelder, keine Altersbeschränkung
  • #346

In Abklärung / Konzeption

  • Browser back button soll sich gleich verhalten wie "Zurück" link (Formulardaten bleiben erhalten)

Selbstregistrierung für Touren-Portal

Angrenzende Themen

  • #282 Selbstregistrierungslink auf Sektion/Ortsgruppe anzeigen

Erledigte Issues

  • #95
  • #97
  • #98
  • #103
  • #109
  • #112
  • #162
  • #164
  • #165
  • #166
  • #167
  • hitobito/hitobito#2281
  • #170
  • #168 Allerersten Schritt vorschalten der auf Login weiterleitet wenn Mail schon vergeben
  • #169 Formularfelder in Schritt 1 neu anordnen
  • #171 Hinweis auf Familienmitgliedschafts-Formular "Indem du weitere Personen hinzufügst..."
  • #101 Formular-Schritt Zusatzdaten, Bemerkungen, Newsletter und Datenschutzerklärung dorthin verschieben
  • #101 Schritt 1 umbenennen zu "E-Mail"
  • #103 #191 Aside-Hinweise basierend auf vorherigen Schritten
  • #103 Schritt Personendaten: Back Button fehlt
  • #103 Aside-Hinweise über Fragen zur Mitgliedschaft etc.
  • #188 Neue Spalten auf Neuanmeldungen-Personenliste (oder überall): Beitragskategorie, Stammsektion oder Zusatzsektion, Antragsdatum, Beitritt per, (Status Bezahlung), (Zahlart), Status E-Mail, Dublette, Wiedereintritt, Adresse gültig, Eintrittsgrund, Newsletter
  • #190 Adresse Auto-Vervollständigung aktivieren
  • #187 Tel Nr. Label: Haupt-Telefonnummer
  • #225 500er bei Participation#show
  • #235 Weisser Screen bei Beitritt Zusatzsektion
  • #236 Responsible Layout der Sidebar bei Selbstregistrierung und Selbsteinschreibung
  • #2350 Bei Neuregistrierung Duplikatserkennung ankicken
  • #232 Background Job für automatisierte Zuteilung von Neuanmeldungen, berücksichtigt verifizierte E-Mail, gültige neu erstellte Rolle, kein Duplikats-Status und in Zukunft bezahlte Rechnung

GROUPS: Erweiterung/Specs Sektions-Import

Import aus #73 soll mit folgenden Attributen/Attribut-Importen ergänzt werden:

  • Gründungsjahr (foundation_year), Gründungsjahr
  • Jugend Webseite (als neuer Social Account)
  • Kanton, enum mit allen 24 Kantonskürzel, Anzeige auf Group#show, Editierbar auf Group#edit, Spalte in Tabular (CSV, XLSX, ...)

Tech-Spec

ToDo

  • Gründungsjahr (foundation_year), Gründungsjahr
  • Jugend Webseite (als neuer Social Account)
  • Kanton, enum
  • Spec erstellen für Import Script
    • Werden Sektionen richtig angelegt

PEOPLE: Custom Attributes für Person

Nachfolgende Tabelle beschreibt die SAC spezifischen Attribute des Person Models:

Umsetzung erfolgt jeweils in Sub-Tickets

🟢 bereits vorhanden, wird implementiert
❌ wird nicht als Personen Attribut realisiert, wird nicht mehr benötigt
❓ Verwendung muss geklärt werden

Status Property Person Attribute/Association Computed Note
🟢 Mitgliedernummer id (pk) - Kontakt-Nr aus Navision unique und wird als Mitgliedernr verwendet, Sphinx index und suchbar machen, read-only: kann im UI nicht bearbeitet werden, wir nur angezeigt #89
Familien-Nr. - - via Familien #90, wir brauchen dieses Feld während des Imports um Familien zu identifizieren. Es wird gerade noch abgeklärt ob wir die bestehende Nr. importieren müssen oder einfach eine neue generieren können
Anredecode - - Wird vorerst nicht weiter verwendet
🟢 Nachname last_name -
🟢 Vorname first_name -
🟢 Adresse address - Hitobito hat standardmässig einfach nur ein Feld für die Adresse
🟢 Adresszusatz address -
🟢 Postfach address -
🟢 PLZ zip_code -
🟢 Ort town -
🟢 Länder-/Regionscode country -
🟢 Telefon phone_number -
🟢 Telefon direkt phone_number (direct) -
🟢 Mobiltelefon phone_number (mobile) -
🟢 E-Mail email -
🟢 Geburtsdatum birthday -
🟢 Geschlecht gender -
🟢 Sprachcode language -
Mitgliederart - - via Rolle
Sektion - - via Rolle
Sektionstext - - via Rolle
Kategorie - - via Rolle
Kategorietext - - via Rolle
Ehrenmitglied Sektion - - via Rolle
Begünstigter Sektion - - via Rolle
Letztes Austrittsdatum - - via Rollen / Personen Tab Verlauf
Letzter Austrittscode - - Austrittsgrund ggf. Auf Rolle? Als Notiz? Muss noch konzipiert werden
Eintrittsjahr - -r via Rollen / Personen Tab Verlauf
Letztes Eintrittsdatum - new: membership_entry_at via Rollen / Personen Tab Verlauf
Vereinsmitgliederjahre - new: membership_years Berechnung der Anzahl Jahre aufgrund mitgliedschaftsrelevanten Rolle (aktive, inaktive) #85
Eintrittscode - - Eintrittsgrund ggf. Auf Rolle? Als Notiz? Muss noch konzipiert werden
🟢 Eintrittscode Bezeichnung - - Eintrittsgrund #101
Anerkannter Tourenleiter - - via Qualifikation
Austrittscodetext - - ? Austrittsgrund ggf. Auf Rolle? Als Notiz? Muss noch konzipiert werden
Saldo ? ? Wird später mit Faktura zusammen konzipiert
Mahnstufe ? ? Wird später mit Faktura zusammen konzipiert
Letzte Rechnungsart ? ? Wird später mit Faktura zusammen konzipiert
Letzte Rechnungsnummer ? ? Wird später mit Faktura zusammen konzipiert
Letztes Rechnungsdatum ? ? Wird später mit Faktura zusammen konzipiert
Set Adressaufbereitung ? ? Wird später mit Faktura zusammen konzipiert
Stornos vorhanden ? ? Wird später mit Faktura zusammen konzipiert
Tagesfakturen vorhanden ? ? Wird später mit Faktura zusammen konzipiert
TL-Portal History vorhanden ? ?

https://saccas.atlassian.net/browse/HIT-4?atlOrigin=eyJpIjoiOGQxNjZhMjVhYTNhNDVhNmIxZmM0ZDQ3MTdiNjk3ODUiLCJwIjoiaiJ9

PEOPLE: Neuanmeldungen verwalten mit Rollen in der Zukunft

blocked by: #109

to discuss:
Beim Annehmen einer Neuanmeldung wird die Neuanmeldungsrolle gelöscht und stattdessen eine neue Rolle erstellt.
Die Gültigkeit einer Rolle wird anhand der Attribute created_at und deleted_at definiert.

  • Neuanmeldungen mit Gültigkeitsstart in der Zukunft müssen in diesem Prozess semantisch korrekt behandelt werden
  • Wie soll das Verhalten sein, wenn die Neuanmeldungsrolle ein Gültigkeitsstart in der Vergangenheit hat? Soll der Wert vom created_at übernommen werden, oder wird dieser auf die aktuelle Zeit gesetzt?

GROUPS: Faktura Stammdaten pro Kalenderjahr

Sobald #92 umgesetzt ist, soll es für die Faktura Attribute (mounted_attrs) möglich sein diese pro Kalendarjahr zu erfassen.

Mockup

Tech-Spec

ToDo

  • Erweiterung mounted_attr date range validity (core)
  • [ ]

PEOPLE: Import Script Sektionsmitglieder aus Navision

DRAFT !

update/adjust table

Navision Export Attribut Inhalt Hitobito Attribut
id (genauen Name klären) Unique Alabus Personen ID wird verwendet um die Person in Hitobito zu assignen (person#alabus_id)
Abo1End Abo Ende d.o. Rolle Group::Mitglieder::MagazinAbonnent, :deleted_at
Abo1Number Abonummer Magazin Person#magazin_abo_number #16
Abo1 Print-Abo, Kombi-Abo Tag auf Person abo:print, abo:kombi
PrimaryCategory Einzel, Doppelmitglied category:Einzel, category:Doppelmitglied
MemberEntryDate Eintrittsdatum Aktivmitglied#created_at
MemberExitDate Austrittsdatum Aktivmitglied#deleted_at
PrimaryCommChannel Tag Newsletter falls Wert Newsletter in Exportspalte
NameAddOn weitere Person im gleichen Haushalt Neues Attribut auf Person#name_add_on, string, null: true,
Title Titel Person neues Attribut title auf Person
PrimaryAddressCountryLICTranslated Land z.B. Schweiz, immer deutsche Bezeichnung person#country, default: CH

ToDo

  • navision_id auf person hinzufügen falls nicht bereits geschehen (string, validates uniqueness, nil: true)

PEOPLE: Selbstregistrierungsformular Preis Info Anmeldung ab

blocked by: #97, #191, Preisberechnungslogik ERP

Automatische Anzeige des zu bezahlenden Beitrags

  • Je nach gewählter Option soll die Höhe des angezeigten Beitrags dynamisch angepasst werden.

Höhe der Beiträge und Reduktion

  • Der zu zahlende Jahresbeitrag ist abhängig von der gewählten SAC Sektion
  • Bei Eintritt ab 01. Juli wird der Jahresbeitrag für das laufende Jahr halbiert 50%
    • dies gilt auch wenn das neue Mitglied sich nach dem 01. Juli über die Option "per sofort" anmeldet
  • Bei Eintritt ab 01. Oktober wird der Jahresbeitrag für das laufende Jahr vollständig reduziert 100%
    • dies gilt auch wenn das neue Mitglied sich nach dem 01. Oktober über die Option "per sofort" anmeldet

PEOPLE: Selbstregistrierungsformular Anmeldung ab

Blocked by: #95, hitobito/hitobito#2237
Siehe auch #109

Eine neue Anmeldung beim SAC erfolgt per sofort, per 1. Juli oder per 1. Oktober. Je nach gewähltem Eintrittsdatum wird der zu bezahlende Jahresbeitrag fürs laufende Jahr reduziert.

Dies soll auch beim Selbstregistrierungsformular berücksichtigt werden.

Mockup

Siehe #95 das PDF mit allen Mockups und UI Prototyp unter Schritt 3 "Zusatzdaten"

Was wann anzeigen

  • Wenn sich Jemand am 02. Juli registriert, dann kann er/sie die Option ab 01. Juli nicht mehr auswählen. Es stehen dann nur noch die Optionen per sofort und per 01. Oktober zu verfügung.
  • Entsprechendes Verhalten bei Registrierung nach dem 01. Oktober

Preisinformationen/Rabatte werden mit #115 umgesetzt

Neuanmeldungen Auflisten

In den beiden Grupen Neuanmeldungen NV und Neuanmeldungen Sektion sollen die Rollen mit Datum in der Zukunft aufgelistet werden. Ausserdem sollen diese Rollen auf der Person und dem Verlauftab der Person sichtbar sein.

Ausserdem gibt es auf dem root_layer einen Filter welche sämtlichen Neuanmeldungen sämtlicher Sektionen auflistet. Dort sollen diese Rollen ebenfalls sichtbar sein.

Tech-Spec

Core

Mit diesem Ticket sollen Rollen mit Startdatum in der Zukunft eingeführt werden. Dazu soll wie bereits mit End Datum in der Zukunft.

  • Neue Attribute convert_on auf der Rolle, neues class_attribute convert_to auf der Rolle
  • DelayedJob welcher die Rollen mit convert_to durcharbeitet und role entries erstellt
  • class_attribute :list_people_with_future_roles, default: false
    • wenn gesetzt, werden in der Listenansicht und auch bei Exporten die Personen mit künftigen Rollen aufgelistet
  • Personen mit künftigen Rollen können via globalem Suchfeld gesucht werden

SAC Wagon

  • In allen Neuanmeldungen Gruppen sollen auch Rolleneinträge mit Startdatum in Zukunft angezeigt werden

ToDo

  • Zukünftige Rolle ohne Callbacks erfassen
  • Zukünftige Rolle als eigene Sektion auf der Personen Seite anzeigen
  • Zukünftige Rolle als eigene Sektion auf dem Verlauf der Person anzeigen (ev. in eigener Sektion)

Grundpaket: Epic Basissystem für SAC

Ziel: Aufbau Grundpaket/Umgebung für den SAC

Inhalt:

  • Neues Repo erstellen: hitobito_kunde About ergänzen
  • Hauptbranch ist zur Zeit main ggf noch umbenennen
  • Wagon erstellen #4
  • Setup der Integrationsumgebung #2
  • Gruppenstruktur, Rollen, Berechtigungen #5
  • Visuelle Anpassungen #6
  • Resourcen bestellen bei /sys
  • Mehrsprachigkeit #7
  • ~~Produktionsumgebung #3 ~~
  • Github Actions
  • DNS Einstellungen Kundenseite
  • Wartung und Support

PEOPLE: Familien abbilden/validieren

Beim SAC sind Familien wiefolgt definiert:

für max. 2 Erwachsene und beliebig viele Kinder im Alter zwischen 6 und 17 Jahren.

Die Familienmitgliedschaft ist auch für Paare ohne Kinder möglich. Eine Person wird als Hauptkontakt definiert.
  • Erwachsene in einer Familie sind mind. 22 Jahre alt, Kinder zwischen 6-17 Jahre
  • wie lässt sich der Hauptkontakt abbilden? Braucht es das überhaupt noch? kann das nicht einer der beiden Erwachsenen sein Braucht es vorerst nicht
  • Jede Familie braucht eine eindeutige Familen-ID welche auch z.b. in Tabular/CSV/XLSX usw. mit exportiert wird
    • Familien ID aus Haushalts-ID ableiten, z.b. wird aus 4242 -> F4242
    • Familien ID auf Person nur anzeigen in Exporten (tabular) falls Person eine aktive Mitglied Rolle mit Beitragskategorie 'familie' hat
  • https://github.com/hitobito/hitobito_sac_cas/blob/master/app/domain/sac_cas/beitragskategorie/calculator.rb
  • Beitragskategorie 'familie' ist nur möglich auf Hauptsektion (primary_group)
  • Anpassen mitglieder_import sodass Familien beim Import richtig erstellt werden
  • Es soll sichergestellt werden das diese Validierung im Selbstregistrierungsformular gemacht wird und der Benutzer entsprechend informiert wird. Die Validierung soll auch bereits aktiv im UI stattfinden, sodass ein Benutzer z.b. gar kein Kind das jünger als 6 Jahre ist erfassen kann. blocked_by #95

Tech-Spec

  • Umsetzung im SAC Wagon
  • Erwachsene sind Personen die mind. 22 Jahre alt sind
  • PartnerIn wird als wohnt im Haushalt mit abgebildet
    • Im SAC Wagon Validierung einführen das max. 2 Erwachsene Personen in einem Haushalt sein können
    • Im SAC Wagon bei der Selbstregistrierung Validierung einführen das max. 2 Erwachsene Personen gleichzeitig registriert werden können (via SAC-Haushalts-Registration) -> blocked by #95, daher in einem Follow-up Issue umsetzen
    • Im SAC Wagon auf Rolle Mitglied/Neuanmeldung validieren, dass maximal 2 (erwachsene) Personen (Rollen) im selben Haushalt die Beitragskategorie "familie" haben können
    • Es können beliebig viele Kinder dem Haushalt hinzugefügt werden
    • Auch WGs können als Familienmitgliedschaften geführt werden
    • Auch Personen zwischen 17 und 22 Jahren können im Haushalt sein. Aber diese bekommen halt keine Familien-Beitragskategorie. Das selbe gilt die 3. Erwachsene, diese erhält dann die Beitragskategorie 'einzel'
  • Immer nur die aktiven Rollen für die Berechnung der Beitragskategorie berücksichtigen (Beitragskategorie wird einfach beim erstellen der Rolle assigned/validiert)
  • Kinder in einem Haushalt werden automatisch als Elternzugangsfeature-Kinder hinzugefügt (im SAC Wagon)
  • Im SAC Wagon können Kinder nicht direkt via Kinder hinzugefügt werden (ausblenden Form-Elemente)
  • Kinder werden parallel allen Erwachsenen in einer Familie assigned/entfernt
  • Hitobito Familienmitglieder-Feature wird für den SAC nicht verwendet (relations_to_tails)
  • https://github.com/hitobito/hitobito/blob/master/app/domain/person/household.rb
  • Beitragskategorie Familie ist nur möglich auf Rolle Mitglied der Hauptsektion (primary_group), siehe #106
  • https://github.com/hitobito/hitobito_sac_cas/blob/master/lib/hitobito_sac_cas/import/sektion/mitglieder_importer.rb
  • Beitragskategorien sind möglich auf den Rollen Mitglied/Neuanmeldung, diese beiden Rollen werden vorerst gleich behandelt
  • Familien ID auf person#show als Attribut sowie im json:api anzeigen (read-only)

ToDo

  • Haushalts-Domainklasse Person::Household im Wagon anpassen um Elternzugang und Haushalte zu linken
    • Nach Bedarf Methoden assign save, remove anpassen
  • Familien-ID als weitere Spalte (table_displays im wagon.rb) anbieten
  • In Tabular Personen Exports die Haushalts-ID mit ausgeben
  • In der neuen JSON:API die Haushalts-ID mit ausgeben (read-only)
  • Manuelle Elternzugangs-Zuweisung auf Formular deaktivieren, vorzugsweise via Entziehen der Berechtigung :change_managers
  • Auf Rolle validieren, dass maximal 2 (erwachsene) Personen (Rollen) im selben Haushalt die Beitragskategorie "familie" haben können, Familie ist nur auf Hauptsektion möglich
  • Im Mitglieder Sektion Personen-Import die alte Spalte "Familien-ID" verwenden, um Personen in Haushalte zusammenzufügen. Erwartungsgemäss dürften dabei keine Haushalte mit mehr als 2 Erwachsenen entstehen, die Validierungen auf der Rollen stellen dies auch gleich sicher
  • youth wagon als dependency im Gemfile hinzufügen
  • manuelles Testen
  • CHANGELOG entry

PEOPLE: Selbstregistrierungsformular und Beitragskategorie

blocked by #95, #102

Transparenz über zu bezahlende Beträge

Bei der Neuanmeldung im SAC müssen die neuen Mitglieder einen Jahresbeitrag sowie eine einmalige Anmeldegebühr bezahlen. Damit für die User klar ist, wieviel sie bezahlen werden müssen, sollen die zu bezahlenden Beträge während der Anmeldung im Selbstregistrierungsformular jederzeit ersichtlich sein.

Höhe der Beiträge

Die Höhe der zu bezahlenden Beiträge ist abhängig von:

  • Der ausgewählten Sektion, zu welcher der User beitreten will
  • Der Zeitpunkt im Jahr, ab dem die Mitgliedschaft gelten soll, vgl. "Beitritt per" in #97
  • Die Art der Mitgliedschaft (Jugend/Einzel/Familie), vgl. #95
  • Einem allfälligen Promocode

Dynamische Anzeige der Beträge

-> dies wird im separaten Issue #191 behandelt
Die im Formular angezeigten Beträge sollen sich dynamisch verändern, je nachdem was der User für Informationen angibt.

  • z.B. Je nach eingegebenem Geburtsdatum in Schritt 1 ändert sich der Jahresbeitrag. Üblicherweise passiert dies, wenn der User das Input-Feld für das Datum "verlässt" (onFocusLeave oder ähnlich)
  • Oder z.B. wenn der User in Schritt zwei eine Person hinzufügt, soll sich die Mitgliedschaft sofort ändern zu einer Familienmitgliedschaft und die angezeigten Beträge sollen ebenfalls sofort ändern.

Mockup

Screenshot 2023-12-12 at 16-42-35 SAC Hitobito Balsamiq-Mockups pdf
Quelle: https://raw.githubusercontent.com/hitobito/hitobito_sac_cas/master/doc/SAC%20Hitobito%20Balsamiq-Mockups.pdf#page=5

Tech-Spec

  • Umsetzung im SAC Wagon
  • Die Höhe der Beiträge wird von einer Domainklasse berechnet. Das überarbeiten wir noch einmal wenn mit dem ERP die Beitragsberechnung pro Sektion umgesetzt wird. Bis dahin einfach mal Dummy-Daten anzeigen.
  • Die genauen Texte werden noch vom SAC geliefert.
  • Auf Mobile soll das Aside, ähnlich wie es sonst schon in hitobito ist, einfach unter das Formular rutschen

ToDo

  • Aside anlegen (in jedem Formularschritt ab Schritt 2)
  • Informationen gemäss Mockup anzeigen
  • Wenn wir gerade dran sind, im Familienmitglieder-Schritt einen Back-Link neben dem Submit Button ergänzen, gleich wie es bei allen anderen Schritten der Fall ist
  • Kunde wegen Übersetzungen informieren

Grundpaket: Basis-Setup für Kurse/Events

nachdem wir mit hitobito_sac_cas#5 eine erste Gruppenstruktur definiert und umgesetzt haben, soll mit diesem Ticket noch die Events/Kurse usw. definiert werden.

ToDo

  • Definieren auf welchen Layern/Gruppen welche Event Typen konfiguriert werden
  • Seeder/Fixtures entsprechend anpassen

PEOPLE: Anpassung Gruppe Neuanmeldungen

Nachdem der Onboarding Prozess weiter spezifiziert wurde, sind folgende Anpassungen an den Gruppen und Importscripts nötig:

Gruppen Neuanmeldungen

  • Group::SektionsNeuMitgliederSektion -> Group::SektionsNeuanmeldungenSektion renamen, übersetzung: Neuanmeldungen (zur Freigabe) / Nouvelles inscriptions (pour contrôler)
  • Group::SektionsNeuMitgliederZv -> Group::SektionsNeuanmeldungenNv renamen, übersetzung: Neuanmeldungen / Nouvelles inscriptions
  • Damit wir nur noch den Begriff Neuanmeldung verwenden
  • Neu gibt es nur noch eine Rolle 'Neuanmeldung' anstatt Einzel, Familie, Jugend
  • Titel des Selbstregistrierungs-Formulars: 'Registrierung SAC Blüemlisalp' (Registrierung sektion.name)
    • custom_self_registration_title ist eine Group Translation, Franz übersetzung

Vordefinierter Filter auf dem top_layer 'Neuanmeldungen' welcher sämtliche neu angemeldeten Personen auflistet (in Gruppen SektionsNeuanmeldungenNv)

image

Tech-Spec

ToDo

  • Renamen der Neuanmeldungsgruppen inkl. Keys im locale
  • Neue Rolle Neuanmeldung, Entfernen: Einzel, Jugend, Familie (inkl. locales)
  • Tests fixen, Fixtures anpassen, Development Seeders anpassen
  • Vordefinierter Personen Filter auf top_layer
  • Import-Script Sektionen entsprechend anpassen
    • verwenden richtige STI Gruppen Klasse
    • custom_self_registration_title group translation ergänzen
    • self_registration_role_type auf jeder Neuanmeldungen Gruppe wird auf Neuanmeldung gesetzt
  • Spec für den Import-Script Sektionen: Neuanmeldungen Gruppen werden richtig angelegt
  • Gruppen Struktur neu dokumentieren: https://github.com/hitobito/hitobito_sac_cas/blob/master/README.md

PEOPLE: Eintrittsgründe Verwalten

Neue CRUD Tabelle unter Einstellungen: Eintrittsgründe

siehe auch #101

Tech-Spec

  • Neues Model: SelfRegistrationReason, self_registration_reasons

    • translates text, string (globalize gem)
  • Auf Model Person:

    • Neues Feld: self_registration_reason_custom_text, string, null: true, length: 100 chars, anzeigen auf Person#show falls gesetzt
    • self_registration_reason_id, belongs_to: :self_registration, attr_readonly, anzeigen auf Person#show falls gesetzt, nicht editierbar
  • Entweder self_registration_reason_custom_text oder self_registration_reason#text anzeigen, ggf. Validierung das nicht beide gesetzt sein können

  • Falls mind. 1 self_registration_reason global erfasst, wird dieses Feature aktiv (feature toggle)

  • Texte unten in den Kommentaren als seeds im SAC wagon

Grundpaket: Gruppenstruktur, Rollen, Berechtigungen

  • Gruppen
  • Rollen
  • Seeds anpassen
  • Fixtures anpassen
  • Basis-Specs sicherstellen
  • Gruppenstruktur in der Integration seeden

Vorschlag:
https://gist.github.com/olibrian/01cc98da04e6a00e86ef9790586fa68b?permalink_comment_id=3965897#gistcomment-3965897

See: #1

**Zentralverband**
    Externe Kontakte
        Kontakt: []
    Ressort:
      Mitarbeiter: []
      Leitung: []
      Mitgliederdienst: [:layer_and_below_full]
      Rechnungswesen: [:layer_and_below_full, :finance]
      IT-Support: [:layer_and_below_full, :admin]

 **Sektion**
      Kontaktperson: [:contact_data]
      Mitglieder
        Mitglied: [], basic_permissions_only = true
        Ehrenmitglied: [], basic_permissions_only = true
        Begünstigte: [], basic_permissions_only = true
        Interessent: [], basic_permissions_only = true
      Tourenkommission:
        Tourenchef: [:contact_data]
        Tourenleiter: []
      Vorstand
        Präsident: [:layer_and_below_read, :contact_data]
        Vizepräsident:  [:layer_and_below_read, :contact_data]
        Kassier: [:layer_and_below_full, :contact_data, :finance]
        Hüttenchef:  []
        Sekretär: [:layer_and_below_full, :contact_data]
        Mitgliederdienst: [:layer_and_below_full, :contact_data]
        Vorstandsmitglied: [:layer_and_below_read, :contact_data]
        Beisitzer: [:layer_read]
     Hüttenkommission: 
        Hüttenchef: [:group_and_below_full]
        Hütte:
           Hüttenwart: [:group_full]
           Hüttenwartspartner: [:group_full]
           Mitarbeiter: []
           Hüttenbetreuer: []
           Hüttenobmann: []
           

PEOPLE: Digitaler Mitglieder-Ausweis als Tech-Demo

Für den SKV haben wir bereits einen digitalen Mitgliederausweis umgesetzt.

Als Tech-Demo soll dieser in einer minimalen Variante ebenfalls für den sac-cas Wagon übernommen werden.

  • Download Mitgliederausweis als PDF auf dem Personen-Profil mit QR Code, Anzahl Mitgliederjahre
  • Beim Verify Endpoint werden folgende Infos angezeigt: Name, Vorname, Foto, Mitgliedschaft gültig ja/nein, Auflistung der Rollen in Mitglieder: Einzel, Jugend, Familie aller Sektionen der Person, Anzahl Mitgliederjahre
  • Um zu prüfen ob eine Person eine gültige Mitgliedschaft hat, muss sie einfach einer der folgenden, aktiven Rollen haben: Einzel, Jugend, Familie (Familienmitglieder, usw. werden noch nicht berücksichtigt)
  • SAC Logo
  • Anzeige Sponsoren auf Mitgliederausweis (siehe sac-cas.ch)

Tech-Spec

ToDo

  • Verify Token als DB Spalte einfügen
  • Mitgliederausweis rendern
    • Controller
    • Renderer
  • Mitglieder Verify Controller
  • Specs
  • Manuell testen
  • Changelog Eintrag

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.