Massenmanipulationen auf Personenlisten


#1

Massenoperationen auf Personen

Wenn man von mehreren Personen mutieren will, führt das zu sehr vielen Klicks. Dies soll mit Massenoperationen verbessert werden. Konkret geht es vor allem folgende Fälle

  • Mehrere Personen auswählen und in eine andere Gruppe verschieben, evtl. mit einer neuen Rolle.
  • Mehrere Personen auswählen und deren Rolle entfernen.
  • Mehrere Personen zu einem bestehenden Anlass hinzufügen.

Idealerweise soll das auf allen Personenlisten, inkl Teilnahmelisten von Anlässen funktionieren. Das Bedürfnisse von Insieme Lager inkl. Teilnehmer kopieren zu können, soll auch dadurch abgedeckt werden können.

Hierzu folgen Mockups und Github Issues, die genauer beschreiben, was hier geplant ist. Wenn alles etwas stärker spezifiziert wird, werden wir eine Schätzung zu den Kosten machen.


Erweiterungen 2018
#2

Github Issues zum Thema sind hier:

Eine grosse Herausforderung sind sicher all die verschiedenen Situationen die erfolgen können, ich schlage folgendes Verhalten vor:

1. Einfaches Verschieben

  • Ursprungsgruppe und Zielgruppe haben denselben Gruppentyp
  • Jede Person hat nur eine Rolle

-> kein Problem,

2. Verschieben von Personen mit mehreren Rollen

  • Ursprungsgruppe und Zielgruppe haben denselben Gruppentyp
  • Personen haben 2 oder mehr Rollen in der Ursprungsgruppe

-> Wir verschieben alle Rollen? Wenn ja, dann auch kein Problem

3. Verschieben in anderen Gruppentyp

  • Ursprungsrolle und Zielgruppe haben anderen Gruppentyp, also auch andere Rollen
  • Personen haben nur eine Rolle

-> Ich muss für die neue Gruppenzuordnung ein Rolle auswählen.

4. Verschieben in anderen Gruppentyp mit mehreren Rollen

  • Ursprungsrolle und Zielgruppe haben anderen Gruppentyp, also auch andere Rollen
  • Personen haben mehrere Rollen in Ursprungsgruppe

-> Wir löschen alle Rolle in der Ursprungsgruppe und wählen eine neue Rolle für der Zielgruppe.

Verschieben ausgehend von einer Personenliste mit Personen aus verschiedenen Gruppen

Die oben stehenden Fälle lassen sich wohl so abbilden, dass es erwartungsgemäss funktioniert.
Jetzt gibt es aber den Fall, dass wir nicht von einer Gruppe ausgehen, sondern von einer Personenliste, wo Personen aus verschiedenen Untergruppen / Unterebenen angezeigt werden.

5. Personen aus Untergruppen mit gleichem Typ mit einer Rolle

  • Ursprungsgruppen und Zielgruppe haben denselben Gruppentyp
  • Personen haben nur eine Rolle in den ausgewählten Gruppen

-> Wir löschen die bestehenden Rollen und wählen die gleiche Rolle in der Zielgruppe hinzu. Also hier kein Problem

6. Personen aus Untergruppen mit unterschiedlichem Type mit einer Rolle

  • Ursprungsgruppen und Zielgruppe haben anderen Gruppentyp
  • Personen haben nur eine Rolle in den ausgewählten Gruppen

-> Löschen der bisherigen Rollen, Zuweisung einer neuen Rolle, die gewählt werden muss.

7. Personen mit mehreren Rollen vom gleichem Typ mit einer Rolle

  • Ursprungsgruppen und Zielgruppe haben gleichen Gruppentyp
  • Personen haben mehrere Rollen in den ausgewählten Gruppen

-> Löschen aller bisherigen Rollen in den Gruppen, Zuweisung neuer gewählter mit den gleichen Rollen, wie in der Ursprungsgruppe.

8. Maximale Komplexität: Personen mit mehreren Rollen in verschiedenen Gruppentypen, Verschiebung in anderen Gruppentyp

