Zahlungsparser

This commit is contained in:
2026-09-09 16:55:08 +02:00
parent ae13841699
commit 651b6147bf
38 changed files with 3308 additions and 22 deletions
@@ -6,6 +6,7 @@ use App\Enumerations\EatingHabit;
use App\Models\Event;
use App\Models\EventParticipant;
use Illuminate\Http\Request;
use Illuminate\Support\Collection;
class EventParticipantRepository {
public function getForList(Event $event, Request $request, bool $signedOffParticipants = false) : array {
@@ -39,6 +40,39 @@ class EventParticipantRepository {
return $participant;
}
/**
* Anmeldungen, gegen die ein Zahlungseingang zugeordnet werden kann.
*
* Abgemeldete sind ausdrücklich dabei: Wer den Beitrag überwiesen und sich danach abgemeldet hat,
* steht trotzdem im Kontoauszug. Die Zahlung muss erfasst werden -- erst dann gibt es überhaupt
* etwas zu erstatten. Ließe man sie hier weg, bliebe der Eingang unzuordenbar und das Geld läge
* unbemerkt auf dem Konto.
*
* `event.paymentMethods` wird mitgeladen, weil die Zuordnung je Anmeldung das Zahlungsmodul
* auflöst und das sonst pro Zeile eine Abfrage wäre.
*
* @return \Illuminate\Support\Collection<int, EventParticipant>
*/
public function getForPaymentMatching(Event $event) : Collection {
return $event->participants()
->with('event.paymentMethods')
->orderBy('lastname')
->orderBy('firstname')
->get();
}
/**
* Eine Anmeldung dieser Veranstaltung -- der Identifier kommt beim Zahlungsimport aus dem Browser
* und wird deshalb hier gegen die Aktion geprüft. Der Tenant-Filter kommt vom SiteScope.
*
* Abgemeldete eingeschlossen, aus demselben Grund wie in {@see getForPaymentMatching()}.
*/
public function findInEventByIdentifier(Event $event, string $identifier) : ?EventParticipant {
return EventParticipant::where('identifier', $identifier)
->where('event_id', $event->id)
->first();
}
public function groupByLocalGroup(Event $event, Request $request, ?string $filter = null) : array {
$allParticipants = $this->getForList($event, $request);
$participants = [];