+ Für diese Veranstaltung sind noch keine Zusatzoptionen angelegt. Sobald du unter
+ Übersicht → Zusatzoptionen Zusätze definierst, werden die Teilnehmenden hier nach
+ ihren gebuchten Zusätzen gruppiert.
+
+
+
+
+
+
diff --git a/app/Repositories/EventParticipantRepository.php b/app/Repositories/EventParticipantRepository.php
index ea184ab..efba1e6 100644
--- a/app/Repositories/EventParticipantRepository.php
+++ b/app/Repositories/EventParticipantRepository.php
@@ -141,6 +141,44 @@ class EventParticipantRepository {
return $groups;
}
+ /**
+ * Gruppiert die (aktiven) Teilnehmenden nach ihren gebuchten Zusätzen (Event-Addons). Da Addons Ja/Nein
+ * sind, entsteht eine Gruppe je Zusatz (Überschrift = Addon-Titel) mit den Teilnehmenden, die ihn gebucht
+ * haben; ein Teilnehmer kann in mehreren Gruppen auftauchen. Nur nicht-leere Gruppen. Die Reihenfolge folgt
+ * der Event-Definition; nachträglich entfernte Addons werden über den Snapshot-Titel weiterhin abgedeckt.
+ */
+ public function groupByAddon(Event $event, Request $request, ?string $filter = null): array
+ {
+ $allParticipants = $this->getForList($event, $request);
+
+ // Gruppen-Reihenfolge aus der Event-Definition vorbelegen (leere Gruppen werden am Ende verworfen).
+ $groups = [];
+ foreach ($event->addons ?? [] as $addon) {
+ $title = $addon['title'] ?? ($addon['key'] ?? null);
+ if ($title !== null) {
+ $groups[$title] = [];
+ }
+ }
+
+ foreach ($allParticipants as $participant) {
+ foreach ($participant['selectedAddons'] ?? [] as $selectedAddon) {
+ $title = $selectedAddon['title'] ?? ($selectedAddon['addonKey'] ?? null);
+ if ($title === null) {
+ continue;
+ }
+ $groups[$title][] = $participant;
+ }
+ }
+
+ $groups = array_filter($groups, fn($group) => count($group) > 0);
+
+ if ($filter !== null) {
+ return array_key_exists($filter, $groups) ? [$filter => $groups[$filter]] : [];
+ }
+
+ return $groups;
+ }
+
public function getSignedOffParticipants(Event $event, Request $request, ?string $filter = null) : array {
$allParticipants = $this->getForList($event, $request, true);
$participants = [];