Die maximale Möglichkeit an Komplexität:

  • Ich erstelle einen Filter für alle Personen mit allen Personen mit der Rolle Vorstand::Präsident und Mitglieder::Aktivmitglied
  • Person A ist Präsident im Vorstand und Aktivmitglied.
  • Person A ist zudem Sekretär im Vorstand. Diese Rolle wird auch in der Liste angezeigt.

Wenn ich diese Person, verschiebe. Soll dann die Rolle Sekretär im Vorstand auch gelöscht werden oder nicht? Was wäre hier zu erwarten?

Grundsatzfrage: Verschieben wir Rollen oder Personen?

Fall 8 illustriert die Herausforderung, wenn wir in solchen Fällen die Rolle Sekretär nicht verschieben, dann führt das zu inkonsistentem Verhalten wenn wir es mit Fall 2 vergleichen:

  • Ich bin auf einer Gruppe Vorstand Person A hat Rolle Präsident und Sekretär. Ich verschiebe ihn -> erwarte dass beide Rollen gelöscht werden.
  • Ich mache einen Filter auf der Gruppe Vorstand um nur den Präsidenten zu sehen. Wenn ich ihn auswähle und verschiebe, dann lösche ich nur die Präsidentenrolle?

Was entspricht eher dem erwarteten Verhalten?

  • Ich lösche immer alle Rollen von den Gruppen, die ich ausgewählt habe?
  • Ich lösche immer nur die Rollen die gemäss Filter ausgewählt sind?

Das Problem entsteht immer dann, wenn eine Person mehrere Rollen hat. Vielleicht ist es am einfachsten, diese Personen einfach nicht zu verschieben und dann nachher manuell ganz normal abhandeln zu lassen.

Oder wir sind etwas grosszügiger und verschieben Personen mit mehreren Rollen, aber nur, wenn die Rollen in derselben Gruppe sind.

Oder wir fragen explizit, was gemacht werden soll. Aber dann müsste man das fast pro Person tun, das ist sicher etwas aufwändiger.

Personen nicht verschieben:

Zu löschende Rollen auswählen

Sicher wird man in den meisten Fällen diese Probleme nicht haben, aber wir müssen schauen, wir wir es konsistent abhandeln. Auf eine nachvollziehbare Weise, ohne grosse Überraschungen.


#3

Ich denke es ist eine Frage, welche Use Cases wir lösen wollen. Für den Use Case der mir (in der Pfadi) bisher am meisten begegnet ist, nämlich der Übertritt von mehreren Personen in eine neue Gruppe, passt die vorgeschlagene Lösung noch nicht ganz.

Zur Grundsatzfrage: In den allermeisten Fällen würde ich die Funktion benützen, um Rollen zu verschieben, nicht Personen. Wenn jemand in einem Jugendverband mehrere Rollen in einer (oder mehreren) Gruppen hat, dann weil er mehrere Ämter in diesen Gruppen übernimmt (Ausnahme: Weil er in Hitobito zusätzlich zur Gruppenleiter-Rolle noch die Adressverwalter-Rolle braucht). Beim Gruppenwechsel / Gruppe aufteilen / Übertritt will ich jeweils aber nur Rollenweise verschieben.

