diff --git a/migrations/Version20260630085856.php b/migrations/Version20260630085856.php new file mode 100644 index 00000000..ab5c1920 --- /dev/null +++ b/migrations/Version20260630085856.php @@ -0,0 +1,35 @@ +addSql('DROP INDEX UNIQ_2D38541277153098 ON accommodation'); + $this->addSql('ALTER TABLE accommodation ADD cms_code VARCHAR(16) DEFAULT NULL, CHANGE code calendar_code VARCHAR(16) NOT NULL'); + $this->addSql('CREATE UNIQUE INDEX UNIQ_2D3854122583B3CC ON accommodation (calendar_code)'); + } + + public function down(Schema $schema): void + { + // this down() migration is auto-generated, please modify it to your needs + $this->addSql('DROP INDEX UNIQ_2D3854122583B3CC ON accommodation'); + $this->addSql('ALTER TABLE accommodation DROP cms_code, CHANGE calendar_code code VARCHAR(16) NOT NULL'); + $this->addSql('CREATE UNIQUE INDEX UNIQ_2D38541277153098 ON accommodation (code)'); + } +} diff --git a/src/BpnConnect/Model/ContingentStatus.php b/src/BpnConnect/Model/ContingentStatus.php index f9feb44c..09e55567 100644 --- a/src/BpnConnect/Model/ContingentStatus.php +++ b/src/BpnConnect/Model/ContingentStatus.php @@ -8,4 +8,10 @@ enum ContingentStatus: string { case Ok = 'OK'; case Blocked = 'BLOCKED'; + case OnRequest = 'ON_REQUEST'; + + public function label(): string + { + return 'enum.contingent_status.'.strtolower($this->value); + } } diff --git a/src/Controller/Admin/Accommodation/CreateController.php b/src/Controller/Admin/Accommodation/CreateController.php index ef66bfc5..1b62c2e6 100644 --- a/src/Controller/Admin/Accommodation/CreateController.php +++ b/src/Controller/Admin/Accommodation/CreateController.php @@ -38,7 +38,7 @@ class CreateController extends AbstractController $this->logger->info('Created accommodation', [ 'name' => $accommodation->getName(), - 'code' => $accommodation->getCode(), + 'code' => $accommodation->getCalendarCode(), ]); return new HxRedirectResponse($this->generateUrl('app_admin_accommodation')); diff --git a/src/Controller/Admin/Accommodation/DeleteController.php b/src/Controller/Admin/Accommodation/DeleteController.php index e30d0200..c52c5719 100644 --- a/src/Controller/Admin/Accommodation/DeleteController.php +++ b/src/Controller/Admin/Accommodation/DeleteController.php @@ -32,7 +32,7 @@ class DeleteController extends AbstractController $this->logger->info('Deleted accommodation', [ 'name' => $accommodation->getName(), - 'code' => $accommodation->getCode(), + 'code' => $accommodation->getCalendarCode(), ]); return new HxRedirectResponse($this->generateUrl('app_admin_accommodation')); diff --git a/src/Controller/Admin/Accommodation/EditController.php b/src/Controller/Admin/Accommodation/EditController.php index 540f6fe5..a5b4dba3 100644 --- a/src/Controller/Admin/Accommodation/EditController.php +++ b/src/Controller/Admin/Accommodation/EditController.php @@ -29,8 +29,8 @@ class EditController extends AbstractController // fetch additional data from cms if available $cmsData = []; - if (null !== $accommodation->getCode()) { - $cmsData = $this->cmsDataProvider->getHotelDetails($accommodation->getCode()); + if (null !== $accommodation->getCalendarCode()) { + $cmsData = $this->cmsDataProvider->getHotelDetails($accommodation->getEffectiveCmsCode()); } $form = $this->createForm(AccommodationType::class, $accommodation); @@ -44,7 +44,7 @@ class EditController extends AbstractController $this->logger->info('Updated accommodation', [ 'name' => $accommodation->getName(), - 'code' => $accommodation->getCode(), + 'code' => $accommodation->getCalendarCode(), ]); return $this->redirectToRoute('app_admin_accommodation_edit', ['id' => $accommodation->getId()]); diff --git a/src/Controller/Admin/Accommodation/IndexController.php b/src/Controller/Admin/Accommodation/IndexController.php index e89d2983..8cfd6acd 100644 --- a/src/Controller/Admin/Accommodation/IndexController.php +++ b/src/Controller/Admin/Accommodation/IndexController.php @@ -19,7 +19,7 @@ class IndexController extends AbstractController #[Route('/admin/accommodation', name: 'app_admin_accommodation')] public function index(): Response { - $accommodations = $this->accommodationRepository->findBy([], ['code' => 'ASC']); + $accommodations = $this->accommodationRepository->findBy([], ['calendarCode' => 'ASC']); return $this->render('admin/accommodation/index.html.twig', [ 'accommodations' => $accommodations, diff --git a/src/Controller/Admin/AccommodationPrice/CreateController.php b/src/Controller/Admin/AccommodationPrice/CreateController.php index 7568a1ba..7ab1fda3 100644 --- a/src/Controller/Admin/AccommodationPrice/CreateController.php +++ b/src/Controller/Admin/AccommodationPrice/CreateController.php @@ -40,7 +40,7 @@ class CreateController extends AbstractController $this->logger->info('Created accommodation price', [ 'name' => $accommodation->getName(), - 'code' => $accommodation->getCode(), + 'code' => $accommodation->getCalendarCode(), 'date_range' => [ 'from' => $accommodationPrice->getDateFrom()->format('Y-m-d'), 'to' => $accommodationPrice->getDateTo()->format('Y-m-d'), diff --git a/src/Controller/Admin/AccommodationPrice/DeleteController.php b/src/Controller/Admin/AccommodationPrice/DeleteController.php index 707e4d13..10fb23f0 100644 --- a/src/Controller/Admin/AccommodationPrice/DeleteController.php +++ b/src/Controller/Admin/AccommodationPrice/DeleteController.php @@ -33,7 +33,7 @@ class DeleteController extends AbstractController $this->logger->info('Deleted accommodation price', [ 'name' => $accommodation->getName(), - 'code' => $accommodation->getCode(), + 'code' => $accommodation->getCalendarCode(), 'date_range' => [ 'from' => $accommodationPrice->getDateFrom()->format('Y-m-d'), 'to' => $accommodationPrice->getDateTo()->format('Y-m-d'), diff --git a/src/Controller/Admin/AccommodationPrice/EditController.php b/src/Controller/Admin/AccommodationPrice/EditController.php index 53f305b8..b5d5f8c9 100644 --- a/src/Controller/Admin/AccommodationPrice/EditController.php +++ b/src/Controller/Admin/AccommodationPrice/EditController.php @@ -46,7 +46,7 @@ class EditController extends AbstractController $this->logger->info('Edited accommodation price', [ 'name' => $accommodation->getName(), - 'code' => $accommodation->getCode(), + 'code' => $accommodation->getCalendarCode(), 'date_range' => [ 'from' => $accommodationPrice->getDateFrom()->format('Y-m-d'), 'to' => $accommodationPrice->getDateTo()->format('Y-m-d'), diff --git a/src/Controller/Admin/AdditionalService/CreateController.php b/src/Controller/Admin/AdditionalService/CreateController.php index 37c6f9c5..39c668aa 100644 --- a/src/Controller/Admin/AdditionalService/CreateController.php +++ b/src/Controller/Admin/AdditionalService/CreateController.php @@ -43,7 +43,7 @@ class CreateController extends AbstractController $this->logger->info('Created additional service', [ 'name' => $accommodation->getName(), - 'code' => $accommodation->getCode(), + 'code' => $accommodation->getCalendarCode(), 'label' => $additionalService->getLabel(), ]); diff --git a/src/Controller/Admin/AdditionalService/DeleteController.php b/src/Controller/Admin/AdditionalService/DeleteController.php index 84689656..c464f517 100644 --- a/src/Controller/Admin/AdditionalService/DeleteController.php +++ b/src/Controller/Admin/AdditionalService/DeleteController.php @@ -37,7 +37,7 @@ class DeleteController extends AbstractController $this->logger->info('Deleted additional service', [ 'name' => $accommodation->getName(), - 'code' => $accommodation->getCode(), + 'code' => $accommodation->getCalendarCode(), 'label' => $additionalService->getLabel(), ]); diff --git a/src/Controller/Admin/AdditionalService/EditController.php b/src/Controller/Admin/AdditionalService/EditController.php index 9f132560..a8f498f8 100644 --- a/src/Controller/Admin/AdditionalService/EditController.php +++ b/src/Controller/Admin/AdditionalService/EditController.php @@ -52,7 +52,7 @@ class EditController extends AbstractController $this->logger->info('Edited additional service', [ 'name' => $accommodation->getName(), - 'code' => $accommodation->getCode(), + 'code' => $accommodation->getCalendarCode(), 'label' => $additionalService->getLabel(), ]); diff --git a/src/Controller/Admin/BoardService/CreateController.php b/src/Controller/Admin/BoardService/CreateController.php index 94f815ae..6ae65d27 100644 --- a/src/Controller/Admin/BoardService/CreateController.php +++ b/src/Controller/Admin/BoardService/CreateController.php @@ -42,7 +42,7 @@ class CreateController extends AbstractController $this->logger->info('Created board service', [ 'name' => $accommodation->getName(), - 'code' => $accommodation->getCode(), + 'code' => $accommodation->getCalendarCode(), 'label' => $boardService->getLabel(), ]); diff --git a/src/Controller/Admin/BoardService/DeleteController.php b/src/Controller/Admin/BoardService/DeleteController.php index 02398521..13270289 100644 --- a/src/Controller/Admin/BoardService/DeleteController.php +++ b/src/Controller/Admin/BoardService/DeleteController.php @@ -36,7 +36,7 @@ class DeleteController extends AbstractController $this->logger->info('Deleted board service', [ 'name' => $accommodation->getName(), - 'code' => $accommodation->getCode(), + 'code' => $accommodation->getCalendarCode(), 'label' => $boardService->getLabel(), ]); diff --git a/src/Controller/Admin/BoardService/EditController.php b/src/Controller/Admin/BoardService/EditController.php index aeaa9a98..cfdcab06 100644 --- a/src/Controller/Admin/BoardService/EditController.php +++ b/src/Controller/Admin/BoardService/EditController.php @@ -48,7 +48,7 @@ class EditController extends AbstractController $this->logger->info('Edited board service', [ 'name' => $accommodation->getName(), - 'code' => $accommodation->getCode(), + 'code' => $accommodation->getCalendarCode(), 'label' => $boardService->getLabel(), ]); diff --git a/src/Controller/Api/ContingentController.php b/src/Controller/Api/ContingentController.php index 45948890..9af6afc0 100644 --- a/src/Controller/Api/ContingentController.php +++ b/src/Controller/Api/ContingentController.php @@ -95,6 +95,7 @@ class ContingentController extends AbstractController 'priceAdditionalPerson' => null !== $price ? round($price->getPriceAdditionalPerson() / 100, 2) : null, 'priceAdditionalPersonOverride' => null !== $price?->getPriceAdditionalPersonOverride() ? round($price->getPriceAdditionalPersonOverride() / 100, 2) : null, 'includedPax' => $price?->getIncludedPax(), + 'minPax' => $price?->getAccommodation()->getMinPaxSummer(), 'minNights' => $price?->getMinNights(), ]; } diff --git a/src/Entity/Groups/Accommodation.php b/src/Entity/Groups/Accommodation.php index d88d4a9c..4c92ceeb 100644 --- a/src/Entity/Groups/Accommodation.php +++ b/src/Entity/Groups/Accommodation.php @@ -29,7 +29,10 @@ class Accommodation implements BlameableEntityInterface, TimestampableEntityInte #[ORM\Column(length: 16, unique: true)] #[Assert\NotBlank(message: 'required')] - private ?string $code = null; + private ?string $calendarCode = null; + + #[ORM\Column(length: 16, nullable: true)] + private ?string $cmsCode = null; #[ORM\Column] #[Assert\NotNull(message: 'required')] @@ -89,18 +92,35 @@ class Accommodation implements BlameableEntityInterface, TimestampableEntityInte return $this; } - public function getCode(): ?string + public function getCalendarCode(): ?string { - return $this->code; + return $this->calendarCode; } - public function setCode(string $code): self + public function setCalendarCode(string $calendarCode): self { - $this->code = $code; + $this->calendarCode = $calendarCode; return $this; } + public function getCmsCode(): ?string + { + return $this->cmsCode; + } + + public function setCmsCode(?string $cmsCode): self + { + $this->cmsCode = $cmsCode; + + return $this; + } + + public function getEffectiveCmsCode(): string + { + return $this->cmsCode ?? $this->calendarCode; + } + public function getMinPaxSummer(): ?int { return $this->minPaxSummer; diff --git a/src/Form/Admin/Groups/AccommodationType.php b/src/Form/Admin/Groups/AccommodationType.php index 3ea5747b..681e44fd 100644 --- a/src/Form/Admin/Groups/AccommodationType.php +++ b/src/Form/Admin/Groups/AccommodationType.php @@ -20,14 +20,18 @@ class AccommodationType extends AbstractType ->add('name', TextType::class, [ 'label' => 'Name', ]) - ->add('code', TextType::class, [ - 'label' => 'Code', + ->add('calendarCode', TextType::class, [ + 'label' => 'Code für Kalender', + ]) + ->add('cmsCode', TextType::class, [ + 'label' => 'Code für CMS-Daten', + 'required' => false, ]) ->add('minPaxSummer', IntegerType::class, [ 'label' => 'Mindestbelegung Sommer', ]) ->add('maxAdolescentAge', IntegerType::class, [ - 'label' => 'Altersgrenze Jugendliche R', + 'label' => 'Altersgrenze Jugendliche', ]) ->add('currency', ChoiceType::class, [ 'label' => 'Währung', diff --git a/src/Repository/Groups/AccommodationPriceRepository.php b/src/Repository/Groups/AccommodationPriceRepository.php index d44713d9..97c878af 100644 --- a/src/Repository/Groups/AccommodationPriceRepository.php +++ b/src/Repository/Groups/AccommodationPriceRepository.php @@ -31,7 +31,7 @@ class AccommodationPriceRepository extends ServiceEntityRepository ): array { return $this->createQueryBuilder('ap') ->join('ap.accommodation', 'a') - ->where('a.code = :hotelCode') + ->where('a.calendarCode = :hotelCode') ->andWhere('ap.dateFrom <= :dateTo') ->andWhere('ap.dateTo >= :dateFrom') ->setParameter('hotelCode', $hotelCode) diff --git a/src/Twig/Components/Calendar.php b/src/Twig/Components/Calendar.php index f118a192..bcc52375 100644 --- a/src/Twig/Components/Calendar.php +++ b/src/Twig/Components/Calendar.php @@ -61,7 +61,7 @@ class Calendar $map = $this->buildCoverageMap(); $blockedDates = $this->fetchBlockedDates( - $accommodation->getCode() ?? '', + $accommodation->getCalendarCode() ?? '', $start->format('Y-m-d'), $start->addMonths(3)->subDay()->format('Y-m-d'), ); diff --git a/templates/admin/accommodation/_form.html.twig b/templates/admin/accommodation/_form.html.twig index e3e0e661..fe7b5731 100644 --- a/templates/admin/accommodation/_form.html.twig +++ b/templates/admin/accommodation/_form.html.twig @@ -6,7 +6,8 @@