Handling of event addons
This commit is contained in:
@@ -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 = [];
|
||||
|
||||
Reference in New Issue
Block a user