wip: booking process

This commit is contained in:
Björn Fromme
2025-07-14 17:15:15 +02:00
parent a55e30e12d
commit bef18971c3
45 changed files with 688 additions and 270 deletions
@@ -0,0 +1,50 @@
<?php
namespace App\Controller\Booking;
use App\BusProNet\XmlLoader\TravelLoader;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Attribute\Route;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
class CreateController extends AbstractController
{
public function __construct(private readonly TravelLoader $travelDataLoader)
{}
#[Route('/bookings/create', name: 'app_booking_create', methods: ['POST'])]
public function index(Request $request): Response
{
$travelId = $request->query->getInt('travel_id');
$hotelId = $request->query->getInt('hotel_id');
$roomsIdsAndQuantities = $this->getRoomsIdsAndQuantities($request);
$travelData = $this->travelDataLoader->loadById($travelId, $hotelId);
if (null === $travelData) {
throw $this->createNotFoundException('Travel data not found');
}
$participantsCount = 0;
$rooms = $travelData->getRoomsByIds(array_keys($roomsIdsAndQuantities));
foreach ($rooms as $room) {
$roomCount = $roomsIdsAndQuantities[$room->id] ?? 0;
$participantsCount += $room->minPax * $roomCount;
}
return $this->render('booking/create.html.twig', [
'travelData' => $travelData,
]);
}
private function getRoomsIdsAndQuantities(Request $request): array
{
$rooms = $request->request->all('rooms');
return array_map('intval', array_filter($rooms, 'strlen'));
}
}
+2 -2
View File
@@ -10,7 +10,7 @@ use App\BusProNet\XmlLoader\TravelLoader;
use App\Controller\Traits\BookingDataTrait;
use App\Entity\User;
use App\Form\BookingType;
use App\Form\Model\BookingData;
use App\Form\Model\BookingEditDto;
use App\Security\Crypt;
use Psr\Cache\InvalidArgumentException;
use Psr\Log\LoggerInterface;
@@ -90,7 +90,7 @@ class EditController extends AbstractController
$this->pickupDataLoader->patchPickupsDetails($travelData);
// Create DTO for form
$formData = BookingData::fromBooking($bookingData, $travelData);
$formData = BookingEditDto::fromBooking($bookingData, $travelData);
$form = $this->createForm(BookingType::class, $formData, [
'attr' => ['novalidate' => 'novalidate'],