80 lines
2.5 KiB
PHP
80 lines
2.5 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Controller\Booking\Traits;
|
|
|
|
use App\Form\Model\BookingDto;
|
|
use Symfony\Component\HttpFoundation\RedirectResponse;
|
|
|
|
/**
|
|
* Provides common functionality for booking creation controllers.
|
|
*
|
|
* This trait contains shared validation and redirect logic used across
|
|
* all booking creation steps to ensure consistent behavior and reduce
|
|
* code duplication.
|
|
*/
|
|
trait BookingCreateTrait
|
|
{
|
|
/**
|
|
* Validates step access and returns redirect response if necessary.
|
|
*
|
|
* @return RedirectResponse|null Returns redirect response if validation fails, null if access is allowed
|
|
*/
|
|
private function validateStepAccess(BookingDto $bookingCreateDto, int $expectedStep): ?RedirectResponse
|
|
{
|
|
// Allow access to current step or any previous step
|
|
if ($expectedStep > $bookingCreateDto->currentStep) {
|
|
$this->addFlash('error', 'Bitte erst die vorherigen Schritte abschließen.');
|
|
|
|
return $this->redirectToCurrentStep($bookingCreateDto);
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
/**
|
|
* Redirects to the current step based on the DTO's currentStep.
|
|
*/
|
|
private function redirectToCurrentStep(BookingDto $bookingCreateDto): RedirectResponse
|
|
{
|
|
$route = match ($bookingCreateDto->currentStep) {
|
|
2 => 'app_booking_create_step_2',
|
|
3 => 'app_booking_create_step_3',
|
|
4 => 'app_booking_create_step_4',
|
|
default => 'app_booking_create_step_1',
|
|
};
|
|
|
|
return $this->redirectToRoute($route);
|
|
}
|
|
|
|
/**
|
|
* Prepares template variables for the booking summary sidebar.
|
|
*
|
|
* @return array<string, mixed> Array containing all variables needed for the summary partial
|
|
*/
|
|
private function getSummaryVariables(BookingDto $bookingCreateDto): array
|
|
{
|
|
$summary = $this->summaryDataService->getSummaryData($bookingCreateDto);
|
|
|
|
return [
|
|
'participantsCount' => $summary->participantCount,
|
|
'pricingData' => $summary->pricingData,
|
|
'assignmentCounts' => $summary->assignmentCounts,
|
|
'groupedSelectedRooms' => $summary->groupedSelectedRooms,
|
|
];
|
|
}
|
|
|
|
/**
|
|
* Handles API errors by logging and adding a flash message.
|
|
*/
|
|
private function handleApiError(
|
|
string $logMessage,
|
|
array $context,
|
|
string $flashMessage,
|
|
): void {
|
|
$this->logger->error($logMessage, $context);
|
|
$this->addFlash('error', $flashMessage);
|
|
}
|
|
}
|