47 lines
1.8 KiB
PHP
47 lines
1.8 KiB
PHP
<?php
|
|
|
|
namespace App\Domains\Event\Controllers;
|
|
|
|
use App\RelationModels\EventParticipationFee;
|
|
use App\Scopes\CommonController;
|
|
use App\ValueObjects\Amount;
|
|
use Illuminate\Http\JsonResponse;
|
|
|
|
/**
|
|
* Beiträge einer Kurzanmeldung. Teilnahmegruppe und Zeitraum stehen fest; geliefert wird der Betrag je
|
|
* hinterlegter Beitragsstufe, damit der Client zwischen ihnen wählen kann, ohne erneut zu fragen. Der Endpunkt
|
|
* braucht keine Eingaben -- berechnet wird der gespeicherte Betrag bei der Anmeldung ohnehin neu.
|
|
*
|
|
* `amountValue` der gewählten Stufe steuert im Frontend, ob der Schritt "Zahlungsart" gezeigt wird; mehr als
|
|
* eine Stufe blendet den Schritt "Beitrag" ein.
|
|
*/
|
|
class ShortCalculateAmountController extends CommonController {
|
|
public function __invoke(int $eventId) : JsonResponse {
|
|
$event = $this->events->getById($eventId, false);
|
|
|
|
$participationFee = $event->firstParticipationFee();
|
|
$eventResource = $event->toResource();
|
|
|
|
$feeTypes = array_map(function (string $feeType) use ($event, $eventResource, $participationFee) {
|
|
$amount = $participationFee === null
|
|
? new Amount(0, 'Euro')
|
|
: $eventResource->calculateAmount(
|
|
$participationFee->type,
|
|
$feeType,
|
|
$event->start_date,
|
|
$event->end_date,
|
|
false
|
|
);
|
|
|
|
return [
|
|
'value' => $feeType,
|
|
'label' => EventParticipationFee::FEE_TYPE_LABELS[$feeType],
|
|
'amount' => $amount->toString(),
|
|
'amountValue' => $amount->getAmount(),
|
|
];
|
|
}, $participationFee?->availableFeeTypes() ?? ['standard']);
|
|
|
|
return response()->json(['feeTypes' => $feeTypes]);
|
|
}
|
|
}
|