Untenstehend mein Vorschlag für den Workflow.

  1. Auswahl der zu manipulierenden Personen
    Sinnvoll wären sicher Rollen- und Qualifikationenfilter, Altersfilter (wichtig), aber auch manuelle Checkboxes o.ä., und auch die Kombination dieser Optionen. Oft werden nicht blind alle Leute mit einem Jahrgang in die gleiche neue Gruppe verschoben, sondern eine spezifische Auswahl an Leuten (bzw. die Leute mit einem bestimmten Jahrgang werden auf zwei neue Gruppen aufgeteilt, etc.). Das Resultat kann also eine beliebige temporäre Liste von Leuten aus verschiedenen Untergruppen mit verschiedenen Gruppentypen und verschiedenen Rollen sein.

  2. Auswahl der Ziel-Gruppe und Rolle
    Hier wird genau eine Gruppe und eine Rolle ausgewählt, wie auch von dir vorgeschlagen. Mehrere Zielrollen wären zwar denkbar und sollten nicht allzu schwer zu implementieren sein, aber mir fällt dafür kein typischer Use Case ein. Eine vorgeschlagene Zielrolle wäre zwar in gewissen Fällen via educated guess möglich (wenn alle Personen dieselbe Quell-Rolle haben und diese auch auf der Ziel-Gruppe existiert), aber ich denke nicht dass sich hier der Programmieraufwand lohnt für eine dermassen kleine Usability-Verbesserung. Da sollte man eher zuerst das Vorschlagen von einer Default-Rolle beim Erfassen von neuen Personen in Gruppen implementieren.

  3. Auswahl, was mit den Rollen in den Quell-Gruppen passieren soll
    Auswahl pro vorhandene Rolle in der gesamten ausgewählten Personenliste (und mit Anzahl zu verschiebende Personen die diese Rolle haben). Text bspw. “Rolle [Rollenname] in alter Gruppe / alten Gruppen löschen (x Personen)”. Eine Checkbox pro Rolle und Person wird schnell mal zu aufwändig wenn man viele Personen verschiebt, bzw. müsste dann wieder Pagination eingebaut werden. Eine Auswahl pro Gruppe und Rolle (“Leiterrollen in Gruppe A löschen”, “Leiterrollen in Gruppe B löschen”) wäre möglich, aber für die mir bekannten Use Cases nicht nötig. Daher wäre diese “Einschränkung” (eine Checkbox pro vorhandene Rolle mit Count) aus meiner Sicht ok, und passt auch zum m.E. oft für den User möglichst simpel gehaltenen Verhalten von hitobito.

Die maximale Komplexität kann mit diesem Vorschlag abgehandelt werden. Die drei bestimmenden Faktoren:

  • Verschiedene Quell-Gruppen: Wird in Schritt 1 behandelt.
  • Verschiedene Quell-Rollen: Wird in Schritt 3 behandelt.
  • Unterschiedlicher Ziel-Gruppentyp: Ist kein Problem, da die Quell- und die Ziel-Rolle meistens keinen (bisher in der Datenbank abgebildeten) Zusammenhang haben. Insbesondere ist die Ziel-Rolle in vielen Use Cases nicht gleich wie die Quell-Rolle(n). Die Ziel-Rolle wird manuell in Schritt 2 ausgewählt.

Wie seht ihr das?
Liebe Grüsse
Carlo / Cosinus


#4

@gloggi Danke fürs Mitdenken.

1. Schritt Auswahl der Personen
…ist nicht ein Problem an sich. Nur ist die Frage, ob die Auswahlart einen Einfluss darauf hat, welche Rolle wir für das Löschen berücksichtigen. Da ein Filter ja über mehrere Gruppen und Rollen hinweg gehen kann.

2. Zielrolle/Zielgruppe
Einverstanden, macht nur Sinn eine auszuwählen. Unabhängig davon dafür aber einen Standard zu setzen wäre eh sinnvoll, habe dazu ein Issue erstellt.

3. Auswahl was mit alten Rollen passiert.

Ah jetzt beim dritten Mal durchlesen, habe ich verstanden (nicht weil du unklar geschrieben hast, sondern weil ich noch zu sehr an anderen Lösung herumgedacht habe). Ja eine Sammlung von Rollen mit Counts zum Löschen fände ich nachvollziehbar.

Die Frage ist dann noch welche Rollen in diesem Dialog angezeigt würden, ich würde meinen:

  • Nur Rollen anzeigen, welche mindestens eine Person der Auswahl hat.
  • Nur Rollen anzeigen, welche im Scope des aktuellen Filters sind.

Mit letzteren meine ich:

Abteilung X
   Gruppe Y
      Subgruppe Z

Ich habe von Gruppe Y aus einen Filter erstellt, wähle Rollen Leitung und Mitglied auch von Subgruppen.

Person A in der Auswahl hat auch eine Rolle Admin direkt unter Abteilung X. Dann kommen beim Löschen die Rollen die Auswahl für alle Rollen, die in Gruppe Y bestehen, also z. B. auch Adressverantwortlicher (welche nicht im Filter ausgewählt wurde).

Wir könnten dann nur die Rollen vorausgewählt haben, welche gemäss Filter ausgewählt wurden (aber das ist wohl nice to have).

Tönt jetzt alles furchtbar kompliziert, aber ich glaube das funktioniert ganz gut so.

Danke fürs Mitdenken, das hat für mich grad einen Knopf gelöst.