feat: assignable managers for accommodation bookings

This commit is contained in:
Björn Fromme
2026-08-05 13:45:33 +02:00
parent 8e4afc0813
commit 736128476b
9 changed files with 247 additions and 1 deletions
@@ -11,6 +11,7 @@ use App\Enum\Groups\AccommodationBookingStatus;
use App\Form\Admin\Groups\AccommodationBookingType;
use App\Repository\Groups\AdditionalServiceRepository;
use App\Repository\Groups\BoardServiceRepository;
use App\Repository\UserRepository;
use App\Service\AccommodationBookingService;
use Doctrine\ORM\EntityManagerInterface;
use Psr\Log\LoggerInterface;
@@ -28,6 +29,7 @@ class EditController extends AbstractController
private readonly LoggerInterface $logger,
private readonly BoardServiceRepository $boardServiceRepo,
private readonly AdditionalServiceRepository $additionalServiceRepo,
private readonly UserRepository $userRepo,
private readonly AccommodationBookingService $bookingService,
) {
}
@@ -69,12 +71,26 @@ class EditController extends AbstractController
));
}
// ROLE_ADMIN inherits ROLE_GROUPS_ADMIN, so this single check covers both.
$assignableManagers = [];
if ($this->isGranted('ROLE_GROUPS_ADMIN')) {
$assignableManagers = $this->userRepo->findGroupsStaff();
// A user assigned earlier may have lost the role since — keep them in the choices
// so the field can render the current value instead of failing to transform it.
$currentManager = $booking->getManagedBy();
if (null !== $currentManager && !in_array($currentManager, $assignableManagers, true)) {
$assignableManagers[] = $currentManager;
}
}
$form = $this->createForm(AccommodationBookingType::class, $booking, [
'max_adolescent_age' => $accommodation?->getMaxAdolescentAge() ?? 0,
'board_services' => $boardServices,
'additional_services' => $additionalServices,
'current_board_service' => $currentBoardService,
'current_additional_services' => $currentAdditionalServices,
'assignable_managers' => $assignableManagers,
]);
$previousStatus = $booking->getStatus();