From 9d2aa11fdbfe087e8d729aa6822cb1cdbef347b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Fromme?= Date: Tue, 23 Jun 2026 08:17:56 +0200 Subject: [PATCH] feat: groups price calculator admin crud, booking/offer flow and api --- .env | 25 +- api.http | 20 + assets/admin.js | 8 + assets/controllers/autocomplete_controller.js | 84 +++ assets/controllers/clipboard_controller.js | 37 ++ assets/controllers/datepicker_controller.js | 70 +++ assets/controllers/gallery_controller.js | 29 + assets/controllers/multiselect_controller.js | 36 ++ .../controllers/price_calendar_controller.js | 166 +++++ assets/controllers/tooltip_controller.js | 3 +- assets/images/bg_summer.jpg | Bin 0 -> 859143 bytes assets/images/icons.svg | 326 +++------- assets/mixins/use_fetch.js | 29 + assets/styles/_base.css | 4 + assets/styles/_components.css | 4 +- assets/styles/_components_admin.css | 10 + assets/styles/admin.css | 7 + assets/styles/components/autocomplete.css | 33 + assets/styles/components/badge.css | 3 + assets/styles/components/datepicker.css | 7 + assets/styles/components/gallery.css | 1 + assets/styles/components/price_calendar.css | 41 ++ assets/styles/components/rte-content.css | 13 + composer.json | 1 + composer.lock | 115 +++- config/bundles.php | 1 + config/packages/security.yaml | 6 +- config/packages/twig_component.yaml | 5 + config/services.yaml | 36 ++ deploy.php | 20 + migrations/Version20260625092525.php | 59 ++ migrations/Version20260625154838.php | 31 + migrations/Version20260625173941.php | 31 + migrations/Version20260627121823.php | 35 ++ migrations/Version20260627130625.php | 31 + migrations/Version20260630080409.php | 31 + migrations/Version20260630085856.php | 35 ++ migrations/Version20260702084714.php | 43 ++ migrations/Version20260706120805.php | 33 + migrations/Version20260706141648.php | 41 ++ migrations/Version20260707094812.php | 31 + migrations/Version20260707150000.php | 27 + migrations/Version20260708071724.php | 37 ++ migrations/Version20260708081559.php | 33 + migrations/Version20260708102807.php | 31 + migrations/Version20260709133922.php | 31 + migrations/Version20260709141929.php | 34 + migrations/Version20260709162705.php | 34 + migrations/Version20260710130000.php | 26 + migrations/Version20260716101949.php | 26 + migrations/Version20260717103431.php | 35 ++ package-lock.json | 56 +- package.json | 7 + src/BpnConnect/AbstractApiClient.php | 56 ++ src/BpnConnect/ContingentsClient.php | 82 +++ .../Exception/BpnConnectException.php | 9 + .../Model/ContingentCalendarEntry.php | 14 + .../Model/ContingentCalendarMeta.php | 18 + .../Model/ContingentCalendarResponse.php | 17 + src/BpnConnect/Model/ContingentMode.php | 11 + src/BpnConnect/Model/ContingentRangeEntry.php | 15 + .../Model/ContingentRangeResponse.php | 17 + src/BpnConnect/Model/ContingentStatus.php | 17 + .../XmlParser/CrmAttributesResponseParser.php | 8 + src/Command/ImportGroupsLegacyDataCommand.php | 582 ++++++++++++++++++ .../Accommodation/CalendarController.php | 25 + .../Admin/Accommodation/CreateController.php | 54 ++ .../Admin/Accommodation/DeleteController.php | 52 ++ .../Admin/Accommodation/EditController.php | 61 ++ .../Admin/Accommodation/IndexController.php | 30 + .../AccommodationBooking/CreateController.php | 60 ++ .../AccommodationBooking/EditController.php | 133 ++++ .../GenerateAccessLinkController.php | 50 ++ .../AccommodationBooking/IndexController.php | 52 ++ .../SendAccessLinkController.php | 54 ++ .../AccommodationBooking/ShowController.php | 41 ++ .../AccommodationPrice/CreateController.php | 64 ++ .../AccommodationPrice/DeleteController.php | 63 ++ .../AccommodationPrice/EditController.php | 72 +++ .../AdditionalService/CreateController.php | 61 ++ .../AdditionalService/DeleteController.php | 60 ++ .../AdditionalService/EditController.php | 72 +++ .../Admin/BoardService/CreateController.php | 61 ++ .../Admin/BoardService/DeleteController.php | 60 ++ .../Admin/BoardService/EditController.php | 69 +++ .../BookingEditDraft/DeleteController.php | 55 ++ .../BookingEditDraft/ExportController.php | 41 ++ .../BookingEditDraft/IndexController.php | 50 ++ .../Admin/BookingEditDraft/ShowController.php | 30 + .../Admin/BookingEditDraftController.php | 107 ---- src/Controller/Admin/DashboardController.php | 3 + .../Admin/Log/DownloadController.php | 46 ++ src/Controller/Admin/Log/IndexController.php | 46 ++ .../Admin/Log/XmlDumpController.php | 36 ++ src/Controller/Admin/LogController.php | 90 --- .../IndexController.php} | 6 +- .../Api/AccommodationBookingController.php | 62 ++ src/Controller/Api/ContingentController.php | 133 ++++ .../Booking/Create/IndexController.php | 2 +- .../AbstractAccommodationController.php | 52 ++ src/Controller/Groups/IndexController.php | 77 +++ src/Controller/Groups/OfferController.php | 119 ++++ src/Controller/Groups/Step1Controller.php | 292 +++++++++ src/Controller/Groups/Step2Controller.php | 191 ++++++ src/Controller/Groups/Step3Controller.php | 90 +++ src/Controller/Groups/Step4Controller.php | 157 +++++ src/Entity/BlameableEntity.php | 40 ++ src/Entity/BlameableEntityInterface.php | 14 + src/Entity/Groups/Accommodation.php | 231 +++++++ src/Entity/Groups/AccommodationBooking.php | 536 ++++++++++++++++ src/Entity/Groups/AccommodationPrice.php | 211 +++++++ src/Entity/Groups/AdditionalService.php | 161 +++++ src/Entity/Groups/BoardService.php | 129 ++++ src/Entity/TimestampableEntity.php | 38 ++ src/Entity/TimestampableEntityInterface.php | 14 + src/Enum/Groups/AdditionalServiceType.php | 16 + src/Enum/Groups/PriceType.php | 25 + src/Enum/Groups/Season.php | 20 + src/EventListener/BlamableEntityListener.php | 54 ++ .../TimestampableEntityListener.php | 34 + .../AccommodationSessionNotFoundException.php | 15 + .../AccommodationBookingConfirmationType.php | 45 ++ .../AccommodationInquiryConfirmationType.php | 21 + src/Form/AccommodationStep2Type.php | 88 +++ src/Form/AccommodationStep3Type.php | 74 +++ .../Admin/Groups/AccommodationBookingType.php | 175 ++++++ .../Admin/Groups/AccommodationPriceType.php | 82 +++ src/Form/Admin/Groups/AccommodationType.php | 50 ++ .../Admin/Groups/AdditionalServiceType.php | 70 +++ src/Form/Admin/Groups/BoardServiceType.php | 58 ++ src/Form/DatepickerType.php | 40 ++ src/Form/Extension/ModalSubmitExtension.php | 39 ++ src/Form/Model/AccommodationBookingDto.php | 84 +++ src/Form/Model/BookingSummaryDto.php | 4 +- src/Form/OfferAcceptConfirmationType.php | 41 ++ src/Menu/AdminMenuBuilder.php | 22 + src/Menu/GroupsMenuBuilder.php | 50 ++ ...ommodationBookingAdditionalServiceItem.php | 29 + src/Model/AccommodationBookingApiResponse.php | 115 ++++ .../AccommodationBookingBoardServiceInfo.php | 23 + src/Model/AccommodationBookingContext.php | 30 + src/Model/AccommodationBookingHotelInfo.php | 23 + .../AccommodationBookingPersonalData.php | 51 ++ src/Model/AccommodationBookingQueryParams.php | 24 + src/Model/BookingSummaryCmsHotelData.php | 21 - src/Model/CalendarDay.php | 19 + src/Model/CalendarMonth.php | 18 + src/Model/CmsHotelData.php | 31 + src/Model/CmsRegionData.php | 32 + src/Model/ContingentCalendarQuery.php | 78 +++ src/Model/ContingentPricesQuery.php | 21 + src/Model/InquiryStatus.php | 15 + src/Model/PriceTimelineItem.php | 22 + .../Groups/AccommodationBookingRepository.php | 20 + .../Groups/AccommodationPriceRepository.php | 44 ++ .../Groups/AccommodationRepository.php | 63 ++ .../Groups/AdditionalServiceRepository.php | 23 + .../Groups/BoardServiceRepository.php | 23 + .../FindsByAccommodationAndDateRangeTrait.php | 41 ++ .../Voter/AdministrativeAccessVoter.php | 33 + ...ccommodationBookingBreakdownCalculator.php | 67 ++ .../AccommodationBookingLinkSigner.php | 107 ++++ src/Service/AccommodationBookingService.php | 527 ++++++++++++++++ src/Service/AccommodationSessionManager.php | 53 ++ src/Service/BookingSummaryAssembler.php | 6 +- src/Service/CalendarGridBuilder.php | 69 +++ src/Service/CmsDataProvider.php | 205 +++++- src/Service/GroupsPriceCalculator.php | 308 +++++++++ src/Service/PriceTimelineBuilder.php | 174 ++++++ src/Twig/AppRuntime.php | 5 + src/Twig/Components/Calendar.php | 319 ++++++++++ symfony.lock | 12 + templates/_partials/_flashes_admin.html.twig | 9 + templates/_partials/_menu.html.twig | 9 +- templates/_partials/_toast.html.twig | 10 + .../accommodation/_calendar_section.html.twig | 1 + templates/admin/accommodation/_form.html.twig | 305 +++++++++ .../admin/accommodation/create.html.twig | 6 + templates/admin/accommodation/edit.html.twig | 6 + templates/admin/accommodation/index.html.twig | 77 +++ .../accommodation/modal_create.html.twig | 22 + .../accommodation/modal_delete.html.twig | 7 + .../accommodation_booking/create.html.twig | 53 ++ .../accommodation_booking/edit.html.twig | 67 ++ .../accommodation_booking/index.html.twig | 100 +++ .../modal_generate_access_link.html.twig | 8 + .../modal_send_access_link.html.twig | 8 + .../accommodation_booking/show.html.twig | 237 +++++++ .../admin/accommodation_price/_form.html.twig | 29 + .../accommodation_price/create.html.twig | 6 + .../admin/accommodation_price/edit.html.twig | 6 + .../modal_delete.html.twig | 7 + .../admin/additional_service/_form.html.twig | 26 + .../admin/additional_service/create.html.twig | 6 + .../admin/additional_service/edit.html.twig | 6 + .../additional_service/modal_delete.html.twig | 7 + templates/admin/board_service/_form.html.twig | 24 + .../admin/board_service/create.html.twig | 6 + templates/admin/board_service/edit.html.twig | 6 + .../board_service/modal_delete.html.twig | 7 + .../admin/booking_edit_draft/index.html.twig | 41 +- .../admin/booking_edit_draft/show.html.twig | 4 +- templates/admin/log/index.html.twig | 17 +- templates/admin/log/xml_dumps.html.twig | 8 +- templates/admin/user/index.html.twig | 4 +- templates/base_admin.html.twig | 4 +- templates/components/badge.html.twig | 11 + templates/components/calendar/grid.html.twig | 71 +++ templates/components/calendar/index.html.twig | 17 + .../components/dropdown/hxbutton.html.twig | 20 + .../dropdown/index.html.twig} | 13 +- templates/components/dropdown/link.html.twig | 10 + templates/components/page/heading.html.twig | 1 + .../email/accommodation_booking.html.twig | 29 + .../accommodation_booking_customer.html.twig | 47 ++ templates/email/offer_accepted.html.twig | 27 + .../email/offer_accepted_customer.html.twig | 33 + templates/forms_admin.html.twig | 245 ++++++++ ..._offer_accept_confirmation_modal.html.twig | 31 + .../groups/booking/_offer_summary.html.twig | 196 ++++++ .../groups/booking/_pagination.html.twig | 33 + .../booking/_price_calendar_grid.html.twig | 80 +++ ...step4_booking_confirmation_modal.html.twig | 27 + ...step4_inquiry_confirmation_modal.html.twig | 18 + .../_step4_personal_data_recap.html.twig | 31 + .../booking/_step4_services_recap.html.twig | 42 ++ templates/groups/booking/_summary.html.twig | 163 +++++ templates/groups/booking/error.html.twig | 18 + templates/groups/booking/offer.html.twig | 216 +++++++ .../booking/offer_unavailable.html.twig | 13 + templates/groups/booking/step_1.html.twig | 89 +++ templates/groups/booking/step_2.html.twig | 235 +++++++ templates/groups/booking/step_3.html.twig | 108 ++++ templates/groups/booking/step_4.html.twig | 74 +++ templates/groups/booking/success.html.twig | 19 + templates/htmx_confirmation_modal.html.twig | 7 +- templates/htmx_modal.html.twig | 6 +- templates/htmx_modal_admin.html.twig | 23 + templates/layout_admin.html.twig | 9 +- .../CrmAttributesResponseParserTest.php | 92 +++ .../Accommodation/IndexControllerTest.php | 89 +++ .../Accommodation/Step1ControllerTest.php | 164 +++++ .../Accommodation/Step2ControllerTest.php | 137 +++++ .../Accommodation/Step3ControllerTest.php | 224 +++++++ .../AccommodationBookingControllerTest.php | 304 +++++++++ .../Api/ContingentControllerTest.php | 45 ++ .../Controller/Groups/OfferControllerTest.php | 411 +++++++++++++ .../Controller/Groups/Step4ControllerTest.php | 402 ++++++++++++ tests/Form/AccommodationStep2TypeTest.php | 74 +++ tests/Model/ContingentQueryTest.php | 50 ++ ...modationBookingBreakdownCalculatorTest.php | 39 ++ .../AccommodationBookingLinkSignerTest.php | 192 ++++++ .../AccommodationBookingServiceTest.php | 359 +++++++++++ tests/Service/CmsDataProviderTest.php | 74 +++ tests/Service/PriceTimelineBuilderTest.php | 261 ++++++++ translations/messages.de.yaml | 17 + translations/validators.de.yaml | 2 + webpack.config.js | 1 + 258 files changed, 16231 insertions(+), 582 deletions(-) create mode 100644 assets/admin.js create mode 100644 assets/controllers/autocomplete_controller.js create mode 100644 assets/controllers/clipboard_controller.js create mode 100644 assets/controllers/datepicker_controller.js create mode 100644 assets/controllers/gallery_controller.js create mode 100644 assets/controllers/multiselect_controller.js create mode 100644 assets/controllers/price_calendar_controller.js create mode 100644 assets/images/bg_summer.jpg create mode 100644 assets/mixins/use_fetch.js create mode 100644 assets/styles/_components_admin.css create mode 100644 assets/styles/admin.css create mode 100644 assets/styles/components/autocomplete.css create mode 100644 assets/styles/components/badge.css create mode 100644 assets/styles/components/datepicker.css create mode 100644 assets/styles/components/gallery.css create mode 100644 assets/styles/components/price_calendar.css create mode 100644 assets/styles/components/rte-content.css create mode 100644 config/packages/twig_component.yaml create mode 100644 migrations/Version20260625092525.php create mode 100644 migrations/Version20260625154838.php create mode 100644 migrations/Version20260625173941.php create mode 100644 migrations/Version20260627121823.php create mode 100644 migrations/Version20260627130625.php create mode 100644 migrations/Version20260630080409.php create mode 100644 migrations/Version20260630085856.php create mode 100644 migrations/Version20260702084714.php create mode 100644 migrations/Version20260706120805.php create mode 100644 migrations/Version20260706141648.php create mode 100644 migrations/Version20260707094812.php create mode 100644 migrations/Version20260707150000.php create mode 100644 migrations/Version20260708071724.php create mode 100644 migrations/Version20260708081559.php create mode 100644 migrations/Version20260708102807.php create mode 100644 migrations/Version20260709133922.php create mode 100644 migrations/Version20260709141929.php create mode 100644 migrations/Version20260709162705.php create mode 100644 migrations/Version20260710130000.php create mode 100644 migrations/Version20260716101949.php create mode 100644 migrations/Version20260717103431.php create mode 100644 src/BpnConnect/AbstractApiClient.php create mode 100644 src/BpnConnect/ContingentsClient.php create mode 100644 src/BpnConnect/Exception/BpnConnectException.php create mode 100644 src/BpnConnect/Model/ContingentCalendarEntry.php create mode 100644 src/BpnConnect/Model/ContingentCalendarMeta.php create mode 100644 src/BpnConnect/Model/ContingentCalendarResponse.php create mode 100644 src/BpnConnect/Model/ContingentMode.php create mode 100644 src/BpnConnect/Model/ContingentRangeEntry.php create mode 100644 src/BpnConnect/Model/ContingentRangeResponse.php create mode 100644 src/BpnConnect/Model/ContingentStatus.php create mode 100644 src/Command/ImportGroupsLegacyDataCommand.php create mode 100644 src/Controller/Admin/Accommodation/CalendarController.php create mode 100644 src/Controller/Admin/Accommodation/CreateController.php create mode 100644 src/Controller/Admin/Accommodation/DeleteController.php create mode 100644 src/Controller/Admin/Accommodation/EditController.php create mode 100644 src/Controller/Admin/Accommodation/IndexController.php create mode 100644 src/Controller/Admin/AccommodationBooking/CreateController.php create mode 100644 src/Controller/Admin/AccommodationBooking/EditController.php create mode 100644 src/Controller/Admin/AccommodationBooking/GenerateAccessLinkController.php create mode 100644 src/Controller/Admin/AccommodationBooking/IndexController.php create mode 100644 src/Controller/Admin/AccommodationBooking/SendAccessLinkController.php create mode 100644 src/Controller/Admin/AccommodationBooking/ShowController.php create mode 100644 src/Controller/Admin/AccommodationPrice/CreateController.php create mode 100644 src/Controller/Admin/AccommodationPrice/DeleteController.php create mode 100644 src/Controller/Admin/AccommodationPrice/EditController.php create mode 100644 src/Controller/Admin/AdditionalService/CreateController.php create mode 100644 src/Controller/Admin/AdditionalService/DeleteController.php create mode 100644 src/Controller/Admin/AdditionalService/EditController.php create mode 100644 src/Controller/Admin/BoardService/CreateController.php create mode 100644 src/Controller/Admin/BoardService/DeleteController.php create mode 100644 src/Controller/Admin/BoardService/EditController.php create mode 100644 src/Controller/Admin/BookingEditDraft/DeleteController.php create mode 100644 src/Controller/Admin/BookingEditDraft/ExportController.php create mode 100644 src/Controller/Admin/BookingEditDraft/IndexController.php create mode 100644 src/Controller/Admin/BookingEditDraft/ShowController.php delete mode 100644 src/Controller/Admin/BookingEditDraftController.php create mode 100644 src/Controller/Admin/Log/DownloadController.php create mode 100644 src/Controller/Admin/Log/IndexController.php create mode 100644 src/Controller/Admin/Log/XmlDumpController.php delete mode 100644 src/Controller/Admin/LogController.php rename src/Controller/Admin/{UserController.php => User/IndexController.php} (86%) create mode 100644 src/Controller/Api/AccommodationBookingController.php create mode 100644 src/Controller/Api/ContingentController.php create mode 100644 src/Controller/Groups/AbstractAccommodationController.php create mode 100644 src/Controller/Groups/IndexController.php create mode 100644 src/Controller/Groups/OfferController.php create mode 100644 src/Controller/Groups/Step1Controller.php create mode 100644 src/Controller/Groups/Step2Controller.php create mode 100644 src/Controller/Groups/Step3Controller.php create mode 100644 src/Controller/Groups/Step4Controller.php create mode 100644 src/Entity/BlameableEntity.php create mode 100644 src/Entity/BlameableEntityInterface.php create mode 100644 src/Entity/Groups/Accommodation.php create mode 100644 src/Entity/Groups/AccommodationBooking.php create mode 100644 src/Entity/Groups/AccommodationPrice.php create mode 100644 src/Entity/Groups/AdditionalService.php create mode 100644 src/Entity/Groups/BoardService.php create mode 100644 src/Entity/TimestampableEntity.php create mode 100644 src/Entity/TimestampableEntityInterface.php create mode 100644 src/Enum/Groups/AdditionalServiceType.php create mode 100644 src/Enum/Groups/PriceType.php create mode 100644 src/Enum/Groups/Season.php create mode 100644 src/EventListener/BlamableEntityListener.php create mode 100644 src/EventListener/TimestampableEntityListener.php create mode 100644 src/Exception/AccommodationSessionNotFoundException.php create mode 100644 src/Form/AccommodationBookingConfirmationType.php create mode 100644 src/Form/AccommodationInquiryConfirmationType.php create mode 100644 src/Form/AccommodationStep2Type.php create mode 100644 src/Form/AccommodationStep3Type.php create mode 100644 src/Form/Admin/Groups/AccommodationBookingType.php create mode 100644 src/Form/Admin/Groups/AccommodationPriceType.php create mode 100644 src/Form/Admin/Groups/AccommodationType.php create mode 100644 src/Form/Admin/Groups/AdditionalServiceType.php create mode 100644 src/Form/Admin/Groups/BoardServiceType.php create mode 100644 src/Form/DatepickerType.php create mode 100644 src/Form/Extension/ModalSubmitExtension.php create mode 100644 src/Form/Model/AccommodationBookingDto.php create mode 100644 src/Form/OfferAcceptConfirmationType.php create mode 100644 src/Menu/GroupsMenuBuilder.php create mode 100644 src/Model/AccommodationBookingAdditionalServiceItem.php create mode 100644 src/Model/AccommodationBookingApiResponse.php create mode 100644 src/Model/AccommodationBookingBoardServiceInfo.php create mode 100644 src/Model/AccommodationBookingContext.php create mode 100644 src/Model/AccommodationBookingHotelInfo.php create mode 100644 src/Model/AccommodationBookingPersonalData.php create mode 100644 src/Model/AccommodationBookingQueryParams.php delete mode 100644 src/Model/BookingSummaryCmsHotelData.php create mode 100644 src/Model/CalendarDay.php create mode 100644 src/Model/CalendarMonth.php create mode 100644 src/Model/CmsHotelData.php create mode 100644 src/Model/CmsRegionData.php create mode 100644 src/Model/ContingentCalendarQuery.php create mode 100644 src/Model/ContingentPricesQuery.php create mode 100644 src/Model/InquiryStatus.php create mode 100644 src/Model/PriceTimelineItem.php create mode 100644 src/Repository/Groups/AccommodationBookingRepository.php create mode 100644 src/Repository/Groups/AccommodationPriceRepository.php create mode 100644 src/Repository/Groups/AccommodationRepository.php create mode 100644 src/Repository/Groups/AdditionalServiceRepository.php create mode 100644 src/Repository/Groups/BoardServiceRepository.php create mode 100644 src/Repository/Groups/FindsByAccommodationAndDateRangeTrait.php create mode 100644 src/Security/Voter/AdministrativeAccessVoter.php create mode 100644 src/Service/AccommodationBookingBreakdownCalculator.php create mode 100644 src/Service/AccommodationBookingLinkSigner.php create mode 100644 src/Service/AccommodationBookingService.php create mode 100644 src/Service/AccommodationSessionManager.php create mode 100644 src/Service/CalendarGridBuilder.php create mode 100644 src/Service/GroupsPriceCalculator.php create mode 100644 src/Service/PriceTimelineBuilder.php create mode 100644 src/Twig/Components/Calendar.php create mode 100644 templates/_partials/_flashes_admin.html.twig create mode 100644 templates/_partials/_toast.html.twig create mode 100644 templates/admin/accommodation/_calendar_section.html.twig create mode 100644 templates/admin/accommodation/_form.html.twig create mode 100644 templates/admin/accommodation/create.html.twig create mode 100644 templates/admin/accommodation/edit.html.twig create mode 100644 templates/admin/accommodation/index.html.twig create mode 100644 templates/admin/accommodation/modal_create.html.twig create mode 100644 templates/admin/accommodation/modal_delete.html.twig create mode 100644 templates/admin/accommodation_booking/create.html.twig create mode 100644 templates/admin/accommodation_booking/edit.html.twig create mode 100644 templates/admin/accommodation_booking/index.html.twig create mode 100644 templates/admin/accommodation_booking/modal_generate_access_link.html.twig create mode 100644 templates/admin/accommodation_booking/modal_send_access_link.html.twig create mode 100644 templates/admin/accommodation_booking/show.html.twig create mode 100644 templates/admin/accommodation_price/_form.html.twig create mode 100644 templates/admin/accommodation_price/create.html.twig create mode 100644 templates/admin/accommodation_price/edit.html.twig create mode 100644 templates/admin/accommodation_price/modal_delete.html.twig create mode 100644 templates/admin/additional_service/_form.html.twig create mode 100644 templates/admin/additional_service/create.html.twig create mode 100644 templates/admin/additional_service/edit.html.twig create mode 100644 templates/admin/additional_service/modal_delete.html.twig create mode 100644 templates/admin/board_service/_form.html.twig create mode 100644 templates/admin/board_service/create.html.twig create mode 100644 templates/admin/board_service/edit.html.twig create mode 100644 templates/admin/board_service/modal_delete.html.twig create mode 100644 templates/components/badge.html.twig create mode 100644 templates/components/calendar/grid.html.twig create mode 100644 templates/components/calendar/index.html.twig create mode 100644 templates/components/dropdown/hxbutton.html.twig rename templates/{_partials/_dropdown.html.twig => components/dropdown/index.html.twig} (50%) create mode 100644 templates/components/dropdown/link.html.twig create mode 100644 templates/components/page/heading.html.twig create mode 100644 templates/email/accommodation_booking.html.twig create mode 100644 templates/email/accommodation_booking_customer.html.twig create mode 100644 templates/email/offer_accepted.html.twig create mode 100644 templates/email/offer_accepted_customer.html.twig create mode 100644 templates/forms_admin.html.twig create mode 100644 templates/groups/booking/_offer_accept_confirmation_modal.html.twig create mode 100644 templates/groups/booking/_offer_summary.html.twig create mode 100644 templates/groups/booking/_pagination.html.twig create mode 100644 templates/groups/booking/_price_calendar_grid.html.twig create mode 100644 templates/groups/booking/_step4_booking_confirmation_modal.html.twig create mode 100644 templates/groups/booking/_step4_inquiry_confirmation_modal.html.twig create mode 100644 templates/groups/booking/_step4_personal_data_recap.html.twig create mode 100644 templates/groups/booking/_step4_services_recap.html.twig create mode 100644 templates/groups/booking/_summary.html.twig create mode 100644 templates/groups/booking/error.html.twig create mode 100644 templates/groups/booking/offer.html.twig create mode 100644 templates/groups/booking/offer_unavailable.html.twig create mode 100644 templates/groups/booking/step_1.html.twig create mode 100644 templates/groups/booking/step_2.html.twig create mode 100644 templates/groups/booking/step_3.html.twig create mode 100644 templates/groups/booking/step_4.html.twig create mode 100644 templates/groups/booking/success.html.twig create mode 100644 templates/htmx_modal_admin.html.twig create mode 100644 tests/BusProNet/XmlParser/CrmAttributesResponseParserTest.php create mode 100644 tests/Controller/Accommodation/IndexControllerTest.php create mode 100644 tests/Controller/Accommodation/Step1ControllerTest.php create mode 100644 tests/Controller/Accommodation/Step2ControllerTest.php create mode 100644 tests/Controller/Accommodation/Step3ControllerTest.php create mode 100644 tests/Controller/Api/AccommodationBookingControllerTest.php create mode 100644 tests/Controller/Api/ContingentControllerTest.php create mode 100644 tests/Controller/Groups/OfferControllerTest.php create mode 100644 tests/Controller/Groups/Step4ControllerTest.php create mode 100644 tests/Form/AccommodationStep2TypeTest.php create mode 100644 tests/Model/ContingentQueryTest.php create mode 100644 tests/Service/AccommodationBookingBreakdownCalculatorTest.php create mode 100644 tests/Service/AccommodationBookingLinkSignerTest.php create mode 100644 tests/Service/AccommodationBookingServiceTest.php create mode 100644 tests/Service/CmsDataProviderTest.php create mode 100644 tests/Service/PriceTimelineBuilderTest.php create mode 100644 translations/validators.de.yaml diff --git a/.env b/.env index d6ea33e..0938e5a 100644 --- a/.env +++ b/.env @@ -48,6 +48,15 @@ MAILJET_DEFAULT_LIST_ID= MAILJET_WEBHOOK_BASIC_PASSWORD=secret APP_NEWSLETTER_CONFIRMATION_TTL_HOURS=1 +# Dedicated signing secret for accommodation booking customer access links (kept separate +# from APP_SECRET so it can be rotated independently). Unlike lazily-used API keys, UriSigner +# validates this is non-empty at construction time, so a real dev value is required here +# (override in .env.local/production secrets as usual). +ACCOMMODATION_OFFER_LINK_SECRET=abf8ec28cc2162d9121d35d6f8cbf7c29728cdacce0303e22e1bac854501728a + +BPN_CONNECT_BASE_URL=https://bpn-connect.ep-reisen.app +BPN_CONNECT_API_KEY= + APP_BPN_USER= APP_BPN_PASSWORD= APP_BPN_IP= @@ -72,20 +81,26 @@ APP_TRAVEL_PREFER_REMOTE=false APP_TRAVEL_ENABLE_FALLBACK=true APP_TRAVEL_SNAPSHOT_RETENTION_BUFFER_DAYS=14 -# Feature Flags -FEATURE_TRAVEL_SNAPSHOT=true - # Emails APP_DEFAULT_EMAIL_FROM=info@ep-reisen.de APP_DEFAULT_EMAIL_TO=info@ep-reisen.de +ACCOMMODATION_INQUIRY_EMAIL=info@ep-reisen.de + +# Global common defaults +APP_SEASON_WINTER_FROM=2026-10-01 +APP_SEASON_SUMMER_FROM=2026-05-01 +APP_RUNNING_COSTS_FACTOR_EUR=2.75 +APP_RUNNING_COSTS_FACTOR_CHF=3.2 +APP_UNDERSUBSCRIPTION_SURCHARGE_30_EUR=5.0 +APP_UNDERSUBSCRIPTION_SURCHARGE_30_CHF=5.0 +APP_UNDERSUBSCRIPTION_SURCHARGE_40_EUR=2.5 +APP_UNDERSUBSCRIPTION_SURCHARGE_40_CHF=2.5 # Booking Configuration # Status for new bookings: 'F' (Fixed/Final), 'O' (Option - requires agency confirmation) # Use 'O' during beta phase, switch to 'F' for production DEFAULT_BOOKING_STATUS=F -API_KEYS= - XML_EXPORT_PATH="%kernel.project_dir%/var/xmlexport" XML_EXPORT_CONTINGENTS_PATH="%kernel.project_dir%/var/xmlexportzimmer" JSON_EXPORT_PATH="%kernel.project_dir%/var/jsonexport" diff --git a/api.http b/api.http index 3131572..9a76f28 100644 --- a/api.http +++ b/api.http @@ -121,6 +121,19 @@ Authorization: Bearer {{$auth.token("oauth2_newsletter")}} "listIds": [10321569,10321382,10321383] } +### API contingent calendar +# @no-cookie-jar +GET {{base_url}}/api/contingents/calendar?hotelCode=DGS&dateFrom=2026-06-01&dateTo=2026-06-30 +Accept: application/json +Authorization: Bearer {{$auth.token("oauth2_api")}} + +### API contintent prices +# @no-cookie-jar +GET {{base_url}}/api/contingents/prices?hotelCode=DGS&year=2026 +Accept: application/json +Content-Type: application/json +Authorization: Bearer {{$auth.token("oauth2_api")}} + ### API pickups planning webhook # @no-cookie-jar POST {{base_url}}/api/pickups-planning @@ -136,3 +149,10 @@ GET {{base_url}}/api/pickups-planning/DPWWTS191125 Accept: application/json Content-Type: application/json Authorization: Bearer {{$auth.token("oauth2_api")}} + +### API accommodation booking +# @no-cookie-jar +GET {{base_url}}/api/accommodation-bookings/e4591076-eb65-41e8-a115-09d18d15604a +Accept: application/json +Content-Type: application/json +Authorization: Bearer {{$auth.token("oauth2_api")}} diff --git a/assets/admin.js b/assets/admin.js new file mode 100644 index 0000000..7ce65f0 --- /dev/null +++ b/assets/admin.js @@ -0,0 +1,8 @@ +import htmx from 'htmx.org' +htmx.config.includeIndicatorStyles = false +htmx.config.historyCacheSize = 0 +htmx.config.allowScriptTags = false + +import './bootstrap.js' + +import './styles/admin.css' diff --git a/assets/controllers/autocomplete_controller.js b/assets/controllers/autocomplete_controller.js new file mode 100644 index 0000000..d75d401 --- /dev/null +++ b/assets/controllers/autocomplete_controller.js @@ -0,0 +1,84 @@ +import { Controller } from '@hotwired/stimulus' +import { useFetch } from '../mixins/use_fetch' +import Autocomplete from '@trevoreyre/autocomplete-js' + +export default class extends Controller { + + static targets = [ 'input', 'field', 'resetButton', 'searchIcon' ] + + static values = { url: String, choices: Array, selected: Boolean } + + initialize() { + useFetch(this) + } + + connect() { + const searchHandler = input => { + return new Promise(resolve => { + // Check input minimum length + if (input.length < 2) { + return resolve([]) + } + + // Search choices if provided + if (this.choicesValue.length > 0) { + return resolve(this.choicesValue.filter(choice => { + return -1 !== choice.text.toLowerCase().search(input.toLowerCase()) + })) + } + + // Use API otherwise + let data = { search: input } + fetch(this.urlValue, { method: 'POST', body: JSON.stringify(data), credentials: 'include' }) + .then(this.checkStatus) + .then(this.parseJSON) + .then(data => { + resolve(data) + }) + }) + } + + const submitHandler = result => { + this.fieldTarget.value = result.value + this.selectedValue = true + this.element.dispatchEvent(new CustomEvent('select', { + detail: { result } + })) + } + + this.autocomplete = new Autocomplete(this.element, { + search: searchHandler, + getResultValue: result => result.text, + submitOnEnter: true, + onSubmit: submitHandler, + debounceTime: 250, + }) + + if (this.fieldTarget.value) { + this.selectedValue = true + } + + // prevent form submission when selecting entry in autocomplete list with enter key + this.element.addEventListener('keypress', e => { + if (e.key === 'Enter') { + e.preventDefault() + } + }) + } + + reset() { + this.inputTarget.value = null + this.fieldTarget.value = null + this.selectedValue = false + this.element.dispatchEvent(new CustomEvent('reset')) + } + + selectedValueChanged() { + this.resetButtonTarget.classList.toggle('hidden', false === this.selectedValue) + this.searchIconTarget.classList.toggle('hidden', this.selectedValue) + } + + disconnect() { + this.autocomplete.destroy() + } +} diff --git a/assets/controllers/clipboard_controller.js b/assets/controllers/clipboard_controller.js new file mode 100644 index 0000000..231035d --- /dev/null +++ b/assets/controllers/clipboard_controller.js @@ -0,0 +1,37 @@ +import { Controller } from "@hotwired/stimulus" + +export default class extends Controller { + + static values = { + content: String, + label: String, + } + + connect() { + this.originalLabel = this.element.innerText + } + + disconnect() { + clearTimeout(this.resetTimer) + } + + copy() { + navigator.clipboard.writeText(this.contentValue).then(() => { + this.dispatch('copied', { + detail: { + content: this.contentValue, + } + }) + }).catch((error) => { + console.error('Failed to copy to clipboard:', error) + }) + + if (this.hasLabelValue) { + this.element.innerText = this.labelValue + clearTimeout(this.resetTimer) + this.resetTimer = setTimeout(() => { + this.element.innerText = this.originalLabel + }, 3000) + } + } +} diff --git a/assets/controllers/datepicker_controller.js b/assets/controllers/datepicker_controller.js new file mode 100644 index 0000000..b123bf2 --- /dev/null +++ b/assets/controllers/datepicker_controller.js @@ -0,0 +1,70 @@ +import { Controller } from '@hotwired/stimulus' +import { Calendar } from 'vanilla-calendar-pro' + +/* stimulusFetch: 'lazy' */ +export default class extends Controller { + + static targets = ['field', 'hiddenField'] + static values = { + minDate: String, + maxDate: String, + disableWeekends: Boolean, + disabledDates: Array, + } + + connect() { + const options = { + inputMode: true, + locale: 'de-DE', + selectedTheme: 'light', + selectedDates: this.hiddenFieldTarget.value ? [this.hiddenFieldTarget.value] : [], + onClickDate: (self) => { + const iso = self.context.selectedDates[0] ?? null + this.hiddenFieldTarget.value = iso ?? '' + if (iso) { + const [year, month, day] = iso.split('-') + this.fieldTarget.value = `${day}.${month}.${year}` + } else { + this.fieldTarget.value = '' + } + this.element.dispatchEvent(new CustomEvent('datepicker:picked', { + detail: { date: this.fieldTarget.value } + })) + }, + onHide: () => { + this.element.dispatchEvent(new CustomEvent('datepicker:closed')) + }, + } + + if (this.minDateValue) options.dateMin = this.minDateValue + if (this.maxDateValue) options.dateMax = this.maxDateValue + if (this.disableWeekendsValue) options.disableWeekdays = [0, 6] + if (this.disabledDatesValue.length) options.disableDates = this.disabledDatesValue + + this.picker = new Calendar(this.fieldTarget, options) + this.picker.init() + + this.handleManualInput = () => { + const value = this.fieldTarget.value.trim() + if (!value) { + this.hiddenFieldTarget.value = '' + this.picker.set({ selectedDates: [] }, { dates: true }) + } else { + const match = value.match(/^(\d{1,2})\.(\d{1,2})\.(\d{4})$/) + if (match) { + const [, day, month, year] = match + const iso = `${year}-${month.padStart(2, '0')}-${day.padStart(2, '0')}` + this.hiddenFieldTarget.value = iso + this.picker.set({ selectedDates: [iso] }, { dates: true }) + } + } + this.element.dispatchEvent(new CustomEvent('datepicker:closed')) + } + this.fieldTarget.addEventListener('change', this.handleManualInput) + } + + disconnect() { + this.fieldTarget.removeEventListener('change', this.handleManualInput) + this.picker.destroy() + } +} diff --git a/assets/controllers/gallery_controller.js b/assets/controllers/gallery_controller.js new file mode 100644 index 0000000..8525658 --- /dev/null +++ b/assets/controllers/gallery_controller.js @@ -0,0 +1,29 @@ +import { Controller } from '@hotwired/stimulus' +import GLightbox from 'glightbox' + +/* stimulusFetch: 'lazy' */ +export default class extends Controller { + + static targets = ['item'] + + connect() { + this.lightbox = GLightbox({ + elements: this.itemTargets.map((el) => ({ + href: el.dataset.galleryHref, + type: 'image', + alt: el.dataset.galleryAlt ?? '', + })), + }) + + this.itemTargets.forEach((el, index) => { + el.addEventListener('click', (e) => { + e.preventDefault() + this.lightbox.openAt(index) + }) + }) + } + + disconnect() { + this.lightbox.destroy() + } +} diff --git a/assets/controllers/multiselect_controller.js b/assets/controllers/multiselect_controller.js new file mode 100644 index 0000000..a822d63 --- /dev/null +++ b/assets/controllers/multiselect_controller.js @@ -0,0 +1,36 @@ +import { Controller } from '@hotwired/stimulus' +import { useClickOutside } from 'stimulus-use' + +export default class extends Controller { + + static targets = [ 'label', 'dropdown', 'choice' ] + static values = { placeholder: String } + + connect() { + this.update() + useClickOutside(this) + } + + toggle() { + this.dropdownTarget.classList.toggle('hidden') + } + + update() { + let labels = [] + + this.choiceTargets.forEach((choice) => { + if (choice.checked) { + labels.push(choice.dataset.label) + } + this.labelTarget.innerText = labels.join(', ') + }) + + if (0 === labels.length) { + this.labelTarget.innerText = this.placeholderValue + } + } + + clickOutside(e) { + this.dropdownTarget.classList.toggle('hidden', true) + } +} \ No newline at end of file diff --git a/assets/controllers/price_calendar_controller.js b/assets/controllers/price_calendar_controller.js new file mode 100644 index 0000000..a94fddd --- /dev/null +++ b/assets/controllers/price_calendar_controller.js @@ -0,0 +1,166 @@ +import { Controller } from '@hotwired/stimulus' + +export default class extends Controller { + + static targets = ['mount', 'error', 'message', 'resetButton', 'day', 'dateFrom', 'dateTo', 'submit'] + + static values = { + hotelCode: String, + selectedFrom: String, + selectedTo: String, + calendarRefreshUrl: String, + } + + connect() { + this.startDate = null + this.endDate = null + this.sessionRestored = false + + // Re-apply highlights after every HTMX month swap (navigation or initial load). + this.mountTarget.addEventListener('htmx:afterSwap', () => requestAnimationFrame(() => this.initAfterLoad())) + this.mountTarget.addEventListener('htmx:responseError', () => this.showError()) + } + + initAfterLoad() { + // Restore from session values exactly once on the first swap. + if (!this.sessionRestored) { + this.sessionRestored = true + const from = this.selectedFromValue + const to = this.selectedToValue + if (from && to) { + this.startDate = from + this.endDate = to + if (this.hasResetButtonTarget) this.resetButtonTarget.classList.remove('hidden') + } + } + this.updateDisplay() + } + + selectDate(event) { + const btn = event.currentTarget + btn.blur() + const date = btn.dataset.date + const status = btn.dataset.status + + if (!status || status === 'blocked' || status === 'past') return + + if (this.startDate && this.endDate) { + this.resetSelection() + } + + if (!this.startDate) { + if (status === 'checkout-only') { + this.showMessage('Bitte wähle einen Anreisetag.') + return + } + this.startDate = date + this.endDate = null + this.updateDisplay() + this.showMessage('Bitte wähle das Abreisedatum.') + return + } + + if (date === this.startDate) { + this.resetSelection() + return + } + + const [from, to] = date < this.startDate ? [date, this.startDate] : [this.startDate, date] + + if (this.hasBlockedInRange(from, to)) { + this.resetSelection() + this.showMessage('Dieser Zeitraum enthält nicht verfügbare Daten.') + return + } + + const startBtn = this.dayTargets.find(b => b.dataset.date === from) + const minNights = parseInt(startBtn?.dataset.minNights) || 0 + const nights = (new Date(to) - new Date(from)) / 86400000 + + if (minNights > 0 && nights < minNights) { + this.showMessage(`Weniger als ${minNights} Nächte nur auf Anfrage.`) + } else { + this.hideMessage() + } + + this.startDate = from + this.endDate = to + this.updateDisplay() + this.activateSubmit(from, to) + this.saveAndRefreshSummary(from, to) + this.dispatch('range-select', { detail: { dateFrom: from, dateTo: to } }) + } + + hasBlockedInRange(from, to) { + for (const btn of this.dayTargets) { + const d = btn.dataset.date + const s = btn.dataset.status + if (d >= from && d < to && (s === 'blocked' || s === 'past' || s === 'checkout-only')) return true + } + return false + } + + updateDisplay() { + for (const btn of this.dayTargets) { + const d = btn.dataset.date + btn.classList.remove('pc-day--pending-start', 'pc-day--selected-start', 'pc-day--selected-end', 'pc-day--in-range') + if (!this.startDate) continue + if (d === this.startDate) { + btn.classList.add(this.endDate ? 'pc-day--selected-start' : 'pc-day--pending-start') + } else if (this.endDate) { + if (d === this.endDate) btn.classList.add('pc-day--selected-end') + else if (d > this.startDate && d < this.endDate) btn.classList.add('pc-day--in-range') + } + } + } + + activateSubmit(dateFrom, dateTo) { + if (this.hasDateFromTarget) this.dateFromTarget.value = dateFrom + if (this.hasDateToTarget) this.dateToTarget.value = dateTo + if (this.hasSubmitTarget) { + this.submitTarget.disabled = false + this.submitTarget.classList.remove('opacity-50', 'cursor-not-allowed', 'pointer-events-none') + } + if (this.hasResetButtonTarget) this.resetButtonTarget.classList.remove('hidden') + } + + resetSelection() { + this.startDate = null + this.endDate = null + this.updateDisplay() + this.hideMessage() + if (this.hasDateFromTarget) this.dateFromTarget.value = '' + if (this.hasDateToTarget) this.dateToTarget.value = '' + if (this.hasSubmitTarget) { + this.submitTarget.disabled = true + this.submitTarget.classList.add('opacity-50', 'cursor-not-allowed', 'pointer-events-none') + } + if (this.hasResetButtonTarget) this.resetButtonTarget.classList.add('hidden') + this.saveAndRefreshSummary() + } + + reset() { + this.resetSelection() + } + + saveAndRefreshSummary(dateFrom = '', dateTo = '') { + if (!this.hasCalendarRefreshUrlValue) return + htmx.ajax('POST', this.calendarRefreshUrlValue, { + values: { date_from: dateFrom, date_to: dateTo }, + swap: 'none', + target: this.element, + }) + } + + showMessage(text) { + if (this.hasMessageTarget) this.messageTarget.textContent = text + } + + hideMessage() { + if (this.hasMessageTarget) this.messageTarget.textContent = '' + } + + showError() { + if (this.hasErrorTarget) this.errorTarget.classList.remove('hidden') + } +} diff --git a/assets/controllers/tooltip_controller.js b/assets/controllers/tooltip_controller.js index 9658041..d834da8 100644 --- a/assets/controllers/tooltip_controller.js +++ b/assets/controllers/tooltip_controller.js @@ -1,5 +1,5 @@ import { Controller } from '@hotwired/stimulus' -import tippy from 'tippy.js' +import tippy, { hideAll } from 'tippy.js' export default class extends Controller { static targets = ['trigger', 'template'] @@ -27,6 +27,7 @@ export default class extends Controller { allowHTML: true, interactive: true, appendTo: document.body, + onShow(instance) { hideAll({ exclude: instance }) }, } } if (this.hasTriggerTarget) { diff --git a/assets/images/bg_summer.jpg b/assets/images/bg_summer.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0854c79818d600defbad43c39ef7597531bec227 GIT binary patch literal 859143 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%0Dl)lzP{hH8^| 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 w0d_`#=Y&fN6Gc< zsk);j&*b`i(@|!vRa02NHsiZu6UBh(&uewYo{LkaVKHgjfRn0@Z~>9oD&du88ZSlZ z;{w+!)k$xtb@V&&_yDmaAC8#9)IqN5I*bo5WqJdr(ZyutR&_s!iJL_f5v4s1AsdY> zBGNl{c?jpPY-s3uGqmn5b-CWBf$&Jw^&c6u(LqJcnbKw1H}6$diR6=P5CywAu=VnI zUV4#>!%pdB5%yHW!x`cg6;rD9W_#q&J#9qD-+}~k7oooc;9>Ff{Vty5pbxJpPSs5) z4F~mBDdNm3sXu&=CeUT#5+*h>u>p4T%MRaJD*eV3W^)6m3Sg%km2B z&XX?7)m3GBdUbEWP5%Ih&EKBDaf=c3$#oI2&vt6h@k*PuEn#qKt?D$>8I065*xkL02!u#hBL#*VGc@?AAPaV;HOl2A~ul@b6JqLo~Oy8LcJ zO~B;wj~Ufl6#9n32=g4DLto0=(Y(b8l!HKV>J_6b*V<29<%^bpBAp66Driy~IDP{+x`N@twJ;5(@O zSDR$n_k(#|6-`_;^2L}(NlaR03eR>_=b;;vD-qK8JwCQRozxwvF18V5{8IH$onC}S z213rXzP8FVbyWopVOvx6!l0RQ@)q8q>t!qWY%X@6f;!^o+77j)XeG4k0*L-rPfOBD zHr_rzx_ziKjJH)q9<$2xDhdApcJ8LBk?-c20X|S$@!3u64Z*{DCsoq9uhY52S@;a4 z^*ua*woc4)|x)H zu(dJk^|OxDY+yW`HEv=ci<_~m`L-7Vk!WO2;bv{wm*CabBU z&MLAh`KqLWt2~uudu`m_tN#Fs#=!Tn$B>s_sBAtoPNGJA){xRM?g7AKg<;ear7xRH z=P8;5X@Ew$yiC9q_Pxtnj@Zo8>!q2XlTH1Kafl2aRWDR$G}7xRa@G?u;;p1R^K}QX6dXhP~#dkQy zcR8ktwX<_YW7SAQK2e!uah%Tbto24XL;nEz&`1x@^4RqDVtZf=lD19J;)m#o&29pT z6l%~DtEvkgXGFV%#4s0AaI8-aa!=nJ z*<>1htsE2;E(&e(G>-6&$Ld#>fb**;masjc%uwV}l9nm;}O<_l&td=_b z#tNv`Gzzh;hw~d7pU)Eaji80p0H>&&uCfX99PW9cR`TYKp#rsovWtFWlZcyh16KP(DLI{{U-% zacB+nwOGk>D04~bLH_`wF!KTfVyt;Qo}7$pIfab`9Hy{mgvT<}5~g<@EGa9WsFcP) zB~91>J^`Iu>gI#eEVTqkV^?^ zOlUZ0=L%x4Hm!qN*VIc)k}mJ5S53r85&SFx`M1T!DzYX&N*WNgu4{-+b;V>9RI%r| zbId<~8J4J-xiSzzJuJKtZaB6Vq-iej9gVd}Y_x56eibt;sHw>7V5Fr)jtZ$2;&ouf z!jDlSu>;?&@vcCW68_3q-!?vix9a@wEsH{CEMG8ar(}8+S~$`%A`nRjpTfk8j-ie- z;f>GKw6?5Wpo#h$1sj%0`bHY2LvwzwUqo~oN`I0k)gO@$IS@;03qJ9 zoSQwMqttTdGv;dVE2>iSHr#jsT>IYG*`5guA%J{WZfg!XT3q#%S?-$6sDqX@ z5Soa#Ce+%d)#>;vqhu{lm>C&%m)M5HEr+q=t@$??r_?+_ zBbaz02p9*laj9Nd_0)AVZzOV<)@Mfr6v$1_EpA8vgM{?+w?;$zV+tex04E9$QD&5R zp0fSr6I4f29GhKQ+f~&?mZuvN~rem3<@XrVKDIf;)k5t&rJDX^76WaECfDNJ zi=Mbs^(H-e(;S2Pd!{*pRtNFwrJqvJL!u&fG-Gz|b=yr#zLs?99B#N5g{jZvEB5+5n4 zUMLZwTNVM2Ha#zm-j4`om@uD`2aUGz-?Bp_&vN;)+KPIrz0Fw}l_8Qc1baweZ~WaX zKl6raU_K}<6-XL)0DTpoR^}A>MNUH_W5@qp68 z&E$+8>$lbJ2s9GWO-UM&G;%a95#qhj6(BhsfWPO4br54d%4lrg-ndq6Lzlioq@|9Y zvHY5Y8mq=m)dI)XJ2AIjagPq5YBgXM@qa;a5wwGMc~#wOH62cnStN){E>$EI3g~%2 z(sv)sK6?}Mi~3;pYQZ=MA6|&1X2HANRhEY?&a&wylot@!3Y1nGg91QcZQ94L#xzWl zL_>a75D~aHHlSq4YiXTlrkIH-Yh6_~-TbDu(|hw_ez>yP_y@S8I~sC3C(uy9bDDg? z;C70Zh>$@5God$gZ*DDx85-7>?&TAJ$sUS2i%`{4*Qknk>f+x43aq5uB44i^yJBR32MxGTL3k#V&Rs=3 z8LbrbvW9_QVj&h)TVJo|g*>!0?&TkZL$Im3n<^7UTb@!x+at_m-?_7EyyLWJc?Xw3o6H^CrqNcnxd*QqCg(ZE?G_NK>q+d zbAXUhC{9gwM$YNhx^}Cffrr#oN#waaykLRI>__#)MB>r3t|ZkJGWr6hDvB69mZhos zVJj?_-6L+j`rHkt+qM?XLtb4*z%`H6Ik9@Cy2~(1iRfdC%#bWBj+?)j8y}wD*nClz zml53rhtTnqq~2~*r|BwCI(<_z$St=1#2;)9;^`3$UMbu*~tl*pVN|mIv;boe2DyO2Z&4lvDB?3lNDCB}|Z*GS8^z*&3kk@9-CB)}t z)s;1yS3^TZLwJ};0`A~gC??|e`6k#*O?i;*9$ptnc2H>klul^~%re`axzMq$9I_xcIM5V=at%7D*ub*Y3T8YiPBBW$z#Fh^cc# zsA^aYk_xD)$qGrm*{$jq7AL9a9;!g%-z{IoQv`0$DtA)GwGg#W{{V|)r&Nup2kV-(hvHoS_lhFL*BkvSn z8@WG~dw)rcX`%_GV$Sn)%Os^ajS_`WB$3vk5m}jbn7}r<_`kngA_mDbONTd)mvq}7 zg~rtrQ%OUe(ALwfEkhzmLdimZ3qJYVB z+IFR^)2#BmXrXCo>ZMUUk)i%w!|{vuxVIL=wK0g~Y=mdI?SAMONCl+fKG4*3l+83l zGpUvunr0Hj($)|IJPAlVtxiaEQm6uHFIAhEr$Y~^cs1`MudEUjZ>bXCtKEvY_ zCes(NOh$X6jnoK`@}jD%qKiDP`YCG{*Yy#`{*eBwII-ZKq;%QT{DAqMJWzo>D3#~y*cW;Kl|f4y*HLaK37RDWont> zrIDhNQdmVRT=HxQxEASuSLckaRJ2Q@6baApn$N?ul}4-5ZKpK^RewuK5@s~lA!2e) z=H!Ls0ncC5V@@4Fo+1IdNPBoCTQZEpE6Ot(42q*KReFb5UZyq-h@{>%BZ2`V*z=6} zB7CiMjCULl-3wmUH2S0G*===Jwaa3TG^~KjBQznH)W$*C{3asAi|`w-PH|&KL4?qw z^2%@^y9++kS*MdMnGReEvOCN5%Ks>PjN1sx&IiRMjK_{B8 z=5R+|w=HANHuTb&W6nyfTwi1ajU^X%oDo z94UOxAKW_E>Y|1!cqNd!2xSV%aeh?X6u)bJV+fArijOFqXxhALjKXb1a{TKpo?5RZ zmvY}|Ccu+m)&zcs6yYW-jo4gXYK~Oqik0goY3bwoUF_%)i-lul3$c2j?1kH!;>L1y`GRHlgx-`!LNl z4J35zL`fWSZ`rqMspsx*+~U-%Ya%w39Ou<5pZsA@L96PhR!P)T$g^1p-box0Zoi$e zn)r;6S>-el8-Oc7gI1jI)4@?wPU$@xB#CQ;YuK9~zxBmPA1d>kgaDBejSRD5Ed zjp;JVJf-L@RDzXiBB^CDH#SK?xKeo?Ex5?5Tp~d5hBjMdd(TB0#xK>b;&HAAuzeDqlcS9T6WMi;zD#VC?7BQ2{N%Ji0|$gA^Isjh}mk-F7Z zsAlsDkSySJZVmp|$ESX-DOlGI9fehlAnm?*_g0NBt*R?^1T~*pT_mXdOD6k}2M6*V z!=@=}bS!fS1F~dKCEyUYPZf3Ul+N_UJee+ePgz$(I2ANX<9uvaZOA^W0)4D~@#A_w zO`aWD5;TUM{{Zc2Y8=U<6h;+7t6o#***tj)H9YljG;bfBO}U98$7%jn1cDE@7~E$| zd|HDokl)c#5-@pPliTE`wDwlH9Ugg=W?7>sSk`Z=ce5fC8^+}3!;^8&5vqTV_DIoP zsT@o-ZpMB}tD~v3=4F#R$|00jyTsE}9m^2qRlzs7Ay=Do-xsyg>RUe8@jxgdq$K2e z_DScG$3gVjKkl`aRt9Qkr8||QBGM;3fps_b;@FKaY?mlK^M0yWBW@1|>XbbWPd=IP z5}9(;h)`G4$584R4>6T47>jk$#XL>%in@`C+Rbs9IBsED9**S6eNIVj@VeySZ$o0)8s*X|wu4YKG zu0Omf^L-(xAg!Y^%&@IkaBX=~%#Z&7$#(EZ&s=60od&6ehZjk^8dzvm{);cmwQ}k_ z@|flmvmf2QM2dYO-+3VM+;Q!XOCFFy!bUS`ERx;IwC8zUAMWZb)`=RPYRbV!m=Pt` z>;XwFe&7&sQ%9(glR1(b6=V4d90x8Oe##qBf`+=d_rg26qZG&YI3?6Y1vClm&_d+QUGKGA4%!ah_(@^kWA1=;W#MB+|8#dLpGz# z>h&AKvUzh%u}2#-pDtu!dxCp|b;2Q;ns~3U_Tdm=>v9J0e=G5dG6y`_9&c1zabZ_zD5&#X zyD`h^R6Q*vOm%c*59QoJU(?$SkiI9ejtG%ucqB5g149#P%sK_Q~A3}eF&l^?4 z1Nvg)NRT#4tK~V*Ex;TrBjk0thL);|mDOtEt3^XG3JQ`40Q4Th{`juxSroY#K<5Kt zIHk;Cj)IE2JF787W%_xczo-Rb8CZKBEJs2yR$DGDgk6gWHwO*0jGA~yRQWzbP)t>{ z^HfH!{PD0h7yFPuEJ2(6Ve^cPe9;nKILJ{NYf)!8W=#1#6)d8*kfY58!dXi7BzCYJ zeXonMX3mgY^W7Qd4&{e~z6=VJ8-c4!d$t{-Kt^O-;aa%jqI24;+xMj|XxoK0ZB2Ae+nbUH+Q$xov53n%w4rrg<{rr`>XD_&BJ$OY`CG!m zL14vMijqfiFNeoXadS^Tzq*%Gh5rEBvFch_>N6(I+LO#N(8jX37hQyH-rt`XqoNxl z@Z9RMX>)^bXf&&|30;=ZQx7snNTm%RVanL4xBmd5O}^OBaBGW*=CFWtNdeWgYE^y%9b^vn{ocHc8e{LwpohaZwPHAM|ZVHeXVLJTi4CH>oxs1Ru*4;b53K z%r-Bw7lKV5dHEryiYTgKs^O!NL``-k<#|^5;G5yW#iMBD7^a)NDE!(?<_zwOFp`+h zPXfrYCAet{vZ=q#?R*?<0y5j8l^{FvEh|=Fj)Ean9a4I6!U9g~TK@n9T#sXci08-ov&}#3ur8NsmdF0@*Du8*E6kn{-TPv -K(4kvd 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�yL;A$yrnIHT~^=`1P6(w{B;Z=GuD` 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�D?`$?ltYS)j9z6>`Cn<$pm(nq>41TJ2X~9Vpm< zhE304;f<}_9u768C6c+|*eWAuibDr0P13#sYu^@;-%0AtEA`rDRBXaL%(#-0LJDm| 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%0AU6e<%F!fevwL4#82n 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 literal 0 HcmV?d00001 diff --git a/assets/images/icons.svg b/assets/images/icons.svg index 6d39de6..0dbe931 100644 --- a/assets/images/icons.svg +++ b/assets/images/icons.svg @@ -1,208 +1,69 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -210,41 +71,24 @@ - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + diff --git a/assets/mixins/use_fetch.js b/assets/mixins/use_fetch.js new file mode 100644 index 0000000..81b3545 --- /dev/null +++ b/assets/mixins/use_fetch.js @@ -0,0 +1,29 @@ +export const useFetch = controller => { + Object.assign(controller, { + checkStatus(response) { + if (response.status >= 200 && response.status < 300) { + return response + } else { + const error = new Error(response.statusText) + error.response = response + throw error + } + }, + parseJSON(response) { + return response.json() + }, + parseHTML(response) { + return response.text() + }, + getInitObject(method = 'get', body = null) { + return { + method, + body, + credentials: 'include', + headers: { + 'X-Requested-With': 'XMLHttpRequest' + } + } + } + }) +} diff --git a/assets/styles/_base.css b/assets/styles/_base.css index 7d1f8e9..a91a522 100644 --- a/assets/styles/_base.css +++ b/assets/styles/_base.css @@ -53,6 +53,10 @@ background-image: url('../images/bg_5.jpg'), linear-gradient(190deg, rgba(24, 82, 123, 1) 0%, rgba(22, 88, 131, 1) 62%, rgba(0, 112, 224, 1) 100%);; } +.bg-outer--summer { + background-image: url('../images/bg_summer.jpg'), linear-gradient(190deg, rgba(24, 82, 123, 1) 0%, rgba(22, 88, 131, 1) 62%, rgba(0, 112, 224, 1) 100%);; +} + .sbw .bg-outer--2 { background-image: url('../images/bg_7.jpg'), linear-gradient(190deg, rgba(24, 82, 123, 1) 0%, rgba(22, 88, 131, 1) 62%, rgba(0, 112, 224, 1) 100%);; } diff --git a/assets/styles/_components.css b/assets/styles/_components.css index 062c292..4e0898f 100644 --- a/assets/styles/_components.css +++ b/assets/styles/_components.css @@ -1,7 +1,9 @@ @import "components/button.css"; -@import "components/datatable.css"; @import "components/forms.css"; +@import "components/gallery.css"; @import "components/pagination.css"; +@import "components/price_calendar.css"; @import "components/toast.css"; @import "components/tooltip.css"; @import "components/typography.css"; +@import "components/rte-content.css"; diff --git a/assets/styles/_components_admin.css b/assets/styles/_components_admin.css new file mode 100644 index 0000000..a1a098b --- /dev/null +++ b/assets/styles/_components_admin.css @@ -0,0 +1,10 @@ +@import "components/autocomplete.css"; +@import "components/badge.css"; +@import "components/button.css"; +@import "components/datatable.css"; +@import "components/datepicker.css"; +@import "components/forms.css"; +@import "components/pagination.css"; +@import "components/toast.css"; +@import "components/tooltip.css"; +@import "components/typography.css"; diff --git a/assets/styles/admin.css b/assets/styles/admin.css new file mode 100644 index 0000000..cff7915 --- /dev/null +++ b/assets/styles/admin.css @@ -0,0 +1,7 @@ +@import "tailwindcss/base"; +@import "_base.css"; + +@import "tailwindcss/components"; +@import "_components_admin.css"; + +@import "tailwindcss/utilities"; diff --git a/assets/styles/components/autocomplete.css b/assets/styles/components/autocomplete.css new file mode 100644 index 0000000..dbccfef --- /dev/null +++ b/assets/styles/components/autocomplete.css @@ -0,0 +1,33 @@ +.autocomplete { + @apply relative w-full; +} + +.autocomplete[data-loading="true"]:after { + @apply block absolute top-0 right-0; + @apply absolute w-4 h-4 rounded-full right-0 mr-4; + content: ""; + border: 3px solid rgba(0, 0, 0, 0.12); + border-right: 3px solid rgba(0, 0, 0, 0.48); + top: 50%; + transform: translateY(-50%); + animation: rotate 1s infinite linear; +} + +.autocomplete-icon { + @apply absolute top-1/2 right-0 transform -translate-y-1/2 mr-4; +} +.autocomplete[data-loading="true"] .autocomplete-icon { + @apply hidden; +} + +.autocomplete-result-list { + @apply bg-white shadow-md max-h-64 overflow-y-auto; +} + +.autocomplete-result { + @apply p-2; +} +.autocomplete-result:hover, +.autocomplete-result[aria-selected="true"] { + @apply bg-gray-200; +} diff --git a/assets/styles/components/badge.css b/assets/styles/components/badge.css new file mode 100644 index 0000000..0fe7b42 --- /dev/null +++ b/assets/styles/components/badge.css @@ -0,0 +1,3 @@ +.badge { + @apply inline-flex items-center rounded-md px-1.5 py-0.5 text-xs font-medium whitespace-nowrap; +} diff --git a/assets/styles/components/datepicker.css b/assets/styles/components/datepicker.css new file mode 100644 index 0000000..ce0a53c --- /dev/null +++ b/assets/styles/components/datepicker.css @@ -0,0 +1,7 @@ +@import "vanilla-calendar-pro/styles/index.css"; +@import "vanilla-calendar-pro/styles/themes/light.css"; + +[data-vc-theme=light] .vc-date[data-vc-date-selected] .vc-date__btn, +[data-vc-theme=light] .vc-date[data-vc-date-selected] .vc-date__btn:hover { + background-color: theme('colors.secondary'); +} diff --git a/assets/styles/components/gallery.css b/assets/styles/components/gallery.css new file mode 100644 index 0000000..bc0fd92 --- /dev/null +++ b/assets/styles/components/gallery.css @@ -0,0 +1 @@ +@import "glightbox/dist/css/glightbox.min.css"; diff --git a/assets/styles/components/price_calendar.css b/assets/styles/components/price_calendar.css new file mode 100644 index 0000000..fba8126 --- /dev/null +++ b/assets/styles/components/price_calendar.css @@ -0,0 +1,41 @@ +.pc-day { + @apply relative w-full text-center py-1 px-0.5 text-sm leading-tight rounded text-white cursor-pointer; +} + +.pc-day--out-of-month { + @apply pointer-events-none opacity-0; +} + +.pc-day[data-status="ok"] { + @apply bg-emerald-500; +} + +.pc-day[data-status="blocked-to-ok"] { + background: linear-gradient(to bottom right, theme('colors.gray.400') 50%, theme('colors.emerald.500') 50%); +} + +.pc-day[data-status="checkout-only"] { + background: linear-gradient(to bottom right, theme('colors.emerald.500') 50%, theme('colors.gray.400') 50%); +} + +.pc-day[data-status="past"] { + @apply bg-transparent text-gray-400 cursor-default; +} + +.pc-day[data-status="blocked"] { + @apply bg-gray-400 cursor-default; +} + +.pc-day[data-status=""], .pc-day:not([data-status]) { + @apply text-gray-400 cursor-default; +} + +.pc-day.pc-day--pending-start, +.pc-day.pc-day--selected-start, +.pc-day.pc-day--selected-end { + @apply bg-none outline-none bg-secondary text-gray-700; +} + +.pc-day.pc-day--in-range { + @apply bg-none bg-secondary text-gray-700 opacity-55; +} diff --git a/assets/styles/components/rte-content.css b/assets/styles/components/rte-content.css new file mode 100644 index 0000000..9df8be9 --- /dev/null +++ b/assets/styles/components/rte-content.css @@ -0,0 +1,13 @@ +.rte-content { + p { + @apply pb-4; + } + + ul { + @apply list-disc p-4; + } + + ol { + @apply list-decimal p-4; + } +} diff --git a/composer.json b/composer.json index 14d8f40..24528ee 100644 --- a/composer.json +++ b/composer.json @@ -56,6 +56,7 @@ "symfony/translation": "6.4.*", "symfony/twig-bundle": "6.4.*", "symfony/uid": "6.4.*", + "symfony/ux-twig-component": "^2.36", "symfony/validator": "6.4.*", "symfony/web-link": "6.4.*", "symfony/webpack-encore-bundle": "^2.2", diff --git a/composer.lock b/composer.lock index 07f7361..779dbee 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "aa69dee5968ec6f7c3f152b8a8a6100d", + "content-hash": "f04202a445d42ebff0dd0e8dce335163", "packages": [ { "name": "carbonphp/carbon-doctrine-types", @@ -3793,16 +3793,16 @@ }, { "name": "phpseclib/phpseclib", - "version": "3.0.55", + "version": "3.0.56", "source": { "type": "git", "url": "https://github.com/phpseclib/phpseclib.git", - "reference": "db9744e6d47e742b1f974e965ad49bdd041105af" + "reference": "7adbbe38cde25e2df2116dbf2673c407e24fa305" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/db9744e6d47e742b1f974e965ad49bdd041105af", - "reference": "db9744e6d47e742b1f974e965ad49bdd041105af", + "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/7adbbe38cde25e2df2116dbf2673c407e24fa305", + "reference": "7adbbe38cde25e2df2116dbf2673c407e24fa305", "shasum": "" }, "require": { @@ -3883,7 +3883,7 @@ ], "support": { "issues": "https://github.com/phpseclib/phpseclib/issues", - "source": "https://github.com/phpseclib/phpseclib/tree/3.0.55" + "source": "https://github.com/phpseclib/phpseclib/tree/3.0.56" }, "funding": [ { @@ -3899,7 +3899,7 @@ "type": "tidelift" } ], - "time": "2026-06-14T23:24:10+00:00" + "time": "2026-08-03T04:36:50+00:00" }, { "name": "phpstan/phpdoc-parser", @@ -10080,6 +10080,95 @@ ], "time": "2025-12-23T15:07:59+00:00" }, + { + "name": "symfony/ux-twig-component", + "version": "v2.36.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/ux-twig-component.git", + "reference": "d64b068d8339e905cd48974bdd6e9ba54dc8f247" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/ux-twig-component/zipball/d64b068d8339e905cd48974bdd6e9ba54dc8f247", + "reference": "d64b068d8339e905cd48974bdd6e9ba54dc8f247", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/dependency-injection": "^5.4|^6.0|^7.0|^8.0", + "symfony/deprecation-contracts": "^2.2|^3.0", + "symfony/event-dispatcher": "^5.4|^6.0|^7.0|^8.0", + "symfony/property-access": "^5.4|^6.0|^7.0|^8.0", + "twig/twig": "^3.10.3" + }, + "conflict": { + "symfony/config": "<5.4.0" + }, + "require-dev": { + "symfony/console": "^5.4|^6.0|^7.0|^8.0", + "symfony/css-selector": "^5.4|^6.0|^7.0|^8.0", + "symfony/dom-crawler": "^5.4|^6.0|^7.0|^8.0", + "symfony/framework-bundle": "^5.4|^6.0|^7.0|^8.0", + "symfony/phpunit-bridge": "^6.0|^7.0|^8.0", + "symfony/stimulus-bundle": "^2.9.1|^3.0", + "symfony/twig-bundle": "^5.4|^6.0|^7.0|^8.0", + "symfony/webpack-encore-bundle": "^1.15|^2.3.0", + "twig/extra-bundle": "^3.10.3", + "twig/html-extra": "^3.10.3" + }, + "type": "symfony-bundle", + "extra": { + "thanks": { + "url": "https://github.com/symfony/ux", + "name": "symfony/ux" + } + }, + "autoload": { + "psr-4": { + "Symfony\\UX\\TwigComponent\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Twig components for Symfony", + "homepage": "https://symfony.com", + "keywords": [ + "components", + "symfony-ux", + "twig" + ], + "support": { + "source": "https://github.com/symfony/ux-twig-component/tree/v2.36.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-04-03T05:13:59+00:00" + }, { "name": "symfony/validator", "version": "v6.4.43", @@ -13028,16 +13117,16 @@ }, { "name": "rector/rector", - "version": "2.5.9", + "version": "2.6.0", "source": { "type": "git", "url": "https://github.com/rectorphp/rector.git", - "reference": "858b1fb95d94f658b54c01080bf7b6ae97274536" + "reference": "24ef17c06737a6272806c5cca32b860449efe1ba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/rectorphp/rector/zipball/858b1fb95d94f658b54c01080bf7b6ae97274536", - "reference": "858b1fb95d94f658b54c01080bf7b6ae97274536", + "url": "https://api.github.com/repos/rectorphp/rector/zipball/24ef17c06737a6272806c5cca32b860449efe1ba", + "reference": "24ef17c06737a6272806c5cca32b860449efe1ba", "shasum": "" }, "require": { @@ -13076,7 +13165,7 @@ ], "support": { "issues": "https://github.com/rectorphp/rector/issues", - "source": "https://github.com/rectorphp/rector/tree/2.5.9" + "source": "https://github.com/rectorphp/rector/tree/2.6.0" }, "funding": [ { @@ -13084,7 +13173,7 @@ "type": "github" } ], - "time": "2026-07-30T22:10:00+00:00" + "time": "2026-08-03T09:01:59+00:00" }, { "name": "sebastian/cli-parser", diff --git a/config/bundles.php b/config/bundles.php index de9164d..7bc0cb7 100644 --- a/config/bundles.php +++ b/config/bundles.php @@ -19,4 +19,5 @@ return [ Flagception\Bundle\FlagceptionBundle\FlagceptionBundle::class => ['all' => true], Knp\Bundle\MenuBundle\KnpMenuBundle::class => ['all' => true], Knp\Bundle\PaginatorBundle\KnpPaginatorBundle::class => ['all' => true], + Symfony\UX\TwigComponent\TwigComponentBundle::class => ['all' => true], ]; diff --git a/config/packages/security.yaml b/config/packages/security.yaml index a87c278..1386ffa 100644 --- a/config/packages/security.yaml +++ b/config/packages/security.yaml @@ -14,7 +14,10 @@ security: users: mailjet: password: '%env(MAILJET_WEBHOOK_BASIC_PASSWORD)%' - roles: ['ROLE_MAILJET_WEBHOOK'] + roles: [ ROLE_MAILJET_WEBHOOK ] + role_hierarchy: + ROLE_ADMIN: [ ROLE_GROUPS_ADMIN ] + ROLE_GROUPS_ADMIN: [ ROLE_GROUPS_MANAGER ] firewalls: dev: pattern: ^/(_(profiler|wdt)|css|images|js)/ @@ -49,7 +52,6 @@ security: access_control: - { path: ^/webhooks/mailjet/newsletter$, roles: ROLE_MAILJET_WEBHOOK, requires_channel: https } - { path: ^/authorize, roles: IS_AUTHENTICATED_REMEMBERED, requires_channel: https } - - { path: ^/admin, roles: ROLE_ADMIN, requires_channel: https } - { path: ^/, roles: PUBLIC_ACCESS, requires_channel: https } when@test: diff --git a/config/packages/twig_component.yaml b/config/packages/twig_component.yaml new file mode 100644 index 0000000..fd17ac6 --- /dev/null +++ b/config/packages/twig_component.yaml @@ -0,0 +1,5 @@ +twig_component: + anonymous_template_directory: 'components/' + defaults: + # Namespace & directory for components + App\Twig\Components\: 'components/' diff --git a/config/services.yaml b/config/services.yaml index 81c7f1b..ebd8ae9 100644 --- a/config/services.yaml +++ b/config/services.yaml @@ -13,6 +13,7 @@ parameters: travel_snapshot_retention_buffer_days: '%env(int:APP_TRAVEL_SNAPSHOT_RETENTION_BUFFER_DAYS)%' default_email_from: '%env(APP_DEFAULT_EMAIL_FROM)%' default_email_to: '%env(APP_DEFAULT_EMAIL_TO)%' + accommodation_inquiry_email: '%env(ACCOMMODATION_INQUIRY_EMAIL)%' # MailJet list ids and their labels mailjet_lists: @@ -43,6 +44,10 @@ parameters: shoe_size_min: 35 shoe_size_max: 50 + # Season data + season_winter_from: '%env(APP_SEASON_WINTER_FROM)%' + season_summer_from: '%env(APP_SEASON_SUMMER_FROM)%' + # domain mapping for theme, gtm id and cmp url domain_config: ep-reisen.de: @@ -116,6 +121,14 @@ services: method: createMainMenu alias: admin_main + App\Menu\GroupsMenuBuilder: + arguments: + $factory: '@knp_menu.factory' + tags: + - name: knp_menu.menu_builder + method: createMainMenu + alias: groups_main + App\Service\BpnXmlSyncManager: arguments: $xmlSource: '@xml_source.storage' @@ -250,10 +263,33 @@ services: from: '%default_email_from%' to: '%default_email_to%' + App\Service\AccommodationBookingService: + arguments: + $officeEmail: '%accommodation_inquiry_email%' + + App\Service\GroupsPriceCalculator: + arguments: + $config: + runningCostsEur: '%env(float:APP_RUNNING_COSTS_FACTOR_EUR)%' + runningCostsChf: '%env(float:APP_RUNNING_COSTS_FACTOR_CHF)%' + undersubscription30Eur: '%env(float:APP_UNDERSUBSCRIPTION_SURCHARGE_30_EUR)%' + undersubscription30Chf: '%env(float:APP_UNDERSUBSCRIPTION_SURCHARGE_30_CHF)%' + undersubscription40Eur: '%env(float:APP_UNDERSUBSCRIPTION_SURCHARGE_40_EUR)%' + undersubscription40Chf: '%env(float:APP_UNDERSUBSCRIPTION_SURCHARGE_40_CHF)%' + App\Validator\Constraints\ParticipantValidator: arguments: $bodyDimensionRanges: '%body_dimension_ranges%' + App\BpnConnect\AbstractApiClient: + abstract: true + arguments: + $baseUrl: '%env(default::BPN_CONNECT_BASE_URL)%' + $apiKey: '%env(default::BPN_CONNECT_API_KEY)%' + + App\BpnConnect\ContingentsClient: + parent: App\BpnConnect\AbstractApiClient + App\Service\MailjetApiClient: arguments: $apiKey: '%env(default::MAILJET_API_KEY)%' diff --git a/deploy.php b/deploy.php index bc713a9..47e39c7 100644 --- a/deploy.php +++ b/deploy.php @@ -102,6 +102,26 @@ host('staging') ->set('rsync_src', __DIR__) ->set('rsync', $rsyncOptions) ->set('cachetool_args', '--web=SymfonyHttpClient --web-path={{current_path}}/public/ --web-url=https://my.ep-reisen.net --web-basic-auth=myep:staging') + ->add('shared_files', [ + 'public/.htpasswd', + ]) +; + +host('develop') + ->setHostname('185.243.135.29') + ->setRemoteUser('p704161') + ->setForwardAgent(true) + ->setSshMultiplexing(true) + ->setDeployPath('/home/www/p704161/html/myep-develop') + ->set('writable_mode', 'chmod') + ->set('http_user', 'p704161') + ->set('bin/php', '/usr/local/bin/php') + ->set('rsync_src', __DIR__) + ->set('rsync', $rsyncOptions) + ->set('cachetool_args', '--web=SymfonyHttpClient --web-path={{current_path}}/public/ --web-url=https://mydev.ep-reisen.net --web-basic-auth=myep:develop') + ->add('shared_files', [ + 'public/.htpasswd', + ]) ; task('deploy', [ diff --git a/migrations/Version20260625092525.php b/migrations/Version20260625092525.php new file mode 100644 index 0000000..24bbffa --- /dev/null +++ b/migrations/Version20260625092525.php @@ -0,0 +1,59 @@ +addSql('CREATE TABLE accommodation (id INT AUTO_INCREMENT NOT NULL, created_by_id INT DEFAULT NULL, updated_by_id INT DEFAULT NULL, name VARCHAR(255) NOT NULL, code VARCHAR(16) NOT NULL, min_pax_summer INT NOT NULL, max_adolescent_age INT NOT NULL, currency VARCHAR(3) NOT NULL, created_at DATETIME NOT NULL COMMENT \'(DC2Type:datetime_immutable)\', updated_at DATETIME DEFAULT NULL COMMENT \'(DC2Type:datetime_immutable)\', UNIQUE INDEX UNIQ_2D38541277153098 (code), INDEX IDX_2D385412B03A8386 (created_by_id), INDEX IDX_2D385412896DBBDE (updated_by_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB'); + $this->addSql('CREATE TABLE accommodation_price (id INT AUTO_INCREMENT NOT NULL, accommodation_id INT NOT NULL, created_by_id INT DEFAULT NULL, updated_by_id INT DEFAULT NULL, date_from DATE NOT NULL COMMENT \'(DC2Type:date_immutable)\', date_to DATE NOT NULL COMMENT \'(DC2Type:date_immutable)\', included_pax INT NOT NULL, price_per_night INT NOT NULL, price_additional_person INT NOT NULL, min_nights INT NOT NULL, created_at DATETIME NOT NULL COMMENT \'(DC2Type:datetime_immutable)\', updated_at DATETIME DEFAULT NULL COMMENT \'(DC2Type:datetime_immutable)\', INDEX IDX_C67701238F3692CD (accommodation_id), INDEX IDX_C6770123B03A8386 (created_by_id), INDEX IDX_C6770123896DBBDE (updated_by_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB'); + $this->addSql('CREATE TABLE additional_service (id INT AUTO_INCREMENT NOT NULL, accommodation_id INT NOT NULL, created_by_id INT DEFAULT NULL, updated_by_id INT DEFAULT NULL, label VARCHAR(255) NOT NULL, price INT NOT NULL, type VARCHAR(20) NOT NULL, date_from DATE NOT NULL COMMENT \'(DC2Type:date_immutable)\', date_to DATE NOT NULL COMMENT \'(DC2Type:date_immutable)\', `grouping` VARCHAR(128) NOT NULL, sorting INT NOT NULL, created_at DATETIME NOT NULL COMMENT \'(DC2Type:datetime_immutable)\', updated_at DATETIME DEFAULT NULL COMMENT \'(DC2Type:datetime_immutable)\', INDEX IDX_E01749268F3692CD (accommodation_id), INDEX IDX_E0174926B03A8386 (created_by_id), INDEX IDX_E0174926896DBBDE (updated_by_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB'); + $this->addSql('CREATE TABLE board_service (id INT AUTO_INCREMENT NOT NULL, accommodation_id INT NOT NULL, created_by_id INT DEFAULT NULL, updated_by_id INT DEFAULT NULL, label VARCHAR(255) NOT NULL, price INT NOT NULL, date_from DATE NOT NULL COMMENT \'(DC2Type:date_immutable)\', date_to DATE NOT NULL COMMENT \'(DC2Type:date_immutable)\', sorting INT NOT NULL, created_at DATETIME NOT NULL COMMENT \'(DC2Type:datetime_immutable)\', updated_at DATETIME DEFAULT NULL COMMENT \'(DC2Type:datetime_immutable)\', INDEX IDX_A983B2DD8F3692CD (accommodation_id), INDEX IDX_A983B2DDB03A8386 (created_by_id), INDEX IDX_A983B2DD896DBBDE (updated_by_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB'); + $this->addSql('ALTER TABLE accommodation ADD CONSTRAINT FK_2D385412B03A8386 FOREIGN KEY (created_by_id) REFERENCES user (id) ON DELETE SET NULL'); + $this->addSql('ALTER TABLE accommodation ADD CONSTRAINT FK_2D385412896DBBDE FOREIGN KEY (updated_by_id) REFERENCES user (id) ON DELETE SET NULL'); + $this->addSql('ALTER TABLE accommodation_price ADD CONSTRAINT FK_C67701238F3692CD FOREIGN KEY (accommodation_id) REFERENCES accommodation (id)'); + $this->addSql('ALTER TABLE accommodation_price ADD CONSTRAINT FK_C6770123B03A8386 FOREIGN KEY (created_by_id) REFERENCES user (id) ON DELETE SET NULL'); + $this->addSql('ALTER TABLE accommodation_price ADD CONSTRAINT FK_C6770123896DBBDE FOREIGN KEY (updated_by_id) REFERENCES user (id) ON DELETE SET NULL'); + $this->addSql('ALTER TABLE additional_service ADD CONSTRAINT FK_E01749268F3692CD FOREIGN KEY (accommodation_id) REFERENCES accommodation (id)'); + $this->addSql('ALTER TABLE additional_service ADD CONSTRAINT FK_E0174926B03A8386 FOREIGN KEY (created_by_id) REFERENCES user (id) ON DELETE SET NULL'); + $this->addSql('ALTER TABLE additional_service ADD CONSTRAINT FK_E0174926896DBBDE FOREIGN KEY (updated_by_id) REFERENCES user (id) ON DELETE SET NULL'); + $this->addSql('ALTER TABLE board_service ADD CONSTRAINT FK_A983B2DD8F3692CD FOREIGN KEY (accommodation_id) REFERENCES accommodation (id)'); + $this->addSql('ALTER TABLE board_service ADD CONSTRAINT FK_A983B2DDB03A8386 FOREIGN KEY (created_by_id) REFERENCES user (id) ON DELETE SET NULL'); + $this->addSql('ALTER TABLE board_service ADD CONSTRAINT FK_A983B2DD896DBBDE FOREIGN KEY (updated_by_id) REFERENCES user (id) ON DELETE SET NULL'); + } + + public function down(Schema $schema): void + { + // this down() migration is auto-generated, please modify it to your needs + $this->addSql('ALTER TABLE accommodation DROP FOREIGN KEY FK_2D385412B03A8386'); + $this->addSql('ALTER TABLE accommodation DROP FOREIGN KEY FK_2D385412896DBBDE'); + $this->addSql('ALTER TABLE accommodation_price DROP FOREIGN KEY FK_C67701238F3692CD'); + $this->addSql('ALTER TABLE accommodation_price DROP FOREIGN KEY FK_C6770123B03A8386'); + $this->addSql('ALTER TABLE accommodation_price DROP FOREIGN KEY FK_C6770123896DBBDE'); + $this->addSql('ALTER TABLE additional_service DROP FOREIGN KEY FK_E01749268F3692CD'); + $this->addSql('ALTER TABLE additional_service DROP FOREIGN KEY FK_E0174926B03A8386'); + $this->addSql('ALTER TABLE additional_service DROP FOREIGN KEY FK_E0174926896DBBDE'); + $this->addSql('ALTER TABLE board_service DROP FOREIGN KEY FK_A983B2DD8F3692CD'); + $this->addSql('ALTER TABLE board_service DROP FOREIGN KEY FK_A983B2DDB03A8386'); + $this->addSql('ALTER TABLE board_service DROP FOREIGN KEY FK_A983B2DD896DBBDE'); + $this->addSql('DROP TABLE accommodation'); + $this->addSql('DROP TABLE accommodation_price'); + $this->addSql('DROP TABLE additional_service'); + $this->addSql('DROP TABLE board_service'); + } +} diff --git a/migrations/Version20260625154838.php b/migrations/Version20260625154838.php new file mode 100644 index 0000000..27076f2 --- /dev/null +++ b/migrations/Version20260625154838.php @@ -0,0 +1,31 @@ +addSql('ALTER TABLE accommodation_price ADD price_per_night_override INT DEFAULT NULL'); + } + + public function down(Schema $schema): void + { + // this down() migration is auto-generated, please modify it to your needs + $this->addSql('ALTER TABLE accommodation_price DROP price_per_night_override'); + } +} diff --git a/migrations/Version20260625173941.php b/migrations/Version20260625173941.php new file mode 100644 index 0000000..05d216b --- /dev/null +++ b/migrations/Version20260625173941.php @@ -0,0 +1,31 @@ +addSql('ALTER TABLE additional_service ADD selection_group VARCHAR(128) DEFAULT NULL, DROP `grouping`'); + } + + public function down(Schema $schema): void + { + // this down() migration is auto-generated, please modify it to your needs + $this->addSql('ALTER TABLE additional_service ADD `grouping` VARCHAR(128) NOT NULL, DROP selection_group'); + } +} diff --git a/migrations/Version20260627121823.php b/migrations/Version20260627121823.php new file mode 100644 index 0000000..0932ce6 --- /dev/null +++ b/migrations/Version20260627121823.php @@ -0,0 +1,35 @@ +addSql('ALTER TABLE accommodation_price ADD accept_undersubscription TINYINT(1) NOT NULL'); + $this->addSql('DROP INDEX IDX_NEWSLETTER_CONSENT_EMAIL ON newsletter_consent'); + $this->addSql('ALTER TABLE newsletter_opt_in_request RENAME INDEX uniq_70505214b3bc57da TO UNIQ_EC0365DB3BC57DA'); + } + + public function down(Schema $schema): void + { + // this down() migration is auto-generated, please modify it to your needs + $this->addSql('ALTER TABLE accommodation_price DROP accept_undersubscription'); + $this->addSql('CREATE INDEX IDX_NEWSLETTER_CONSENT_EMAIL ON newsletter_consent (email)'); + $this->addSql('ALTER TABLE newsletter_opt_in_request RENAME INDEX uniq_ec0365db3bc57da TO UNIQ_70505214B3BC57DA'); + } +} diff --git a/migrations/Version20260627130625.php b/migrations/Version20260627130625.php new file mode 100644 index 0000000..75e2ab8 --- /dev/null +++ b/migrations/Version20260627130625.php @@ -0,0 +1,31 @@ +addSql('ALTER TABLE accommodation_price ADD price_additional_person_override INT DEFAULT NULL'); + } + + public function down(Schema $schema): void + { + // this down() migration is auto-generated, please modify it to your needs + $this->addSql('ALTER TABLE accommodation_price DROP price_additional_person_override'); + } +} diff --git a/migrations/Version20260630080409.php b/migrations/Version20260630080409.php new file mode 100644 index 0000000..abb0d12 --- /dev/null +++ b/migrations/Version20260630080409.php @@ -0,0 +1,31 @@ +addSql('ALTER TABLE accommodation_price ADD season VARCHAR(20) NOT NULL'); + } + + public function down(Schema $schema): void + { + // this down() migration is auto-generated, please modify it to your needs + $this->addSql('ALTER TABLE accommodation_price DROP season'); + } +} diff --git a/migrations/Version20260630085856.php b/migrations/Version20260630085856.php new file mode 100644 index 0000000..ab5c192 --- /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/migrations/Version20260702084714.php b/migrations/Version20260702084714.php new file mode 100644 index 0000000..dae94a9 --- /dev/null +++ b/migrations/Version20260702084714.php @@ -0,0 +1,43 @@ +addSql('ALTER TABLE accommodation_price ADD type VARCHAR(20) DEFAULT NULL'); + + $this->addSql(<<<'SQL' + INSERT INTO accommodation_price + (accommodation_id, date_from, date_to, season, included_pax, min_nights, + price_per_night, price_additional_person, accept_undersubscription, type, + created_at, updated_at, created_by_id, updated_by_id) + SELECT accommodation_id, date_from, date_to, season, included_pax, min_nights, + price_per_night_override, price_additional_person_override, accept_undersubscription, 'discount', + created_at, updated_at, created_by_id, updated_by_id + FROM accommodation_price + WHERE price_per_night_override IS NOT NULL + SQL); + + $this->addSql('ALTER TABLE accommodation_price DROP price_per_night_override, DROP price_additional_person_override'); + } + + public function down(Schema $schema): void + { + $this->addSql('ALTER TABLE accommodation_price ADD price_per_night_override INT DEFAULT NULL, ADD price_additional_person_override INT DEFAULT NULL, DROP type'); + } +} diff --git a/migrations/Version20260706120805.php b/migrations/Version20260706120805.php new file mode 100644 index 0000000..ba84883 --- /dev/null +++ b/migrations/Version20260706120805.php @@ -0,0 +1,33 @@ +addSql('ALTER TABLE accommodation DROP min_pax_summer'); + $this->addSql('ALTER TABLE accommodation_price ADD accept_short_term TINYINT(1) NOT NULL'); + } + + public function down(Schema $schema): void + { + // this down() migration is auto-generated, please modify it to your needs + $this->addSql('ALTER TABLE accommodation ADD min_pax_summer INT NOT NULL'); + $this->addSql('ALTER TABLE accommodation_price DROP accept_short_term'); + } +} diff --git a/migrations/Version20260706141648.php b/migrations/Version20260706141648.php new file mode 100644 index 0000000..bb5e235 --- /dev/null +++ b/migrations/Version20260706141648.php @@ -0,0 +1,41 @@ +addSql('CREATE TABLE accommodation_inquiry (id INT AUTO_INCREMENT NOT NULL, accommodation_id INT NOT NULL, created_by_id INT DEFAULT NULL, updated_by_id INT DEFAULT NULL, date_from DATE NOT NULL COMMENT \'(DC2Type:date_immutable)\', date_to DATE NOT NULL COMMENT \'(DC2Type:date_immutable)\', pax_count INT NOT NULL, minors_count INT NOT NULL, children_count INT NOT NULL, adolescents_count INT NOT NULL, board_service_label VARCHAR(255) DEFAULT NULL, board_service_price INT DEFAULT NULL, board_service_original_id INT DEFAULT NULL, is_inquiry TINYINT(1) NOT NULL, salutation VARCHAR(10) DEFAULT NULL, first_name VARCHAR(100) NOT NULL, last_name VARCHAR(100) NOT NULL, email VARCHAR(255) NOT NULL, phone VARCHAR(50) DEFAULT NULL, street VARCHAR(255) DEFAULT NULL, zip VARCHAR(20) DEFAULT NULL, city VARCHAR(100) DEFAULT NULL, country VARCHAR(5) DEFAULT NULL, remarks LONGTEXT DEFAULT NULL, created_at DATETIME NOT NULL COMMENT \'(DC2Type:datetime_immutable)\', updated_at DATETIME DEFAULT NULL COMMENT \'(DC2Type:datetime_immutable)\', INDEX IDX_160D770A8F3692CD (accommodation_id), INDEX IDX_160D770AB03A8386 (created_by_id), INDEX IDX_160D770A896DBBDE (updated_by_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB'); + $this->addSql('CREATE TABLE accommodation_inquiry_additional_service (id INT AUTO_INCREMENT NOT NULL, inquiry_id INT NOT NULL, label VARCHAR(255) NOT NULL, price INT NOT NULL, type VARCHAR(20) NOT NULL, original_service_id INT DEFAULT NULL, INDEX IDX_B28A7FD8A7AD6D71 (inquiry_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB'); + $this->addSql('ALTER TABLE accommodation_booking ADD CONSTRAINT FK_160D770A8F3692CD FOREIGN KEY (accommodation_id) REFERENCES accommodation (id)'); + $this->addSql('ALTER TABLE accommodation_booking ADD CONSTRAINT FK_160D770AB03A8386 FOREIGN KEY (created_by_id) REFERENCES user (id) ON DELETE SET NULL'); + $this->addSql('ALTER TABLE accommodation_booking ADD CONSTRAINT FK_160D770A896DBBDE FOREIGN KEY (updated_by_id) REFERENCES user (id) ON DELETE SET NULL'); + $this->addSql('ALTER TABLE accommodation_inquiry_additional_service ADD CONSTRAINT FK_B28A7FD8A7AD6D71 FOREIGN KEY (inquiry_id) REFERENCES accommodation_booking (id)'); + } + + public function down(Schema $schema): void + { + // this down() migration is auto-generated, please modify it to your needs + $this->addSql('ALTER TABLE accommodation_booking DROP FOREIGN KEY FK_160D770A8F3692CD'); + $this->addSql('ALTER TABLE accommodation_booking DROP FOREIGN KEY FK_160D770AB03A8386'); + $this->addSql('ALTER TABLE accommodation_booking DROP FOREIGN KEY FK_160D770A896DBBDE'); + $this->addSql('ALTER TABLE accommodation_inquiry_additional_service DROP FOREIGN KEY FK_B28A7FD8A7AD6D71'); + $this->addSql('DROP TABLE accommodation_booking'); + $this->addSql('DROP TABLE accommodation_inquiry_additional_service'); + } +} diff --git a/migrations/Version20260707094812.php b/migrations/Version20260707094812.php new file mode 100644 index 0000000..74a900e --- /dev/null +++ b/migrations/Version20260707094812.php @@ -0,0 +1,31 @@ +addSql('ALTER TABLE accommodation_booking DROP COLUMN children_count'); + $this->addSql('ALTER TABLE accommodation_booking RENAME COLUMN adolescents_count TO children_count'); + } + + public function down(Schema $schema): void + { + $this->addSql('ALTER TABLE accommodation_booking RENAME COLUMN children_count TO adolescents_count'); + $this->addSql('ALTER TABLE accommodation_booking ADD COLUMN children_count INT NOT NULL DEFAULT 0'); + } +} diff --git a/migrations/Version20260707150000.php b/migrations/Version20260707150000.php new file mode 100644 index 0000000..ae72bac --- /dev/null +++ b/migrations/Version20260707150000.php @@ -0,0 +1,27 @@ +addSql("ALTER TABLE accommodation_booking ADD COLUMN group_name VARCHAR(255) NOT NULL DEFAULT ''"); + $this->addSql("ALTER TABLE accommodation_booking ALTER COLUMN group_name DROP DEFAULT"); + } + + public function down(Schema $schema): void + { + $this->addSql('ALTER TABLE accommodation_booking DROP COLUMN group_name'); + } +} diff --git a/migrations/Version20260708071724.php b/migrations/Version20260708071724.php new file mode 100644 index 0000000..b907d14 --- /dev/null +++ b/migrations/Version20260708071724.php @@ -0,0 +1,37 @@ +addSql('ALTER TABLE accommodation_inquiry_additional_service DROP FOREIGN KEY FK_B28A7FD8A7AD6D71'); + $this->addSql('DROP TABLE accommodation_inquiry_additional_service'); + $this->addSql('ALTER TABLE accommodation_booking ADD additional_services JSON NOT NULL'); + $this->addSql('CREATE UNIQUE INDEX UNIQ_160D770AD17F50A6 ON accommodation_booking (uuid)'); + } + + public function down(Schema $schema): void + { + // this down() migration is auto-generated, please modify it to your needs + $this->addSql('CREATE TABLE accommodation_inquiry_additional_service (id INT AUTO_INCREMENT NOT NULL, inquiry_id INT NOT NULL, label VARCHAR(255) CHARACTER SET utf8mb4 NOT NULL COLLATE `utf8mb4_unicode_ci`, price INT NOT NULL, type VARCHAR(20) CHARACTER SET utf8mb4 NOT NULL COLLATE `utf8mb4_unicode_ci`, original_service_id INT DEFAULT NULL, INDEX IDX_B28A7FD8A7AD6D71 (inquiry_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB COMMENT = \'\' '); + $this->addSql('ALTER TABLE accommodation_inquiry_additional_service ADD CONSTRAINT FK_B28A7FD8A7AD6D71 FOREIGN KEY (inquiry_id) REFERENCES accommodation_booking (id) ON UPDATE NO ACTION ON DELETE NO ACTION'); + $this->addSql('DROP INDEX UNIQ_160D770AD17F50A6 ON accommodation_booking'); + $this->addSql('ALTER TABLE accommodation_booking DROP additional_services'); + } +} diff --git a/migrations/Version20260708081559.php b/migrations/Version20260708081559.php new file mode 100644 index 0000000..dca7a80 --- /dev/null +++ b/migrations/Version20260708081559.php @@ -0,0 +1,33 @@ +addSql('ALTER TABLE additional_service ADD description LONGTEXT DEFAULT NULL'); + $this->addSql('ALTER TABLE board_service ADD description LONGTEXT DEFAULT NULL'); + } + + public function down(Schema $schema): void + { + // this down() migration is auto-generated, please modify it to your needs + $this->addSql('ALTER TABLE additional_service DROP description'); + $this->addSql('ALTER TABLE board_service DROP description'); + } +} diff --git a/migrations/Version20260708102807.php b/migrations/Version20260708102807.php new file mode 100644 index 0000000..c0f1fb6 --- /dev/null +++ b/migrations/Version20260708102807.php @@ -0,0 +1,31 @@ +addSql('ALTER TABLE accommodation_booking ADD discount INT DEFAULT NULL'); + } + + public function down(Schema $schema): void + { + // this down() migration is auto-generated, please modify it to your needs + $this->addSql('ALTER TABLE accommodation_booking DROP discount'); + } +} diff --git a/migrations/Version20260709133922.php b/migrations/Version20260709133922.php new file mode 100644 index 0000000..631351c --- /dev/null +++ b/migrations/Version20260709133922.php @@ -0,0 +1,31 @@ +addSql('ALTER TABLE additional_service DROP sorting'); + $this->addSql('ALTER TABLE board_service DROP sorting'); + } + + public function down(Schema $schema): void + { + $this->addSql('ALTER TABLE additional_service ADD sorting INT NOT NULL'); + $this->addSql('ALTER TABLE board_service ADD sorting INT NOT NULL'); + } +} diff --git a/migrations/Version20260709141929.php b/migrations/Version20260709141929.php new file mode 100644 index 0000000..21c76bb --- /dev/null +++ b/migrations/Version20260709141929.php @@ -0,0 +1,34 @@ +addSql(<<<'SQL' + ALTER TABLE + accommodation_booking + ADD + accepted_at DATETIME DEFAULT NULL COMMENT '(DC2Type:datetime_immutable)' + SQL); + } + + public function down(Schema $schema): void + { + $this->addSql('ALTER TABLE accommodation_booking DROP accepted_at'); + } +} diff --git a/migrations/Version20260709162705.php b/migrations/Version20260709162705.php new file mode 100644 index 0000000..5c7828b --- /dev/null +++ b/migrations/Version20260709162705.php @@ -0,0 +1,34 @@ +addSql(<<<'SQL' + ALTER TABLE + accommodation_booking + ADD + access_link_issued_at DATETIME DEFAULT NULL COMMENT '(DC2Type:datetime_immutable)' + SQL); + } + + public function down(Schema $schema): void + { + $this->addSql('ALTER TABLE accommodation_booking DROP access_link_issued_at'); + } +} diff --git a/migrations/Version20260710130000.php b/migrations/Version20260710130000.php new file mode 100644 index 0000000..1e2dae3 --- /dev/null +++ b/migrations/Version20260710130000.php @@ -0,0 +1,26 @@ +addSql('ALTER TABLE accommodation_booking ADD price_breakdown JSON DEFAULT NULL, ADD total_price INT DEFAULT NULL, ADD pricing_currency VARCHAR(3) DEFAULT NULL, ADD pricing_version SMALLINT DEFAULT NULL'); + } + + public function down(Schema $schema): void + { + $this->addSql('ALTER TABLE accommodation_booking DROP price_breakdown, DROP total_price, DROP pricing_currency, DROP pricing_version'); + } +} diff --git a/migrations/Version20260716101949.php b/migrations/Version20260716101949.php new file mode 100644 index 0000000..4e729a5 --- /dev/null +++ b/migrations/Version20260716101949.php @@ -0,0 +1,26 @@ +addSql('ALTER TABLE accommodation_booking CHANGE discount accommodation_discount INT DEFAULT NULL, ADD board_service_discount INT DEFAULT NULL, ADD additional_services_discount INT DEFAULT NULL'); + } + + public function down(Schema $schema): void + { + $this->addSql('ALTER TABLE accommodation_booking CHANGE accommodation_discount discount INT DEFAULT NULL, DROP board_service_discount, DROP additional_services_discount'); + } +} diff --git a/migrations/Version20260717103431.php b/migrations/Version20260717103431.php new file mode 100644 index 0000000..fc9e50e --- /dev/null +++ b/migrations/Version20260717103431.php @@ -0,0 +1,35 @@ +addSql('ALTER TABLE accommodation_booking ADD managed_by_id INT DEFAULT NULL'); + $this->addSql('ALTER TABLE accommodation_booking ADD CONSTRAINT FK_AC389924873649CA FOREIGN KEY (managed_by_id) REFERENCES user (id) ON DELETE SET NULL'); + $this->addSql('CREATE INDEX IDX_AC389924873649CA ON accommodation_booking (managed_by_id)'); + } + + public function down(Schema $schema): void + { + // this down() migration is auto-generated, please modify it to your needs + $this->addSql('ALTER TABLE accommodation_booking DROP FOREIGN KEY FK_AC389924873649CA'); + $this->addSql('DROP INDEX IDX_AC389924873649CA ON accommodation_booking'); + $this->addSql('ALTER TABLE accommodation_booking DROP managed_by_id'); + } +} diff --git a/package-lock.json b/package-lock.json index 87b7509..602aa9c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6,6 +6,13 @@ "": { "name": "myep", "license": "WTFPL", + "dependencies": { + "@trevoreyre/autocomplete-js": "^3.0.3", + "glightbox": "^3.3.1", + "sortablejs": "^1.15.7", + "stimulus-use": "^0.52.3", + "vanilla-calendar-pro": "^3.1.0" + }, "devDependencies": { "@babel/core": "^7.17.0", "@babel/preset-env": "^7.16.0", @@ -1645,7 +1652,6 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/@hotwired/stimulus/-/stimulus-3.2.2.tgz", "integrity": "sha512-eGeIqNOQpXoPAIP7tC1+1Yc1yl1xnwYqg+3mzqxyrbE5pg5YFBZcA6YoTiByJB6DKAEsiWtl6tjTJS4IYtbB7A==", - "dev": true, "license": "MIT" }, "node_modules/@hotwired/stimulus-webpack-helpers": { @@ -2045,6 +2051,12 @@ "tailwindcss": ">=3.0.0 || >=4.0.0 || insiders" } }, + "node_modules/@trevoreyre/autocomplete-js": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@trevoreyre/autocomplete-js/-/autocomplete-js-3.0.3.tgz", + "integrity": "sha512-Z0KhA4EtMOixzYOFR+OiMc60IgNy9HkPnVH0kfxFkbP1I4my//sB/MRoPkqKmKgR+qHMujXhjdflMk5TpwVN2Q==", + "license": "MIT" + }, "node_modules/@types/estree": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", @@ -4552,6 +4564,12 @@ "assert-plus": "^1.0.0" } }, + "node_modules/glightbox": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/glightbox/-/glightbox-3.3.1.tgz", + "integrity": "sha512-nXoKfJRnQTDaAFAw5799hjpfAAHx5aLvOLG0SIGudeMCwtHgO3P2/avNYapJ+SL4UEZxO2YNBPtq6pzMhSx42g==", + "license": "MIT" + }, "node_modules/glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", @@ -4670,6 +4688,16 @@ "node": ">= 0.4" } }, + "node_modules/hotkeys-js": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/hotkeys-js/-/hotkeys-js-4.0.4.tgz", + "integrity": "sha512-hseNiqaskxSnujuGp8aRMLJfcjaFiTSS0I2GQhqru82N/sx6CGyUf6pvU5X1iycvw2EqmvILkFIb5OzYFXY+9A==", + "license": "MIT", + "peer": true, + "funding": { + "url": "https://jaywcjlove.github.io/#/sponsor" + } + }, "node_modules/htmlparser2": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", @@ -7588,6 +7616,12 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/sortablejs": { + "version": "1.15.7", + "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.15.7.tgz", + "integrity": "sha512-Kk8wLQPlS+yi1ZEf48a4+fzHa4yxjC30M/Sr2AnQu+f/MPwvvX9XjZ6OWejiz8crBsLwSq8GHqaxaET7u6ux0A==", + "license": "MIT" + }, "node_modules/source-list-map": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", @@ -7659,6 +7693,16 @@ "dev": true, "license": "MIT" }, + "node_modules/stimulus-use": { + "version": "0.52.3", + "resolved": "https://registry.npmjs.org/stimulus-use/-/stimulus-use-0.52.3.tgz", + "integrity": "sha512-stZ5dID6FUrGCR/ChWUa0FT5Z8iqkzT6lputOAb50eF+Ayg7RzJj4U/HoRlp2NV333QfvoRidru9HLbom4hZVw==", + "license": "MIT", + "peerDependencies": { + "@hotwired/stimulus": ">= 3", + "hotkeys-js": ">= 3" + } + }, "node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -8520,6 +8564,16 @@ "dev": true, "license": "MIT" }, + "node_modules/vanilla-calendar-pro": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/vanilla-calendar-pro/-/vanilla-calendar-pro-3.1.0.tgz", + "integrity": "sha512-yXDtCaedcKz6i5OOdWGwui0C8MAmjXjj7JzKZyjDlkczSRqnhI8BDGFygqT2K+qL1uY7R2fLYlTlxA6oyFs2yg==", + "license": "MIT", + "funding": { + "type": "individual", + "url": "https://buymeacoffee.com/uvarov" + } + }, "node_modules/verror": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", diff --git a/package.json b/package.json index dd7d9cf..4f5d424 100644 --- a/package.json +++ b/package.json @@ -30,5 +30,12 @@ "watch": "encore dev --watch", "build": "encore production --progress", "cy:open": "cypress open" + }, + "dependencies": { + "@trevoreyre/autocomplete-js": "^3.0.3", + "glightbox": "^3.3.1", + "sortablejs": "^1.15.7", + "stimulus-use": "^0.52.3", + "vanilla-calendar-pro": "^3.1.0" } } diff --git a/src/BpnConnect/AbstractApiClient.php b/src/BpnConnect/AbstractApiClient.php new file mode 100644 index 0000000..22adbdf --- /dev/null +++ b/src/BpnConnect/AbstractApiClient.php @@ -0,0 +1,56 @@ + $query + * @return array + */ + protected function request(string $path, array $query = []): array + { + $this->assertConfigured(); + + try { + $response = $this->httpClient->request('GET', $this->baseUrl.$path, [ + 'headers' => [ + 'X-API-KEY' => $this->apiKey, + ], + 'query' => $query, + ]); + + return $response->toArray(); + } catch (ExceptionInterface $e) { + $this->logger->error('BpnConnect request failed', [ + 'path' => $path, + 'query' => $query, + 'error' => $e->getMessage(), + ]); + + throw new BpnConnectException('BpnConnect request failed: '.$e->getMessage(), 0, $e); + } + } + + private function assertConfigured(): void + { + if (null === $this->baseUrl || null === $this->apiKey) { + throw new BpnConnectException('BpnConnect client is not configured (missing BPN_CONNECT_BASE_URL or BPN_CONNECT_API_KEY).'); + } + } +} diff --git a/src/BpnConnect/ContingentsClient.php b/src/BpnConnect/ContingentsClient.php new file mode 100644 index 0000000..6634706 --- /dev/null +++ b/src/BpnConnect/ContingentsClient.php @@ -0,0 +1,82 @@ +request(self::CALENDAR_PATH, [ + 'hotelCode' => $hotelCode, + 'dateFrom' => $dateFrom, + 'dateTo' => $dateTo, + 'mode' => ContingentMode::Days->value, + ]); + + $entries = array_map( + static fn (array $item) => new ContingentCalendarEntry( + date: $item['date'], + status: ContingentStatus::from($item['status']), + ), + $payload['data'] ?? [], + ); + + return new ContingentCalendarResponse($this->buildMeta($payload), $entries); + } + + public function getContingentRanges( + string $hotelCode, + string $dateFrom, + string $dateTo, + ): ContingentRangeResponse { + $payload = $this->request(self::CALENDAR_PATH, [ + 'hotelCode' => $hotelCode, + 'dateFrom' => $dateFrom, + 'dateTo' => $dateTo, + 'mode' => ContingentMode::Ranges->value, + ]); + + $entries = array_map( + static fn (array $item) => new ContingentRangeEntry( + dateFrom: $item['date_from'], + dateTo: $item['date_to'], + status: ContingentStatus::from($item['status']), + ), + $payload['data'] ?? [], + ); + + return new ContingentRangeResponse($this->buildMeta($payload), $entries); + } + + /** + * @param array $payload + */ + private function buildMeta(array $payload): ContingentCalendarMeta + { + $raw = $payload['meta'] ?? []; + + return new ContingentCalendarMeta( + dateFrom: $raw['date_from'] ?? '', + dateTo: $raw['date_to'] ?? '', + mode: $raw['mode'] ?? '', + hotelCode: $raw['hotel_code'] ?? '', + hotelId: (int) ($raw['hotel_id'] ?? 0), + rowCount: (int) ($raw['row_count'] ?? 0), + ); + } +} diff --git a/src/BpnConnect/Exception/BpnConnectException.php b/src/BpnConnect/Exception/BpnConnectException.php new file mode 100644 index 0000000..e30d225 --- /dev/null +++ b/src/BpnConnect/Exception/BpnConnectException.php @@ -0,0 +1,9 @@ +value); + } +} diff --git a/src/BusProNet/XmlParser/CrmAttributesResponseParser.php b/src/BusProNet/XmlParser/CrmAttributesResponseParser.php index 87ac380..f6c8a45 100644 --- a/src/BusProNet/XmlParser/CrmAttributesResponseParser.php +++ b/src/BusProNet/XmlParser/CrmAttributesResponseParser.php @@ -16,6 +16,8 @@ class CrmAttributesResponseParser private const BPN_CRM_ID_ADMIN = 1292; private const BPN_CRM_ID_MANAGER = 1293; private const BPN_CRM_ID_TEAMER = 1070; + private const BPN_CRM_ID_GROUPS_MANAGER = 1477; + private const BPN_CRM_ID_GROUPS_ADMIN = 1478; private const BPN_DEFAULT_HOTEL_CODE = 'SSL'; public function parse(Crawler $result): CrmAttributes @@ -57,6 +59,12 @@ class CrmAttributesResponseParser if (self::BPN_CRM_ID_TEAMER === $attribute->id && true === $attribute->selected) { $roles[] = 'ROLE_TEAMER'; } + if (self::BPN_CRM_ID_GROUPS_MANAGER === $attribute->id && true === $attribute->selected) { + $roles[] = 'ROLE_GROUPS_MANAGER'; + } + if (self::BPN_CRM_ID_GROUPS_ADMIN === $attribute->id && true === $attribute->selected) { + $roles[] = 'ROLE_GROUPS_ADMIN'; + } $attributes[] = $attribute; }) diff --git a/src/Command/ImportGroupsLegacyDataCommand.php b/src/Command/ImportGroupsLegacyDataCommand.php new file mode 100644 index 0000000..021304e --- /dev/null +++ b/src/Command/ImportGroupsLegacyDataCommand.php @@ -0,0 +1,582 @@ + maps groupspriceoption "type" column to AdditionalServiceType */ + private const array OPTION_TYPE_MAP = [ + 1 => AdditionalServiceType::Flat, + 2 => AdditionalServiceType::PerPerson, + 3 => AdditionalServiceType::PerNight, + 4 => AdditionalServiceType::PerPersonPerNight, + ]; + + /** @var array maps seasons.csv "token" column to Season, per translations/messages.de.yaml */ + private const array SEASON_TOKEN_MAP = [ + 'HS' => Season::PEAK, + 'NS' => Season::SECONDARY, + 'VNS' => Season::ADV_SECONDARY, + ]; + + public function __construct( + private readonly AccommodationRepository $accommodationRepository, + private readonly EntityManagerInterface $entityManager, + ) { + parent::__construct(); + } + + protected function configure(): void + { + $this + ->addArgument('path', InputArgument::OPTIONAL, 'Directory containing hotels.csv, groupspriceconfig.csv, groupspriceboard.csv, groupspriceoption.csv, seasons.csv', 'temp') + ->addOption('dry-run', null, InputOption::VALUE_NONE, 'Parse and report without persisting anything') + ; + } + + protected function execute(InputInterface $input, OutputInterface $output): int + { + $io = new SymfonyStyle($input, $output); + $dryRun = (bool) $input->getOption('dry-run'); + $path = rtrim((string) $input->getArgument('path'), '/'); + + foreach (['hotels.csv', 'groupspriceconfig.csv', 'groupspriceboard.csv', 'groupspriceoption.csv', 'seasons.csv'] as $file) { + if (!is_readable($path.'/'.$file)) { + $io->error(sprintf('Cannot read %s/%s', $path, $file)); + + return Command::FAILURE; + } + } + + $hotels = $this->readCsv($path.'/hotels.csv'); + $configRows = $this->readCsv($path.'/groupspriceconfig.csv'); + $boardRows = $this->readCsv($path.'/groupspriceboard.csv'); + $optionRows = $this->readCsv($path.'/groupspriceoption.csv'); + $seasonRows = $this->readCsv($path.'/seasons.csv', ','); + + $currencyByHotelUid = $this->deriveCurrencies($configRows); + $seasonRanges = $this->parseSeasonRanges($seasonRows); + + $created = []; + $updated = []; + /** @var array $accommodationByUid */ + $accommodationByUid = []; + + foreach ($hotels as $row) { + $uid = (int) $row['uid']; + $code = trim($row['code']); + $name = trim($row['name']); + $currency = $currencyByHotelUid[$uid] ?? 'EUR'; + + $existing = $this->accommodationRepository->findOneByCmsCode($code) + ?? $this->accommodationRepository->findOneByCalendarCode($code); + + if (null !== $existing) { + $existing->setName($name); + $existing->setCurrency($currency); + + foreach ($existing->getAccommodationPrices()->toArray() as $price) { + $existing->removeAccommodationPrice($price); + if (!$dryRun) { + $this->entityManager->remove($price); + } + } + foreach ($existing->getBoardServices()->toArray() as $board) { + $existing->removeBoardService($board); + if (!$dryRun) { + $this->entityManager->remove($board); + } + } + foreach ($existing->getAdditionalServices()->toArray() as $service) { + $existing->removeAdditionalService($service); + if (!$dryRun) { + $this->entityManager->remove($service); + } + } + + $accommodationByUid[$uid] = $existing; + $updated[] = sprintf('%s (%s) — replacing existing prices/board/services', $name, $code); + + continue; + } + + $existingByCalendarCode = null; + foreach ($accommodationByUid as $a) { + // guard against double-import: a prior run may already have created this one + if ($a->getCalendarCode() === $code) { + $existingByCalendarCode = $a; + break; + } + } + + if (null !== $existingByCalendarCode) { + $accommodationByUid[$uid] = $existingByCalendarCode; + continue; + } + + $accommodation = new Accommodation(); + $accommodation->setCalendarCode($code); + $accommodation->setName($name); + $accommodation->setCurrency($currency); + $accommodation->setMaxAdolescentAge(0); + + if (!$dryRun) { + $this->entityManager->persist($accommodation); + } + + $accommodationByUid[$uid] = $accommodation; + $created[] = sprintf('%s (%s, %s)', $name, $code, $currency); + } + + $knownUids = array_keys($accommodationByUid); + + [$priceCount, $skippedPriceUids, $unmatchedSeasonCount] = $this->importPrices($configRows, $accommodationByUid, $knownUids, $seasonRanges, $dryRun); + [$boardCount, $skippedBoardUids] = $this->importBoardServices($boardRows, $accommodationByUid, $knownUids, $dryRun); + [$optionCount, $skippedOptionUids, $optionsNeedingDefaultRange] = $this->importAdditionalServices($optionRows, $accommodationByUid, $knownUids, $dryRun); + + // BoardService/AdditionalService need a date range; derive it from each + // accommodation's freshly-imported AccommodationPrice rows now that they exist. + // AdditionalServices whose title carried its own year keep the scoped range set above. + $this->applyDateRangeToServices($accommodationByUid, $optionsNeedingDefaultRange); + + if (!$dryRun) { + $this->entityManager->flush(); + } + + $io->section($dryRun ? 'Dry run summary' : 'Import summary'); + $io->writeln(sprintf('Accommodations created: %d', \count($created))); + foreach ($created as $line) { + $io->writeln(' + '.$line); + } + $io->writeln(sprintf('Accommodations updated: %d', \count($updated))); + foreach ($updated as $line) { + $io->writeln(' ~ '.$line); + } + $io->writeln(sprintf('AccommodationPrice rows imported: %d', $priceCount)); + if ($unmatchedSeasonCount > 0) { + $io->writeln(sprintf(' of which %d fell outside all seasons.csv ranges and defaulted to %s', $unmatchedSeasonCount, self::DEFAULT_SEASON->value)); + } + $io->writeln(sprintf('BoardService rows imported: %d', $boardCount)); + $io->writeln(sprintf('AdditionalService rows imported: %d', $optionCount)); + + $skippedUids = array_unique(array_merge($skippedPriceUids, $skippedBoardUids, $skippedOptionUids)); + sort($skippedUids); + if ([] !== $skippedUids) { + $io->warning(sprintf( + 'Skipped rows referencing hotel uid(s) not present in hotels.csv: %s', + implode(', ', $skippedUids), + )); + } + + $io->note('Dropped legacy columns with no entity equivalent (verified all-zero or unused): bonus_card_included, price_additional_person_group_1/2/3[_chf], ignore_with_board.'); + + if ($dryRun) { + $io->note('Dry run — nothing was persisted.'); + } + + $io->success('Done.'); + + return Command::SUCCESS; + } + + /** + * @return list> + */ + private function readCsv(string $file, string $separator = ';'): array + { + $handle = fopen($file, 'r'); + if (false === $handle) { + throw new \RuntimeException(sprintf('Unable to open %s', $file)); + } + + $header = fgetcsv($handle, escape: '\\', separator: $separator, enclosure: '"'); + if (false === $header) { + fclose($handle); + + return []; + } + + $rows = []; + while (false !== ($row = fgetcsv($handle, escape: '\\', separator: $separator, enclosure: '"'))) { + $rows[] = array_combine($header, $row); + } + + fclose($handle); + + return $rows; + } + + /** + * Derives EUR/CHF per hotel uid from groupspriceconfig.csv: if any row for that hotel + * has a non-zero price_chf, the hotel is priced in CHF, otherwise EUR. + * + * @param list> $configRows + * + * @return array + */ + private function deriveCurrencies(array $configRows): array + { + $currencies = []; + foreach ($configRows as $row) { + $uid = (int) $row['hotel']; + if ($this->parseDecimal($row['price_chf']) > 0.0) { + $currencies[$uid] = 'CHF'; + } elseif (!isset($currencies[$uid])) { + $currencies[$uid] = 'EUR'; + } + } + + return $currencies; + } + + private function parseDecimal(string $value): float + { + $value = trim($value); + if ('' === $value) { + return 0.0; + } + + return (float) str_replace(',', '.', $value); + } + + private function toCents(string $value): int + { + return (int) round($this->parseDecimal($value) * 100); + } + + private function priceColumn(string $currency): string + { + return 'CHF' === $currency ? 'price_chf' : 'price'; + } + + /** + * Parses seasons.csv (token,date_from,date_to; date_to exclusive, same convention as + * groupspriceconfig.csv) into Season-tagged ranges, skipping unrecognized tokens. + * + * @param list> $rows + * + * @return list + */ + private function parseSeasonRanges(array $rows): array + { + $ranges = []; + foreach ($rows as $row) { + $season = self::SEASON_TOKEN_MAP[trim($row['token'])] ?? null; + if (null === $season) { + continue; + } + + $ranges[] = [ + 'season' => $season, + 'dateFrom' => new \DateTimeImmutable(trim($row['date_from'])), + 'dateTo' => new \DateTimeImmutable(trim($row['date_to'])), + ]; + } + + return $ranges; + } + + /** + * Resolves the season with the largest night-count overlap with [$dateFrom, $dateToExclusive) + * among $seasonRanges. Falls back to DEFAULT_SEASON (with matched=false) when the price + * period doesn't overlap any season range at all (e.g. a gap in seasons.csv). + * + * @param list $seasonRanges + * + * @return array{0: Season, 1: bool} + */ + private function resolveSeason(\DateTimeImmutable $dateFrom, \DateTimeImmutable $dateToExclusive, array $seasonRanges): array + { + $bestSeason = null; + $bestOverlapDays = 0; + + foreach ($seasonRanges as $range) { + $overlapStart = max($dateFrom, $range['dateFrom']); + $overlapEnd = min($dateToExclusive, $range['dateTo']); + + if ($overlapStart >= $overlapEnd) { + continue; + } + + $overlapDays = $overlapStart->diff($overlapEnd)->days; + if ($overlapDays > $bestOverlapDays) { + $bestOverlapDays = $overlapDays; + $bestSeason = $range['season']; + } + } + + return [$bestSeason ?? self::DEFAULT_SEASON, null !== $bestSeason]; + } + + /** + * @param list> $rows + * @param array $accommodationByUid + * @param list $knownUids + * @param list $seasonRanges + * + * @return array{0: int, 1: list, 2: int} + */ + private function importPrices(array $rows, array $accommodationByUid, array $knownUids, array $seasonRanges, bool $dryRun): array + { + $count = 0; + $skipped = []; + $unmatchedSeasonCount = 0; + + foreach ($rows as $row) { + $uid = (int) $row['hotel']; + if (!\in_array($uid, $knownUids, true)) { + $skipped[] = $uid; + continue; + } + + $accommodation = $accommodationByUid[$uid]; + $column = $this->priceColumn($accommodation->getCurrency()); + $additionalColumn = 'CHF' === $accommodation->getCurrency() + ? 'price_additional_person_chf' + : 'price_additional_person'; + + $rawDateFrom = (new \DateTimeImmutable('@'.$row['date_from']))->setTime(0, 0); + // Source date_to is exclusive; AccommodationPrice::dateTo is the last included night. + $rawDateToExclusive = (new \DateTimeImmutable('@'.$row['date_to']))->setTime(0, 0); + + [$season, $matched] = $this->resolveSeason($rawDateFrom, $rawDateToExclusive, $seasonRanges); + if (!$matched) { + ++$unmatchedSeasonCount; + } + + $price = new AccommodationPrice(); + $price->setDateFrom($rawDateFrom); + $price->setDateTo($rawDateToExclusive->modify('-1 day')); + $price->setSeason($season); + $price->setIncludedPax((int) $row['persons_included']); + $price->setPricePerNight($this->toCents($row[$column])); + $price->setPriceAdditionalPerson($this->toCents($row[$additionalColumn])); + $price->setMinNights(self::DEFAULT_MIN_NIGHTS); + $price->setType(null); + $price->setAcceptUndersubscription(false); + $price->setAcceptShortTerm(false); + + $accommodation->addAccommodationPrice($price); + if (!$dryRun) { + $this->entityManager->persist($price); + } + ++$count; + } + + return [$count, $skipped, $unmatchedSeasonCount]; + } + + /** + * @param list> $rows + * @param array $accommodationByUid + * @param list $knownUids + * + * @return array{0: int, 1: list} + */ + private function importBoardServices(array $rows, array $accommodationByUid, array $knownUids, bool $dryRun): array + { + $count = 0; + $skipped = []; + + foreach ($rows as $row) { + $uid = (int) $row['hotel']; + if (!\in_array($uid, $knownUids, true)) { + $skipped[] = $uid; + continue; + } + + $accommodation = $accommodationByUid[$uid]; + $column = $this->priceColumn($accommodation->getCurrency()); + + $board = new BoardService(); + $board->setLabel(trim($row['title'])); + $board->setPrice($this->toCents($row[$column])); + // dateFrom/dateTo filled in applyDateRangeToServices() once prices are known. + $board->setDateFrom(new \DateTimeImmutable('today')); + $board->setDateTo(new \DateTimeImmutable('today')); + + $accommodation->addBoardService($board); + if (!$dryRun) { + $this->entityManager->persist($board); + } + ++$count; + } + + return [$count, $skipped]; + } + + /** + * @param list> $rows + * @param array $accommodationByUid + * @param list $knownUids + * + * @return array{0: int, 1: list, 2: list} + */ + private function importAdditionalServices(array $rows, array $accommodationByUid, array $knownUids, bool $dryRun): array + { + $count = 0; + $skipped = []; + $needsDefaultRange = []; + + foreach ($rows as $row) { + $uid = (int) $row['hotel']; + if (!\in_array($uid, $knownUids, true)) { + $skipped[] = $uid; + continue; + } + + $accommodation = $accommodationByUid[$uid]; + $column = $this->priceColumn($accommodation->getCurrency()); + $type = self::OPTION_TYPE_MAP[(int) $row['type']] ?? AdditionalServiceType::Flat; + [$year, $label] = $this->stripYearPrefix(trim($row['title'])); + + $service = new AdditionalService(); + $service->setLabel($label); + $service->setPrice($this->toCents($row[$column])); + $service->setType($type); + + if (null !== $year) { + // Title carried its own year (e.g. "2026 Endreinigung ..."); scope validity to + // that accommodation's own price rows within that year, not the calendar year. + [$yearDateFrom, $yearDateTo] = $this->findYearPriceRange($accommodation, $year); + $service->setDateFrom($yearDateFrom ?? new \DateTimeImmutable($year.'-01-01')); + $service->setDateTo($yearDateTo ?? new \DateTimeImmutable($year.'-12-31')); + } else { + // dateFrom/dateTo filled in applyDateRangeToServices() once prices are known. + $service->setDateFrom(new \DateTimeImmutable('today')); + $service->setDateTo(new \DateTimeImmutable('today')); + $needsDefaultRange[] = $service; + } + + $accommodation->addAdditionalService($service); + if (!$dryRun) { + $this->entityManager->persist($service); + } + ++$count; + } + + return [$count, $skipped, $needsDefaultRange]; + } + + /** + * Splits a leading "YYYY " prefix off a title, e.g. "2026 Endreinigung Küche" → + * [2026, "Endreinigung Küche"]. Returns [null, $label unchanged] when no such prefix + * is present. + * + * @return array{0: ?int, 1: string} + */ + private function stripYearPrefix(string $label): array + { + if (preg_match('/^(\d{4})\s+(.+)$/', $label, $matches)) { + return [(int) $matches[1], $matches[2]]; + } + + return [null, $label]; + } + + /** + * Finds the earliest dateFrom / latest dateTo among an accommodation's already-imported + * AccommodationPrice rows that fall within the given calendar year. + * + * @return array{0: ?\DateTimeImmutable, 1: ?\DateTimeImmutable} + */ + private function findYearPriceRange(Accommodation $accommodation, int $year): array + { + $dateFrom = null; + $dateTo = null; + + foreach ($accommodation->getAccommodationPrices() as $price) { + if ((int) $price->getDateFrom()->format('Y') !== $year) { + continue; + } + if (null === $dateFrom || $price->getDateFrom() < $dateFrom) { + $dateFrom = $price->getDateFrom(); + } + if (null === $dateTo || $price->getDateTo() > $dateTo) { + $dateTo = $price->getDateTo(); + } + } + + return [$dateFrom, $dateTo]; + } + + /** + * @param array $accommodationByUid + * @param list $additionalServicesNeedingDefaultRange only these + * (titles without a leading year) get the accommodation- + * wide fallback range; year-prefixed ones already have + * their scoped range set in importAdditionalServices(). + */ + private function applyDateRangeToServices(array $accommodationByUid, array $additionalServicesNeedingDefaultRange): void + { + $needsDefaultRange = new \SplObjectStorage(); + foreach ($additionalServicesNeedingDefaultRange as $service) { + $needsDefaultRange->attach($service); + } + + $seen = []; + foreach ($accommodationByUid as $accommodation) { + $id = spl_object_id($accommodation); + if (isset($seen[$id])) { + continue; + } + $seen[$id] = true; + + $prices = $accommodation->getAccommodationPrices(); + if ($prices->isEmpty()) { + continue; + } + + $dateFrom = null; + $dateTo = null; + foreach ($prices as $price) { + if (null === $dateFrom || $price->getDateFrom() < $dateFrom) { + $dateFrom = $price->getDateFrom(); + } + if (null === $dateTo || $price->getDateTo() > $dateTo) { + $dateTo = $price->getDateTo(); + } + } + + if (null === $dateFrom || null === $dateTo) { + continue; + } + + foreach ($accommodation->getBoardServices() as $board) { + $board->setDateFrom($dateFrom); + $board->setDateTo($dateTo); + } + foreach ($accommodation->getAdditionalServices() as $service) { + if ($needsDefaultRange->contains($service)) { + $service->setDateFrom($dateFrom); + $service->setDateTo($dateTo); + } + } + } + } +} diff --git a/src/Controller/Admin/Accommodation/CalendarController.php b/src/Controller/Admin/Accommodation/CalendarController.php new file mode 100644 index 0000000..1e0e93d --- /dev/null +++ b/src/Controller/Admin/Accommodation/CalendarController.php @@ -0,0 +1,25 @@ +render('admin/accommodation/_calendar_section.html.twig', [ + 'accommodation' => $accommodation, + 'startMonth' => $request->query->get('month'), + ]); + } +} diff --git a/src/Controller/Admin/Accommodation/CreateController.php b/src/Controller/Admin/Accommodation/CreateController.php new file mode 100644 index 0000000..ee1983f --- /dev/null +++ b/src/Controller/Admin/Accommodation/CreateController.php @@ -0,0 +1,54 @@ +createForm(AccommodationType::class, $accommodation, ['hx_post' => $request->getRequestUri()]); + $form->handleRequest($request); + + if ($form->isSubmitted() && $form->isValid()) { + $this->entityManager->persist($accommodation); + $this->entityManager->flush(); + + $this->addFlash('success', 'Das Gruppenhaus wurde angelegt'); + + $this->logger->info('Created accommodation', [ + 'name' => $accommodation->getName(), + 'code' => $accommodation->getCalendarCode(), + ]); + + return new HxRedirectResponse($this->generateUrl('app_admin_accommodation')); + } + + return $this->render('admin/accommodation/modal_create.html.twig', [ + 'accommodation' => $accommodation, + 'form' => $form, + ]); + } +} diff --git a/src/Controller/Admin/Accommodation/DeleteController.php b/src/Controller/Admin/Accommodation/DeleteController.php new file mode 100644 index 0000000..3d9c0b0 --- /dev/null +++ b/src/Controller/Admin/Accommodation/DeleteController.php @@ -0,0 +1,52 @@ +isMethod(Request::METHOD_POST)) { + if (!$this->isCsrfTokenValid('delete_accommodation_'.$accommodation->getId(), $request->request->getString('_token'))) { + throw $this->createAccessDeniedException('Invalid CSRF token.'); + } + + $this->entityManager->remove($accommodation); + $this->entityManager->flush(); + + $this->addFlash('success', 'Das Gruppenhaus wurde gelöscht'); + + $this->logger->info('Deleted accommodation', [ + 'name' => $accommodation->getName(), + 'code' => $accommodation->getCalendarCode(), + ]); + + return new HxRedirectResponse($this->generateUrl('app_admin_accommodation')); + } + + return $this->render('admin/accommodation/modal_delete.html.twig', [ + 'accommodation' => $accommodation, + 'csrf_token_id' => 'delete_accommodation_'.$accommodation->getId(), + ]); + } +} diff --git a/src/Controller/Admin/Accommodation/EditController.php b/src/Controller/Admin/Accommodation/EditController.php new file mode 100644 index 0000000..d3ea043 --- /dev/null +++ b/src/Controller/Admin/Accommodation/EditController.php @@ -0,0 +1,61 @@ +getCalendarCode()) { + $cmsData = $this->cmsDataProvider->getHotelDetails($accommodation->getEffectiveCmsCode()); + } + + $form = $this->createForm(AccommodationType::class, $accommodation); + $form->handleRequest($request); + + if ($form->isSubmitted() && $form->isValid()) { + $this->entityManager->persist($accommodation); + $this->entityManager->flush(); + + $this->addFlash('success', 'Das Gruppenhaus wurde aktualisiert'); + + $this->logger->info('Updated accommodation', [ + 'name' => $accommodation->getName(), + 'code' => $accommodation->getCalendarCode(), + ]); + + return $this->redirectToRoute('app_admin_accommodation_edit', ['id' => $accommodation->getId()]); + } + + return $this->render('admin/accommodation/edit.html.twig', [ + 'accommodation' => $accommodation, + 'form' => $form, + 'cmsData' => $cmsData, + ]); + } +} diff --git a/src/Controller/Admin/Accommodation/IndexController.php b/src/Controller/Admin/Accommodation/IndexController.php new file mode 100644 index 0000000..25f6b04 --- /dev/null +++ b/src/Controller/Admin/Accommodation/IndexController.php @@ -0,0 +1,30 @@ +accommodationRepository->findBy([], ['calendarCode' => 'ASC']); + + return $this->render('admin/accommodation/index.html.twig', [ + 'accommodations' => $accommodations, + ]); + } +} diff --git a/src/Controller/Admin/AccommodationBooking/CreateController.php b/src/Controller/Admin/AccommodationBooking/CreateController.php new file mode 100644 index 0000000..2c74b71 --- /dev/null +++ b/src/Controller/Admin/AccommodationBooking/CreateController.php @@ -0,0 +1,60 @@ +createForm(AccommodationBookingType::class, $booking, [ + 'with_accommodation' => true, + ]); + $form->handleRequest($request); + + if ($form->isSubmitted() && $form->isValid()) { + $this->bookingService->refreshPriceSnapshot($booking); + $this->entityManager->persist($booking); + $this->entityManager->flush(); + + $this->bookingService->issueAccessLinkForDirectBooking($booking); + $this->bookingService->sendCustomerConfirmationEmail($booking); + + $this->addFlash('success', 'Die Buchung wurde erstellt'); + + $this->logger->info('Created accommodation booking', [ + 'id' => $booking->getId(), + 'groupName' => $booking->getGroupName(), + ]); + + return $this->redirectToRoute('app_admin_accommodationbooking_edit', ['id' => $booking->getId()]); + } + + return $this->render('admin/accommodation_booking/create.html.twig', [ + 'form' => $form, + ]); + } +} diff --git a/src/Controller/Admin/AccommodationBooking/EditController.php b/src/Controller/Admin/AccommodationBooking/EditController.php new file mode 100644 index 0000000..9475d59 --- /dev/null +++ b/src/Controller/Admin/AccommodationBooking/EditController.php @@ -0,0 +1,133 @@ +getAccommodation(); + $boardServices = []; + $additionalServices = []; + $currentBoardService = null; + $currentAdditionalServices = []; + + if (null !== $accommodation && null !== $booking->getDateFrom() && null !== $booking->getDateTo()) { + $boardServices = $this->boardServiceRepo->findByAccommodationAndDateRange( + $accommodation, + $booking->getDateFrom(), + $booking->getDateTo(), + ); + $additionalServices = $this->additionalServiceRepo->findByAccommodationAndDateRange( + $accommodation, + $booking->getDateFrom(), + $booking->getDateTo(), + ); + + // Pre-select current board service if it is still in the available choices + foreach ($boardServices as $bs) { + if ($bs->getId() === $booking->getBoardServiceOriginalId()) { + $currentBoardService = $bs; + break; + } + } + + // Pre-select current additional services that are still in the available choices + $currentIds = array_column($booking->getAdditionalServices(), 'originalServiceId'); + $currentAdditionalServices = array_values(array_filter( + $additionalServices, + fn (AdditionalService $s) => in_array($s->getId(), $currentIds, true), + )); + } + + $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, + ]); + $wasInquiry = $booking->isInquiry(); + + $form->handleRequest($request); + + if ($form->isSubmitted() && $form->isValid()) { + if ($form->has('boardService')) { + $selectedBoardService = $form->get('boardService')->getData(); + if ($selectedBoardService instanceof BoardService) { + $booking->setBoardServiceLabel($selectedBoardService->getLabel()); + $booking->setBoardServicePrice($selectedBoardService->getPrice()); + $booking->setBoardServiceOriginalId($selectedBoardService->getId()); + } else { + $booking->setBoardServiceLabel(null); + $booking->setBoardServicePrice(null); + $booking->setBoardServiceOriginalId(null); + } + } + + if ($form->has('selectedAdditionalServices')) { + $booking->setAdditionalServices([]); + foreach ($form->get('selectedAdditionalServices')->getData() as $service) { + $booking->addAdditionalServiceSnapshot( + $service->getLabel() ?? '', + $service->getPrice() ?? 0, + $service->getType(), + $service->getId(), + ); + } + } + + $this->bookingService->refreshPriceSnapshot($booking); + + $this->entityManager->persist($booking); + $this->entityManager->flush(); + + if ($wasInquiry && !$booking->isInquiry()) { + $this->bookingService->issueAccessLinkForDirectBooking($booking); + $this->bookingService->sendCustomerConfirmationEmail($booking); + } + + $this->addFlash('success', 'Die Buchung wurde aktualisiert'); + + $this->logger->info('Updated accommodation booking', [ + 'id' => $booking->getId(), + 'groupName' => $booking->getGroupName(), + ]); + + return $this->redirectToRoute('app_admin_accommodationbooking_edit', ['id' => $booking->getId()]); + } + + return $this->render('admin/accommodation_booking/edit.html.twig', [ + 'booking' => $booking, + 'form' => $form, + ]); + } +} diff --git a/src/Controller/Admin/AccommodationBooking/GenerateAccessLinkController.php b/src/Controller/Admin/AccommodationBooking/GenerateAccessLinkController.php new file mode 100644 index 0000000..22ff510 --- /dev/null +++ b/src/Controller/Admin/AccommodationBooking/GenerateAccessLinkController.php @@ -0,0 +1,50 @@ +isMethod(Request::METHOD_POST)) { + if (!$this->isCsrfTokenValid('generate_accommodation_booking_access_link_'.$booking->getId(), $request->request->getString('_token'))) { + throw $this->createAccessDeniedException('Invalid CSRF token.'); + } + + $this->bookingService->regenerateAccessLink($booking); + + $this->addFlash('success', 'Der Zugangslink wurde neu generiert.'); + + $this->logger->info('Generated accommodation booking access link', [ + 'id' => $booking->getId(), + ]); + + return new HxRedirectResponse($this->generateUrl('app_admin_accommodationbooking_show', ['id' => $booking->getId()])); + } + + return $this->render('admin/accommodation_booking/modal_generate_access_link.html.twig', [ + 'booking' => $booking, + 'csrf_token_id' => 'generate_accommodation_booking_access_link_'.$booking->getId(), + ]); + } +} diff --git a/src/Controller/Admin/AccommodationBooking/IndexController.php b/src/Controller/Admin/AccommodationBooking/IndexController.php new file mode 100644 index 0000000..9b69c96 --- /dev/null +++ b/src/Controller/Admin/AccommodationBooking/IndexController.php @@ -0,0 +1,52 @@ +bookingRepository + ->createQueryBuilder('booking') + ->leftJoin('booking.accommodation', 'accommodation') + ->addSelect('accommodation') + ->where('booking.dateTo >= :today') + ->setParameter('today', $today) + ; + + $pagination = $this->paginator->paginate( + $qb, + $request->query->getInt('page', 1), + $request->query->getInt('limit', 20), + [ + 'defaultSortFieldName' => 'booking.createdAt', + 'defaultSortDirection' => 'DESC', + ] + ); + + return $this->render('admin/accommodation_booking/index.html.twig', [ + 'pagination' => $pagination, + ]); + } +} diff --git a/src/Controller/Admin/AccommodationBooking/SendAccessLinkController.php b/src/Controller/Admin/AccommodationBooking/SendAccessLinkController.php new file mode 100644 index 0000000..bba6f71 --- /dev/null +++ b/src/Controller/Admin/AccommodationBooking/SendAccessLinkController.php @@ -0,0 +1,54 @@ +getAccessLinkIssuedAt()) { + return $this->redirectToRoute('app_admin_accommodationbooking_show', ['id' => $booking->getId()]); + } + + if ($request->isMethod(Request::METHOD_POST)) { + if (!$this->isCsrfTokenValid('send_accommodation_booking_access_link_'.$booking->getId(), $request->request->getString('_token'))) { + throw $this->createAccessDeniedException('Invalid CSRF token.'); + } + + $this->bookingService->sendCustomerConfirmationEmail($booking); + + $this->addFlash('success', 'Der Zugangslink wurde dem Kunden per E-Mail zugestellt.'); + + $this->logger->info('Sent accommodation booking access link', [ + 'id' => $booking->getId(), + ]); + + return new HxRedirectResponse($this->generateUrl('app_admin_accommodationbooking_show', ['id' => $booking->getId()])); + } + + return $this->render('admin/accommodation_booking/modal_send_access_link.html.twig', [ + 'booking' => $booking, + 'csrf_token_id' => 'send_accommodation_booking_access_link_'.$booking->getId(), + ]); + } +} diff --git a/src/Controller/Admin/AccommodationBooking/ShowController.php b/src/Controller/Admin/AccommodationBooking/ShowController.php new file mode 100644 index 0000000..79d23b1 --- /dev/null +++ b/src/Controller/Admin/AccommodationBooking/ShowController.php @@ -0,0 +1,41 @@ +getAccessLinkIssuedAt(); + + return $this->render('admin/accommodation_booking/show.html.twig', [ + 'booking' => $booking, + 'priceBreakdown' => $this->breakdownCalculator->compute($booking), + 'returnUrl' => $this->getReturnUrl($request, 'app_admin_accommodationbooking'), + 'accessLink' => $hasAccessLink ? $this->linkSigner->sign($booking) : null, + 'accessLinkExpiresAt' => $hasAccessLink ? $this->linkSigner->expiresAt($booking) : null, + ]); + } +} diff --git a/src/Controller/Admin/AccommodationPrice/CreateController.php b/src/Controller/Admin/AccommodationPrice/CreateController.php new file mode 100644 index 0000000..8cd82b5 --- /dev/null +++ b/src/Controller/Admin/AccommodationPrice/CreateController.php @@ -0,0 +1,64 @@ +createForm(AccommodationPriceType::class, $accommodationPrice, ['currency' => $accommodation->getCurrency()]); + $form->handleRequest($request); + + if ($form->isSubmitted() && $form->isValid()) { + $accommodation->addAccommodationPrice($accommodationPrice); + + $this->entityManager->persist($accommodationPrice); + $this->entityManager->flush(); + + $this->addFlash('success', 'Der Preis wurde angelegt'); + + $this->logger->info('Created accommodation price', [ + 'name' => $accommodation->getName(), + 'code' => $accommodation->getCalendarCode(), + 'date_range' => [ + 'from' => $accommodationPrice->getDateFrom()->format('Y-m-d'), + 'to' => $accommodationPrice->getDateTo()->format('Y-m-d'), + ] + ]); + + $returnUrl = $this->generateUrl('app_admin_accommodation_edit', [ + 'id' => $accommodation->getId(), + ]); + + return $this->redirect($returnUrl.'#prices'); + } + + return $this->render('admin/accommodation_price/create.html.twig', [ + 'accommodation' => $accommodation, + 'form' => $form, + ]); + } +} diff --git a/src/Controller/Admin/AccommodationPrice/DeleteController.php b/src/Controller/Admin/AccommodationPrice/DeleteController.php new file mode 100644 index 0000000..1c83c20 --- /dev/null +++ b/src/Controller/Admin/AccommodationPrice/DeleteController.php @@ -0,0 +1,63 @@ +getAccommodation(); + + if (true === $request->isMethod(Request::METHOD_POST)) { + if (!$this->isCsrfTokenValid('delete_accommodation_price_'.$accommodationPrice->getId(), $request->request->getString('_token'))) { + throw $this->createAccessDeniedException('Invalid CSRF token.'); + } + + $this->entityManager->remove($accommodationPrice); + $this->entityManager->flush(); + + $this->addFlash('success', 'Der Preis wurde gelöscht'); + + $this->logger->info('Deleted accommodation price', [ + 'name' => $accommodation->getName(), + 'code' => $accommodation->getCalendarCode(), + 'date_range' => [ + 'from' => $accommodationPrice->getDateFrom()->format('Y-m-d'), + 'to' => $accommodationPrice->getDateTo()->format('Y-m-d'), + ], + ]); + + $returnUrl = $this->generateUrl('app_admin_accommodation_edit', [ + 'id' => $accommodation->getId(), + ]); + + return new HxRedirectResponse($returnUrl.'#prices'); + } + + return $this->render('admin/accommodation_price/modal_delete.html.twig', [ + 'accommodationPrice' => $accommodationPrice, + 'accommodation' => $accommodation, + 'csrf_token_id' => 'delete_accommodation_price_'.$accommodationPrice->getId(), + ]); + } +} diff --git a/src/Controller/Admin/AccommodationPrice/EditController.php b/src/Controller/Admin/AccommodationPrice/EditController.php new file mode 100644 index 0000000..f08dfd5 --- /dev/null +++ b/src/Controller/Admin/AccommodationPrice/EditController.php @@ -0,0 +1,72 @@ + false])] + #[Route('/admin/accommodation-price/{id}/duplicate', name: 'app_admin_accommodationprice_duplicate', defaults: ['duplicate' => true])] + public function index(AccommodationPrice $accommodationPrice, bool $duplicate, Request $request): Response + { + $accommodation = $accommodationPrice->getAccommodation(); + + if (true === $duplicate) { + $accommodationPrice = clone $accommodationPrice; + } + + $form = $this->createForm(AccommodationPriceType::class, $accommodationPrice, ['currency' => $accommodation->getCurrency()]); + $form->handleRequest($request); + + if ($form->isSubmitted() && $form->isValid()) { + if (true === $duplicate) { + $accommodation->addAccommodationPrice($accommodationPrice); + } + + $this->entityManager->persist($accommodationPrice); + $this->entityManager->flush(); + + $this->addFlash('success', 'Der Preis wurde aktualisiert'); + + $this->logger->info('Edited accommodation price', [ + 'name' => $accommodation->getName(), + 'code' => $accommodation->getCalendarCode(), + 'date_range' => [ + 'from' => $accommodationPrice->getDateFrom()->format('Y-m-d'), + 'to' => $accommodationPrice->getDateTo()->format('Y-m-d'), + ] + ]); + + $returnUrl = $this->generateUrl('app_admin_accommodation_edit', [ + 'id' => $accommodation->getId(), + ]); + + return $this->redirect($returnUrl.'#prices'); + } + + return $this->render('admin/accommodation_price/edit.html.twig', [ + 'accommodation' => $accommodation, + 'accommodationPrice' => $accommodationPrice, + 'form' => $form, + 'duplicate' => $duplicate, + ]); + } +} diff --git a/src/Controller/Admin/AdditionalService/CreateController.php b/src/Controller/Admin/AdditionalService/CreateController.php new file mode 100644 index 0000000..5f3f4b6 --- /dev/null +++ b/src/Controller/Admin/AdditionalService/CreateController.php @@ -0,0 +1,61 @@ +createForm(AdditionalServiceType::class, $additionalService, ['currency' => $accommodation->getCurrency()]); + $form->handleRequest($request); + + if ($form->isSubmitted() && $form->isValid()) { + $accommodation->addAdditionalService($additionalService); + + $this->entityManager->persist($additionalService); + $this->entityManager->flush(); + + $this->addFlash('success', 'Die Zusatzleistung wurde angelegt'); + + $this->logger->info('Created additional service', [ + 'name' => $accommodation->getName(), + 'code' => $accommodation->getCalendarCode(), + 'label' => $additionalService->getLabel(), + ]); + + $returnUrl = $this->generateUrl('app_admin_accommodation_edit', [ + 'id' => $accommodation->getId(), + ]); + + return $this->redirect($returnUrl.'#additional-services'); + } + + return $this->render('admin/additional_service/create.html.twig', [ + 'accommodation' => $accommodation, + 'form' => $form, + ]); + } +} diff --git a/src/Controller/Admin/AdditionalService/DeleteController.php b/src/Controller/Admin/AdditionalService/DeleteController.php new file mode 100644 index 0000000..59bbbb3 --- /dev/null +++ b/src/Controller/Admin/AdditionalService/DeleteController.php @@ -0,0 +1,60 @@ +getAccommodation(); + + if (true === $request->isMethod(Request::METHOD_POST)) { + if (!$this->isCsrfTokenValid('delete_additional_service_'.$additionalService->getId(), $request->request->getString('_token'))) { + throw $this->createAccessDeniedException('Invalid CSRF token.'); + } + + $this->entityManager->remove($additionalService); + $this->entityManager->flush(); + + $this->addFlash('success', 'Die Zusatzleistung wurde gelöscht'); + + $this->logger->info('Deleted additional service', [ + 'name' => $accommodation->getName(), + 'code' => $accommodation->getCalendarCode(), + 'label' => $additionalService->getLabel(), + ]); + + $returnUrl = $this->generateUrl('app_admin_accommodation_edit', [ + 'id' => $accommodation->getId(), + ]); + + return new HxRedirectResponse($returnUrl.'#additional-services'); + } + + return $this->render('admin/additional_service/modal_delete.html.twig', [ + 'additionalService' => $additionalService, + 'accommodation' => $accommodation, + 'csrf_token_id' => 'delete_additional_service_'.$additionalService->getId(), + ]); + } +} diff --git a/src/Controller/Admin/AdditionalService/EditController.php b/src/Controller/Admin/AdditionalService/EditController.php new file mode 100644 index 0000000..1db5b3e --- /dev/null +++ b/src/Controller/Admin/AdditionalService/EditController.php @@ -0,0 +1,72 @@ + false])] + #[Route('/admin/additional-service/{id}/duplicate', name: 'app_admin_additionalservice_duplicate', defaults: ['duplicate' => true])] + public function index(AdditionalService $additionalService, bool $duplicate, Request $request): Response + { + $accommodation = $additionalService->getAccommodation(); + + if (true === $duplicate) { + $additionalService = clone $additionalService; + } + + $form = $this->createForm(AdditionalServiceType::class, $additionalService, ['currency' => $accommodation->getCurrency()]); + $form->handleRequest($request); + + if ($form->isSubmitted() && $form->isValid()) { + if (true === $duplicate) { + $accommodation->addAdditionalService($additionalService); + } + + $this->entityManager->persist($additionalService); + $this->entityManager->flush(); + + $this->addFlash('success', 'Die Zusatzleistung wurde aktualisiert'); + + $this->logger->info('Edited additional service', [ + 'name' => $accommodation->getName(), + 'code' => $accommodation->getCalendarCode(), + 'label' => $additionalService->getLabel(), + ]); + + $returnUrl = $this->generateUrl('app_admin_accommodation_edit', [ + 'id' => $accommodation->getId(), + ]); + + return $this->redirect($returnUrl.'#additional-services'); + } + + return $this->render('admin/additional_service/edit.html.twig', [ + 'accommodation' => $accommodation, + 'additionalService' => $additionalService, + 'form' => $form, + 'duplicate' => $duplicate, + ]); + } +} diff --git a/src/Controller/Admin/BoardService/CreateController.php b/src/Controller/Admin/BoardService/CreateController.php new file mode 100644 index 0000000..3bc1864 --- /dev/null +++ b/src/Controller/Admin/BoardService/CreateController.php @@ -0,0 +1,61 @@ +createForm(BoardServiceType::class, $boardService, ['currency' => $accommodation->getCurrency()]); + $form->handleRequest($request); + + if ($form->isSubmitted() && $form->isValid()) { + $accommodation->addBoardService($boardService); + + $this->entityManager->persist($boardService); + $this->entityManager->flush(); + + $this->addFlash('success', 'Die Verpflegungsleistung wurde angelegt'); + + $this->logger->info('Created board service', [ + 'name' => $accommodation->getName(), + 'code' => $accommodation->getCalendarCode(), + 'label' => $boardService->getLabel(), + ]); + + $returnUrl = $this->redirectToRoute('app_admin_accommodation_edit', [ + 'id' => $accommodation->getId(), + ]); + + return $this->redirect($returnUrl.'#board-services'); + } + + return $this->render('admin/board_service/create.html.twig', [ + 'accommodation' => $accommodation, + 'form' => $form, + ]); + } +} diff --git a/src/Controller/Admin/BoardService/DeleteController.php b/src/Controller/Admin/BoardService/DeleteController.php new file mode 100644 index 0000000..9685cf1 --- /dev/null +++ b/src/Controller/Admin/BoardService/DeleteController.php @@ -0,0 +1,60 @@ +getAccommodation(); + + if (true === $request->isMethod(Request::METHOD_POST)) { + if (!$this->isCsrfTokenValid('delete_board_service_'.$boardService->getId(), $request->request->getString('_token'))) { + throw $this->createAccessDeniedException('Invalid CSRF token.'); + } + + $this->entityManager->remove($boardService); + $this->entityManager->flush(); + + $this->addFlash('success', 'Die Verpflegungsleistung wurde gelöscht'); + + $this->logger->info('Deleted board service', [ + 'name' => $accommodation->getName(), + 'code' => $accommodation->getCalendarCode(), + 'label' => $boardService->getLabel(), + ]); + + $returnUrl = $this->generateUrl('app_admin_accommodation_edit', [ + 'id' => $accommodation->getId(), + ]); + + return new HxRedirectResponse($returnUrl.'#board-services'); + } + + return $this->render('admin/board_service/modal_delete.html.twig', [ + 'boardService' => $boardService, + 'accommodation' => $accommodation, + 'csrf_token_id' => 'delete_board_service_'.$boardService->getId(), + ]); + } +} diff --git a/src/Controller/Admin/BoardService/EditController.php b/src/Controller/Admin/BoardService/EditController.php new file mode 100644 index 0000000..5294adf --- /dev/null +++ b/src/Controller/Admin/BoardService/EditController.php @@ -0,0 +1,69 @@ + false])] + #[Route('/admin/board-service/{id}/duplicate', name: 'app_admin_boardservice_duplicate', defaults: ['duplicate' => true])] + public function index(BoardService $boardService, bool $duplicate, Request $request): Response + { + $accommodation = $boardService->getAccommodation(); + + if (true === $duplicate) { + $boardService = clone $boardService; + } + + $form = $this->createForm(BoardServiceType::class, $boardService, ['currency' => $accommodation->getCurrency()]); + $form->handleRequest($request); + + if ($form->isSubmitted() && $form->isValid()) { + if (true === $duplicate) { + $accommodation->addBoardService($boardService); + } + + $this->entityManager->persist($boardService); + $this->entityManager->flush(); + + $this->addFlash('success', 'Die Verpflegungsleistung wurde aktualisiert'); + + $this->logger->info('Edited board service', [ + 'name' => $accommodation->getName(), + 'code' => $accommodation->getCalendarCode(), + 'label' => $boardService->getLabel(), + ]); + + $returnUrl = $this->redirectToRoute('app_admin_accommodation_edit', [ + 'id' => $accommodation->getId(), + ]); + + return $this->redirect($returnUrl.'#board-services'); + } + + return $this->render('admin/board_service/edit.html.twig', [ + 'accommodation' => $accommodation, + 'boardService' => $boardService, + 'form' => $form, + 'duplicate' => $duplicate, + ]); + } +} diff --git a/src/Controller/Admin/BookingEditDraft/DeleteController.php b/src/Controller/Admin/BookingEditDraft/DeleteController.php new file mode 100644 index 0000000..d49c56c --- /dev/null +++ b/src/Controller/Admin/BookingEditDraft/DeleteController.php @@ -0,0 +1,55 @@ +isMethod(Request::METHOD_POST)) { + if (!$this->isCsrfTokenValid('delete_booking_edit_draft_'.$draft->getId(), $request->request->getString('_token'))) { + throw $this->createAccessDeniedException('Invalid CSRF token.'); + } + + $this->entityManager->remove($draft); + $this->entityManager->flush(); + + $this->adminLogger->info('Delete booking edit draft', [ + 'booking_number' => $draft->getBookingNumber(), + ]); + $this->addFlash('success', 'Der Buchungsentwurf wurde gelöscht'); + + $returnUrl = $this->getReturnUrl($request, 'app_admin_bookingeditdraft'); + + return new HxRedirectResponse($returnUrl); + } + + return $this->render('admin/booking_edit_draft/modal_delete.html.twig', [ + 'draft' => $draft, + 'csrf_token_id' => 'delete_booking_edit_draft_'.$draft->getId(), + ]); + } +} diff --git a/src/Controller/Admin/BookingEditDraft/ExportController.php b/src/Controller/Admin/BookingEditDraft/ExportController.php new file mode 100644 index 0000000..bc76b11 --- /dev/null +++ b/src/Controller/Admin/BookingEditDraft/ExportController.php @@ -0,0 +1,41 @@ +hasExportData()) { + $this->addFlash('warning', 'Der Export ist fehlgeschlagen'); + + return $this->redirectToRoute('app_admin_bookingeditdraft'); + } + + try { + return $this->bookingExporter->createExportResponse($draft); + } catch (\RuntimeException $e) { + $this->addFlash('warning', 'Der Export ist fehlgeschlagen: '.$e->getMessage()); + + return $this->redirectToRoute('app_admin_bookingeditdraft'); + } + } +} diff --git a/src/Controller/Admin/BookingEditDraft/IndexController.php b/src/Controller/Admin/BookingEditDraft/IndexController.php new file mode 100644 index 0000000..08a36b0 --- /dev/null +++ b/src/Controller/Admin/BookingEditDraft/IndexController.php @@ -0,0 +1,50 @@ +bookingEditDraftRepository + ->createQueryBuilder('booking_edit_draft') + ->leftJoin('booking_edit_draft.user', 'user') + ; + + $pagination = $this->paginator->paginate( + $qb, + $request->query->getInt('page', 1), + $request->query->getInt('limit', 20), + [ + 'defaultSortFieldName' => 'booking_edit_draft.createdAt', + 'defaultSortDirection' => 'DESC', + ] + ); + + return $this->render('admin/booking_edit_draft/index.html.twig', [ + 'pagination' => $pagination, + ]); + } +} diff --git a/src/Controller/Admin/BookingEditDraft/ShowController.php b/src/Controller/Admin/BookingEditDraft/ShowController.php new file mode 100644 index 0000000..2795f58 --- /dev/null +++ b/src/Controller/Admin/BookingEditDraft/ShowController.php @@ -0,0 +1,30 @@ +getReturnUrl($request, 'app_admin_bookingeditdraft'); + + return $this->render('admin/booking_edit_draft/show.html.twig', [ + 'draft' => $draft, + 'returnUrl' => $returnUrl, + ]); + } +} diff --git a/src/Controller/Admin/BookingEditDraftController.php b/src/Controller/Admin/BookingEditDraftController.php deleted file mode 100644 index b9e6349..0000000 --- a/src/Controller/Admin/BookingEditDraftController.php +++ /dev/null @@ -1,107 +0,0 @@ -bookingEditDraftRepository - ->createQueryBuilder('booking_edit_draft') - ->leftJoin('booking_edit_draft.user', 'user') - ; - - $pagination = $this->paginator->paginate( - $qb, - $request->query->getInt('page', 1), - $request->query->getInt('limit', 20), - [ - 'defaultSortFieldName' => 'booking_edit_draft.createdAt', - 'defaultSortDirection' => 'DESC', - ] - ); - - return $this->render('admin/booking_edit_draft/index.html.twig', [ - 'pagination' => $pagination, - ]); - } - - #[Route('/admin/booking-edit-draft/{id}/show', name: 'app_admin_bookingeditdraft_show')] - public function show(BookingEditDraft $draft, Request $request): Response - { - $returnUrl = $this->getReturnUrl($request, 'app_admin_bookingeditdraft'); - - return $this->render('admin/booking_edit_draft/show.html.twig', [ - 'draft' => $draft, - 'returnUrl' => $returnUrl, - ]); - } - - #[Route('/admin/booking-edit-draft/{id}/delete', name: 'app_admin_bookingeditdraft_delete')] - public function delete(BookingEditDraft $draft, Request $request): Response - { - if (true === $request->isMethod(Request::METHOD_POST)) { - $this->entityManager->remove($draft); - $this->entityManager->flush(); - - $this->adminLogger->info('Delete booking edit draft', [ - 'booking_number' => $draft->getBookingNumber(), - ]); - $this->addFlash('success', 'Der Buchungsentwurf wurde gelöscht'); - - $returnUrl = $this->getReturnUrl($request, 'app_admin_bookingeditdraft'); - - return new HxRedirectResponse($returnUrl); - } - - return $this->render('admin/booking_edit_draft/modal_delete.html.twig', [ - 'draft' => $draft, - ]); - } - - #[Route('/admin/booking-edit-draft/{id}/export', name: 'app_admin_bookingeditdraft_export')] - public function export(BookingEditDraft $draft): Response - { - if (false === $draft->hasExportData()) { - $this->addFlash('warning', 'Der Export ist fehlgeschlagen'); - - return $this->redirectToRoute('app_admin_bookingeditdraft'); - } - - try { - return $this->bookingExporter->createExportResponse($draft); - } catch (\RuntimeException $e) { - $this->addFlash('warning', 'Der Export ist fehlgeschlagen: '.$e->getMessage()); - - return $this->redirectToRoute('app_admin_bookingeditdraft'); - } - } -} diff --git a/src/Controller/Admin/DashboardController.php b/src/Controller/Admin/DashboardController.php index 513cc44..a6d3818 100644 --- a/src/Controller/Admin/DashboardController.php +++ b/src/Controller/Admin/DashboardController.php @@ -4,10 +4,13 @@ declare(strict_types=1); namespace App\Controller\Admin; +use App\Security\Voter\AdministrativeAccessVoter; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Attribute\Route; +use Symfony\Component\Security\Http\Attribute\IsGranted; +#[IsGranted(AdministrativeAccessVoter::ADMINISTRATIVE_ACCESS)] class DashboardController extends AbstractController { #[Route('/admin/dashboard', name: 'app_admin_dashboard')] diff --git a/src/Controller/Admin/Log/DownloadController.php b/src/Controller/Admin/Log/DownloadController.php new file mode 100644 index 0000000..ce026a0 --- /dev/null +++ b/src/Controller/Admin/Log/DownloadController.php @@ -0,0 +1,46 @@ + '.+'])] + public function index(string $filename): Response + { + try { + if (false === $this->xmlDumpReader->fileExists($filename)) { + throw $this->createNotFoundException('Dump file not found. It may have been cleaned up.'); + } + + $content = $this->xmlDumpReader->getContent($filename); + } catch (FilesystemException $e) { + throw $this->createNotFoundException('Failed to read dump file: '.$e->getMessage()); + } + + $response = new Response($content); + $response->headers->set('Content-Type', 'application/xml'); + + $disposition = $response->headers->makeDisposition( + ResponseHeaderBag::DISPOSITION_ATTACHMENT, + basename($filename) + ); + $response->headers->set('Content-Disposition', $disposition); + + return $response; + } +} diff --git a/src/Controller/Admin/Log/IndexController.php b/src/Controller/Admin/Log/IndexController.php new file mode 100644 index 0000000..b1c66da --- /dev/null +++ b/src/Controller/Admin/Log/IndexController.php @@ -0,0 +1,46 @@ +logEntryRepository + ->createQueryBuilder('log_entry') + ; + + $pagination = $this->paginator->paginate( + $qb, + $request->query->getInt('page', 1), + $request->query->getInt('limit', 50), + [ + 'defaultSortFieldName' => 'log_entry.createdAt', + 'defaultSortDirection' => 'DESC', + ] + ); + + return $this->render('admin/log/index.html.twig', [ + 'pagination' => $pagination, + ]); + } +} diff --git a/src/Controller/Admin/Log/XmlDumpController.php b/src/Controller/Admin/Log/XmlDumpController.php new file mode 100644 index 0000000..9d9c7cc --- /dev/null +++ b/src/Controller/Admin/Log/XmlDumpController.php @@ -0,0 +1,36 @@ +xmlDumpReader->findDumpsForRequestId($logEntry->getRequestId()); + } catch (FilesystemException) { + } + + return $this->render('admin/log/xml_dumps.html.twig', [ + 'logEntry' => $logEntry, + 'dumps' => $dumps, + ]); + } +} diff --git a/src/Controller/Admin/LogController.php b/src/Controller/Admin/LogController.php deleted file mode 100644 index 95bfe4d..0000000 --- a/src/Controller/Admin/LogController.php +++ /dev/null @@ -1,90 +0,0 @@ -logEntryRepository - ->createQueryBuilder('log_entry') - ; - - $pagination = $this->paginator->paginate( - $qb, - $request->query->getInt('page', 1), - $request->query->getInt('limit', 50), - [ - 'defaultSortFieldName' => 'log_entry.createdAt', - 'defaultSortDirection' => 'DESC', - ] - ); - - return $this->render('admin/log/index.html.twig', [ - 'pagination' => $pagination, - ]); - } - - #[Route('/admin/log/{id}/xml-dumps', name: 'app_admin_log_xmldumps')] - public function xmlDumps(LogEntry $logEntry): Response - { - $dumps = []; - try { - $dumps = $this->xmlDumpReader->findDumpsForRequestId($logEntry->getRequestId()); - } catch (FilesystemException) { - } - - return $this->render('admin/log/xml_dumps.html.twig', [ - 'logEntry' => $logEntry, - 'dumps' => $dumps, - ]); - } - - #[Route('/admin/log/download/{filename}', name: 'app_admin_log_xmldump_download', requirements: ['filename' => '.+'])] - public function downloadXmlDump(string $filename): Response - { - try { - if (false === $this->xmlDumpReader->fileExists($filename)) { - throw $this->createNotFoundException('Dump file not found. It may have been cleaned up.'); - } - - $content = $this->xmlDumpReader->getContent($filename); - } catch (FilesystemException $e) { - throw $this->createNotFoundException('Failed to read dump file: '.$e->getMessage()); - } - - $response = new Response($content); - $response->headers->set('Content-Type', 'application/xml'); - - $disposition = $response->headers->makeDisposition( - ResponseHeaderBag::DISPOSITION_ATTACHMENT, - basename($filename) - ); - $response->headers->set('Content-Disposition', $disposition); - - return $response; - } -} diff --git a/src/Controller/Admin/UserController.php b/src/Controller/Admin/User/IndexController.php similarity index 86% rename from src/Controller/Admin/UserController.php rename to src/Controller/Admin/User/IndexController.php index 385a387..1f6f212 100644 --- a/src/Controller/Admin/UserController.php +++ b/src/Controller/Admin/User/IndexController.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace App\Controller\Admin; +namespace App\Controller\Admin\User; use App\Repository\UserRepository; use Knp\Component\Pager\PaginatorInterface; @@ -10,8 +10,10 @@ use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Attribute\Route; +use Symfony\Component\Security\Http\Attribute\IsGranted; -class UserController extends AbstractController +#[IsGranted('ROLE_ADMIN')] +class IndexController extends AbstractController { public function __construct( private readonly UserRepository $userRepository, diff --git a/src/Controller/Api/AccommodationBookingController.php b/src/Controller/Api/AccommodationBookingController.php new file mode 100644 index 0000000..5a11518 --- /dev/null +++ b/src/Controller/Api/AccommodationBookingController.php @@ -0,0 +1,62 @@ +bookingRepository->findOneBy(['uuid' => $uuid]); + + if (null === $booking) { + return new JsonResponse(['message' => 'Not found'], Response::HTTP_NOT_FOUND); + } + + return $this->bookingResponse($booking); + } + + #[Route(path: '/accommodation-bookings/{uuid}/accept', name: 'api_accommodation_bookings_accept', methods: ['POST'])] + public function accept(string $uuid): JsonResponse + { + $booking = $this->bookingRepository->findOneBy(['uuid' => $uuid]); + + if (null === $booking) { + return new JsonResponse(['message' => 'Not found'], Response::HTTP_NOT_FOUND); + } + + $this->bookingService->acceptBooking($booking); + + return $this->bookingResponse($booking); + } + + private function bookingResponse(AccommodationBooking $booking): JsonResponse + { + $response = new AccommodationBookingApiResponse($booking, $this->breakdownCalculator->compute($booking)); + $json = $this->serializer->serialize($response, 'json', ['groups' => ['api:single']]); + + return new JsonResponse($json, Response::HTTP_OK, [], true); + } +} diff --git a/src/Controller/Api/ContingentController.php b/src/Controller/Api/ContingentController.php new file mode 100644 index 0000000..4bc8bb8 --- /dev/null +++ b/src/Controller/Api/ContingentController.php @@ -0,0 +1,133 @@ +accommodationRepository->findOneBy(['calendarCode' => $query->hotelCode]); + + if (null === $accommodation) { + return $this->json(['error' => 'hotel not found for hotelCode.'], Response::HTTP_BAD_REQUEST); + } + + $yearStart = new \DateTimeImmutable("{$query->year}-01-01"); + $yearEnd = new \DateTimeImmutable("{$query->year}-12-31"); + + $prices = $this->priceRepository->findByHotelCodeAndDateRange($query->hotelCode, $yearStart, $yearEnd); + + $currency = $accommodation->getCurrency(); + + return $this->json($this->priceTimelineBuilder->buildTimeline($prices, $yearStart, $yearEnd, $currency)); + } + + #[Route(path: '/contingents/calendar', name: 'api_contingents_calendar', methods: ['GET'])] + public function calendar( + #[MapQueryString(validationFailedStatusCode: Response::HTTP_BAD_REQUEST)] + ContingentCalendarQuery $query, + ): JsonResponse { + $dateFrom = $query->dateFromDate(); + $dateTo = $query->dateToDate(); + + $accommodation = $this->accommodationRepository->findOneBy(['calendarCode' => $query->hotelCode]); + + if (null === $accommodation) { + return $this->json(['error' => 'hotel not found for hotelCode.'], Response::HTTP_BAD_REQUEST); + } + + try { + $cacheKey = sprintf('contingents_calendar_%s_%s_%s', $query->hotelCode, $query->dateFrom, $query->dateTo); + $calendar = $this->cache->get($cacheKey, function (ItemInterface $item) use ($query) { + $item->expiresAfter(3600); + + return $this->contingentsClient->getContingentCalendar($query->hotelCode, $query->dateFrom, $query->dateTo); + }); + } catch (BpnConnectException|InvalidArgumentException $e) { + return $this->json(['error' => 'Failed to fetch contingent data.'], Response::HTTP_BAD_GATEWAY); + } + + $prices = $this->priceRepository->findByHotelCodeAndDateRange($query->hotelCode, $dateFrom, $dateTo); + + $currency = $accommodation->getCurrency(); + + $data = array_map( + fn ($entry) => $this->enrichEntry($entry->date, $entry->status->value, $prices, $currency), + $calendar->data, + ); + + return $this->json($data); + } + + /** + * @param AccommodationPrice[] $prices + * + * @return array{date: string, status: string, type: string|null, pricePerNight: float|null, defaultPricePerNight: float|null, priceAdditionalPerson: float|null, defaultPriceAdditionalPerson: float|null, includedPax: int|null, minNights: int|null} + */ + private function enrichEntry(string $date, string $status, array $prices, string $currency): array + { + $day = (new \DateTimeImmutable($date))->setTime(0, 0); + + // dateFrom and dateTo are both inclusive (last night, not checkout day) + $candidates = array_filter( + $prices, + fn ($p) => $p->getDateFrom() <= $day && $p->getDateTo() >= $day, + ); + + $winner = $this->priceTimelineBuilder->resolveWinner($candidates); + + $defaultPrice = null; + if (PriceType::DISCOUNT === $winner?->getType()) { + $defaults = array_filter($candidates, fn ($p) => null === $p->getType()); + $defaultPrice = $this->priceTimelineBuilder->resolveWinner($defaults); + } + + return [ + 'date' => $date, + 'status' => $status, + 'type' => $winner?->getType()?->value, + 'pricePerNight' => null !== $winner ? round($winner->getPricePerNight() / 100, 2) : null, + 'defaultPricePerNight' => null !== $defaultPrice ? round($defaultPrice->getPricePerNight() / 100, 2) : null, + 'priceAdditionalPerson' => null !== $winner ? round($winner->getPriceAdditionalPerson() / 100, 2) : null, + 'defaultPriceAdditionalPerson' => null !== $defaultPrice ? round($defaultPrice->getPriceAdditionalPerson() / 100, 2) : null, + 'currency' => $currency, + 'includedPax' => $winner?->getIncludedPax(), + 'minNights' => $winner?->getMinNights(), + ]; + } +} diff --git a/src/Controller/Booking/Create/IndexController.php b/src/Controller/Booking/Create/IndexController.php index e34155e..de7bf81 100644 --- a/src/Controller/Booking/Create/IndexController.php +++ b/src/Controller/Booking/Create/IndexController.php @@ -49,7 +49,7 @@ class IndexController extends AbstractController path: '/bookings/create', name: 'app_booking_create', )] - public function index(Request $request, #[MapQueryString] ?BookingQueryParams $params): Response + public function index(#[MapQueryString] ?BookingQueryParams $params): Response { if (null === $params) { throw $this->createNotFoundException('Invalid booking parameters provided'); diff --git a/src/Controller/Groups/AbstractAccommodationController.php b/src/Controller/Groups/AbstractAccommodationController.php new file mode 100644 index 0000000..f8f0168 --- /dev/null +++ b/src/Controller/Groups/AbstractAccommodationController.php @@ -0,0 +1,52 @@ + $dto->currentStep) { + $this->addFlash('error', 'Bitte erst die vorherigen Schritte abschließen.'); + + return $this->redirectToCurrentStep($dto); + } + + return null; + } + + protected function createFailureResponse(\Throwable $exception, bool $htmx): Response + { + if ($htmx) { + return new Response('', 400); + } + + $message = $exception instanceof AccommodationSessionNotFoundException + ? 'Deine Sitzung ist abgelaufen. Bitte starte die Anfrage erneut.' + : 'Die Anfrage konnte nicht geladen werden.'; + + $this->addFlash('error', $message); + + return $this->redirectToRoute('app_groups_booking_error'); + } + + private function redirectToCurrentStep(AccommodationBookingDto $dto): RedirectResponse + { + $route = match ($dto->currentStep) { + 2 => 'app_groups_booking_step_2', + 3 => 'app_groups_booking_step_3', + 4 => 'app_groups_booking_step_4', + default => 'app_groups_booking_step_1', + }; + + return $this->redirectToRoute($route); + } +} diff --git a/src/Controller/Groups/IndexController.php b/src/Controller/Groups/IndexController.php new file mode 100644 index 0000000..e006b24 --- /dev/null +++ b/src/Controller/Groups/IndexController.php @@ -0,0 +1,77 @@ +addFlash('error', 'Ungültige oder fehlende Parameter. Bitte überprüfe den Link.'); + + return $this->redirectToRoute('app_groups_booking_error'); + } + + try { + $this->sessionManager->clear($request); + $dto = $this->bookingService->initFromParams($params); + $this->sessionManager->save($request, $dto); + } catch (\InvalidArgumentException $e) { + $this->addFlash('error', $e->getMessage()); + + return $this->redirectToRoute('app_groups_booking_error'); + } + + return $this->redirectToRoute('app_groups_booking_step_1'); + } + + #[Route('/groups/booking/success', name: 'app_groups_booking_success')] + public function success(Request $request): Response + { + $session = $request->getSession(); + $resultType = $session instanceof FlashBagAwareSessionInterface + ? $session->getFlashBag()->get('groups_booking_result')[0] ?? null + : null; + + // Flash is consumed after the first read — reload/direct access ends up here with none. + if (null === $resultType) { + return $this->redirectToRoute('app_login'); + } + + return $this->render('groups/booking/success.html.twig', [ + 'resultType' => $resultType, + ]); + } + + #[Route('/groups/booking/error', name: 'app_groups_booking_error')] + public function error(): Response + { + return $this->render('groups/booking/error.html.twig'); + } +} diff --git a/src/Controller/Groups/OfferController.php b/src/Controller/Groups/OfferController.php new file mode 100644 index 0000000..9442a4e --- /dev/null +++ b/src/Controller/Groups/OfferController.php @@ -0,0 +1,119 @@ +bookingRepository->findOneBy(['uuid' => $uuid]); + + if (null === $booking || false === $this->linkSigner->isValidLinkRequest($request, $booking)) { + return $this->render('groups/booking/offer_unavailable.html.twig'); + } + + $this->linkSigner->authorizeSession($request, $booking); + + return new RedirectResponse($this->generateUrl('app_groups_booking_offer_view', ['uuid' => $uuid])); + } + + #[Route(path: '/groups/booking/offer/{uuid}/view', name: 'app_groups_booking_offer_view', methods: ['GET'])] + public function view(string $uuid, Request $request): Response + { + $booking = $this->bookingRepository->findOneBy(['uuid' => $uuid]); + + if (null === $booking || false === $this->linkSigner->isSessionAuthorized($request, $booking)) { + return $this->render('groups/booking/offer_unavailable.html.twig'); + } + + $accommodation = $booking->getAccommodation() ?? throw $this->createNotFoundException('Booking has no accommodation.'); + $priceBreakdown = $this->breakdownCalculator->compute($booking); + + $ctx = new AccommodationBookingContext( + accommodation: $accommodation, + hotelCmsData: $this->bookingService->loadHotelCmsData($accommodation), + priceBreakdown: $priceBreakdown, + ); + + return $this->render('groups/booking/offer.html.twig', [ + 'booking' => $booking, + 'priceBreakdown' => $priceBreakdown, + 'ctx' => $ctx, + ]); + } + + #[Route(path: '/groups/booking/offer/{uuid}/confirm', name: 'app_groups_booking_offer_confirm', methods: ['GET', 'POST'])] + public function confirm(string $uuid, Request $request): Response + { + $booking = $this->bookingRepository->findOneBy(['uuid' => $uuid]); + + if (null === $booking || false === $this->linkSigner->isSessionAuthorized($request, $booking)) { + return $this->redirectToOfferPage($request, $uuid); + } + + if (!$booking->isInquiry()) { + return $this->redirectToOfferPage($request, $uuid); + } + + $confirmationForm = $this->createForm(OfferAcceptConfirmationType::class, null, [ + 'terms_url' => $this->getParameter('terms_and_conditions_url'), + ]); + $confirmationForm->handleRequest($request); + + if ($confirmationForm->isSubmitted() && $confirmationForm->isValid()) { + $this->bookingService->acceptBooking($booking); + $this->addFlash('success', 'Deine Buchung ist bestätigt.'); + + return $this->redirectToOfferPage($request, $uuid); + } + + return $this->render('groups/booking/_offer_accept_confirmation_modal.html.twig', [ + 'booking' => $booking, + 'confirmationForm' => $confirmationForm, + ]); + } + + /** + * Sends the browser to a full reload of the (non-modal) offer page — this is + * triggered from an htmx-loaded modal, so a plain render/redirect here would + * get appended as an inert HTML fragment instead of actually navigating. + */ + private function redirectToOfferPage(Request $request, string $uuid): Response + { + $url = $this->generateUrl('app_groups_booking_offer_view', ['uuid' => $uuid]); + + return $this->htmxRedirect($request, $url); + } +} diff --git a/src/Controller/Groups/Step1Controller.php b/src/Controller/Groups/Step1Controller.php new file mode 100644 index 0000000..bb38b22 --- /dev/null +++ b/src/Controller/Groups/Step1Controller.php @@ -0,0 +1,292 @@ +sessionManager->getOrFail($request); + } catch (AccommodationSessionNotFoundException $e) { + return $this->createFailureResponse($e, false); + } + + if ($request->isMethod('POST')) { + $dateFromRaw = $request->request->getString('date_from'); + $dateToRaw = $request->request->getString('date_to'); + + try { + $this->bookingService->applyDates($dto, $dateFromRaw, $dateToRaw); + } catch (\InvalidArgumentException $e) { + $this->addFlash('error', $e->getMessage()); + + return $this->redirectToRoute('app_groups_booking_step_1'); + } + + $dateFrom = $dto->dateFrom; + $dateTo = $dto->dateTo; + if (null !== $dateFrom && null !== $dateTo) { + $accommodation = $this->bookingService->loadAccommodation($dto->accommodationId); + if (null === $accommodation) { + throw $this->createNotFoundException(); + } + $dto->paxCount = $this->bookingService->computeInitialPaxCount($accommodation, $dateFrom, $dateTo); + } + + // Reset service selections — no longer valid for the new date range + $dto->selectedBoardServiceId = null; + $dto->selectedAdditionalServiceIds = []; + + $dto->currentStep = 2; + $this->sessionManager->save($request, $dto); + + return $this->redirectToRoute('app_groups_booking_step_2'); + } + + $accommodation = $this->bookingService->loadAccommodation($dto->accommodationId); + if (null === $accommodation) { + throw $this->createNotFoundException(); + } + + $priceBreakdown = null; + if ($dto->dateFrom !== null && $dto->dateTo !== null) { + $prices = $this->bookingService->loadPrices($dto, $accommodation); + $priceBreakdown = $this->priceCalculator->calculate( + $dto->paxCount, + $dto->minorsCount, + $dto->getNights(), + $dto->dateFrom, + $dto->dateTo, + $prices, + null, + [], + $accommodation->getCurrency() ?? 'EUR', + ); + } + + $ctx = new AccommodationBookingContext( + accommodation: $accommodation, + hotelCmsData: $this->bookingService->loadHotelCmsData($accommodation), + priceBreakdown: $priceBreakdown, + ); + + return $this->render('groups/booking/step_1.html.twig', [ + 'dto' => $dto, + 'ctx' => $ctx, + 'hotelCode' => $accommodation->getCalendarCode() ?? '', + ]); + } + + #[Route('/groups/booking/calendar-refresh', name: 'app_groups_booking_calendar_refresh', methods: ['POST'])] + public function calendarRefresh(Request $request): Response + { + try { + $dto = $this->sessionManager->getOrFail($request); + } catch (AccommodationSessionNotFoundException) { + return new Response('', Response::HTTP_BAD_REQUEST); + } + + $dateFromRaw = $request->request->getString('date_from'); + $dateToRaw = $request->request->getString('date_to'); + + if ('' !== $dateFromRaw && '' !== $dateToRaw) { + try { + $this->bookingService->applyDates($dto, $dateFromRaw, $dateToRaw); + } catch (\InvalidArgumentException) { + // Invalid dates — fall through with original dto state + } + } else { + $dto->dateFrom = null; + $dto->dateTo = null; + } + + $this->sessionManager->save($request, $dto); + + $accommodation = $this->bookingService->loadAccommodation($dto->accommodationId); + if (null === $accommodation) { + return new Response('', Response::HTTP_NOT_FOUND); + } + + $priceBreakdown = null; + if ($dto->dateFrom !== null && $dto->dateTo !== null) { + $prices = $this->bookingService->loadPrices($dto, $accommodation); + $priceBreakdown = $this->priceCalculator->calculate( + $dto->paxCount, + $dto->minorsCount, + $dto->getNights(), + $dto->dateFrom, + $dto->dateTo, + $prices, + null, + [], + $accommodation->getCurrency() ?? 'EUR', + ); + } + + $ctx = new AccommodationBookingContext( + accommodation: $accommodation, + hotelCmsData: $this->bookingService->loadHotelCmsData($accommodation), + priceBreakdown: $priceBreakdown, + ); + + return $this->htmxOobResponse( + 'groups/booking/_summary.html.twig', + ['booking_summary'], + ['dto' => $dto, 'ctx' => $ctx], + ); + } + + #[Route('/groups/booking/calendar-grid', name: 'app_groups_booking_calendar_grid', methods: ['GET'])] + public function calendarGrid(Request $request): Response + { + try { + $dto = $this->sessionManager->getOrFail($request); + } catch (AccommodationSessionNotFoundException $e) { + return new Response('', Response::HTTP_BAD_REQUEST); + } + + $accommodation = $this->bookingService->loadAccommodation($dto->accommodationId); + $hotelCode = $accommodation?->getCalendarCode() ?? ''; + + $now = new \DateTimeImmutable('today'); + $calendarStart = $now->modify('first day of this month'); + $calendarEnd = $calendarStart->modify('+'.(self::CALENDAR_MONTHS - 1).' months')->modify('last day of this month'); + $todayStr = $now->format('Y-m-d'); + + $maxOffset = self::CALENDAR_MONTHS - 2; + if ($request->query->has('offset')) { + $offset = max(0, min($request->query->getInt('offset'), $maxOffset)); + } else { + $offset = 0; + if ($dto->dateFrom !== null) { + $monthsDiff = ((int) $dto->dateFrom->format('Y') - (int) $calendarStart->format('Y')) * 12 + + ((int) $dto->dateFrom->format('n') - (int) $calendarStart->format('n')); + $offset = max(0, min($monthsDiff, $maxOffset)); + } + } + + $displayFrom = $calendarStart->modify("+{$offset} months"); + $months = $this->calendarGridBuilder->buildMonths($displayFrom, 2); + + $enrichedByDate = $this->buildEnrichedDayData( + $hotelCode, + $calendarStart, + $calendarEnd, + $calendarStart->format('Y-m-d'), + $calendarEnd->format('Y-m-d'), + ); + + return $this->render('groups/booking/_price_calendar_grid.html.twig', [ + 'months' => $months, + 'enrichedByDate' => $enrichedByDate, + 'todayStr' => $todayStr, + 'offset' => $offset, + 'totalMonths' => self::CALENDAR_MONTHS, + ]); + } + + /** + * Fetches contingent + price data and returns a map of date → ['status', 'minNights']. + * + * Returns an empty array on API failure; the template treats missing dates as blocked. + * + * @return array + */ + private function buildEnrichedDayData( + string $hotelCode, + \DateTimeImmutable $dateFrom, + \DateTimeImmutable $dateTo, + string $dateFromStr, + string $dateToStr, + ): array { + try { + $cacheKey = sprintf('contingents_calendar_%s_%s_%s', $hotelCode, $dateFromStr, $dateToStr); + $calendar = $this->cache->get( + $cacheKey, + function (ItemInterface $item) use ($hotelCode, $dateFromStr, $dateToStr): mixed { + $item->expiresAfter(3600); + + return $this->contingentsClient->getContingentCalendar($hotelCode, $dateFromStr, $dateToStr); + }, + ); + } catch (BpnConnectException|\Psr\Cache\InvalidArgumentException) { + return []; + } + + $prices = $this->priceRepository->findByHotelCodeAndDateRange($hotelCode, $dateFrom, $dateTo); + + $availableDates = []; + foreach ($calendar->data as $entry) { + if (ContingentStatus::Ok === $entry->status) { + $availableDates[$entry->date] = true; + } + } + + $enriched = []; + foreach ($calendar->data as $entry) { + $isAvailable = ContingentStatus::Ok === $entry->status; + $prevDate = (new \DateTimeImmutable($entry->date))->modify('-1 day')->format('Y-m-d'); + $prevAvailable = isset($availableDates[$prevDate]); + + $status = match (true) { + $isAvailable && $prevAvailable => 'ok', + $isAvailable => 'blocked-to-ok', + $prevAvailable => 'checkout-only', + default => 'blocked', + }; + + $day = (new \DateTimeImmutable($entry->date))->setTime(0, 0); + $candidates = array_values(array_filter( + $prices, + fn(AccommodationPrice $p): bool => $p->getDateFrom() <= $day && $p->getDateTo() >= $day, + )); + $winner = $this->priceTimelineBuilder->resolveWinner($candidates); + + $enriched[$entry->date] = [ + 'status' => $status, + 'minNights' => $winner?->getMinNights() ?? 0, + ]; + } + + return $enriched; + } +} diff --git a/src/Controller/Groups/Step2Controller.php b/src/Controller/Groups/Step2Controller.php new file mode 100644 index 0000000..8cddc40 --- /dev/null +++ b/src/Controller/Groups/Step2Controller.php @@ -0,0 +1,191 @@ +sessionManager->getOrFail($request); + } catch (AccommodationSessionNotFoundException $e) { + return $this->createFailureResponse($e, false); + } + + if ($redirect = $this->validateStepAccess($dto, 2)) { + return $redirect; + } + + [$ctx, $form] = $this->buildStep2Context($request, $dto, true); + + if ($form->isSubmitted() && $form->isValid()) { + $dto->currentStep = 3; + $this->sessionManager->save($request, $dto); + + return $this->redirectToRoute('app_groups_booking_step_3'); + } + + return $this->render('groups/booking/step_2.html.twig', [ + 'dto' => $dto, + 'ctx' => $ctx, + 'form' => $form, + ]); + } + + #[Route('/groups/booking/step-2/refresh', name: 'app_groups_booking_step_2_refresh', methods: ['POST'])] + public function refresh(Request $request): Response + { + try { + $dto = $this->sessionManager->getOrFail($request); + } catch (AccommodationSessionNotFoundException $e) { + return $this->createFailureResponse($e, true); + } + + [$ctx, $form] = $this->buildStep2Context($request, $dto, false); + + return $this->htmxOobResponse( + 'groups/booking/step_2.html.twig', + ['accommodation_form', 'accommodation_summary'], + ['dto' => $dto, 'ctx' => $ctx, 'form' => $form->createView()], + ); + } + + /** + * @return array{AccommodationBookingContext, FormInterface} + */ + private function buildStep2Context(Request $request, AccommodationBookingDto $dto, bool $validate): array + { + $accommodation = $this->bookingService->loadAccommodation($dto->accommodationId); + if (null === $accommodation) { + throw $this->createNotFoundException(); + } + $prices = $this->bookingService->loadPrices($dto, $accommodation); + $services = $this->bookingService->loadAvailableServices($dto, $accommodation); + + $form = $this->createForm(AccommodationStep2Type::class, $dto, [ + 'board_service_choices' => $this->buildServiceChoices($services['boardServices']), + 'additional_service_choices' => $this->buildServiceChoices($services['additionalServices']), + 'max_adolescent_age' => (int) $accommodation->getMaxAdolescentAge(), + 'validation_groups' => $validate ? ['step_2'] : false, + ]); + $form->handleRequest($request); + + $status = $this->bookingService->computeInquiryStatus($dto, $prices); + $dto->isInquiry = $status->isInquiry; + $dto->inquiryReasons = $status->reasons; + + $boardService = $this->resolveSelectedBoardService($dto, $services['boardServices']); + $selectedAdditionalServices = $this->resolveSelectedAdditionalServices($dto, $services['additionalServices']); + + $priceBreakdown = null; + if ($dto->dateFrom !== null && $dto->dateTo !== null) { + $priceBreakdown = $this->priceCalculator->calculate( + $dto->paxCount, + $dto->minorsCount, + $dto->getNights(), + $dto->dateFrom, + $dto->dateTo, + $prices, + $boardService, + $selectedAdditionalServices, + $accommodation->getCurrency() ?? 'EUR', + ); + $dto->totalPrice = $priceBreakdown['total']; + $dto->priceBreakdown = $priceBreakdown; + } + + $this->sessionManager->save($request, $dto); + + $ctx = new AccommodationBookingContext( + accommodation: $accommodation, + hotelCmsData: $this->bookingService->loadHotelCmsData($accommodation), + boardServices: $services['boardServices'], + additionalServices: $services['additionalServices'], + groupedAdditionalServices: $services['groupedAdditionalServices'], + ungroupedAdditionalServices: $services['ungroupedAdditionalServices'], + priceBreakdown: $priceBreakdown, + ); + + return [$ctx, $form]; + } + + /** + * @param BoardService[] $boardServices + */ + private function resolveSelectedBoardService(AccommodationBookingDto $dto, array $boardServices): ?BoardService + { + if (null === $dto->selectedBoardServiceId) { + return null; + } + foreach ($boardServices as $service) { + if ($service->getId() === $dto->selectedBoardServiceId) { + return $service; + } + } + + return null; + } + + /** + * @param AdditionalService[] $additionalServices + * + * @return AdditionalService[] + */ + private function resolveSelectedAdditionalServices(AccommodationBookingDto $dto, array $additionalServices): array + { + if (empty($dto->selectedAdditionalServiceIds)) { + return []; + } + $selectedIds = array_flip($dto->selectedAdditionalServiceIds); + + return array_values(array_filter( + $additionalServices, + fn(AdditionalService $s) => isset($selectedIds[$s->getId()]), + )); + } + + /** + * Builds an ID-keyed choices array for Symfony form binding. + * Labels and price formatting are handled in Twig. + * + * @param BoardService[]|AdditionalService[] $services + * + * @return array + */ + private function buildServiceChoices(array $services): array + { + $choices = []; + foreach ($services as $service) { + $choices[(string) $service->getId()] = $service->getId(); + } + + return $choices; + } +} diff --git a/src/Controller/Groups/Step3Controller.php b/src/Controller/Groups/Step3Controller.php new file mode 100644 index 0000000..0a5cee2 --- /dev/null +++ b/src/Controller/Groups/Step3Controller.php @@ -0,0 +1,90 @@ +resolveDto($request); + if ($dto instanceof Response) { + return $dto; + } + + $accommodation = $this->loadAccommodationOrFail($dto); + $services = $this->bookingService->loadAvailableServices($dto, $accommodation); + + $ctx = new AccommodationBookingContext( + accommodation: $accommodation, + hotelCmsData: $this->bookingService->loadHotelCmsData($accommodation), + boardServices: $services['boardServices'], + additionalServices: $services['additionalServices'], + priceBreakdown: $dto->priceBreakdown ?: null, + ); + + $form = $this->createForm(AccommodationStep3Type::class, $dto); + $form->handleRequest($request); + + if ($form->isSubmitted() && $form->isValid()) { + $dto->currentStep = 4; + $this->sessionManager->save($request, $dto); + + return $this->redirectToRoute('app_groups_booking_step_4'); + } + + return $this->render('groups/booking/step_3.html.twig', [ + 'dto' => $dto, + 'ctx' => $ctx, + 'form' => $form, + ]); + } + + /** + * Loads the session DTO and checks step access, returning an early + * response (session failure or step-access redirect) if either fails. + */ + private function resolveDto(Request $request): AccommodationBookingDto|Response + { + try { + $dto = $this->sessionManager->getOrFail($request); + } catch (AccommodationSessionNotFoundException $e) { + return $this->createFailureResponse($e, false); + } + + if ($redirect = $this->validateStepAccess($dto, 3)) { + return $redirect; + } + + return $dto; + } + + private function loadAccommodationOrFail(AccommodationBookingDto $dto): Accommodation + { + $accommodation = $this->bookingService->loadAccommodation($dto->accommodationId); + if (null === $accommodation) { + throw $this->createNotFoundException(); + } + + return $accommodation; + } +} diff --git a/src/Controller/Groups/Step4Controller.php b/src/Controller/Groups/Step4Controller.php new file mode 100644 index 0000000..2c079d2 --- /dev/null +++ b/src/Controller/Groups/Step4Controller.php @@ -0,0 +1,157 @@ +resolveDto($request, false); + if ($dto instanceof Response) { + return $dto; + } + + $accommodation = $this->loadAccommodationOrFail($dto); + $services = $this->bookingService->loadAvailableServices($dto, $accommodation); + + if ($request->isMethod(Request::METHOD_POST)) { + $inquiryForm = $this->createForm(AccommodationInquiryConfirmationType::class); + $inquiryForm->handleRequest($request); + + if (!$inquiryForm->isSubmitted() || !$inquiryForm->isValid()) { + throw $this->createAccessDeniedException('Invalid CSRF token.'); + } + + $dto->forceInquiry = true; + $this->persistBooking($request, $dto, $accommodation, $services); + + return $this->redirectToRoute('app_groups_booking_success'); + } + + $ctx = new AccommodationBookingContext( + accommodation: $accommodation, + hotelCmsData: $this->bookingService->loadHotelCmsData($accommodation), + boardServices: $services['boardServices'], + additionalServices: $services['additionalServices'], + priceBreakdown: $dto->priceBreakdown ?: null, + ); + + return $this->render('groups/booking/step_4.html.twig', [ + 'dto' => $dto, + 'ctx' => $ctx, + ]); + } + + #[Route('/groups/booking/step-4/confirm-inquiry', name: 'app_groups_booking_step_4_confirm_inquiry', methods: ['GET'])] + public function confirmInquiry(Request $request): Response + { + $dto = $this->resolveDto($request, true); + if ($dto instanceof Response) { + return $dto; + } + + $inquiryForm = $this->createForm(AccommodationInquiryConfirmationType::class); + + return $this->render('groups/booking/_step4_inquiry_confirmation_modal.html.twig', [ + 'inquiryForm' => $inquiryForm, + ]); + } + + #[Route('/groups/booking/step-4/confirm', name: 'app_groups_booking_step_4_confirm', methods: ['GET', 'POST'])] + public function confirm(Request $request): Response + { + $dto = $this->resolveDto($request, true); + if ($dto instanceof Response) { + return $dto; + } + + $accommodation = $this->loadAccommodationOrFail($dto); + + $confirmationForm = $this->createForm(AccommodationBookingConfirmationType::class, $dto, [ + 'terms_url' => $this->getParameter('terms_and_conditions_url'), + ]); + $confirmationForm->handleRequest($request); + + if ($confirmationForm->isSubmitted() && $confirmationForm->isValid()) { + $services = $this->bookingService->loadAvailableServices($dto, $accommodation); + $this->persistBooking($request, $dto, $accommodation, $services); + + return $this->htmxRedirect($request, $this->generateUrl('app_groups_booking_success')); + } + + return $this->render('groups/booking/_step4_booking_confirmation_modal.html.twig', [ + 'confirmationForm' => $confirmationForm, + ]); + } + + /** + * Loads the session DTO and checks step access, returning an early + * response (session failure or step-access redirect) if either fails. + */ + private function resolveDto(Request $request, bool $htmx): AccommodationBookingDto|Response + { + try { + $dto = $this->sessionManager->getOrFail($request); + } catch (AccommodationSessionNotFoundException $e) { + return $this->createFailureResponse($e, $htmx); + } + + if ($redirect = $this->validateStepAccess($dto, 4)) { + return $redirect; + } + + return $dto; + } + + private function loadAccommodationOrFail(AccommodationBookingDto $dto): Accommodation + { + $accommodation = $this->bookingService->loadAccommodation($dto->accommodationId); + if (null === $accommodation) { + throw $this->createNotFoundException(); + } + + return $accommodation; + } + + /** + * @param array{ + * boardServices: BoardService[], + * additionalServices: AdditionalService[], + * groupedAdditionalServices: array, + * ungroupedAdditionalServices: AdditionalService[] + * } $services + */ + private function persistBooking(Request $request, AccommodationBookingDto $dto, Accommodation $accommodation, array $services): void + { + $prices = $this->bookingService->loadPrices($dto, $accommodation); + $booking = $this->bookingService->finalizeBooking($dto, $accommodation, $prices, $services); + $this->addFlash('groups_booking_result', $booking->isInquiry() ? 'inquiry' : 'booking'); + $this->sessionManager->clear($request); + } +} diff --git a/src/Entity/BlameableEntity.php b/src/Entity/BlameableEntity.php new file mode 100644 index 0000000..ecf3320 --- /dev/null +++ b/src/Entity/BlameableEntity.php @@ -0,0 +1,40 @@ +createdBy; + } + + public function setCreatedBy(?User $createdBy): self + { + $this->createdBy = $createdBy; + + return $this; + } + + public function getUpdatedBy(): ?User + { + return $this->updatedBy; + } + + public function setUpdatedBy(?User $updatedBy): self + { + $this->updatedBy = $updatedBy; + + return $this; + } +} diff --git a/src/Entity/BlameableEntityInterface.php b/src/Entity/BlameableEntityInterface.php new file mode 100644 index 0000000..ee6d5fd --- /dev/null +++ b/src/Entity/BlameableEntityInterface.php @@ -0,0 +1,14 @@ + + */ + #[ORM\OneToMany(targetEntity: AccommodationPrice::class, mappedBy: 'accommodation', cascade: ['all'])] + #[ORM\OrderBy(['dateFrom' => 'ASC'])] + private Collection $accommodationPrices; + + /** + * @var Collection + */ + #[ORM\OneToMany(targetEntity: BoardService::class, mappedBy: 'accommodation', cascade: ['all'])] + #[ORM\OrderBy(['dateFrom' => 'ASC', 'label' => 'ASC'])] + private Collection $boardServices; + + /** + * @var Collection + */ + #[ORM\OneToMany(targetEntity: AdditionalService::class, mappedBy: 'accommodation', cascade: ['all'])] + #[ORM\OrderBy(['dateFrom' => 'ASC', 'label' => 'ASC'])] + private Collection $additionalServices; + + #[ORM\Column] + #[Assert\NotNull(message: 'required')] + private ?int $maxAdolescentAge = null; + + #[ORM\Column(length: 3)] + #[Assert\NotBlank(message: 'required')] + #[Assert\Choice(choices: ['EUR', 'CHF'], message: 'invalid')] + private ?string $currency = 'EUR'; + + public function __construct() + { + $this->accommodationPrices = new ArrayCollection(); + $this->boardServices = new ArrayCollection(); + $this->additionalServices = new ArrayCollection(); + } + + public function getId(): ?int + { + return $this->id; + } + + public function getName(): ?string + { + return $this->name; + } + + public function setName(string $name): self + { + $this->name = $name; + + return $this; + } + + public function getCalendarCode(): ?string + { + return $this->calendarCode; + } + + public function setCalendarCode(string $calendarCode): self + { + $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; + } + + /** + * @return Collection + */ + public function getAccommodationPrices(): Collection + { + return $this->accommodationPrices; + } + + public function addAccommodationPrice(AccommodationPrice $accommodationPrice): self + { + if (!$this->accommodationPrices->contains($accommodationPrice)) { + $this->accommodationPrices->add($accommodationPrice); + $accommodationPrice->setAccommodation($this); + } + + return $this; + } + + public function removeAccommodationPrice(AccommodationPrice $accommodationPrice): self + { + if ($this->accommodationPrices->removeElement($accommodationPrice)) { + // set the owning side to null (unless already changed) + if ($accommodationPrice->getAccommodation() === $this) { + $accommodationPrice->setAccommodation(null); + } + } + + return $this; + } + + public function getMaxAdolescentAge(): ?int + { + return $this->maxAdolescentAge; + } + + public function setMaxAdolescentAge(int $maxAdolescentAge): self + { + $this->maxAdolescentAge = $maxAdolescentAge; + + return $this; + } + + public function getCurrency(): ?string + { + return $this->currency; + } + + public function setCurrency(string $currency): self + { + $this->currency = $currency; + + return $this; + } + + /** + * @return Collection + */ + public function getBoardServices(): Collection + { + return $this->boardServices; + } + + public function addBoardService(BoardService $boardService): self + { + if (!$this->boardServices->contains($boardService)) { + $this->boardServices->add($boardService); + $boardService->setAccommodation($this); + } + + return $this; + } + + public function removeBoardService(BoardService $boardService): self + { + if ($this->boardServices->removeElement($boardService)) { + if ($boardService->getAccommodation() === $this) { + $boardService->setAccommodation(null); + } + } + + return $this; + } + + /** + * @return Collection + */ + public function getAdditionalServices(): Collection + { + return $this->additionalServices; + } + + public function addAdditionalService(AdditionalService $additionalService): self + { + if (!$this->additionalServices->contains($additionalService)) { + $this->additionalServices->add($additionalService); + $additionalService->setAccommodation($this); + } + + return $this; + } + + public function removeAdditionalService(AdditionalService $additionalService): self + { + if ($this->additionalServices->removeElement($additionalService)) { + if ($additionalService->getAccommodation() === $this) { + $additionalService->setAccommodation(null); + } + } + + return $this; + } +} diff --git a/src/Entity/Groups/AccommodationBooking.php b/src/Entity/Groups/AccommodationBooking.php new file mode 100644 index 0000000..a854cd9 --- /dev/null +++ b/src/Entity/Groups/AccommodationBooking.php @@ -0,0 +1,536 @@ + */ + #[ORM\Column(type: Types::JSON)] + private array $additionalServices = []; + + /** @var array|null */ + #[ORM\Column(type: Types::JSON, nullable: true)] + private ?array $priceBreakdown = null; + + #[ORM\Column(nullable: true)] + private ?int $totalPrice = null; + + #[ORM\Column(length: 3, nullable: true)] + private ?string $pricingCurrency = null; + + #[ORM\Column(type: Types::SMALLINT, nullable: true)] + private ?int $pricingVersion = null; + + #[ORM\Column] + private bool $isInquiry = false; + + #[ORM\Column(type: Types::DATETIME_IMMUTABLE, nullable: true)] + private ?\DateTimeImmutable $accessLinkIssuedAt = null; + + #[ORM\Column(type: Types::DATETIME_IMMUTABLE, nullable: true)] + private ?\DateTimeImmutable $acceptedAt = null; + + #[ORM\Column(length: 255)] + private ?string $groupName = null; + + #[ORM\Column(length: 10, nullable: true)] + private ?string $salutation = null; + + #[ORM\Column(length: 100)] + private ?string $firstName = null; + + #[ORM\Column(length: 100)] + private ?string $lastName = null; + + #[ORM\Column(length: 255)] + private ?string $email = null; + + #[ORM\Column(length: 50, nullable: true)] + private ?string $phone = null; + + #[ORM\Column(length: 255, nullable: true)] + private ?string $street = null; + + #[ORM\Column(length: 20, nullable: true)] + private ?string $zip = null; + + #[ORM\Column(length: 100, nullable: true)] + private ?string $city = null; + + #[ORM\Column(type: Types::TEXT, nullable: true)] + private ?string $remarks = null; + + #[ORM\Column(nullable: true)] + #[Assert\Range(min: 1, max: 100)] + private ?int $accommodationDiscount = null; + + #[ORM\Column(nullable: true)] + #[Assert\Range(min: 1, max: 100)] + private ?int $boardServiceDiscount = null; + + #[ORM\Column(nullable: true)] + #[Assert\Range(min: 1, max: 100)] + private ?int $additionalServicesDiscount = null; + + #[ORM\ManyToOne] + #[ORM\JoinColumn(onDelete: 'SET NULL')] + private ?User $managedBy = null; + + public function __construct() + { + $this->uuid = Uuid::v4()->toRfc4122(); + } + + public function getId(): ?int + { + return $this->id; + } + + public function getUuid(): string + { + return $this->uuid; + } + + public function getAccommodation(): ?Accommodation + { + return $this->accommodation; + } + + public function setAccommodation(?Accommodation $accommodation): self + { + $this->accommodation = $accommodation; + + return $this; + } + + public function getDateFrom(): ?\DateTimeImmutable + { + return $this->dateFrom; + } + + public function setDateFrom(\DateTimeImmutable $dateFrom): self + { + $this->dateFrom = $dateFrom; + + return $this; + } + + public function getDateTo(): ?\DateTimeImmutable + { + return $this->dateTo; + } + + public function setDateTo(\DateTimeImmutable $dateTo): self + { + $this->dateTo = $dateTo; + + return $this; + } + + public function getNights(): int + { + if (null === $this->dateFrom || null === $this->dateTo) { + return 0; + } + + return $this->dateFrom->diff($this->dateTo)->days; + } + + public function getPaxCount(): int + { + return $this->paxCount; + } + + public function setPaxCount(int $paxCount): self + { + $this->paxCount = $paxCount; + + return $this; + } + + public function getMinorsCount(): int + { + return $this->minorsCount; + } + + public function setMinorsCount(int $minorsCount): self + { + $this->minorsCount = $minorsCount; + + return $this; + } + + public function getChildrenCount(): int + { + return $this->childrenCount; + } + + public function setChildrenCount(int $childrenCount): self + { + $this->childrenCount = $childrenCount; + + return $this; + } + + public function getBoardServiceLabel(): ?string + { + return $this->boardServiceLabel; + } + + public function setBoardServiceLabel(?string $boardServiceLabel): self + { + $this->boardServiceLabel = $boardServiceLabel; + + return $this; + } + + public function getBoardServicePrice(): ?int + { + return $this->boardServicePrice; + } + + public function setBoardServicePrice(?int $boardServicePrice): self + { + $this->boardServicePrice = $boardServicePrice; + + return $this; + } + + public function getBoardServiceOriginalId(): ?int + { + return $this->boardServiceOriginalId; + } + + public function setBoardServiceOriginalId(?int $boardServiceOriginalId): self + { + $this->boardServiceOriginalId = $boardServiceOriginalId; + + return $this; + } + + /** @return list */ + public function getAdditionalServices(): array + { + return $this->additionalServices; + } + + /** @param list $additionalServices */ + public function setAdditionalServices(array $additionalServices): self + { + $this->additionalServices = $additionalServices; + + return $this; + } + + public function addAdditionalServiceSnapshot(string $label, int $price, AdditionalServiceType|string $type, ?int $originalServiceId): self + { + $this->additionalServices[] = [ + 'label' => $label, + 'price' => $price, + 'type' => $type instanceof AdditionalServiceType ? $type->value : $type, + 'originalServiceId' => $originalServiceId, + ]; + + return $this; + } + + /** @return array|null */ + public function getPriceBreakdown(): ?array + { + return $this->priceBreakdown; + } + + /** @param array $priceBreakdown */ + public function setPriceSnapshot(array $priceBreakdown, int $totalPrice, string $currency, int $version): self + { + $this->priceBreakdown = $priceBreakdown; + $this->totalPrice = $totalPrice; + $this->pricingCurrency = $currency; + $this->pricingVersion = $version; + + return $this; + } + + public function clearPriceSnapshot(): self + { + $this->priceBreakdown = null; + $this->totalPrice = null; + $this->pricingCurrency = null; + $this->pricingVersion = null; + + return $this; + } + + public function getTotalPrice(): ?int + { + return $this->totalPrice; + } + + public function getPricingCurrency(): ?string + { + return $this->pricingCurrency; + } + + public function getPricingVersion(): ?int + { + return $this->pricingVersion; + } + + public function isInquiry(): bool + { + return $this->isInquiry; + } + + public function setIsInquiry(bool $isInquiry): self + { + $this->isInquiry = $isInquiry; + + return $this; + } + + public function getAccessLinkIssuedAt(): ?\DateTimeImmutable + { + return $this->accessLinkIssuedAt; + } + + public function setAccessLinkIssuedAt(?\DateTimeImmutable $accessLinkIssuedAt): self + { + $this->accessLinkIssuedAt = $accessLinkIssuedAt; + + return $this; + } + + public function getAcceptedAt(): ?\DateTimeImmutable + { + return $this->acceptedAt; + } + + public function setAcceptedAt(?\DateTimeImmutable $acceptedAt): self + { + $this->acceptedAt = $acceptedAt; + + return $this; + } + + public function getGroupName(): ?string + { + return $this->groupName; + } + + public function setGroupName(string $groupName): self + { + $this->groupName = $groupName; + + return $this; + } + + public function getSalutation(): ?string + { + return $this->salutation; + } + + public function setSalutation(?string $salutation): self + { + $this->salutation = $salutation; + + return $this; + } + + public function getFirstName(): ?string + { + return $this->firstName; + } + + public function setFirstName(string $firstName): self + { + $this->firstName = $firstName; + + return $this; + } + + public function getLastName(): ?string + { + return $this->lastName; + } + + public function setLastName(string $lastName): self + { + $this->lastName = $lastName; + + return $this; + } + + public function getEmail(): ?string + { + return $this->email; + } + + public function setEmail(string $email): self + { + $this->email = $email; + + return $this; + } + + public function getPhone(): ?string + { + return $this->phone; + } + + public function setPhone(?string $phone): self + { + $this->phone = $phone; + + return $this; + } + + public function getStreet(): ?string + { + return $this->street; + } + + public function setStreet(?string $street): self + { + $this->street = $street; + + return $this; + } + + public function getZip(): ?string + { + return $this->zip; + } + + public function setZip(?string $zip): self + { + $this->zip = $zip; + + return $this; + } + + public function getCity(): ?string + { + return $this->city; + } + + public function setCity(?string $city): self + { + $this->city = $city; + + return $this; + } + + public function getRemarks(): ?string + { + return $this->remarks; + } + + public function setRemarks(?string $remarks): self + { + $this->remarks = $remarks; + + return $this; + } + + public function getAccommodationDiscount(): ?int + { + return $this->accommodationDiscount; + } + + public function setAccommodationDiscount(?int $accommodationDiscount): self + { + $this->accommodationDiscount = $accommodationDiscount; + + return $this; + } + + public function getBoardServiceDiscount(): ?int + { + return $this->boardServiceDiscount; + } + + public function setBoardServiceDiscount(?int $boardServiceDiscount): self + { + $this->boardServiceDiscount = $boardServiceDiscount; + + return $this; + } + + public function getAdditionalServicesDiscount(): ?int + { + return $this->additionalServicesDiscount; + } + + public function setAdditionalServicesDiscount(?int $additionalServicesDiscount): self + { + $this->additionalServicesDiscount = $additionalServicesDiscount; + + return $this; + } + + public function getManagedBy(): ?User + { + return $this->managedBy; + } + + public function setManagedBy(?User $managedBy): self + { + $this->managedBy = $managedBy; + + return $this; + } +} diff --git a/src/Entity/Groups/AccommodationPrice.php b/src/Entity/Groups/AccommodationPrice.php new file mode 100644 index 0000000..0a6a676 --- /dev/null +++ b/src/Entity/Groups/AccommodationPrice.php @@ -0,0 +1,211 @@ +id = null; + } + + public function getId(): ?int + { + return $this->id; + } + + public function getAccommodation(): ?Accommodation + { + return $this->accommodation; + } + + public function setAccommodation(?Accommodation $accommodation): self + { + $this->accommodation = $accommodation; + + return $this; + } + + public function getDateFrom(): ?\DateTimeImmutable + { + return $this->dateFrom; + } + + public function setDateFrom(\DateTimeImmutable $dateFrom): self + { + $this->dateFrom = $dateFrom; + + return $this; + } + + public function getDateTo(): ?\DateTimeImmutable + { + return $this->dateTo; + } + + public function setDateTo(\DateTimeImmutable $dateTo): self + { + $this->dateTo = $dateTo; + + return $this; + } + + public function getSeason(): ?Season + { + return $this->season; + } + + public function setSeason(?Season $season): self + { + $this->season = $season; + + return $this; + } + + public function getIncludedPax(): ?int + { + return $this->includedPax; + } + + public function setIncludedPax(int $includedPax): self + { + $this->includedPax = $includedPax; + + return $this; + } + + public function getPricePerNight(): ?int + { + return $this->pricePerNight; + } + + public function setPricePerNight(int $pricePerNight): self + { + $this->pricePerNight = $pricePerNight; + + return $this; + } + + public function getPriceAdditionalPerson(): ?int + { + return $this->priceAdditionalPerson; + } + + public function setPriceAdditionalPerson(int $priceAdditionalPerson): self + { + $this->priceAdditionalPerson = $priceAdditionalPerson; + + return $this; + } + + public function getMinNights(): ?int + { + return $this->minNights; + } + + public function setMinNights(int $minNights): self + { + $this->minNights = $minNights; + + return $this; + } + + public function getType(): ?PriceType + { + return $this->type; + } + + public function setType(?PriceType $type): self + { + $this->type = $type; + + return $this; + } + + public function isAcceptUndersubscription(): bool + { + return $this->acceptUndersubscription; + } + + public function setAcceptUndersubscription(bool $acceptUndersubscription): self + { + $this->acceptUndersubscription = $acceptUndersubscription; + + return $this; + } + + public function isAcceptShortTerm(): bool + { + return $this->acceptShortTerm; + } + + public function setAcceptShortTerm(bool $acceptShortTerm): self + { + $this->acceptShortTerm = $acceptShortTerm; + + return $this; + } +} diff --git a/src/Entity/Groups/AdditionalService.php b/src/Entity/Groups/AdditionalService.php new file mode 100644 index 0000000..097571f --- /dev/null +++ b/src/Entity/Groups/AdditionalService.php @@ -0,0 +1,161 @@ +id = null; + } + + public function getId(): ?int + { + return $this->id; + } + + public function getAccommodation(): ?Accommodation + { + return $this->accommodation; + } + + public function setAccommodation(?Accommodation $accommodation): self + { + $this->accommodation = $accommodation; + + return $this; + } + + public function getLabel(): ?string + { + return $this->label; + } + + public function setLabel(string $label): self + { + $this->label = $label; + + return $this; + } + + public function getDescription(): ?string + { + return $this->description; + } + + public function setDescription(?string $description): self + { + $this->description = $description; + + return $this; + } + + public function getPrice(): ?int + { + return $this->price; + } + + public function setPrice(int $price): self + { + $this->price = $price; + + return $this; + } + + public function getType(): ?AdditionalServiceType + { + return $this->type; + } + + public function setType(AdditionalServiceType $type): self + { + $this->type = $type; + + return $this; + } + + public function getDateFrom(): ?\DateTimeImmutable + { + return $this->dateFrom; + } + + public function setDateFrom(\DateTimeImmutable $dateFrom): self + { + $this->dateFrom = $dateFrom; + + return $this; + } + + public function getDateTo(): ?\DateTimeImmutable + { + return $this->dateTo; + } + + public function setDateTo(\DateTimeImmutable $dateTo): self + { + $this->dateTo = $dateTo; + + return $this; + } + + public function getSelectionGroup(): ?string + { + return $this->selectionGroup; + } + + public function setSelectionGroup(?string $selectionGroup): self + { + $this->selectionGroup = $selectionGroup; + + return $this; + } +} diff --git a/src/Entity/Groups/BoardService.php b/src/Entity/Groups/BoardService.php new file mode 100644 index 0000000..bbcc5eb --- /dev/null +++ b/src/Entity/Groups/BoardService.php @@ -0,0 +1,129 @@ +id = null; + } + + public function getId(): ?int + { + return $this->id; + } + + public function getAccommodation(): ?Accommodation + { + return $this->accommodation; + } + + public function setAccommodation(?Accommodation $accommodation): self + { + $this->accommodation = $accommodation; + + return $this; + } + + public function getLabel(): ?string + { + return $this->label; + } + + public function setLabel(string $label): self + { + $this->label = $label; + + return $this; + } + + public function getDescription(): ?string + { + return $this->description; + } + + public function setDescription(?string $description): self + { + $this->description = $description; + + return $this; + } + + public function getPrice(): ?int + { + return $this->price; + } + + public function setPrice(int $price): self + { + $this->price = $price; + + return $this; + } + + public function getDateFrom(): ?\DateTimeImmutable + { + return $this->dateFrom; + } + + public function setDateFrom(\DateTimeImmutable $dateFrom): self + { + $this->dateFrom = $dateFrom; + + return $this; + } + + public function getDateTo(): ?\DateTimeImmutable + { + return $this->dateTo; + } + + public function setDateTo(\DateTimeImmutable $dateTo): self + { + $this->dateTo = $dateTo; + + return $this; + } +} diff --git a/src/Entity/TimestampableEntity.php b/src/Entity/TimestampableEntity.php new file mode 100644 index 0000000..06b3c9e --- /dev/null +++ b/src/Entity/TimestampableEntity.php @@ -0,0 +1,38 @@ +createdAt; + } + + public function setCreatedAt(\DateTimeImmutable $createdAt): self + { + $this->createdAt = $createdAt; + + return $this; + } + + public function getUpdatedAt(): ?\DateTimeImmutable + { + return $this->updatedAt; + } + + public function setUpdatedAt(\DateTimeImmutable $updatedAt): self + { + $this->updatedAt = $updatedAt; + + return $this; + } +} diff --git a/src/Entity/TimestampableEntityInterface.php b/src/Entity/TimestampableEntityInterface.php new file mode 100644 index 0000000..092b724 --- /dev/null +++ b/src/Entity/TimestampableEntityInterface.php @@ -0,0 +1,14 @@ +value; + } +} diff --git a/src/Enum/Groups/PriceType.php b/src/Enum/Groups/PriceType.php new file mode 100644 index 0000000..366bd59 --- /dev/null +++ b/src/Enum/Groups/PriceType.php @@ -0,0 +1,25 @@ + 1, + self::DISCOUNT => 2, + }; + } + + public function label(): string + { + return match($this) { + self::OVERRIDE => 'Override', + self::DISCOUNT => 'Rabatt', + }; + } +} diff --git a/src/Enum/Groups/Season.php b/src/Enum/Groups/Season.php new file mode 100644 index 0000000..6c8613e --- /dev/null +++ b/src/Enum/Groups/Season.php @@ -0,0 +1,20 @@ +value.'.label'; + } + + public function token(): string + { + return 'enum.season.'.$this->value.'.token'; + } +} diff --git a/src/EventListener/BlamableEntityListener.php b/src/EventListener/BlamableEntityListener.php new file mode 100644 index 0000000..49e1cb7 --- /dev/null +++ b/src/EventListener/BlamableEntityListener.php @@ -0,0 +1,54 @@ +getObject(); + + if (!$entity instanceof BlameableEntityInterface) { + return; + } + + $user = $this->security->getUser(); + + if (!$user instanceof User) { + return; + } + + $entity->setCreatedBy($user); + } + + public function preUpdate(PreUpdateEventArgs $args): void + { + $entity = $args->getObject(); + + if (!$entity instanceof BlameableEntityInterface) { + return; + } + + $user = $this->security->getUser(); + + if (!$user instanceof User) { + return; + } + + $entity->setUpdatedBy($user); + } +} diff --git a/src/EventListener/TimestampableEntityListener.php b/src/EventListener/TimestampableEntityListener.php new file mode 100644 index 0000000..02d7c7b --- /dev/null +++ b/src/EventListener/TimestampableEntityListener.php @@ -0,0 +1,34 @@ +getObject(); + + if ($entity instanceof TimestampableEntityInterface) { + $now = new \DateTimeImmutable(); + $entity->setCreatedAt($now); + } + } + + public function preUpdate(PreUpdateEventArgs $args): void + { + $entity = $args->getObject(); + + if ($entity instanceof TimestampableEntityInterface) { + $now = new \DateTimeImmutable(); + $entity->setUpdatedAt($now); + } + } +} diff --git a/src/Exception/AccommodationSessionNotFoundException.php b/src/Exception/AccommodationSessionNotFoundException.php new file mode 100644 index 0000000..ada8aba --- /dev/null +++ b/src/Exception/AccommodationSessionNotFoundException.php @@ -0,0 +1,15 @@ + + */ +class AccommodationBookingConfirmationType extends AbstractType +{ + public function buildForm(FormBuilderInterface $builder, array $options): void + { + $termsLink = sprintf( + 'allgemeinen Geschäftsbedingungen (AGB)', + htmlspecialchars($options['terms_url'], ENT_QUOTES, 'UTF-8') + ); + + $builder->add('termsAccepted', CheckboxType::class, [ + 'label' => sprintf('Ich habe die %s gelesen und bin damit einverstanden, dass eine kostenpflichtige Buchung zustande kommt.', $termsLink), + 'label_html' => true, + 'mapped' => false, + 'required' => true, + 'constraints' => [ + new IsTrue(message: 'Bitte akzeptiere die AGB, um die Buchung abzuschließen.'), + ], + ]); + } + + public function configureOptions(OptionsResolver $resolver): void + { + $resolver->setDefaults([ + 'data_class' => AccommodationBookingDto::class, + ]); + $resolver->setRequired('terms_url'); + $resolver->setAllowedTypes('terms_url', 'string'); + } +} diff --git a/src/Form/AccommodationInquiryConfirmationType.php b/src/Form/AccommodationInquiryConfirmationType.php new file mode 100644 index 0000000..9a4a3f8 --- /dev/null +++ b/src/Form/AccommodationInquiryConfirmationType.php @@ -0,0 +1,21 @@ + + */ +class AccommodationInquiryConfirmationType extends AbstractType +{ + public function configureOptions(OptionsResolver $resolver): void + { + $resolver->setDefaults([ + 'csrf_token_id' => 'groups_booking_step4_inquiry', + ]); + } +} diff --git a/src/Form/AccommodationStep2Type.php b/src/Form/AccommodationStep2Type.php new file mode 100644 index 0000000..2d1fcd5 --- /dev/null +++ b/src/Form/AccommodationStep2Type.php @@ -0,0 +1,88 @@ + + */ +class AccommodationStep2Type extends AbstractType +{ + public function buildForm(FormBuilderInterface $builder, array $options): void + { + $builder + ->add('paxCount', IntegerType::class, [ + 'label' => 'Anzahl Personen', + 'attr' => ['min' => 1], + ]) + ->add('minorsCount', IntegerType::class, [ + 'label' => 'davon Kinder (0–3 Jahre)', + 'required' => false, + 'attr' => ['min' => 0], + ]) + ->add('childrenCount', IntegerType::class, [ + 'label' => sprintf('davon Kinder (4–%d Jahre)', $options['max_adolescent_age']), + 'required' => false, + 'attr' => ['min' => 0], + ]) + ->add('selectedBoardServiceId', ChoiceType::class, [ + 'label' => false, + 'choices' => $options['board_service_choices'], + 'expanded' => true, + 'multiple' => false, + 'required' => false, + 'placeholder' => 'Selbstversorgung', + ]) + ->add('selectedAdditionalServiceIds', ChoiceType::class, [ + 'label' => false, + 'choices' => $options['additional_service_choices'], + 'multiple' => true, + 'expanded' => false, + 'required' => false, + ]) + ; + + $builder->addEventListener(FormEvents::PRE_SUBMIT, function (FormEvent $event): void { + $data = $event->getData(); + + if (!is_array($data)) { + return; + } + + foreach (['minorsCount', 'childrenCount'] as $field) { + if (!isset($data[$field]) || '' === $data[$field]) { + $data[$field] = 0; + } + } + + // Board service rendered manually: empty string from the "Selbstversorgung" radio → null + if (isset($data['selectedBoardServiceId']) && '' === $data['selectedBoardServiceId']) { + unset($data['selectedBoardServiceId']); + } + + $event->setData($data); + }); + } + + public function configureOptions(OptionsResolver $resolver): void + { + $resolver->setDefaults([ + 'data_class' => AccommodationBookingDto::class, + 'validation_groups' => ['step_2'], + 'board_service_choices' => [], + 'additional_service_choices' => [], + 'max_adolescent_age' => 0, + ]); + $resolver->setAllowedTypes('max_adolescent_age', 'int'); + } +} diff --git a/src/Form/AccommodationStep3Type.php b/src/Form/AccommodationStep3Type.php new file mode 100644 index 0000000..762b417 --- /dev/null +++ b/src/Form/AccommodationStep3Type.php @@ -0,0 +1,74 @@ + + */ +class AccommodationStep3Type extends AbstractType +{ + public function buildForm(FormBuilderInterface $builder, array $options): void + { + $builder + ->add('groupName', TextType::class, [ + 'label' => 'Name der Gruppe', + ]) + ->add('salutation', ChoiceType::class, [ + 'label' => 'Anrede', + 'choices' => [ + 'Herr' => 'Herr', + 'Frau' => 'Frau', + 'divers' => 'divers', + ], + 'expanded' => false, + 'multiple' => false, + 'placeholder' => 'Bitte wählen', + ]) + ->add('firstName', TextType::class, [ + 'label' => 'Vorname', + ]) + ->add('lastName', TextType::class, [ + 'label' => 'Nachname', + ]) + ->add('email', EmailType::class, [ + 'label' => 'E-Mail-Adresse', + ]) + ->add('phone', TextType::class, [ + 'label' => 'Telefon', + ]) + ->add('street', TextType::class, [ + 'label' => 'Straße und Hausnummer', + ]) + ->add('zip', TextType::class, [ + 'label' => 'Postleitzahl', + ]) + ->add('city', TextType::class, [ + 'label' => 'Ort', + ]) + ->add('remarks', TextareaType::class, [ + 'label' => false, + 'required' => false, + 'attr' => ['rows' => 4], + ]) + ; + } + + public function configureOptions(OptionsResolver $resolver): void + { + $resolver->setDefaults([ + 'data_class' => AccommodationBookingDto::class, + 'validation_groups' => ['step_3'], + ]); + } +} diff --git a/src/Form/Admin/Groups/AccommodationBookingType.php b/src/Form/Admin/Groups/AccommodationBookingType.php new file mode 100644 index 0000000..70faafc --- /dev/null +++ b/src/Form/Admin/Groups/AccommodationBookingType.php @@ -0,0 +1,175 @@ + */ +class AccommodationBookingType extends AbstractType +{ + public function buildForm(FormBuilderInterface $builder, array $options): void + { + if ($options['with_accommodation']) { + $builder->add('accommodation', EntityType::class, [ + 'class' => Accommodation::class, + 'choice_label' => 'name', + 'label' => 'Gruppenhaus', + ]); + } + + $builder + ->add('groupName', TextType::class, [ + 'label' => 'Gruppenname', + ]) + ->add('salutation', ChoiceType::class, [ + 'label' => 'Anrede', + 'choices' => [ + 'Herr' => 'Herr', + 'Frau' => 'Frau', + 'divers' => 'divers', + ], + 'required' => false, + 'placeholder' => '', + ]) + ->add('firstName', TextType::class, [ + 'label' => 'Vorname', + ]) + ->add('lastName', TextType::class, [ + 'label' => 'Nachname', + ]) + ->add('email', EmailType::class, [ + 'label' => 'E-Mail', + ]) + ->add('phone', TextType::class, [ + 'label' => 'Telefon', + 'required' => false, + ]) + ->add('street', TextType::class, [ + 'label' => 'Straße', + 'required' => false, + ]) + ->add('zip', TextType::class, [ + 'label' => 'PLZ', + 'required' => false, + ]) + ->add('city', TextType::class, [ + 'label' => 'Ort', + 'required' => false, + ]) + ->add('dateFrom', DateType::class, [ + 'label' => 'Anreise', + 'widget' => 'single_text', + ]) + ->add('dateTo', DateType::class, [ + 'label' => 'Abreise', + 'widget' => 'single_text', + ]) + ->add('paxCount', IntegerType::class, [ + 'label' => 'Anzahl Personen', + ]) + ->add('minorsCount', IntegerType::class, [ + 'label' => 'davon Kinder (0–3 Jahre)', + ]) + ->add('childrenCount', IntegerType::class, [ + 'label' => $options['max_adolescent_age'] > 0 + ? sprintf('davon Kinder (4–%d Jahre)', $options['max_adolescent_age']) + : 'davon Kinder', + ]) + ; + + if (!empty($options['board_services'])) { + $builder->add('boardService', EntityType::class, [ + 'class' => BoardService::class, + 'mapped' => false, + 'required' => false, + 'choices' => $options['board_services'], + 'choice_label' => 'label', + 'placeholder' => 'keine', + 'label' => 'Verpflegung', + 'data' => $options['current_board_service'], + ]); + } + + if (!empty($options['additional_services'])) { + $builder->add('selectedAdditionalServices', EntityType::class, [ + 'class' => AdditionalService::class, + 'mapped' => false, + 'required' => false, + 'multiple' => true, + 'expanded' => true, + 'choices' => $options['additional_services'], + 'choice_label' => 'label', + 'label' => 'Zusatzleistungen', + 'data' => $options['current_additional_services'], + ]); + } + + $builder + ->add('isInquiry', CheckboxType::class, [ + 'label' => 'Anfrage (nicht bindend)', + 'required' => false, + ]) + ->add('accommodationDiscount', IntegerType::class, [ + 'label' => 'Rabatt Unterkunft (%)', + 'required' => false, + 'constraints' => [ + new Range(min: 1, max: 100), + ], + ]) + ->add('boardServiceDiscount', IntegerType::class, [ + 'label' => 'Rabatt Verpflegung (%)', + 'required' => false, + 'constraints' => [ + new Range(min: 1, max: 100), + ], + ]) + ->add('additionalServicesDiscount', IntegerType::class, [ + 'label' => 'Rabatt Zusatzleistungen (%)', + 'required' => false, + 'constraints' => [ + new Range(min: 1, max: 100), + ], + ]) + ->add('remarks', TextareaType::class, [ + 'label' => 'Bemerkungen', + 'required' => false, + ]) + ; + } + + public function configureOptions(OptionsResolver $resolver): void + { + $resolver->setDefaults([ + 'data_class' => AccommodationBooking::class, + 'with_accommodation' => false, + 'max_adolescent_age' => 0, + 'board_services' => [], + 'additional_services' => [], + 'current_board_service' => null, + 'current_additional_services' => [], + ]); + $resolver->setAllowedTypes('with_accommodation', 'bool'); + $resolver->setAllowedTypes('max_adolescent_age', 'int'); + $resolver->setAllowedTypes('board_services', 'array'); + $resolver->setAllowedTypes('additional_services', 'array'); + $resolver->setAllowedTypes('current_board_service', ['null', BoardService::class]); + $resolver->setAllowedTypes('current_additional_services', 'array'); + } +} diff --git a/src/Form/Admin/Groups/AccommodationPriceType.php b/src/Form/Admin/Groups/AccommodationPriceType.php new file mode 100644 index 0000000..5700ecd --- /dev/null +++ b/src/Form/Admin/Groups/AccommodationPriceType.php @@ -0,0 +1,82 @@ + */ +class AccommodationPriceType extends AbstractType +{ + public function buildForm(FormBuilderInterface $builder, array $options): void + { + $builder + ->add('dateFrom', DateType::class, [ + 'label' => 'Datum von', + 'html5' => true, + 'widget' => 'single_text', + ]) + ->add('dateTo', DateType::class, [ + 'label' => 'Datum bis', + 'html5' => true, + 'widget' => 'single_text', + ]) + ->add('type', EnumType::class, [ + 'label' => 'Typ', + 'class' => PriceType::class, + 'required' => false, + 'placeholder' => 'Standard', + 'choice_label' => fn($item) => $item->label(), + ]) + ->add('season', EnumType::class, [ + 'label' => 'Saison', + 'class' => Season::class, + 'choice_label' => fn($item) => $item->token(), + ]) + ->add('includedPax', IntegerType::class, [ + 'label' => 'Inklusiv-Personen', + ]) + ->add('minNights', IntegerType::class, [ + 'label' => 'Mindestbelegung (Nächte)', + ]) + ->add('pricePerNight', MoneyType::class, [ + 'label' => 'Preis pro Nacht', + 'currency' => $options['currency'], + 'divisor' => 100, + ]) + ->add('priceAdditionalPerson', MoneyType::class, [ + 'label' => 'Preis weitere Person', + 'currency' => $options['currency'], + 'divisor' => 100, + ]) + ->add('acceptUndersubscription', CheckboxType::class, [ + 'label' => 'Unterbelegung akzeptieren', + 'required' => false, + ]) + ->add('acceptShortTerm', CheckboxType::class, [ + 'label' => 'Kurzzeit-Belegung akzeptieren', + 'required' => false, + ]) + ; + } + + public function configureOptions(OptionsResolver $resolver): void + { + $resolver->setDefaults([ + 'data_class' => AccommodationPrice::class, + 'currency' => 'EUR', + ]); + $resolver->setAllowedValues('currency', ['EUR', 'CHF']); + } +} diff --git a/src/Form/Admin/Groups/AccommodationType.php b/src/Form/Admin/Groups/AccommodationType.php new file mode 100644 index 0000000..0767852 --- /dev/null +++ b/src/Form/Admin/Groups/AccommodationType.php @@ -0,0 +1,50 @@ + */ +class AccommodationType extends AbstractType +{ + public function buildForm(FormBuilderInterface $builder, array $options): void + { + $builder + ->add('name', TextType::class, [ + 'label' => 'Name', + ]) + ->add('calendarCode', TextType::class, [ + 'label' => 'Code für Kalender', + ]) + ->add('cmsCode', TextType::class, [ + 'label' => 'Code für CMS-Daten', + 'required' => false, + ]) + ->add('maxAdolescentAge', IntegerType::class, [ + 'label' => 'Altersgrenze Kinder', + ]) + ->add('currency', ChoiceType::class, [ + 'label' => 'Währung', + 'choices' => [ + 'EUR' => 'EUR', + 'CHF' => 'CHF', + ], + ]) + ; + } + + public function configureOptions(OptionsResolver $resolver): void + { + $resolver->setDefaults([ + 'data_class' => Accommodation::class, + ]); + } +} diff --git a/src/Form/Admin/Groups/AdditionalServiceType.php b/src/Form/Admin/Groups/AdditionalServiceType.php new file mode 100644 index 0000000..d9dacb1 --- /dev/null +++ b/src/Form/Admin/Groups/AdditionalServiceType.php @@ -0,0 +1,70 @@ + */ +class AdditionalServiceType extends AbstractType +{ + public function buildForm(FormBuilderInterface $builder, array $options): void + { + $builder + ->add('label', TextType::class, [ + 'label' => 'Bezeichnung', + ]) + ->add('description', TextareaType::class, [ + 'label' => 'Beschreibung', + 'required' => false, + 'attr' => [ + 'rows' => 2, + ], + ]) + ->add('type', EnumType::class, [ + 'label' => 'Preistyp', + 'class' => AdditionalServiceTypeEnum::class, + 'choice_label' => fn($item) => $item->label(), + ]) + ->add('price', MoneyType::class, [ + 'label' => 'Preis', + 'currency' => $options['currency'], + 'divisor' => 100, + ]) + ->add('selectionGroup', TextType::class, [ + 'label' => 'Auswahlgruppe', + 'required' => false, + 'disabled' => true, + ]) + ->add('dateFrom', DateType::class, [ + 'label' => 'Datum von', + 'html5' => true, + 'widget' => 'single_text', + ]) + ->add('dateTo', DateType::class, [ + 'label' => 'Datum bis', + 'html5' => true, + 'widget' => 'single_text', + ]) + ; + } + + public function configureOptions(OptionsResolver $resolver): void + { + $resolver->setDefaults([ + 'data_class' => AdditionalService::class, + 'currency' => 'EUR', + ]); + $resolver->setAllowedValues('currency', ['EUR', 'CHF']); + } +} diff --git a/src/Form/Admin/Groups/BoardServiceType.php b/src/Form/Admin/Groups/BoardServiceType.php new file mode 100644 index 0000000..f3cd98e --- /dev/null +++ b/src/Form/Admin/Groups/BoardServiceType.php @@ -0,0 +1,58 @@ + */ +class BoardServiceType extends AbstractType +{ + public function buildForm(FormBuilderInterface $builder, array $options): void + { + $builder + ->add('label', TextType::class, [ + 'label' => 'Bezeichnung', + ]) + ->add('description', TextareaType::class, [ + 'label' => 'Beschreibung', + 'required' => false, + 'attr' => [ + 'rows' => 2, + ], + ]) + ->add('price', MoneyType::class, [ + 'label' => 'Preis pro Person/Nacht', + 'currency' => $options['currency'], + 'divisor' => 100, + ]) + ->add('dateFrom', DateType::class, [ + 'label' => 'Datum von', + 'html5' => true, + 'widget' => 'single_text', + ]) + ->add('dateTo', DateType::class, [ + 'label' => 'Datum bis', + 'html5' => true, + 'widget' => 'single_text', + ]) + ; + } + + public function configureOptions(OptionsResolver $resolver): void + { + $resolver->setDefaults([ + 'data_class' => BoardService::class, + 'currency' => 'EUR', + ]); + $resolver->setAllowedValues('currency', ['EUR', 'CHF']); + } +} diff --git a/src/Form/DatepickerType.php b/src/Form/DatepickerType.php new file mode 100644 index 0000000..315dfa0 --- /dev/null +++ b/src/Form/DatepickerType.php @@ -0,0 +1,40 @@ + */ +class DatepickerType extends AbstractType +{ + public function configureOptions(OptionsResolver $resolver): void + { + $resolver->setDefaults([ + 'html5' => false, + 'widget' => 'single_text', + 'input' => 'datetime_immutable', + 'min_date' => null, + 'max_date' => null, + 'disable_weekends' => false, + ]); + $resolver->setAllowedTypes('min_date', ['null', \DateTimeImmutable::class]); + $resolver->setAllowedTypes('max_date', ['null', \DateTimeImmutable::class]); + $resolver->setAllowedTypes('disable_weekends', 'bool'); + } + + public function buildView(FormView $view, FormInterface $form, array $options): void + { + $view->vars['min_date'] = $options['min_date']; + $view->vars['max_date'] = $options['max_date']; + $view->vars['disable_weekends'] = $options['disable_weekends']; + } + + public function getParent(): string + { + return DateType::class; + } +} diff --git a/src/Form/Extension/ModalSubmitExtension.php b/src/Form/Extension/ModalSubmitExtension.php new file mode 100644 index 0000000..fe61f93 --- /dev/null +++ b/src/Form/Extension/ModalSubmitExtension.php @@ -0,0 +1,39 @@ +setDefaults([ + 'hx_post' => null, + 'hx_target' => '#htmx-modal', + 'hx_swap' => 'outerHTML', + ]); + } + + public function buildView(FormView $view, FormInterface $form, array $options): void + { + if (null !== $options['hx_post']) { + $attr = [ + 'hx-post' => $options['hx_post'], + 'hx-target' => $options['hx_target'], + 'hx-swap' => $options['hx_swap'], + 'hx-indicator' => '#htmx-modal-indicator', + ]; + $view->vars['attr'] = array_merge($view->vars['attr'], $attr); + } + } + + public static function getExtendedTypes(): iterable + { + return [FormType::class]; + } +} diff --git a/src/Form/Model/AccommodationBookingDto.php b/src/Form/Model/AccommodationBookingDto.php new file mode 100644 index 0000000..a8e37ba --- /dev/null +++ b/src/Form/Model/AccommodationBookingDto.php @@ -0,0 +1,84 @@ +*/ + public array $selectedAdditionalServiceIds = []; + + public bool $isInquiry = false; + + /** @var string[] */ + public array $inquiryReasons = []; + + public bool $forceInquiry = false; + + public ?int $totalPrice = null; + + /** @var array */ + public array $priceBreakdown = []; + + #[Assert\NotBlank(message: 'required', groups: ['step_3'])] + public ?string $groupName = null; + + #[Assert\NotBlank(message: 'required', groups: ['step_3'])] + #[Assert\Choice(choices: ['Herr', 'Frau', 'divers'], groups: ['step_3'])] + public ?string $salutation = null; + + #[Assert\NotBlank(message: 'required', groups: ['step_3'])] + public ?string $firstName = null; + + #[Assert\NotBlank(message: 'required', groups: ['step_3'])] + public ?string $lastName = null; + + #[Assert\NotBlank(message: 'required', groups: ['step_3'])] + #[Assert\Email(message: 'invalid', groups: ['step_3'])] + public ?string $email = null; + + #[Assert\NotBlank(message: 'required', groups: ['step_3'])] + public ?string $phone = null; + + #[Assert\NotBlank(message: 'required', groups: ['step_3'])] + public ?string $street = null; + + #[Assert\NotBlank(message: 'required', groups: ['step_3'])] + public ?string $zip = null; + + #[Assert\NotBlank(message: 'required', groups: ['step_3'])] + public ?string $city = null; + + public ?string $remarks = null; + + public function getNights(): int + { + if (null === $this->dateFrom || null === $this->dateTo) { + return 0; + } + + return $this->dateFrom->diff($this->dateTo)->days; + } +} diff --git a/src/Form/Model/BookingSummaryDto.php b/src/Form/Model/BookingSummaryDto.php index ed34d60..817b434 100644 --- a/src/Form/Model/BookingSummaryDto.php +++ b/src/Form/Model/BookingSummaryDto.php @@ -4,7 +4,7 @@ declare(strict_types=1); namespace App\Form\Model; -use App\Model\BookingSummaryCmsHotelData; +use App\Model\CmsHotelData; /** * DTO containing all booking summary data for sidebar display. @@ -19,7 +19,7 @@ class BookingSummaryDto public readonly int $participantCount, public readonly BookingSummaryPricingDto $pricing, public readonly BookingSummaryVoucherDto $vouchers, - public readonly ?BookingSummaryCmsHotelData $cmsData, + public readonly ?CmsHotelData $cmsData, ) { } } diff --git a/src/Form/OfferAcceptConfirmationType.php b/src/Form/OfferAcceptConfirmationType.php new file mode 100644 index 0000000..fefcf33 --- /dev/null +++ b/src/Form/OfferAcceptConfirmationType.php @@ -0,0 +1,41 @@ + + */ +class OfferAcceptConfirmationType extends AbstractType +{ + public function buildForm(FormBuilderInterface $builder, array $options): void + { + $termsLink = sprintf( + 'allgemeinen Geschäftsbedingungen (AGB)', + htmlspecialchars($options['terms_url'], ENT_QUOTES, 'UTF-8') + ); + + $builder->add('termsAccepted', CheckboxType::class, [ + 'label' => sprintf('Ich habe die %s gelesen und bin damit einverstanden, dass eine kostenpflichtige Buchung zustande kommt.', $termsLink), + 'label_html' => true, + 'mapped' => false, + 'required' => true, + 'constraints' => [ + new IsTrue(message: 'Bitte akzeptiere die AGB, um die Buchung abzuschließen.'), + ], + ]); + } + + public function configureOptions(OptionsResolver $resolver): void + { + $resolver->setRequired('terms_url'); + $resolver->setAllowedTypes('terms_url', 'string'); + } +} diff --git a/src/Menu/AdminMenuBuilder.php b/src/Menu/AdminMenuBuilder.php index a480b02..b5ce1f0 100644 --- a/src/Menu/AdminMenuBuilder.php +++ b/src/Menu/AdminMenuBuilder.php @@ -29,6 +29,27 @@ class AdminMenuBuilder extends AbstractMenuBuilder ], 'extras' => [ 'icon' => 'edit', + 'routes' => [['pattern' => '/^app_admin_bookingeditdraft/']], + ], + ]); + $menu->addChild('Gruppenbuchungen', [ + 'route' => 'app_admin_accommodationbooking', + 'linkAttributes' => [ + 'title' => 'Buchungen', + ], + 'extras' => [ + 'icon' => 'list', + 'routes' => [['pattern' => '/^app_admin_accommodationbooking\//']], + ], + ]); + $menu->addChild('Gruppenhäuser', [ + 'route' => 'app_admin_accommodation', + 'linkAttributes' => [ + 'title' => 'Gruppenhäuser', + ], + 'extras' => [ + 'icon' => 'house', + 'routes' => [['pattern' => '/^app_admin_accommodation\//']], ], ]); $menu->addChild('Benutzer', [ @@ -47,6 +68,7 @@ class AdminMenuBuilder extends AbstractMenuBuilder ], 'extras' => [ 'icon' => 'list', + 'routes' => [['pattern' => '/^app_admin_log/']], ], ]); diff --git a/src/Menu/GroupsMenuBuilder.php b/src/Menu/GroupsMenuBuilder.php new file mode 100644 index 0000000..bb8e1fd --- /dev/null +++ b/src/Menu/GroupsMenuBuilder.php @@ -0,0 +1,50 @@ + $options + */ + public function createMainMenu(array $options): ItemInterface + { + $menu = $this->createRootElement(); + + $menu->addChild('Dashboard', [ + 'route' => 'app_admin_dashboard', + 'linkAttributes' => [ + 'title' => 'Dashboard', + ], + 'extras' => [ + 'icon' => 'chart', + ], + ]); + $menu->addChild('Gruppenbuchungen', [ + 'route' => 'app_admin_accommodationbooking', + 'linkAttributes' => [ + 'title' => 'Buchungen', + ], + 'extras' => [ + 'icon' => 'list', + 'routes' => [['pattern' => '/^app_admin_accommodationbooking\//']], + ], + ]); + $menu->addChild('Gruppenhäuser', [ + 'route' => 'app_admin_accommodation', + 'linkAttributes' => [ + 'title' => 'Gruppenhäuser', + ], + 'extras' => [ + 'icon' => 'house', + 'routes' => [['pattern' => '/^app_admin_accommodation\//']], + ], + ]); + + $this->addLogoutItem($menu); + + return $menu; + } +} diff --git a/src/Model/AccommodationBookingAdditionalServiceItem.php b/src/Model/AccommodationBookingAdditionalServiceItem.php new file mode 100644 index 0000000..a4d489e --- /dev/null +++ b/src/Model/AccommodationBookingAdditionalServiceItem.php @@ -0,0 +1,29 @@ +label = $snapshot['label'] ?? ''; + $this->price = $snapshot['price'] ?? 0; + $this->type = $snapshot['type'] ?? ''; + } +} diff --git a/src/Model/AccommodationBookingApiResponse.php b/src/Model/AccommodationBookingApiResponse.php new file mode 100644 index 0000000..10bee73 --- /dev/null +++ b/src/Model/AccommodationBookingApiResponse.php @@ -0,0 +1,115 @@ + 'Y-m-d'])] + public ?\DateTimeImmutable $dateFrom; + + #[Groups(['api:single'])] + #[Context([DateTimeNormalizer::FORMAT_KEY => 'Y-m-d'])] + public ?\DateTimeImmutable $dateTo; + + #[Groups(['api:single'])] + public int $nights; + + #[Groups(['api:single'])] + public int $paxCount; + + #[Groups(['api:single'])] + public int $minorsCount; + + #[Groups(['api:single'])] + public int $childrenCount; + + #[Groups(['api:single'])] + public ?string $groupName; + + #[Groups(['api:single'])] + public ?\DateTimeImmutable $acceptedAt; + + #[Groups(['api:single'])] + public AccommodationBookingPersonalData $personalData; + + #[Groups(['api:single'])] + public AccommodationBookingHotelInfo $accommodation; + + #[Groups(['api:single'])] + public AccommodationBookingBoardServiceInfo $boardService; + + /** + * @var list + */ + #[Groups(['api:single'])] + public array $additionalServices; + + #[Groups(['api:single'])] + public ?int $accommodationDiscount; + + #[Groups(['api:single'])] + public ?int $boardServiceDiscount; + + #[Groups(['api:single'])] + public ?int $additionalServicesDiscount; + + #[Groups(['api:single'])] + public ?int $totalPrice; + + #[Groups(['api:single'])] + public ?string $pricingCurrency; + + #[Groups(['api:single'])] + public ?int $pricingVersion; + + /** + * @var array|null + */ + #[Groups(['api:single'])] + public ?array $priceBreakdown; + + /** + * @param array|null $priceBreakdown + */ + public function __construct(AccommodationBooking $booking, ?array $priceBreakdown) + { + $this->uuid = $booking->getUuid(); + $this->status = $booking->isInquiry() ? 'inquiry' : 'booking'; + $this->dateFrom = $booking->getDateFrom(); + $this->dateTo = $booking->getDateTo(); + $this->nights = $booking->getNights(); + $this->paxCount = $booking->getPaxCount(); + $this->minorsCount = $booking->getMinorsCount(); + $this->childrenCount = $booking->getChildrenCount(); + $this->groupName = $booking->getGroupName(); + $this->acceptedAt = $booking->getAcceptedAt(); + $this->personalData = new AccommodationBookingPersonalData($booking); + $this->accommodation = new AccommodationBookingHotelInfo($booking->getAccommodation()); + $this->boardService = new AccommodationBookingBoardServiceInfo($booking); + $this->additionalServices = array_map( + static fn (array $service) => new AccommodationBookingAdditionalServiceItem($service), + $booking->getAdditionalServices(), + ); + $this->accommodationDiscount = $booking->getAccommodationDiscount(); + $this->boardServiceDiscount = $booking->getBoardServiceDiscount(); + $this->additionalServicesDiscount = $booking->getAdditionalServicesDiscount(); + $this->totalPrice = $booking->getTotalPrice(); + $this->pricingCurrency = $booking->getPricingCurrency(); + $this->pricingVersion = $booking->getPricingVersion(); + $this->priceBreakdown = $priceBreakdown; + } +} diff --git a/src/Model/AccommodationBookingBoardServiceInfo.php b/src/Model/AccommodationBookingBoardServiceInfo.php new file mode 100644 index 0000000..f0f063f --- /dev/null +++ b/src/Model/AccommodationBookingBoardServiceInfo.php @@ -0,0 +1,23 @@ +label = $booking->getBoardServiceLabel(); + $this->price = $booking->getBoardServicePrice(); + } +} diff --git a/src/Model/AccommodationBookingContext.php b/src/Model/AccommodationBookingContext.php new file mode 100644 index 0000000..28dfc44 --- /dev/null +++ b/src/Model/AccommodationBookingContext.php @@ -0,0 +1,30 @@ + $groupedAdditionalServices + * @param AdditionalService[] $ungroupedAdditionalServices + * @param array|null $priceBreakdown + */ + public function __construct( + public Accommodation $accommodation, + public ?CmsHotelData $hotelCmsData = null, + public array $boardServices = [], + public array $additionalServices = [], + public array $groupedAdditionalServices = [], + public array $ungroupedAdditionalServices = [], + public ?array $priceBreakdown = null, + ) { + } +} diff --git a/src/Model/AccommodationBookingHotelInfo.php b/src/Model/AccommodationBookingHotelInfo.php new file mode 100644 index 0000000..40be31f --- /dev/null +++ b/src/Model/AccommodationBookingHotelInfo.php @@ -0,0 +1,23 @@ +calendarCode = $accommodation?->getCalendarCode(); + $this->cmsCode = $accommodation?->getCmsCode(); + } +} diff --git a/src/Model/AccommodationBookingPersonalData.php b/src/Model/AccommodationBookingPersonalData.php new file mode 100644 index 0000000..4c0fda4 --- /dev/null +++ b/src/Model/AccommodationBookingPersonalData.php @@ -0,0 +1,51 @@ +salutation = $booking->getSalutation(); + $this->firstName = $booking->getFirstName(); + $this->lastName = $booking->getLastName(); + $this->email = $booking->getEmail(); + $this->phone = $booking->getPhone(); + $this->street = $booking->getStreet(); + $this->zip = $booking->getZip(); + $this->city = $booking->getCity(); + $this->remarks = $booking->getRemarks(); + } +} diff --git a/src/Model/AccommodationBookingQueryParams.php b/src/Model/AccommodationBookingQueryParams.php new file mode 100644 index 0000000..43f95ce --- /dev/null +++ b/src/Model/AccommodationBookingQueryParams.php @@ -0,0 +1,24 @@ +|null $images - */ - public function __construct( - public ?string $name, - public ?string $address, - public ?array $images, - ) { - } -} diff --git a/src/Model/CalendarDay.php b/src/Model/CalendarDay.php new file mode 100644 index 0000000..2bc29bb --- /dev/null +++ b/src/Model/CalendarDay.php @@ -0,0 +1,19 @@ + $days keyed by day-of-month number + */ + public function __construct( + public string $label, + public int $firstDow, + public array $days, + ) { + } +} diff --git a/src/Model/CmsHotelData.php b/src/Model/CmsHotelData.php new file mode 100644 index 0000000..745c1ce --- /dev/null +++ b/src/Model/CmsHotelData.php @@ -0,0 +1,31 @@ +|null $images + * @param array|null $icons + */ + public function __construct( + public ?string $name, + public ?string $address, + public ?array $images, + public ?string $description = null, + public ?string $features = null, + public ?string $roomTypes = null, + public ?string $additionalInformation = null, + public ?array $icons = null, + public ?CmsRegionData $region = null, + ) { + } +} diff --git a/src/Model/CmsRegionData.php b/src/Model/CmsRegionData.php new file mode 100644 index 0000000..5335e99 --- /dev/null +++ b/src/Model/CmsRegionData.php @@ -0,0 +1,32 @@ +|null $images + * @param list|null $regionMaps + */ + public function __construct( + public ?string $name, + public ?float $latitude, + public ?float $longitude, + public ?string $webcam, + public ?string $skiArea, + public ?string $skiAreaExtended, + public ?string $description, + public ?string $news, + public ?int $length, + public ?int $altitude, + public ?int $lifts, + public ?array $images, + public ?array $regionMaps, + ) { + } +} diff --git a/src/Model/ContingentCalendarQuery.php b/src/Model/ContingentCalendarQuery.php new file mode 100644 index 0000000..bdf0529 --- /dev/null +++ b/src/Model/ContingentCalendarQuery.php @@ -0,0 +1,78 @@ +dateFrom); + $dateTo = self::parseDate($this->dateTo); + + if (null === $dateFrom || null === $dateTo) { + return; + } + + if ($dateTo < $dateFrom) { + $context->buildViolation('dateTo must not be before dateFrom.') + ->atPath('dateTo') + ->addViolation(); + + return; + } + + if ($dateFrom->diff($dateTo)->days > self::MAX_RANGE_DAYS) { + $context->buildViolation(sprintf('The date range must not exceed %d days.', self::MAX_RANGE_DAYS)) + ->atPath('dateTo') + ->addViolation(); + } + } + + public function dateFromDate(): \DateTimeImmutable + { + return self::parseDate($this->dateFrom) + ?? throw new \LogicException('ContingentCalendarQuery must be validated before use.'); + } + + public function dateToDate(): \DateTimeImmutable + { + return self::parseDate($this->dateTo) + ?? throw new \LogicException('ContingentCalendarQuery must be validated before use.'); + } + + private static function parseDate(string $value): ?\DateTimeImmutable + { + $date = \DateTimeImmutable::createFromFormat('!Y-m-d', $value); + $errors = \DateTimeImmutable::getLastErrors(); + + if (false === $date || (false !== $errors && ($errors['warning_count'] > 0 || $errors['error_count'] > 0))) { + return null; + } + + return $date->format('Y-m-d') === $value ? $date : null; + } +} diff --git a/src/Model/ContingentPricesQuery.php b/src/Model/ContingentPricesQuery.php new file mode 100644 index 0000000..c6d9d9f --- /dev/null +++ b/src/Model/ContingentPricesQuery.php @@ -0,0 +1,21 @@ + + */ +class AccommodationBookingRepository extends ServiceEntityRepository +{ + public function __construct(ManagerRegistry $registry) + { + parent::__construct($registry, AccommodationBooking::class); + } +} diff --git a/src/Repository/Groups/AccommodationPriceRepository.php b/src/Repository/Groups/AccommodationPriceRepository.php new file mode 100644 index 0000000..97c878a --- /dev/null +++ b/src/Repository/Groups/AccommodationPriceRepository.php @@ -0,0 +1,44 @@ + + */ +class AccommodationPriceRepository extends ServiceEntityRepository +{ + public function __construct(ManagerRegistry $registry) + { + parent::__construct($registry, AccommodationPrice::class); + } + + /** + * Returns all AccommodationPrice records whose period overlaps with [dateFrom, dateTo] + * for the accommodation identified by the given hotel code. + * + * @return AccommodationPrice[] + */ + public function findByHotelCodeAndDateRange( + string $hotelCode, + \DateTimeImmutable $dateFrom, + \DateTimeImmutable $dateTo, + ): array { + return $this->createQueryBuilder('ap') + ->join('ap.accommodation', 'a') + ->where('a.calendarCode = :hotelCode') + ->andWhere('ap.dateFrom <= :dateTo') + ->andWhere('ap.dateTo >= :dateFrom') + ->setParameter('hotelCode', $hotelCode) + ->setParameter('dateFrom', $dateFrom) + ->setParameter('dateTo', $dateTo) + ->orderBy('ap.dateFrom', 'ASC') + ->getQuery() + ->getResult(); + } +} diff --git a/src/Repository/Groups/AccommodationRepository.php b/src/Repository/Groups/AccommodationRepository.php new file mode 100644 index 0000000..533be45 --- /dev/null +++ b/src/Repository/Groups/AccommodationRepository.php @@ -0,0 +1,63 @@ + + */ +class AccommodationRepository extends ServiceEntityRepository +{ + public function __construct(ManagerRegistry $registry) + { + parent::__construct($registry, Accommodation::class); + } + + // /** + // * @return Accommodation[] Returns an array of Accommodation objects + // */ + // public function findByExampleField($value): array + // { + // return $this->createQueryBuilder('a') + // ->andWhere('a.exampleField = :val') + // ->setParameter('val', $value) + // ->orderBy('a.id', 'ASC') + // ->setMaxResults(10) + // ->getQuery() + // ->getResult() + // ; + // } + + // public function findOneBySomeField($value): ?Accommodation + // { + // return $this->createQueryBuilder('a') + // ->andWhere('a.exampleField = :val') + // ->setParameter('val', $value) + // ->getQuery() + // ->getOneOrNullResult() + // ; + // } + + public function findOneByCmsCode(string $cmsCode): ?Accommodation + { + return $this->createQueryBuilder('a') + ->andWhere('a.cmsCode = :cmsCode') + ->setParameter('cmsCode', $cmsCode) + ->getQuery() + ->getOneOrNullResult() + ; + } + + public function findOneByCalendarCode(string $calendarCode): ?Accommodation + { + return $this->createQueryBuilder('a') + ->andWhere('a.calendarCode = :calendarCode') + ->setParameter('calendarCode', $calendarCode) + ->getQuery() + ->getOneOrNullResult() + ; + } +} diff --git a/src/Repository/Groups/AdditionalServiceRepository.php b/src/Repository/Groups/AdditionalServiceRepository.php new file mode 100644 index 0000000..46e91d6 --- /dev/null +++ b/src/Repository/Groups/AdditionalServiceRepository.php @@ -0,0 +1,23 @@ + + */ +class AdditionalServiceRepository extends ServiceEntityRepository +{ + /** @use FindsByAccommodationAndDateRangeTrait */ + use FindsByAccommodationAndDateRangeTrait; + + public function __construct(ManagerRegistry $registry) + { + parent::__construct($registry, AdditionalService::class); + } +} diff --git a/src/Repository/Groups/BoardServiceRepository.php b/src/Repository/Groups/BoardServiceRepository.php new file mode 100644 index 0000000..d4de8f3 --- /dev/null +++ b/src/Repository/Groups/BoardServiceRepository.php @@ -0,0 +1,23 @@ + + */ +class BoardServiceRepository extends ServiceEntityRepository +{ + /** @use FindsByAccommodationAndDateRangeTrait */ + use FindsByAccommodationAndDateRangeTrait; + + public function __construct(ManagerRegistry $registry) + { + parent::__construct($registry, BoardService::class); + } +} diff --git a/src/Repository/Groups/FindsByAccommodationAndDateRangeTrait.php b/src/Repository/Groups/FindsByAccommodationAndDateRangeTrait.php new file mode 100644 index 0000000..a69e452 --- /dev/null +++ b/src/Repository/Groups/FindsByAccommodationAndDateRangeTrait.php @@ -0,0 +1,41 @@ + + */ +trait FindsByAccommodationAndDateRangeTrait +{ + /** + * Returns all records active during the given date range. + * + * Overlap condition: entity.dateFrom <= dateTo AND entity.dateTo >= dateFrom + * + * @return array + */ + public function findByAccommodationAndDateRange( + Accommodation $accommodation, + \DateTimeImmutable $dateFrom, + \DateTimeImmutable $dateTo, + ): array { + return $this->createQueryBuilder('s') + ->where('s.accommodation = :accommodation') + ->andWhere('s.dateFrom <= :dateTo') + ->andWhere('s.dateTo >= :dateFrom') + ->setParameter('accommodation', $accommodation) + ->setParameter('dateFrom', $dateFrom) + ->setParameter('dateTo', $dateTo) + ->orderBy('s.dateFrom', 'ASC') + ->addOrderBy('s.label', 'ASC') + ->getQuery() + ->getResult(); + } +} diff --git a/src/Security/Voter/AdministrativeAccessVoter.php b/src/Security/Voter/AdministrativeAccessVoter.php new file mode 100644 index 0000000..c0276e2 --- /dev/null +++ b/src/Security/Voter/AdministrativeAccessVoter.php @@ -0,0 +1,33 @@ + + */ +class AdministrativeAccessVoter extends Voter +{ + public const ADMINISTRATIVE_ACCESS = 'ADMINISTRATIVE_ACCESS'; + + public function __construct( + private readonly AuthorizationCheckerInterface $authorizationChecker, + ) { + } + + protected function supports(string $attribute, mixed $subject): bool + { + return self::ADMINISTRATIVE_ACCESS === $attribute; + } + + protected function voteOnAttribute(string $attribute, mixed $subject, TokenInterface $token): bool + { + return $this->authorizationChecker->isGranted('ROLE_ADMIN') + || $this->authorizationChecker->isGranted('ROLE_GROUPS_MANAGER'); + } +} diff --git a/src/Service/AccommodationBookingBreakdownCalculator.php b/src/Service/AccommodationBookingBreakdownCalculator.php new file mode 100644 index 0000000..f2eebe7 --- /dev/null +++ b/src/Service/AccommodationBookingBreakdownCalculator.php @@ -0,0 +1,67 @@ +|null null when no accommodation or dates are set + */ + public function compute(AccommodationBooking $booking): ?array + { + if (null !== $booking->getPriceBreakdown()) { + return $booking->getPriceBreakdown(); + } + + return $this->computeCurrent($booking); + } + + /** + * Calculates against the current catalog. Use only while creating or explicitly editing + * a booking, or as a compatibility fallback for records created before price snapshots. + * + * @return array|null + */ + public function computeCurrent(AccommodationBooking $booking): ?array + { + $accommodation = $booking->getAccommodation(); + $dateFrom = $booking->getDateFrom(); + $dateTo = $booking->getDateTo(); + + if (null === $accommodation || null === $dateFrom || null === $dateTo) { + return null; + } + + $prices = $this->priceRepo->findByHotelCodeAndDateRange( + $accommodation->getCalendarCode() ?? '', + $dateFrom, + $dateTo, + ); + + return $this->priceCalculator->calculateFromSnapshots( + $booking->getPaxCount(), + $booking->getMinorsCount(), + $booking->getNights(), + $dateFrom, + $dateTo, + $prices, + $booking->getBoardServicePrice(), + $booking->getAdditionalServices(), + $accommodation->getCurrency(), + ); + } +} diff --git a/src/Service/AccommodationBookingLinkSigner.php b/src/Service/AccommodationBookingLinkSigner.php new file mode 100644 index 0000000..8b608ca --- /dev/null +++ b/src/Service/AccommodationBookingLinkSigner.php @@ -0,0 +1,107 @@ +uriSigner = new UriSigner($secret); + } + + public function sign(AccommodationBooking $booking): string + { + $issuedAt = $booking->getAccessLinkIssuedAt(); + + if (null === $issuedAt) { + throw new \LogicException('Cannot sign an access link before accessLinkIssuedAt is set.'); + } + + $url = $this->urlGenerator->generate( + 'app_groups_booking_offer', + ['uuid' => $booking->getUuid(), self::TIMESTAMP_PARAM => $issuedAt->getTimestamp()], + UrlGeneratorInterface::ABSOLUTE_URL, + ); + + return $this->uriSigner->sign($url); + } + + public function expiresAt(AccommodationBooking $booking): ?\DateTimeImmutable + { + return $booking->getAccessLinkIssuedAt()?->modify(sprintf('+%d days', self::LINK_TTL_DAYS)); + } + + public function isValidLinkRequest(Request $request, AccommodationBooking $booking): bool + { + $issuedAt = $booking->getAccessLinkIssuedAt(); + + if (null === $issuedAt) { + return false; + } + + if (!$this->uriSigner->checkRequest($request)) { + return false; + } + + $timestampParam = $request->query->get(self::TIMESTAMP_PARAM); + + if (null === $timestampParam || (int) $timestampParam !== $issuedAt->getTimestamp()) { + return false; + } + + $expiresAt = $this->expiresAt($booking); + + return null !== $expiresAt && new \DateTimeImmutable() <= $expiresAt; + } + + /** + * Marks the current session as authorized to view/act on this booking's offer. + * Called once, after a successful {@see isValidLinkRequest()} check at the + * signed-link entry point — every other route in this flow then trusts the + * session instead of re-deriving cryptographic validity from its own URL + * (which wouldn't work anyway, since the signature is bound to the exact + * URI it was generated for). + */ + public function authorizeSession(Request $request, AccommodationBooking $booking): void + { + $request->getSession()->set($this->sessionKey($booking), $booking->getAccessLinkIssuedAt()?->getTimestamp()); + } + + public function isSessionAuthorized(Request $request, AccommodationBooking $booking): bool + { + $issuedAt = $booking->getAccessLinkIssuedAt(); + + if (null === $issuedAt) { + return false; + } + + if ($request->getSession()->get($this->sessionKey($booking)) !== $issuedAt->getTimestamp()) { + return false; + } + + $expiresAt = $this->expiresAt($booking); + + return null !== $expiresAt && new \DateTimeImmutable() <= $expiresAt; + } + + private function sessionKey(AccommodationBooking $booking): string + { + return 'accommodation_offer_access_'.$booking->getUuid(); + } +} diff --git a/src/Service/AccommodationBookingService.php b/src/Service/AccommodationBookingService.php new file mode 100644 index 0000000..8c0d481 --- /dev/null +++ b/src/Service/AccommodationBookingService.php @@ -0,0 +1,527 @@ +accommodationRepo->findOneBy(['calendarCode' => $params->hotelCode]); + + if (null === $accommodation) { + throw new \InvalidArgumentException(sprintf('Unterkunft mit Code "%s" nicht gefunden.', $params->hotelCode)); + } + + $dto = new AccommodationBookingDto(); + $dto->accommodationId = $accommodation->getId(); + + if (null !== $params->dateFrom && null !== $params->dateTo) { + $this->applyDates($dto, $params->dateFrom, $params->dateTo); + $dateFrom = $dto->dateFrom; + $dateTo = $dto->dateTo; + if (null !== $dateFrom && null !== $dateTo) { + $dto->paxCount = $this->resolveMinPax($params->hotelCode, $dateFrom, $dateTo); + } + } + + return $dto; + } + + /** + * Parses and validates raw date strings, then sets them on the DTO. + * + * @throws \InvalidArgumentException if dates are invalid or dateTo ≤ dateFrom + */ + public function applyDates(AccommodationBookingDto $dto, string $dateFromRaw, string $dateToRaw): void + { + $dateFrom = $this->parseDate($dateFromRaw); + $dateTo = $this->parseDate($dateToRaw); + + if (null === $dateFrom || null === $dateTo) { + throw new \InvalidArgumentException('Ungültiges Datumsformat. Erwartet: YYYY-MM-DD.'); + } + + if ($dateTo <= $dateFrom) { + throw new \InvalidArgumentException('Das Abreisedatum muss nach dem Anreisedatum liegen.'); + } + + $dto->dateFrom = $dateFrom->setTime(0, 0, 0); + $dto->dateTo = $dateTo->setTime(0, 0, 0); + } + + public function computeInitialPaxCount(Accommodation $accommodation, \DateTimeImmutable $dateFrom, \DateTimeImmutable $dateTo): int + { + return $this->resolveMinPax($accommodation->getCalendarCode() ?? '', $dateFrom, $dateTo); + } + + public function loadAccommodation(int $id): ?Accommodation + { + return $this->accommodationRepo->find($id); + } + + /** + * Fetches hotel details from the CMS for display in the booking flow — name, images, + * address, descriptive text blocks, amenity icons, and the surrounding region's info + * (name, coordinates, webcam, ski area text, stats, images). + */ + public function loadHotelCmsData(Accommodation $accommodation): ?CmsHotelData + { + return $this->cmsDataProvider->getHotelDetails($accommodation->getEffectiveCmsCode()); + } + + /** + * @return AccommodationPrice[] + */ + public function loadPrices(AccommodationBookingDto $dto, Accommodation $accommodation): array + { + return $this->priceRepo->findByHotelCodeAndDateRange( + $accommodation->getCalendarCode() ?? '', + $dto->dateFrom, + $dto->dateTo, + ); + } + + /** + * @return array{ + * boardServices: BoardService[], + * additionalServices: AdditionalService[], + * groupedAdditionalServices: array, + * ungroupedAdditionalServices: AdditionalService[] + * } + */ + public function loadAvailableServices(AccommodationBookingDto $dto, Accommodation $accommodation): array + { + $boardServices = $this->boardServiceRepo->findByAccommodationAndDateRange( + $accommodation, + $dto->dateFrom, + $dto->dateTo, + ); + + $additionalServices = $this->additionalServiceRepo->findByAccommodationAndDateRange( + $accommodation, + $dto->dateFrom, + $dto->dateTo, + ); + + $grouped = []; + $ungrouped = []; + + foreach ($additionalServices as $service) { + if (null !== $service->getSelectionGroup()) { + $grouped[$service->getSelectionGroup()][] = $service; + } else { + $ungrouped[] = $service; + } + } + + return [ + 'boardServices' => $boardServices, + 'additionalServices' => $additionalServices, + 'groupedAdditionalServices' => $grouped, + 'ungroupedAdditionalServices' => $ungrouped, + ]; + } + + /** + * Determines whether the booking must be treated as non-binding and why. + * + * The effective price for the first day of the booking window is used as the authoritative + * source for minNights and includedPax rules. This mirrors how the pricing side works — + * per-day prices are iterated for cost calculation, but the booking-mode decision is + * anchored to the first night's effective price. + * + * PriceTimelineBuilder::resolveWinner() resolves the DISCOUNT > OVERRIDE > base priority. + * + * @param AccommodationPrice[] $prices + */ + public function computeInquiryStatus(AccommodationBookingDto $dto, array $prices): InquiryStatus + { + if (empty($prices)) { + return new InquiryStatus(true, ['Für den gewählten Zeitraum ist kein Preis hinterlegt.']); + } + + $nights = $dto->getNights(); + $firstDay = $dto->dateFrom; + + $candidates = array_values(array_filter( + $prices, + fn (AccommodationPrice $p) => $p->getDateFrom() <= $firstDay && $p->getDateTo() >= $firstDay, + )); + + $winner = $this->priceTimelineBuilder->resolveWinner($candidates); + + if (null === $winner) { + return new InquiryStatus(true, ['Für den Anreisezeitpunkt ist kein Preis hinterlegt.']); + } + + $reasons = []; + + $adultPax = $dto->paxCount - $dto->minorsCount; + if ($adultPax < $winner->getIncludedPax() && !$winner->isAcceptUndersubscription()) { + $reasons[] = sprintf( + 'Mindestpersonenzahl: %d (gebucht: %d)', + $winner->getIncludedPax(), + $adultPax, + ); + } + + if ($nights < $winner->getMinNights() && !$winner->isAcceptShortTerm()) { + $reasons[] = sprintf( + 'Mindestaufenthalt: %d Nächte (gebucht: %d)', + $winner->getMinNights(), + $nights, + ); + } + + return new InquiryStatus(!empty($reasons), $reasons); + } + + /** + * Persists the completed booking to the database. + * + * Board and additional services are stored as frozen snapshots — independent of + * the catalog entities so that future catalog edits do not affect existing bookings. + * + * @param AccommodationPrice[] $prices + * @param array{additionalServices: AdditionalService[], boardServices: mixed[]} $services + */ + public function persist( + AccommodationBookingDto $dto, + Accommodation $accommodation, + array $prices, + array $services, + ): AccommodationBooking { + $booking = new AccommodationBooking(); + $booking->setAccommodation($accommodation); + $booking->setGroupName($dto->groupName); + $booking->setDateFrom($dto->dateFrom); + $booking->setDateTo($dto->dateTo); + $booking->setPaxCount($dto->paxCount); + $booking->setMinorsCount($dto->minorsCount); + $booking->setChildrenCount($dto->childrenCount); + $booking->setIsInquiry($dto->forceInquiry || $this->computeInquiryStatus($dto, $prices)->isInquiry); + + // Freeze board service as scalar fields (no FK) + if (null !== $dto->selectedBoardServiceId) { + foreach ($services['boardServices'] as $boardService) { + if ($boardService->getId() === $dto->selectedBoardServiceId) { + $booking->setBoardServiceLabel($boardService->getLabel()); + $booking->setBoardServicePrice($boardService->getPrice()); + $booking->setBoardServiceOriginalId($boardService->getId()); + break; + } + } + } + + // Freeze additional services as JSON snapshots (no FK to catalog) + $selectedIds = array_flip($dto->selectedAdditionalServiceIds); + foreach ($services['additionalServices'] as $additionalService) { + if (!isset($selectedIds[$additionalService->getId()])) { + continue; + } + + $booking->addAdditionalServiceSnapshot( + $additionalService->getLabel(), + $additionalService->getPrice(), + $additionalService->getType(), + $additionalService->getId(), + ); + } + + // Personal data + $booking->setSalutation($dto->salutation); + $booking->setFirstName($dto->firstName); + $booking->setLastName($dto->lastName); + $booking->setEmail($dto->email); + $booking->setPhone($dto->phone); + $booking->setStreet($dto->street); + $booking->setZip($dto->zip); + $booking->setCity($dto->city); + $booking->setRemarks($dto->remarks); + + $this->refreshPriceSnapshot($booking); + + $this->entityManager->persist($booking); + $this->entityManager->flush(); + + return $booking; + } + + /** + * Persists the booking and sends the notification/confirmation emails in one go. + * + * @param AccommodationPrice[] $prices + * @param array{additionalServices: AdditionalService[], boardServices: mixed[]} $services + */ + public function finalizeBooking( + AccommodationBookingDto $dto, + Accommodation $accommodation, + array $prices, + array $services, + ): AccommodationBooking { + $booking = $this->persist($dto, $accommodation, $prices, $services); + $this->issueAccessLinkForDirectBooking($booking); + $this->sendNotificationEmail($booking); + $this->sendCustomerConfirmationEmail($booking); + + return $booking; + } + + public function refreshPriceSnapshot(AccommodationBooking $booking): void + { + $breakdown = $this->breakdownCalculator->computeCurrent($booking); + if (null === $breakdown) { + $booking->clearPriceSnapshot(); + + return; + } + + $accommodationBase = (int) ($breakdown['basePrice'] ?? 0) + (int) ($breakdown['additionalPersonsPrice'] ?? 0); + $boardBase = (int) ($breakdown['boardPrice'] ?? 0); + $servicesBase = (int) ($breakdown['servicesPrice'] ?? 0); + + $total = (int) ($breakdown['total'] ?? 0) + - $this->discountAmount($accommodationBase, $booking->getAccommodationDiscount()) + - $this->discountAmount($boardBase, $booking->getBoardServiceDiscount()) + - $this->discountAmount($servicesBase, $booking->getAdditionalServicesDiscount()); + + $booking->setPriceSnapshot( + $breakdown, + $total, + (string) ($breakdown['currency'] ?? $booking->getAccommodation()?->getCurrency() ?? 'EUR'), + self::PRICING_VERSION, + ); + } + + private function discountAmount(int $base, ?int $percent): int + { + return null !== $percent ? (int) round($base * $percent / 100) : 0; + } + + public function sendNotificationEmail(AccommodationBooking $booking): void + { + try { + $this->mailer->createAndSendEmail( + [ + 'booking' => $booking, + 'accessLink' => $this->accessLinkOrNull($booking), + ], + [ + 'to' => $this->officeEmail, + 'subject' => sprintf( + 'Neue Unterkunfts%s: %s', + $booking->isInquiry() ? 'anfrage' : 'buchung', + $booking->getAccommodation()?->getName(), + ), + 'template' => 'email/accommodation_booking.html.twig', + 'attachments' => [], + ], + ); + } catch (\Throwable $e) { + $this->logger->error('Failed to send accommodation booking notification email', [ + 'booking_id' => $booking->getId(), + 'error' => $e->getMessage(), + ]); + } + } + + /** + * Sets accessLinkIssuedAt for a direct (non-inquiry) booking if it doesn't have one yet. + * No email side effect — the confirmation email is always sent separately via + * sendCustomerConfirmationEmail(), regardless of whether a link exists. + */ + public function issueAccessLinkForDirectBooking(AccommodationBooking $booking): void + { + if ($booking->isInquiry() || null !== $booking->getAccessLinkIssuedAt()) { + return; + } + + $booking->setAccessLinkIssuedAt(new \DateTimeImmutable()); + $this->entityManager->flush(); + } + + /** + * Always sends a confirmation email to the customer, whether or not an access link + * exists yet — the template renders differently depending on accessLink being present. + */ + public function sendCustomerConfirmationEmail(AccommodationBooking $booking): void + { + try { + $this->mailer->createAndSendEmail( + [ + 'booking' => $booking, + 'accessLink' => $this->accessLinkOrNull($booking), + ], + [ + 'to' => $booking->getEmail(), + 'subject' => $booking->isInquiry() + ? 'Deine Anfrage ist bei uns eingegangen' + : 'Deine Buchung ist bestätigt', + 'template' => 'email/accommodation_booking_customer.html.twig', + 'attachments' => [], + ], + ); + } catch (\Throwable $e) { + $this->logger->error('Failed to send accommodation booking customer confirmation email', [ + 'booking_id' => $booking->getId(), + 'error' => $e->getMessage(), + ]); + } + } + + /** + * Explicit admin action: (re)issues the access link, invalidating any previously issued + * link for this booking. No email side effect — sending is a separate, explicit admin + * action via sendCustomerConfirmationEmail(). + */ + public function regenerateAccessLink(AccommodationBooking $booking): void + { + $booking->setAccessLinkIssuedAt(new \DateTimeImmutable()); + $this->entityManager->flush(); + } + + /** + * Transitions a booking from inquiry to booking and notifies office and customer. + * Idempotent — a no-op (including no emails) if the booking is already accepted. + */ + public function acceptBooking(AccommodationBooking $booking): void + { + if (!$booking->isInquiry()) { + return; + } + + $booking->setIsInquiry(false); + $booking->setAcceptedAt(new \DateTimeImmutable()); + $this->entityManager->flush(); + + $this->sendOfferAcceptedNotificationEmail($booking); + $this->sendOfferAcceptedCustomerEmail($booking); + } + + public function sendOfferAcceptedNotificationEmail(AccommodationBooking $booking): void + { + try { + $this->mailer->createAndSendEmail( + [ + 'booking' => $booking, + 'accessLink' => $this->accessLinkOrNull($booking), + ], + [ + 'to' => $this->officeEmail, + 'subject' => sprintf('Angebot angenommen: %s', $booking->getAccommodation()?->getName()), + 'template' => 'email/offer_accepted.html.twig', + 'attachments' => [], + ], + ); + } catch (\Throwable $e) { + $this->logger->error('Failed to send offer accepted notification email', [ + 'booking_id' => $booking->getId(), + 'error' => $e->getMessage(), + ]); + } + } + + public function sendOfferAcceptedCustomerEmail(AccommodationBooking $booking): void + { + try { + $this->mailer->createAndSendEmail( + [ + 'booking' => $booking, + 'accessLink' => $this->accessLinkOrNull($booking), + ], + [ + 'to' => $booking->getEmail(), + 'subject' => 'Deine Buchung ist bestätigt', + 'template' => 'email/offer_accepted_customer.html.twig', + 'attachments' => [], + ], + ); + } catch (\Throwable $e) { + $this->logger->error('Failed to send offer accepted customer email', [ + 'booking_id' => $booking->getId(), + 'error' => $e->getMessage(), + ]); + } + } + + private function accessLinkOrNull(AccommodationBooking $booking): ?string + { + return null !== $booking->getAccessLinkIssuedAt() ? $this->linkSigner->sign($booking) : null; + } + + private function parseDate(string $value): ?\DateTimeImmutable + { + $date = \DateTimeImmutable::createFromFormat('!Y-m-d', $value); + $errors = \DateTimeImmutable::getLastErrors(); + + if (false === $date) { + return null; + } + + if (false !== $errors && ($errors['warning_count'] > 0 || $errors['error_count'] > 0)) { + return null; + } + + if ($date->format('Y-m-d') !== $value) { + return null; + } + + return $date; + } + + private function resolveMinPax( + string $hotelCode, + \DateTimeImmutable $dateFrom, + \DateTimeImmutable $dateTo, + ): int { + $prices = $this->priceRepo->findByHotelCodeAndDateRange($hotelCode, $dateFrom, $dateTo); + $candidates = array_values(array_filter( + $prices, + fn (AccommodationPrice $price): bool => $price->getDateFrom() <= $dateFrom && $price->getDateTo() >= $dateFrom, + )); + + return $this->priceTimelineBuilder->resolveWinner($candidates)?->getIncludedPax() ?? 1; + } +} diff --git a/src/Service/AccommodationSessionManager.php b/src/Service/AccommodationSessionManager.php new file mode 100644 index 0000000..5cff919 --- /dev/null +++ b/src/Service/AccommodationSessionManager.php @@ -0,0 +1,53 @@ +getSession(); + + if (!$session->has(self::SESSION_KEY)) { + return null; + } + + $dto = $session->get(self::SESSION_KEY); + + if (!$dto instanceof AccommodationBookingDto) { + return null; + } + + return $dto; + } + + public function getOrFail(Request $request): AccommodationBookingDto + { + $dto = $this->getDto($request); + + if (null === $dto) { + throw new AccommodationSessionNotFoundException(); + } + + return $dto; + } + + public function save(Request $request, AccommodationBookingDto $dto): void + { + $request->getSession()->set(self::SESSION_KEY, $dto); + } + + public function clear(Request $request): void + { + $request->getSession()->remove(self::SESSION_KEY); + } +} diff --git a/src/Service/BookingSummaryAssembler.php b/src/Service/BookingSummaryAssembler.php index 2684569..401f8f7 100644 --- a/src/Service/BookingSummaryAssembler.php +++ b/src/Service/BookingSummaryAssembler.php @@ -12,7 +12,7 @@ use App\Form\Model\BookingDto; use App\Form\Model\BookingSummaryDto; use App\Form\Model\BookingSummaryPricingDto; use App\Form\Model\BookingSummaryVoucherDto; -use App\Model\BookingSummaryCmsHotelData; +use App\Model\CmsHotelData; use Psr\Log\LoggerInterface; use Symfony\Contracts\Cache\CacheInterface; use Symfony\Contracts\Cache\ItemInterface; @@ -126,7 +126,7 @@ class BookingSummaryAssembler * Data is cached for 1 hour. This method can be called early in the booking * flow to warm the cache. */ - public function getCmsDataForProduct(?string $productCode, ?string $hotelCode): ?BookingSummaryCmsHotelData + public function getCmsDataForProduct(?string $productCode, ?string $hotelCode): ?CmsHotelData { if (null === $hotelCode) { return null; @@ -144,7 +144,7 @@ class BookingSummaryAssembler // Fetch CMS images (nice to have) $images = $this->cmsDataService->getProductImages($productCode, $hotelCode); - return new BookingSummaryCmsHotelData( + return new CmsHotelData( name: $baseHotel?->name, address: $this->formatHotelAddress($baseHotel), images: $images, diff --git a/src/Service/CalendarGridBuilder.php b/src/Service/CalendarGridBuilder.php new file mode 100644 index 0000000..5d80310 --- /dev/null +++ b/src/Service/CalendarGridBuilder.php @@ -0,0 +1,69 @@ +>}> + */ + public function buildMonths(\DateTimeImmutable $from, int $count = 18): array + { + $months = []; + $base = $from->modify('first day of this month')->setTime(0, 0, 0); + + for ($i = 0; $i < $count; $i++) { + $monthStart = $base->modify("+{$i} months"); + $months[] = [ + 'month' => $monthStart, + 'label' => self::MONTH_NAMES[(int) $monthStart->format('n') - 1].' '.$monthStart->format('Y'), + 'weeks' => $this->buildWeeks($monthStart), + ]; + } + + return $months; + } + + /** + * @return list> + */ + private function buildWeeks(\DateTimeImmutable $monthStart): array + { + $monthEnd = $monthStart->modify('last day of this month'); + $monthKey = $monthStart->format('Y-m'); + + // Monday of the week containing the 1st (ISO week: Mon=1) + $isoDay = (int) $monthStart->format('N'); + $gridStart = $monthStart->modify('-'.($isoDay - 1).' days'); + + // Sunday of the week containing the last day + $isoDay = (int) $monthEnd->format('N'); + $gridEnd = $monthEnd->modify('+'.(7 - $isoDay).' days'); + + $weeks = []; + $current = $gridStart; + + while ($current <= $gridEnd) { + $week = []; + for ($d = 0; $d < 7; $d++) { + $week[] = [ + 'date' => $current, + 'inMonth' => $current->format('Y-m') === $monthKey, + ]; + $current = $current->modify('+1 day'); + } + $weeks[] = $week; + } + + return $weeks; + } +} diff --git a/src/Service/CmsDataProvider.php b/src/Service/CmsDataProvider.php index 1d385eb..ab0342d 100644 --- a/src/Service/CmsDataProvider.php +++ b/src/Service/CmsDataProvider.php @@ -2,13 +2,20 @@ namespace App\Service; +use App\Model\CmsHotelData; +use App\Model\CmsRegionData; +use Symfony\Contracts\Cache\CacheInterface; +use Symfony\Contracts\Cache\ItemInterface; use Symfony\Contracts\HttpClient\Exception\ExceptionInterface; use Symfony\Contracts\HttpClient\HttpClientInterface; class CmsDataProvider { - public function __construct(private readonly HttpClientInterface $httpClient, private readonly string $apiKey) - { + public function __construct( + private readonly HttpClientInterface $httpClient, + private readonly CacheInterface $cache, + private readonly string $apiKey, + ) { } /** @@ -27,33 +34,181 @@ class CmsDataProvider return $result['hotel']['images'] ?? null; } + /** + * @return array|null + */ + public function getHotelImages(string $hotelCode): ?array + { + return $this->getHotelDetails($hotelCode)?->images; + } + + public function getHotelDetails(string $hotelCode): ?CmsHotelData + { + $data = $this->fetchHotelDetails($hotelCode); + + if (isset($data['success']) && false === $data['success']) { + return null; + } + + return $this->mapHotelData($data); + } + + /** + * @return array{ + * success?: bool, + * message?: string, + * name?: string, + * address?: string, + * description?: string, + * features?: string, + * room_types?: string, + * additional_information?: string, + * images?: array, + * icons?: array, + * region?: array{ + * name: string, + * latitude: float, + * longitude: float, + * webcam: string, + * ski_area: string, + * ski_area_extended: string, + * description: string, + * news: string, + * length: int, + * altitude: int, + * lifts: int, + * images: array, + * region_maps: list, + * }, + * } + */ + private function fetchHotelDetails(string $hotelCode): array + { + return $this->cache->get( + sprintf('cms_hotel_%s', $hotelCode), + function (ItemInterface $item) use ($hotelCode): array { + $item->expiresAfter(3600); + + try { + $request = $this->httpClient->request('GET', 'api/hotel', [ + 'query' => [ + 'hotel' => $hotelCode, + 'key' => $this->apiKey, + ], + ]); + } catch (ExceptionInterface $e) { + $item->expiresAfter(0); + + return [ + 'success' => false, + 'message' => $e->getMessage(), + ]; + } + + try { + $data = $request->toArray(); + } catch (ExceptionInterface $e) { + $item->expiresAfter(0); + + return [ + 'success' => false, + 'message' => $e->getMessage(), + ]; + } + + return $data; + } + ); + } + + /** + * @param array $data see {@see self::fetchHotelDetails()} for the shape + */ + private function mapHotelData(array $data): CmsHotelData + { + return new CmsHotelData( + name: $data['name'] ?? null, + address: $data['address'] ?? null, + images: $data['images'] ?? null, + description: $data['description'] ?? null, + features: $data['features'] ?? null, + roomTypes: $data['room_types'] ?? null, + additionalInformation: $data['additional_information'] ?? null, + icons: $data['icons'] ?? null, + region: isset($data['region']) ? $this->mapRegionData($data['region']) : null, + ); + } + + /** + * @param array $region see {@see self::fetchHotelDetails()} for the shape + */ + private function mapRegionData(array $region): CmsRegionData + { + return new CmsRegionData( + name: $region['name'] ?? null, + latitude: self::toFloatOrNull($region['latitude'] ?? null), + longitude: self::toFloatOrNull($region['longitude'] ?? null), + webcam: $region['webcam'] ?? null, + skiArea: $region['ski_area'] ?? null, + skiAreaExtended: $region['ski_area_extended'] ?? null, + description: $region['description'] ?? null, + news: $region['news'] ?? null, + length: self::toIntOrNull($region['length'] ?? null), + altitude: self::toIntOrNull($region['altitude'] ?? null), + lifts: self::toIntOrNull($region['lifts'] ?? null), + images: $region['images'] ?? null, + regionMaps: $region['region_maps'] ?? null, + ); + } + + private static function toIntOrNull(mixed $value): ?int + { + return is_numeric($value) ? (int) $value : null; + } + + private static function toFloatOrNull(mixed $value): ?float + { + return is_numeric($value) ? (float) $value : null; + } + /** @return array */ public function getProductDetails(string $productCode, ?string $hotelCode = null): array { - try { - $request = $this->httpClient->request('GET', 'api/product', [ - 'query' => [ - 'product' => $productCode, - 'hotel' => $hotelCode, - 'key' => $this->apiKey, - ], - ]); - } catch (ExceptionInterface $e) { - return [ - 'success' => false, - 'message' => $e->getMessage(), - ]; - } + return $this->cache->get( + sprintf('cms_product_%s_%s', $productCode, $hotelCode ?? ''), + function (ItemInterface $item) use ($productCode, $hotelCode): array { + $item->expiresAfter(3600); - try { - $data = $request->toArray(); - } catch (ExceptionInterface $e) { - return [ - 'success' => false, - 'message' => $e->getMessage(), - ]; - } + try { + $request = $this->httpClient->request('GET', 'api/product', [ + 'query' => [ + 'product' => $productCode, + 'hotel' => $hotelCode, + 'key' => $this->apiKey, + ], + ]); + } catch (ExceptionInterface $e) { + $item->expiresAfter(0); - return $data; + return [ + 'success' => false, + 'message' => $e->getMessage(), + ]; + } + + try { + $data = $request->toArray(); + } catch (ExceptionInterface $e) { + $item->expiresAfter(0); + + return [ + 'success' => false, + 'message' => $e->getMessage(), + ]; + } + + return $data; + } + ); } } diff --git a/src/Service/GroupsPriceCalculator.php b/src/Service/GroupsPriceCalculator.php new file mode 100644 index 0000000..833dbc8 --- /dev/null +++ b/src/Service/GroupsPriceCalculator.php @@ -0,0 +1,308 @@ + short-term surcharge percentages (nights → percent) */ + private const array SHORT_TERM_FACTORS = [1 => 30, 2 => 20, 3 => 10]; + + /** @var array */ + private array $config; + + /** + * @param array $config + */ + public function __construct( + private readonly PriceTimelineBuilder $priceTimelineBuilder, + array $config, + ) { + $this->config = $this->resolveConfig($config); + } + + /** + * @param array $config + * @return array + */ + private function resolveConfig(array $config): array + { + $resolver = new OptionsResolver(); + $resolver->setRequired(['runningCostsEur', 'runningCostsChf', 'undersubscription30Eur', 'undersubscription30Chf', 'undersubscription40Eur', 'undersubscription40Chf']); + $resolver->setAllowedTypes('runningCostsEur', ['int', 'float']); + $resolver->setAllowedTypes('runningCostsChf', ['int', 'float']); + $resolver->setAllowedTypes('undersubscription30Eur', ['int', 'float']); // per-person/night surcharge when effectivePax < 40 + $resolver->setAllowedTypes('undersubscription30Chf', ['int', 'float']); + $resolver->setAllowedTypes('undersubscription40Eur', ['int', 'float']); // per-person/night surcharge when 40 ≤ effectivePax < 50 + $resolver->setAllowedTypes('undersubscription40Chf', ['int', 'float']); + + return $resolver->resolve($config); + } + + /** + * @param AccommodationPrice[] $prices all prices overlapping the booking window + * @param AdditionalService[] $additionalServices only the selected services + * + * @return array{ + * effectivePax: int, + * totalPax: int, + * includedPax: int, + * nights: int, + * basePrice: int, + * additionalPersonsPrice: int, + * shortTermSurcharge: int, + * undersubscriptionSurcharge: int, + * undersubscriptionThreshold: int|null, + * boardPrice: int, + * serviceDetails: list, + * servicesPrice: int, + * runningCosts: int, + * total: int, + * currency: string, + * } + */ + public function calculate( + int $paxCount, + int $minorsCount, + int $nights, + \DateTimeImmutable $dateFrom, + \DateTimeImmutable $dateTo, + array $prices, + ?BoardService $boardService, + array $additionalServices, + string $currency, + ): array { + return $this->doCalculate( + $paxCount, + $minorsCount, + $nights, + $dateFrom, + $dateTo, + $prices, + $boardService?->getPrice(), + array_map( + fn(AdditionalService $s) => [ + 'label' => $s->getLabel() ?? '', + 'price' => $s->getPrice() ?? 0, + 'type' => $s->getType(), + ], + $additionalServices, + ), + $currency, + ); + } + + /** + * Same calculation but using frozen snapshot data from an AccommodationBooking entity + * instead of live catalog entities. + * + * @param AccommodationPrice[] $prices all prices overlapping the booking window + * @param list $additionalServiceSnapshots + * + * @return array{ + * effectivePax: int, + * totalPax: int, + * includedPax: int, + * nights: int, + * basePrice: int, + * additionalPersonsPrice: int, + * shortTermSurcharge: int, + * undersubscriptionSurcharge: int, + * undersubscriptionThreshold: int|null, + * boardPrice: int, + * serviceDetails: list, + * servicesPrice: int, + * runningCosts: int, + * total: int, + * currency: string, + * } + */ + public function calculateFromSnapshots( + int $paxCount, + int $minorsCount, + int $nights, + \DateTimeImmutable $dateFrom, + \DateTimeImmutable $dateTo, + array $prices, + ?int $boardServicePricePerPersonNight, + array $additionalServiceSnapshots, + string $currency, + ): array { + $items = array_map( + fn(array $s) => [ + 'label' => $s['label'], + 'price' => $s['price'], + 'type' => AdditionalServiceType::tryFrom($s['type']) ?? AdditionalServiceType::Flat, + ], + $additionalServiceSnapshots, + ); + + return $this->doCalculate( + $paxCount, + $minorsCount, + $nights, + $dateFrom, + $dateTo, + $prices, + $boardServicePricePerPersonNight, + $items, + $currency, + ); + } + + /** + * @param AccommodationPrice[] $prices + * @param list $additionalItems + * + * @return array{ + * effectivePax: int, + * totalPax: int, + * includedPax: int, + * nights: int, + * basePrice: int, + * additionalPersonsPrice: int, + * shortTermSurcharge: int, + * undersubscriptionSurcharge: int, + * undersubscriptionThreshold: int|null, + * boardPrice: int, + * serviceDetails: list, + * servicesPrice: int, + * runningCosts: int, + * total: int, + * currency: string, + * } + */ + private function doCalculate( + int $paxCount, + int $minorsCount, + int $nights, + \DateTimeImmutable $dateFrom, + \DateTimeImmutable $dateTo, + array $prices, + ?int $boardServicePricePerPersonNight, + array $additionalItems, + string $currency, + ): array { + // Derive effectivePax: children 0–3 don't count, but never drop below includedPax + $firstCandidates = array_values(array_filter( + $prices, + fn(AccommodationPrice $p) => $p->getDateFrom() <= $dateFrom && $p->getDateTo() >= $dateFrom, + )); + $firstWinner = $this->priceTimelineBuilder->resolveWinner($firstCandidates); + $includedPaxFloor = $firstWinner?->getIncludedPax() ?? 1; + $effectivePax = max($paxCount - $minorsCount, $includedPaxFloor); + + // Rules 1 & 2: per-night base price + additional persons. + $boundaryMap = [$dateFrom->format('Y-m-d') => $dateFrom, $dateTo->format('Y-m-d') => $dateTo]; + foreach ($prices as $p) { + $from = $p->getDateFrom(); + $toNext = $p->getDateTo()->modify('+1 day'); + if ($from > $dateFrom && $from < $dateTo) { + $boundaryMap[$from->format('Y-m-d')] = $from; + } + if ($toNext > $dateFrom && $toNext < $dateTo) { + $boundaryMap[$toNext->format('Y-m-d')] = $toNext; + } + } + ksort($boundaryMap); + $sortedBoundaries = array_values($boundaryMap); + + $basePrice = 0; + $additionalPersonsPrice = 0; + $lastWinner = null; + + for ($i = 0, $end = count($sortedBoundaries) - 1; $i < $end; ++$i) { + $segStart = $sortedBoundaries[$i]; + $segNights = $segStart->diff($sortedBoundaries[$i + 1])->days; + + $candidates = array_values(array_filter( + $prices, + fn(AccommodationPrice $p) => $p->getDateFrom() <= $segStart && $p->getDateTo() >= $segStart, + )); + $winner = $this->priceTimelineBuilder->resolveWinner($candidates) ?? $lastWinner; + + if ($winner !== null) { + $lastWinner = $winner; + $basePrice += ($winner->getPricePerNight() ?? 0) * $segNights; + $includedPax = $winner->getIncludedPax() ?? 0; + if ($effectivePax > $includedPax) { + $additionalPersonsPrice += ($effectivePax - $includedPax) * ($winner->getPriceAdditionalPerson() ?? 0) * $segNights; + } + } + } + + // Rule 3: short-term surcharge + $shortTermSurcharge = 0; + if (isset(self::SHORT_TERM_FACTORS[$nights])) { + $shortTermSurcharge = (int) round(($basePrice + $additionalPersonsPrice) * self::SHORT_TERM_FACTORS[$nights] / 100); + } + + // Rule 4: undersubscription surcharge (only when board is selected) + $undersubscriptionSurcharge = 0; + $undersubscriptionThreshold = null; + if ($boardServicePricePerPersonNight !== null) { + $surcharge30 = (int) round(('CHF' === $currency ? $this->config['undersubscription30Chf'] : $this->config['undersubscription30Eur']) * 100); + $surcharge40 = (int) round(('CHF' === $currency ? $this->config['undersubscription40Chf'] : $this->config['undersubscription40Eur']) * 100); + + if ($effectivePax < 40) { + $undersubscriptionSurcharge = $effectivePax * $surcharge30 * $nights; + $undersubscriptionThreshold = 40; + } elseif ($effectivePax < 50) { + $undersubscriptionSurcharge = $effectivePax * $surcharge40 * $nights; + $undersubscriptionThreshold = 50; + } + } + + // Rule 5: board price + $boardPrice = 0; + if ($boardServicePricePerPersonNight !== null) { + $boardPrice = $boardServicePricePerPersonNight * $effectivePax * $nights; + } + + // Rule 6: additional services + $serviceDetails = []; + $servicesPrice = 0; + foreach ($additionalItems as $item) { + $price = match ($item['type']) { + AdditionalServiceType::Flat => $item['price'], + AdditionalServiceType::PerPerson => $item['price'] * $effectivePax, + AdditionalServiceType::PerNight => $item['price'] * $nights, + AdditionalServiceType::PerPersonPerNight => $item['price'] * $effectivePax * $nights, + }; + $servicesPrice += $price; + $serviceDetails[] = ['label' => $item['label'], 'price' => $price]; + } + + // Rule 7: running costs — uses full paxCount (all persons including 0–3 year olds) + $runningCostFactor = (int) round(('CHF' === $currency ? $this->config['runningCostsChf'] : $this->config['runningCostsEur']) * 100); + $runningCosts = $paxCount * $nights * $runningCostFactor; + + $total = $basePrice + $additionalPersonsPrice + $shortTermSurcharge + + $undersubscriptionSurcharge + $boardPrice + $servicesPrice + $runningCosts; + + return [ + 'effectivePax' => $effectivePax, + 'totalPax' => $paxCount, + 'includedPax' => $includedPaxFloor, + 'nights' => $nights, + 'basePrice' => $basePrice, + 'additionalPersonsPrice' => $additionalPersonsPrice, + 'shortTermSurcharge' => $shortTermSurcharge, + 'undersubscriptionSurcharge' => $undersubscriptionSurcharge, + 'undersubscriptionThreshold' => $undersubscriptionThreshold, + 'boardPrice' => $boardPrice, + 'serviceDetails' => $serviceDetails, + 'servicesPrice' => $servicesPrice, + 'runningCosts' => $runningCosts, + 'total' => $total, + 'currency' => $currency, + ]; + } +} diff --git a/src/Service/PriceTimelineBuilder.php b/src/Service/PriceTimelineBuilder.php new file mode 100644 index 0000000..d2c0aad --- /dev/null +++ b/src/Service/PriceTimelineBuilder.php @@ -0,0 +1,174 @@ + OVERRIDE > base) and shorter/later periods + * on ties. When the winner is a DISCOUNT, resolveWinner() is called a second time + * on the null-type candidates to obtain the original base price, which is exposed + * as defaultPricePerNight / defaultPriceAdditionalPerson. + * 3. Consecutive segments whose winner AND default-price entity are both unchanged + * are merged into one row. Tracking the default-price entity separately prevents + * a DISCOUNT row from being incorrectly extended when the underlying base price + * changes mid-discount period. A gap (no winner) resets both trackers. + * + * @param AccommodationPrice[] $prices + * + * @return list + */ + public function buildTimeline( + array $prices, + \DateTimeImmutable $yearStart, + \DateTimeImmutable $yearEnd, + string $currency, + ): array { + if (empty($prices)) { + return []; + } + + $yearEndNext = $yearEnd->modify('+1 day'); + + // Step 1: collect all boundary points, keyed by timestamp for deduplication. + $boundaries = [ + $yearStart->getTimestamp() => $yearStart, + $yearEndNext->getTimestamp() => $yearEndNext, + ]; + foreach ($prices as $price) { + $from = $price->getDateFrom(); + $toNext = $price->getDateTo()->modify('+1 day'); + $boundaries[$from->getTimestamp()] = $from; + $boundaries[$toNext->getTimestamp()] = $toNext; + } + + ksort($boundaries); + $boundaries = array_values($boundaries); + + $rows = []; + $lastWinner = null; + $lastDefault = null; + + // Step 2: walk each segment [start, end) and resolve the effective price. + for ($i = 0, $count = count($boundaries) - 1; $i < $count; $i++) { + $segStart = $boundaries[$i]; + $segEndNext = $boundaries[$i + 1]; + + // Boundaries from prices outside the year are included to correctly detect + // overlaps at the year edges, but the segments themselves are skipped. + if ($segStart < $yearStart || $segStart >= $yearEndNext) { + continue; + } + + $candidates = array_filter( + $prices, + fn($p) => $p->getDateFrom() <= $segStart && $p->getDateTo() >= $segStart, + ); + + $winner = $this->resolveWinner($candidates); + + if ($winner === null) { + // Gap: reset merge state so the next winner always opens a new row. + $lastWinner = null; + $lastDefault = null; + continue; + } + + $defaultWinner = null; + if ($winner->getType() === PriceType::DISCOUNT) { + $defaults = array_filter($candidates, fn($p) => $p->getType() === null); + $defaultWinner = $this->resolveWinner($defaults); + } + + $segDateTo = $segEndNext->modify('-1 day'); + + // Step 3: extend the previous row if both the winner and the default-price entity + // are unchanged; otherwise open a new row. + if ($lastWinner === $winner && $lastDefault === $defaultWinner) { + $lastRow = $rows[count($rows) - 1]; + $rows[count($rows) - 1] = new PriceTimelineItem( + dateFrom: $lastRow->dateFrom, + dateTo: $segDateTo->format('Y-m-d'), + season: $lastRow->season, + includedPax: $lastRow->includedPax, + pricePerNight: $lastRow->pricePerNight, + priceAdditionalPerson: $lastRow->priceAdditionalPerson, + defaultPricePerNight: $lastRow->defaultPricePerNight, + defaultPriceAdditionalPerson: $lastRow->defaultPriceAdditionalPerson, + currency: $lastRow->currency, + type: $lastRow->type, + ); + } else { + $rows[] = new PriceTimelineItem( + dateFrom: $segStart->format('Y-m-d'), + dateTo: $segDateTo->format('Y-m-d'), + season: $winner->getSeason()?->value, + includedPax: $winner->getIncludedPax(), + pricePerNight: round($winner->getPricePerNight() / 100, 2), + priceAdditionalPerson: round($winner->getPriceAdditionalPerson() / 100, 2), + defaultPricePerNight: $defaultWinner !== null ? round($defaultWinner->getPricePerNight() / 100, 2) : null, + defaultPriceAdditionalPerson: $defaultWinner !== null ? round($defaultWinner->getPriceAdditionalPerson() / 100, 2) : null, + currency: $currency, + type: $winner->getType()?->value, + ); + $lastWinner = $winner; + $lastDefault = $defaultWinner; + } + } + + return $rows; + } + + /** + * Resolves which price entity wins for a set of candidates active at the same point in time. + * + * Higher-priority types win: DISCOUNT (2) > OVERRIDE (1) > base/null (0). + * Ties within the same type are broken by preferring the shorter period, then the later start date. + * + * @param AccommodationPrice[] $candidates + */ + public function resolveWinner(array $candidates): ?AccommodationPrice + { + $winner = null; + foreach ($candidates as $candidate) { + if ($winner === null) { + $winner = $candidate; + continue; + } + $cp = $candidate->getType()?->priority() ?? 0; + $wp = $winner->getType()?->priority() ?? 0; + if ($cp > $wp) { + $winner = $candidate; + continue; + } + if ($cp === $wp) { + $cs = $candidate->getDateFrom()->diff($candidate->getDateTo())->days; + $ws = $winner->getDateFrom()->diff($winner->getDateTo())->days; + if ($cs < $ws || ($cs === $ws && $candidate->getDateFrom() > $winner->getDateFrom())) { + $winner = $candidate; + } + } + } + + return $winner; + } +} diff --git a/src/Twig/AppRuntime.php b/src/Twig/AppRuntime.php index afa7b3b..c80ff92 100644 --- a/src/Twig/AppRuntime.php +++ b/src/Twig/AppRuntime.php @@ -209,6 +209,11 @@ class AppRuntime implements RuntimeExtensionInterface $labels = []; foreach ($form->children as $child) { + // Buttons (e.g. submit buttons) aren't validatable fields and have no errors/valid vars. + if (!\array_key_exists('errors', $child->vars)) { + continue; + } + $hasErrors = \count($child->vars['errors']) > 0; $hasInvalidChildren = false === $child->vars['valid']; diff --git a/src/Twig/Components/Calendar.php b/src/Twig/Components/Calendar.php new file mode 100644 index 0000000..4da9a08 --- /dev/null +++ b/src/Twig/Components/Calendar.php @@ -0,0 +1,319 @@ + 'Januar', 2 => 'Februar', 3 => 'März', 4 => 'April', + 5 => 'Mai', 6 => 'Juni', 7 => 'Juli', 8 => 'August', + 9 => 'September', 10 => 'Oktober', 11 => 'November', 12 => 'Dezember', + ]; + + private const TYPE_LABELS = [ + 'flat' => 'pauschal', + 'per_person' => 'p.P.', + 'per_night' => 'p.Nacht', + 'per_person_per_night' => 'p.P./Nacht', + ]; + + public Accommodation $accommodation; + public ?string $startMonth = null; + + /** @var list */ + public array $months = []; + public string $prevMonth = ''; + public string $nextMonth = ''; + public string $prevLabel = ''; + public string $nextLabel = ''; + + public function __construct( + private readonly ContingentsClient $contingentsClient, + private readonly CacheInterface $cache, + ) { + } + + public function mount(Accommodation $accommodation, ?string $startMonth = null): void + { + $this->accommodation = $accommodation; + $this->startMonth = $startMonth; + + if ($startMonth !== null && preg_match('/^\d{4}-\d{2}$/', $startMonth)) { + $start = CarbonImmutable::createFromFormat('Y-m-d', $startMonth . '-01'); + } else { + $allDates = $this->collectAllDates(); + $start = empty($allDates) + ? CarbonImmutable::now()->startOfMonth() + : $this->determineStartMonth($allDates); + } + + $map = $this->buildCoverageMap(); + $blockedDates = $this->fetchBlockedDates( + $accommodation->getCalendarCode() ?? '', + $start->format('Y-m-d'), + $start->addMonths(3)->subDay()->format('Y-m-d'), + ); + + $months = []; + $current = $start; + for ($i = 0; $i < 3; $i++) { + $months[] = $this->buildMonth($current, $map, $blockedDates); + $current = $current->addMonth(); + } + + $this->months = $months; + + $prevStart = $start->subMonths(3); + $prevEnd = $prevStart->addMonths(2); + $this->prevMonth = $prevStart->format('Y-m'); + $this->prevLabel = self::MONTHS[$prevStart->month] . ' – ' . self::MONTHS[$prevEnd->month] . ' ' . $prevEnd->year; + + $nextStart = $start->addMonths(3); + $nextEnd = $nextStart->addMonths(2); + $this->nextMonth = $nextStart->format('Y-m'); + $this->nextLabel = self::MONTHS[$nextStart->month] . ' – ' . self::MONTHS[$nextEnd->month] . ' ' . $nextEnd->year; + } + + /** + * @return array keyed by Y-m-d, only BLOCKED dates present + */ + private function fetchBlockedDates(string $hotelCode, string $dateFrom, string $dateTo): array + { + if ($hotelCode === '') { + return []; + } + + try { + $cacheKey = sprintf('contingents_calendar_%s_%s_%s', $hotelCode, $dateFrom, $dateTo); + $response = $this->cache->get( + $cacheKey, + function (ItemInterface $item) use ($hotelCode, $dateFrom, $dateTo) { + $item->expiresAfter(3600); + + return $this->contingentsClient->getContingentCalendar($hotelCode, $dateFrom, $dateTo); + }, + ); + } catch (BpnConnectException|InvalidArgumentException) { + return []; + } + + $blocked = []; + foreach ($response->data as $entry) { + if ($entry->status === ContingentStatus::Blocked) { + $blocked[(new \DateTimeImmutable($entry->date))->format('Y-m-d')] = true; + } + } + + return $blocked; + } + + /** + * @return CarbonImmutable[] + */ + private function collectAllDates(): array + { + $dates = []; + + foreach ($this->accommodation->getAccommodationPrices() as $price) { + if ($price->getDateFrom() !== null) { + $dates[] = CarbonImmutable::instance($price->getDateFrom()); + } + if ($price->getDateTo() !== null) { + $dates[] = CarbonImmutable::instance($price->getDateTo()); + } + } + foreach ($this->accommodation->getBoardServices() as $service) { + if ($service->getDateFrom() !== null) { + $dates[] = CarbonImmutable::instance($service->getDateFrom()); + } + if ($service->getDateTo() !== null) { + $dates[] = CarbonImmutable::instance($service->getDateTo()); + } + } + foreach ($this->accommodation->getAdditionalServices() as $service) { + if ($service->getDateFrom() !== null) { + $dates[] = CarbonImmutable::instance($service->getDateFrom()); + } + if ($service->getDateTo() !== null) { + $dates[] = CarbonImmutable::instance($service->getDateTo()); + } + } + + return $dates; + } + + /** + * @param CarbonImmutable[] $dates + */ + private function determineStartMonth(array $dates): CarbonImmutable + { + $earliest = min($dates); + $cutoff = CarbonImmutable::now()->subDays(60); + + if ($earliest >= $cutoff) { + return $earliest->startOfMonth(); + } + + return CarbonImmutable::now()->startOfMonth(); + } + + /** + * @return array + */ + private function buildCoverageMap(): array + { + $map = []; + + foreach ($this->accommodation->getAccommodationPrices() as $price) { + if ($price->getDateFrom() === null || $price->getDateTo() === null) { + continue; + } + + $priceFormatted = number_format($price->getPricePerNight() / 100, 2, ',', '.') . ' €'; + $label = sprintf('Preis: %s/Nacht (min. %d Nächte)', $priceFormatted, $price->getMinNights()); + + $day = CarbonImmutable::instance($price->getDateFrom()); + $end = CarbonImmutable::instance($price->getDateTo()); + $span = $day->diffInDays($end); + $priority = $price->getType()?->priority() ?? 0; + $limit = $day->addYears(3); + + // $end is the last night (inclusive), so <= is correct + while ($day <= $end && $day <= $limit) { + $key = $day->format('Y-m-d'); + $map[$key] ??= ['price' => null, 'board' => null, 'additional' => null]; + $existing = $map[$key]['price']; + $replace = $existing === null + || $priority > $existing['priority'] + || ($priority === $existing['priority'] && $span < $existing['span']); + if ($replace) { + $map[$key]['price'] = ['label' => $label, 'span' => $span, 'priority' => $priority]; + } + $day = $day->addDay(); + } + } + + foreach ($this->accommodation->getBoardServices() as $service) { + if ($service->getDateFrom() === null || $service->getDateTo() === null) { + continue; + } + + $label = 'Verpflegung: ' . $service->getLabel(); + + $day = CarbonImmutable::instance($service->getDateFrom()); + $end = CarbonImmutable::instance($service->getDateTo()); + $span = $day->diffInDays($end); + $limit = $day->addYears(3); + + while ($day <= $end && $day <= $limit) { + $key = $day->format('Y-m-d'); + $map[$key] ??= ['price' => null, 'board' => null, 'additional' => null]; + if ($map[$key]['board'] === null || $span < $map[$key]['board']['span']) { + $map[$key]['board'] = ['label' => $label, 'span' => $span]; + } + $day = $day->addDay(); + } + } + + foreach ($this->accommodation->getAdditionalServices() as $service) { + if ($service->getDateFrom() === null || $service->getDateTo() === null) { + continue; + } + + $typeLabel = $service->getType() !== null + ? self::TYPE_LABELS[$service->getType()->value] + : ''; + $label = sprintf('Zusatz: %s%s', $service->getLabel(), $typeLabel !== '' ? ' (' . $typeLabel . ')' : ''); + + $day = CarbonImmutable::instance($service->getDateFrom()); + $end = CarbonImmutable::instance($service->getDateTo()); + $span = $day->diffInDays($end); + $limit = $day->addYears(3); + + while ($day <= $end && $day <= $limit) { + $key = $day->format('Y-m-d'); + $map[$key] ??= ['price' => null, 'board' => null, 'additional' => null]; + if ($map[$key]['additional'] === null || $span < $map[$key]['additional']['span']) { + $map[$key]['additional'] = ['label' => $label, 'span' => $span]; + } + $day = $day->addDay(); + } + } + + return $map; + } + + /** + * @param array $map + * @param array $blockedDates + */ + private function buildMonth(CarbonImmutable $month, array $map, array $blockedDates): CalendarMonth + { + $start = $month->startOfMonth(); + $today = CarbonImmutable::now()->format('Y-m-d'); + + // Mon=0 … Sun=6 (Carbon: 0=Sunday, 1=Monday … 6=Saturday) + $firstDow = ($start->dayOfWeek + 6) % 7; + + $days = []; + for ($d = 1; $d <= $start->daysInMonth; $d++) { + $dateStr = $month->format('Y-m') . '-' . str_pad((string) $d, 2, '0', STR_PAD_LEFT); + $coverage = $map[$dateStr] ?? []; + + $parts = []; + if (isset($coverage['price'])) { + $parts[] = $coverage['price']['label']; + } + if (isset($coverage['board'])) { + $parts[] = $coverage['board']['label']; + } + if (isset($coverage['additional'])) { + $parts[] = $coverage['additional']['label']; + } + + $isBlocked = isset($blockedDates[$dateStr]); + if ($isBlocked) { + $parts[] = 'Buchungsstopp'; + } + + $days[$d] = new CalendarDay( + date: $dateStr, + hasPrice: isset($coverage['price']), + hasBoard: isset($coverage['board']), + hasAdditional: isset($coverage['additional']), + isBlocked: $isBlocked, + tooltip: !empty($parts) ? implode(' | ', $parts) : null, + isToday: $dateStr === $today, + ); + } + + return new CalendarMonth( + label: self::MONTHS[$month->month] . ' ' . $month->year, + firstDow: $firstDow, + days: $days, + ); + } +} diff --git a/symfony.lock b/symfony.lock index 381463e..22dc9e2 100644 --- a/symfony.lock +++ b/symfony.lock @@ -358,6 +358,18 @@ "config/packages/uid.yaml" ] }, + "symfony/ux-twig-component": { + "version": "2.36", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "main", + "version": "2.13", + "ref": "f367ae2a1faf01c503de2171f1ec22567febeead" + }, + "files": [ + "config/packages/twig_component.yaml" + ] + }, "symfony/validator": { "version": "6.4", "recipe": { diff --git a/templates/_partials/_flashes_admin.html.twig b/templates/_partials/_flashes_admin.html.twig new file mode 100644 index 0000000..ed4261b --- /dev/null +++ b/templates/_partials/_flashes_admin.html.twig @@ -0,0 +1,9 @@ +{% if app.session.flashBag.peek('error')|length > 0 %} + {% include '_partials/_toast.html.twig' with { level: 'warning', messages: app.flashes('error') } %} +{% endif %} +{% if app.session.flashBag.peek('success')|length > 0 %} + {% include '_partials/_toast.html.twig' with { level: 'success', messages: app.flashes('success') } %} +{% endif %} +{% if app.session.flashBag.peek('info')|length > 0 %} + {% include '_partials/_toast.html.twig' with { level: 'info', messages: app.flashes('info') } %} +{% endif %} diff --git a/templates/_partials/_menu.html.twig b/templates/_partials/_menu.html.twig index 47c2e74..e9e77c8 100644 --- a/templates/_partials/_menu.html.twig +++ b/templates/_partials/_menu.html.twig @@ -41,9 +41,10 @@ {% import _self as knp_menu %} {{ block('label') }} @@ -73,7 +74,7 @@ {% block label %} {% if item.extras.icon is defined %} - {{ icon(item.extras.icon, 'h-5 w-5 shrink-0 text-gray-400') }} + {{ icon(item.extras.icon, 'h-5 w-5 shrink-0 ' ~ ((matcher.isCurrent(item) or matcher.isAncestor(item)) ? 'text-gray-600' : 'text-gray-400')) }} {{ item.label|raw }} {% else %} {{ item.label|raw }} diff --git a/templates/_partials/_toast.html.twig b/templates/_partials/_toast.html.twig new file mode 100644 index 0000000..e5785c3 --- /dev/null +++ b/templates/_partials/_toast.html.twig @@ -0,0 +1,10 @@ +{% apply spaceless %} + {% for message in messages %} + {% if message is iterable %} + {% set message = message.id | trans(message.parameters | default({}), message.domain | default(null), message.locale | default(null)) | raw %} + {% else %} + {% set message = message | trans | raw %} + {% endif %} +

+ {% endfor %} +{% endapply %} diff --git a/templates/admin/accommodation/_calendar_section.html.twig b/templates/admin/accommodation/_calendar_section.html.twig new file mode 100644 index 0000000..e28bc0f --- /dev/null +++ b/templates/admin/accommodation/_calendar_section.html.twig @@ -0,0 +1 @@ + diff --git a/templates/admin/accommodation/_form.html.twig b/templates/admin/accommodation/_form.html.twig new file mode 100644 index 0000000..c86978b --- /dev/null +++ b/templates/admin/accommodation/_form.html.twig @@ -0,0 +1,305 @@ +{% form_theme form 'forms_admin.html.twig' %} + +{{ form_start(form) }} +
+
+
+ {{ form_row(form.name) }} +
+ {{ form_row(form.calendarCode) }} + {{ form_row(form.cmsCode) }} + {{ form_row(form.maxAdolescentAge) }} + {{ form_row(form.currency) }} +
+ {% if cmsData is not null and cmsData.name is not null %} +
+ {% if cmsData.images.resized.m | length > 0 %} + {% set image = cmsData.images.resized.m[0] %} +
+ {{ image.alt }} +
+ {% endif %} +
+ {{ cmsData.name }} +
+ {{ cmsData.address | default('-') | nl2br }} +
+
+ {% else %} +
+
+ +
+
+ CMS-Code falsch oder Haus in TYPO3 nicht angelegt +
+
+ {% endif %} +
+
+ + zurück + + +
+{{ form_rest(form) }} +{{ form_end(form) }} + +
+ + + +
+ +
+

+ Preise +

+
+
+ + + + + + + + + + + + + + + + + {% for price in accommodation.accommodationPrices %} + + + + + + + + + + + + + {% else %} + + + + {% endfor %} + +
+ von + + bis + + Typ + + Saison + + Pax bis + + Mindestmiete pro Nacht + + weitere Personen pro Nacht + + Unterbel. + + Kurzzeit +
+ {{ price.dateFrom | date('d.m.Y') }} + + {{ price.dateTo | date('d.m.Y') }} + + {% if price.type is not null %} + {% if price.type.value == 'discount' %} + {{ icon('discount', 'w-5 h-5') }} + {% elseif price.type.value == 'override' %} + {{ icon('stack', 'w-5 h-5') }} + {% endif %} + {% endif %} + + {{ price.season.token | trans }} + + {{ price.includedPax }} + + {{ (price.pricePerNight / 100) | format_currency(accommodation.currency) }} + + {{ (price.priceAdditionalPerson / 100) | format_currency(accommodation.currency) }} + + {% if price.acceptUndersubscription %} + {{ icon('check', 'w-4 h-4') }} + {% endif %} + + {% if price.acceptShortterm %} + {{ icon('check', 'w-4 h-4') }} + {% endif %} + + + + bearbeiten + + + duplizieren + + + löschen + + +
+ Keine Daten +
+
+
+ +
+ +
+ +
+

+ Verpflegungsleistungen +

+
+
+ + + + + + + + + + + {% for service in accommodation.boardServices %} + + + + + + + {% else %} + + + + {% endfor %} + +
+ Datums-Bereich + + Bezeichnung + + Preis pro Person/Nacht +
+ {{ service.dateFrom | date('d.m.Y') }} - {{ service.dateTo | date('d.m.Y') }} + + {{ service.label }} + + {{ (service.price / 100) | format_currency(accommodation.currency) }} + + + + bearbeiten + + + duplizieren + + + löschen + + +
+ Keine Daten +
+
+
+ +
+ +
+ +
+

+ Optionale Zusatzleistungen +

+
+
+ + + + + + + + + + + + {% for service in accommodation.additionalServices %} + + + + + + + + {% else %} + + + + {% endfor %} + +
+ Datums-Bereich + + Bezeichnung + + Preistyp + + Preis +
+ {{ service.dateFrom | date('d.m.Y') }} - {{ service.dateTo | date('d.m.Y') }} + + {{ service.label }} + + {{ service.type.label | trans }} + + {{ (service.price / 100) | format_currency(accommodation.currency) }} + + + + bearbeiten + + + duplizieren + + + löschen + + +
+ Keine Daten +
+
+
+ +
diff --git a/templates/admin/accommodation/create.html.twig b/templates/admin/accommodation/create.html.twig new file mode 100644 index 0000000..1b46b6d --- /dev/null +++ b/templates/admin/accommodation/create.html.twig @@ -0,0 +1,6 @@ +{% extends 'layout_admin.html.twig' %} + +{% block content %} + Gruppenhaus neu + {% include 'admin/accommodation/_form.html.twig' %} +{% endblock %} diff --git a/templates/admin/accommodation/edit.html.twig b/templates/admin/accommodation/edit.html.twig new file mode 100644 index 0000000..6cdc4e2 --- /dev/null +++ b/templates/admin/accommodation/edit.html.twig @@ -0,0 +1,6 @@ +{% extends 'layout_admin.html.twig' %} + +{% block content %} + Gruppenhaus {{ accommodation.name }} + {% include 'admin/accommodation/_form.html.twig' %} +{% endblock %} diff --git a/templates/admin/accommodation/index.html.twig b/templates/admin/accommodation/index.html.twig new file mode 100644 index 0000000..5047567 --- /dev/null +++ b/templates/admin/accommodation/index.html.twig @@ -0,0 +1,77 @@ +{% extends 'layout_admin.html.twig' %} + +{% block content %} + Gruppenhäuser +
+
+ + + + + + + + + + + + {% for accommodation in accommodations %} + + + + + + + + {% else %} + + + + {% endfor %} + +
+ Name + + Code + + erstellt + + aktualisiert +
+ + {{ accommodation.name }} + + + {{ accommodation.calendarCode }} + + {{ accommodation.createdAt | date('d.m.Y, H:i') }} + + {% if accommodation.updatedAt is not null %} + {{ accommodation.updatedAt | date('d.m.Y, H:i') }} + {% else %} + - + {% endif %} + + + + bearbeiten + + + löschen + + +
+ Keine Daten... +
+
+
+
+ +
+{% endblock %} diff --git a/templates/admin/accommodation/modal_create.html.twig b/templates/admin/accommodation/modal_create.html.twig new file mode 100644 index 0000000..b9bbb6b --- /dev/null +++ b/templates/admin/accommodation/modal_create.html.twig @@ -0,0 +1,22 @@ +{% extends 'htmx_modal_admin.html.twig' %} +{% form_theme form 'forms_admin.html.twig' %} + +{% block content %} +
+ Neues Gruppenhaus +
+ {{ form_start(form) }} +
+ {{ form_row(form.name) }} + {{ form_row(form.calendarCode) }} + {{ form_row(form.maxAdolescentAge) }} + {{ form_row(form.currency) }} +
+
+ +
+ {{ form_rest(form) }} + {{ form_end(form) }} +{% endblock %} diff --git a/templates/admin/accommodation/modal_delete.html.twig b/templates/admin/accommodation/modal_delete.html.twig new file mode 100644 index 0000000..730d676 --- /dev/null +++ b/templates/admin/accommodation/modal_delete.html.twig @@ -0,0 +1,7 @@ +{% extends 'htmx_confirmation_modal.html.twig' %} + +{% block content %} +
+ Möchtest du das Gruppenhaus {{ accommodation.name }} wirklich löschen? +
+{% endblock %} diff --git a/templates/admin/accommodation_booking/create.html.twig b/templates/admin/accommodation_booking/create.html.twig new file mode 100644 index 0000000..f9d11de --- /dev/null +++ b/templates/admin/accommodation_booking/create.html.twig @@ -0,0 +1,53 @@ +{% extends 'layout_admin.html.twig' %} + +{% block content %} + Neue Buchung + + {% form_theme form 'forms_admin.html.twig' %} + + {{ form_start(form) }} +
+
+ {{ form_row(form.accommodation) }} +
+ +

Kontaktdaten

+ {{ form_row(form.groupName) }} + {{ form_row(form.salutation) }} + {{ form_row(form.firstName) }} + {{ form_row(form.lastName) }} + {{ form_row(form.email) }} + {{ form_row(form.phone) }} + {{ form_row(form.street) }} + {{ form_row(form.zip) }} + {{ form_row(form.city) }} + +

Reisedaten

+ {{ form_row(form.dateFrom) }} + {{ form_row(form.dateTo) }} + {{ form_row(form.paxCount) }} + {{ form_row(form.minorsCount) }} + {{ form_row(form.childrenCount) }} + +

Status & Rabatt

+
+ {{ form_row(form.isInquiry) }} +
+ {{ form_row(form.accommodationDiscount) }} + {{ form_row(form.boardServiceDiscount) }} + {{ form_row(form.additionalServicesDiscount) }} +
+ {{ form_row(form.remarks) }} +
+
+
+ + zurück + + +
+ {{ form_rest(form) }} + {{ form_end(form) }} +{% endblock %} diff --git a/templates/admin/accommodation_booking/edit.html.twig b/templates/admin/accommodation_booking/edit.html.twig new file mode 100644 index 0000000..172f15f --- /dev/null +++ b/templates/admin/accommodation_booking/edit.html.twig @@ -0,0 +1,67 @@ +{% extends 'layout_admin.html.twig' %} + +{% block content %} + Buchung {{ booking.groupName }} +

{{ booking.accommodation.name }}

+ + {% form_theme form 'forms_admin.html.twig' %} + + {{ form_start(form) }} +
+

Kontaktdaten

+ {{ form_row(form.groupName) }} + {{ form_row(form.salutation) }} + {{ form_row(form.firstName) }} + {{ form_row(form.lastName) }} + {{ form_row(form.email) }} + {{ form_row(form.phone) }} + {{ form_row(form.street) }} + {{ form_row(form.zip) }} + {{ form_row(form.city) }} + +

Reisedaten

+ {{ form_row(form.dateFrom) }} + {{ form_row(form.dateTo) }} + {{ form_row(form.paxCount) }} + {{ form_row(form.minorsCount) }} + {{ form_row(form.childrenCount) }} + + {% if form.boardService is defined or form.selectedAdditionalServices is defined %} +

Leistungen

+ {% if form.boardService is defined %} + {{ form_row(form.boardService) }} + {% endif %} + {% if form.selectedAdditionalServices is defined %} +
+ {{ form_row(form.selectedAdditionalServices) }} +
+ {% endif %} + {% endif %} + +

Status & Rabatt

+
+ {{ form_row(form.isInquiry) }} +
+ {% if booking.acceptedAt is not null %} +

+ Angenommen am {{ booking.acceptedAt | date('d.m.Y, H:i') }} +

+ {% endif %} + {{ form_row(form.accommodationDiscount) }} + {{ form_row(form.boardServiceDiscount) }} + {{ form_row(form.additionalServicesDiscount) }} +
+ {{ form_row(form.remarks) }} +
+
+
+ + zurück + + +
+ {{ form_rest(form) }} + {{ form_end(form) }} +{% endblock %} diff --git a/templates/admin/accommodation_booking/index.html.twig b/templates/admin/accommodation_booking/index.html.twig new file mode 100644 index 0000000..04c88e6 --- /dev/null +++ b/templates/admin/accommodation_booking/index.html.twig @@ -0,0 +1,100 @@ +{% extends 'layout_admin.html.twig' %} + +{% block content %} + Buchungen & Anfragen +
+
+ + + + + + + + + + + + + + + {% for booking in pagination %} + + + + + + + + + + + {% else %} + + + + {% endfor %} + +
+ {{ knp_pagination_sortable(pagination, 'Eingang', 'booking.createdAt') }} + + {{ knp_pagination_sortable(pagination, 'Gruppenhaus', 'accommodation.name') }} + + {{ knp_pagination_sortable(pagination, 'Gruppe', 'booking.groupName') }} + + {{ knp_pagination_sortable(pagination, 'Anreise', 'booking.dateFrom') }} + + Personen + + Status + + Rabatt +
+ {{ booking.createdAt | date('d.m.Y, H:i') }} + + {{ booking.accommodation.name }} + + {{ booking.groupName }} + + {{ booking.dateFrom | date('d.m.Y') }} – {{ booking.dateTo | date('d.m.Y') }} + + {{ booking.paxCount }} + + {% if booking.isInquiry %} + Anfrage + {% else %} + Buchung + {% endif %} + + {% set discounts = [] %} + {% if booking.accommodationDiscount is not null %} + {% set discounts = discounts | merge(['Unterkunft ' ~ booking.accommodationDiscount ~ '%']) %} + {% endif %} + {% if booking.boardServiceDiscount is not null %} + {% set discounts = discounts | merge(['Verpflegung ' ~ booking.boardServiceDiscount ~ '%']) %} + {% endif %} + {% if booking.additionalServicesDiscount is not null %} + {% set discounts = discounts | merge(['Zusatzleistungen ' ~ booking.additionalServicesDiscount ~ '%']) %} + {% endif %} + {{ discounts | length > 0 ? (discounts | join(', ')) : '–' }} + + + + Details + + + bearbeiten + + +
+ Keine Daten... +
+ {{ knp_pagination_render(pagination) }} +
+
+ +{% endblock %} diff --git a/templates/admin/accommodation_booking/modal_generate_access_link.html.twig b/templates/admin/accommodation_booking/modal_generate_access_link.html.twig new file mode 100644 index 0000000..edd3e83 --- /dev/null +++ b/templates/admin/accommodation_booking/modal_generate_access_link.html.twig @@ -0,0 +1,8 @@ +{% extends 'htmx_confirmation_modal.html.twig' %} + +{% block content %} +
+ Möchtest du für {{ booking.groupName }} einen neuen Zugangslink generieren? + Ein zuvor generierter Link wird dadurch ungültig. +
+{% endblock %} diff --git a/templates/admin/accommodation_booking/modal_send_access_link.html.twig b/templates/admin/accommodation_booking/modal_send_access_link.html.twig new file mode 100644 index 0000000..927091f --- /dev/null +++ b/templates/admin/accommodation_booking/modal_send_access_link.html.twig @@ -0,0 +1,8 @@ +{% extends 'htmx_confirmation_modal.html.twig' %} + +{% block content %} +
+ Möchtest du den aktuellen Zugangslink für {{ booking.groupName }} an + {{ booking.email }} senden? +
+{% endblock %} diff --git a/templates/admin/accommodation_booking/show.html.twig b/templates/admin/accommodation_booking/show.html.twig new file mode 100644 index 0000000..87f3913 --- /dev/null +++ b/templates/admin/accommodation_booking/show.html.twig @@ -0,0 +1,237 @@ +{% extends 'layout_admin.html.twig' %} + +{% block content %} + + {% if booking.isInquiry %}Anfrage{% else %}Buchung{% endif %} + {{ booking.groupName }} + + +
+
+

Kontakt

+
+
Gruppenname
+
{{ booking.groupName }}
+
Anrede
+
{{ booking.salutation | default('–') }}
+
Name
+
{{ booking.firstName }} {{ booking.lastName }}
+
E-Mail
+
{{ booking.email }}
+
Telefon
+
{{ booking.phone | default('–') }}
+
Adresse
+
+ {% if booking.street %} + {{ booking.street }}
+ {{ booking.zip }} {{ booking.city }} + {% else %} + – + {% endif %} +
+
+
+ +
+

Reisedaten

+
+
Gruppenhaus
+
{{ booking.accommodation.name }}
+
Anreise
+
{{ booking.dateFrom | date('d.m.Y') }}
+
Abreise
+
{{ booking.dateTo | date('d.m.Y') }}
+
Nächte
+
{{ booking.nights }}
+
Anzahl Personen
+
{{ booking.paxCount }}
+ {% if booking.minorsCount > 0 %} +
davon Kinder (0–3 Jahre)
+
{{ booking.minorsCount }}
+ {% endif %} + {% if booking.childrenCount > 0 %} +
davon Kinder (4–{{ booking.accommodation.maxAdolescentAge }} Jahre)
+
{{ booking.childrenCount }}
+ {% endif %} +
Status
+
{% if booking.isInquiry %}Anfrage{% else %}Buchung{% endif %}
+ {% if booking.acceptedAt is not null %} +
Angenommen am
+
{{ booking.acceptedAt | date('d.m.Y, H:i') }}
+ {% endif %} +
+
+ + {% if booking.boardServiceLabel or booking.additionalServices | length > 0 %} +
+

Gebuchte Leistungen

+
+ {% if booking.boardServiceLabel %} +
Verpflegung
+
{{ booking.boardServiceLabel }}
+ {% endif %} + {% for service in booking.additionalServices %} +
{{ loop.first ? 'Zusatzleistungen' : '' }}
+
{{ service.label }}
+ {% endfor %} +
+
+ {% endif %} + + {% if priceBreakdown is not null %} +
+

Preise

+ {% set currency = booking.pricingCurrency ?? priceBreakdown.currency %} + + {% if priceBreakdown.basePrice > 0 %} + + + + + {% endif %} + {% if priceBreakdown.additionalPersonsPrice > 0 %} + + + + + {% endif %} + {% if priceBreakdown.shortTermSurcharge > 0 %} + + + + + {% endif %} + {% if priceBreakdown.boardPrice > 0 %} + + + + + {% endif %} + {% if priceBreakdown.undersubscriptionSurcharge > 0 %} + + + + + {% endif %} + {% for service in priceBreakdown.serviceDetails %} + {% if service.price > 0 %} + + + + + {% endif %} + {% endfor %} + {% if priceBreakdown.runningCosts > 0 %} + + + + + {% endif %} + + + + + {% if booking.accommodationDiscount is not null or booking.boardServiceDiscount is not null or booking.additionalServicesDiscount is not null %} + {% if booking.accommodationDiscount is not null %} + {% set accommodationDiscountAmount = ((priceBreakdown.basePrice + priceBreakdown.additionalPersonsPrice) * booking.accommodationDiscount / 100) | round %} + + + + + {% endif %} + {% if booking.boardServiceDiscount is not null %} + {% set boardDiscountAmount = (priceBreakdown.boardPrice * booking.boardServiceDiscount / 100) | round %} + + + + + {% endif %} + {% if booking.additionalServicesDiscount is not null %} + {% set servicesDiscountAmount = (priceBreakdown.servicesPrice * booking.additionalServicesDiscount / 100) | round %} + + + + + {% endif %} + + + + + {% endif %} +
+ Basispreis + für {{ priceBreakdown.includedPax }} Pers. + {{ (priceBreakdown.basePrice / 100) | format_currency(currency) }}
+ Aufpreis Personenzahl + für {{ priceBreakdown.effectivePax - priceBreakdown.includedPax }} Pers. + {{ (priceBreakdown.additionalPersonsPrice / 100) | format_currency(currency) }}
Aufpreis Kurzzeit{{ (priceBreakdown.shortTermSurcharge / 100) | format_currency(currency) }}
Verpflegung{{ (priceBreakdown.boardPrice / 100) | format_currency(currency) }}
Verpflegungs-Aufschlag für Gruppen unter {{ priceBreakdown.undersubscriptionThreshold }} Personen{{ (priceBreakdown.undersubscriptionSurcharge / 100) | format_currency(currency) }}
{{ service.label }}{{ (service.price / 100) | format_currency(currency) }}
Strom- und Abfallgebühren{{ (priceBreakdown.runningCosts / 100) | format_currency(currency) }}
+ Gesamtpreis + zzgl. ortsabhängiger Gebühren + {{ (priceBreakdown.total / 100) | format_currency(currency) }}
Rabatt Unterkunft {{ booking.accommodationDiscount }} %– {{ (accommodationDiscountAmount / 100) | format_currency(currency) }}
Rabatt Verpflegung {{ booking.boardServiceDiscount }} %– {{ (boardDiscountAmount / 100) | format_currency(currency) }}
Rabatt Zusatzleistungen {{ booking.additionalServicesDiscount }} %– {{ (servicesDiscountAmount / 100) | format_currency(currency) }}
Gesamtpreis nach Rabatt{{ ((booking.totalPrice ?? priceBreakdown.total) / 100) | format_currency(currency) }}
+
+ {% endif %} + + {% if booking.remarks %} +
+

Bemerkungen

+

{{ booking.remarks | nl2br }}

+
+ {% endif %} +
+ +
+ Eingegangen: {{ booking.createdAt | date('d.m.Y, H:i') }} + {% if booking.updatedAt is not null and booking.updatedAt != booking.createdAt %} + · Aktualisiert: {{ booking.updatedAt | date('d.m.Y, H:i') }} + {% endif %} +
+ +
+

Zugangslink

+ {% if accessLink %} + +

+ Gültig bis {{ accessLinkExpiresAt | date('d.m.Y') }} + {% if accessLinkExpiresAt < date() %} + (abgelaufen) + {% endif %} +

+ {% else %} +

Es wurde noch kein Zugangslink generiert.

+ {% endif %} +
+ + {% if accessLink %} + + {% endif %} +
+
+ + +{% endblock %} diff --git a/templates/admin/accommodation_price/_form.html.twig b/templates/admin/accommodation_price/_form.html.twig new file mode 100644 index 0000000..9c950a8 --- /dev/null +++ b/templates/admin/accommodation_price/_form.html.twig @@ -0,0 +1,29 @@ +{% form_theme form 'forms_admin.html.twig' %} + +{{ form_start(form) }} +
+
+ {{ form_row(form.dateFrom) }} + {{ form_row(form.dateTo) }} + {{ form_row(form.season) }} + {{ form_row(form.type) }} +
+ {{ form_row(form.pricePerNight) }} + {{ form_row(form.priceAdditionalPerson) }} + {{ form_row(form.includedPax) }} + {{ form_row(form.minNights) }} + {{ form_row(form.acceptUndersubscription) }} + {{ form_row(form.acceptShortTerm) }} +
+
+ + zurück + + +
+{{ form_rest(form) }} +{{ form_end(form) }} diff --git a/templates/admin/accommodation_price/create.html.twig b/templates/admin/accommodation_price/create.html.twig new file mode 100644 index 0000000..03b47f7 --- /dev/null +++ b/templates/admin/accommodation_price/create.html.twig @@ -0,0 +1,6 @@ +{% extends 'layout_admin.html.twig' %} + +{% block content %} + Preis neu für Gruppenhaus {{ accommodation.name }} + {% include 'admin/accommodation_price/_form.html.twig' %} +{% endblock %} diff --git a/templates/admin/accommodation_price/edit.html.twig b/templates/admin/accommodation_price/edit.html.twig new file mode 100644 index 0000000..b23557f --- /dev/null +++ b/templates/admin/accommodation_price/edit.html.twig @@ -0,0 +1,6 @@ +{% extends 'layout_admin.html.twig' %} + +{% block content %} + Preis für Gruppenhaus {{ accommodation.name }}{% if duplicate %} duplizieren{% endif %} + {% include 'admin/accommodation_price/_form.html.twig' %} +{% endblock %} diff --git a/templates/admin/accommodation_price/modal_delete.html.twig b/templates/admin/accommodation_price/modal_delete.html.twig new file mode 100644 index 0000000..17951be --- /dev/null +++ b/templates/admin/accommodation_price/modal_delete.html.twig @@ -0,0 +1,7 @@ +{% extends 'htmx_confirmation_modal.html.twig' %} + +{% block content %} +
+ Möchtest du den Gruppenhaus-Preis {{ accommodation.name }}, {{ accommodationPrice.dateFrom | date('d.m.Y') }} - {{ accommodationPrice.dateTo | date('d.m.Y') }} wirklich löschen? +
+{% endblock %} diff --git a/templates/admin/additional_service/_form.html.twig b/templates/admin/additional_service/_form.html.twig new file mode 100644 index 0000000..663e207 --- /dev/null +++ b/templates/admin/additional_service/_form.html.twig @@ -0,0 +1,26 @@ +{% form_theme form 'forms_admin.html.twig' %} + +{{ form_start(form) }} +
+ {{ form_row(form.label) }} + {{ form_row(form.type) }} +
+ {{ form_row(form.description) }} +
+ {{ form_row(form.price) }} + {{ form_row(form.selectionGroup) }} + {{ form_row(form.dateFrom) }} + {{ form_row(form.dateTo) }} +
+
+ + zurück + + +
+{{ form_rest(form) }} +{{ form_end(form) }} diff --git a/templates/admin/additional_service/create.html.twig b/templates/admin/additional_service/create.html.twig new file mode 100644 index 0000000..9e30696 --- /dev/null +++ b/templates/admin/additional_service/create.html.twig @@ -0,0 +1,6 @@ +{% extends 'layout_admin.html.twig' %} + +{% block content %} + Zusatzleistung neu für Gruppenhaus {{ accommodation.name }} + {% include 'admin/additional_service/_form.html.twig' %} +{% endblock %} diff --git a/templates/admin/additional_service/edit.html.twig b/templates/admin/additional_service/edit.html.twig new file mode 100644 index 0000000..a38e479 --- /dev/null +++ b/templates/admin/additional_service/edit.html.twig @@ -0,0 +1,6 @@ +{% extends 'layout_admin.html.twig' %} + +{% block content %} + Zusatzleistung für Gruppenhaus {{ accommodation.name }}{% if duplicate %} duplizieren{% endif %} + {% include 'admin/additional_service/_form.html.twig' %} +{% endblock %} diff --git a/templates/admin/additional_service/modal_delete.html.twig b/templates/admin/additional_service/modal_delete.html.twig new file mode 100644 index 0000000..bca6b1a --- /dev/null +++ b/templates/admin/additional_service/modal_delete.html.twig @@ -0,0 +1,7 @@ +{% extends 'htmx_confirmation_modal.html.twig' %} + +{% block content %} +
+ Möchtest du die Zusatzleistung {{ additionalService.label }}, {{ accommodation.name }} wirklich löschen? +
+{% endblock %} diff --git a/templates/admin/board_service/_form.html.twig b/templates/admin/board_service/_form.html.twig new file mode 100644 index 0000000..bcf0faf --- /dev/null +++ b/templates/admin/board_service/_form.html.twig @@ -0,0 +1,24 @@ +{% form_theme form 'forms_admin.html.twig' %} + +{{ form_start(form) }} +
+ {{ form_row(form.label) }} + {{ form_row(form.price) }} +
+ {{ form_row(form.description) }} +
+ {{ form_row(form.dateFrom) }} + {{ form_row(form.dateTo) }} +
+
+ + zurück + + +
+{{ form_rest(form) }} +{{ form_end(form) }} diff --git a/templates/admin/board_service/create.html.twig b/templates/admin/board_service/create.html.twig new file mode 100644 index 0000000..1f13fec --- /dev/null +++ b/templates/admin/board_service/create.html.twig @@ -0,0 +1,6 @@ +{% extends 'layout_admin.html.twig' %} + +{% block content %} + Verpflegungsleistung neu für Gruppenhaus {{ accommodation.name }} + {% include 'admin/board_service/_form.html.twig' %} +{% endblock %} diff --git a/templates/admin/board_service/edit.html.twig b/templates/admin/board_service/edit.html.twig new file mode 100644 index 0000000..ce95848 --- /dev/null +++ b/templates/admin/board_service/edit.html.twig @@ -0,0 +1,6 @@ +{% extends 'layout_admin.html.twig' %} + +{% block content %} + Verpflegungsleistung für Gruppenhaus {{ accommodation.name }}{% if duplicate %} duplizieren{% endif %} + {% include 'admin/board_service/_form.html.twig' %} +{% endblock %} diff --git a/templates/admin/board_service/modal_delete.html.twig b/templates/admin/board_service/modal_delete.html.twig new file mode 100644 index 0000000..7da5ad0 --- /dev/null +++ b/templates/admin/board_service/modal_delete.html.twig @@ -0,0 +1,7 @@ +{% extends 'htmx_confirmation_modal.html.twig' %} + +{% block content %} +
+ Möchtest du die Verpflegungsleistung {{ boardService.label }}, {{ accommodation.name }} wirklich löschen? +
+{% endblock %} diff --git a/templates/admin/booking_edit_draft/index.html.twig b/templates/admin/booking_edit_draft/index.html.twig index b294ba5..6ff0270 100644 --- a/templates/admin/booking_edit_draft/index.html.twig +++ b/templates/admin/booking_edit_draft/index.html.twig @@ -1,9 +1,7 @@ {% extends 'layout_admin.html.twig' %} {% block content %} -

- Buchungsentwürfe -

+ Buchungsentwürfe
@@ -44,32 +42,17 @@ {% endif %} {% else %} diff --git a/templates/admin/booking_edit_draft/show.html.twig b/templates/admin/booking_edit_draft/show.html.twig index 7181cfd..4ca9df5 100644 --- a/templates/admin/booking_edit_draft/show.html.twig +++ b/templates/admin/booking_edit_draft/show.html.twig @@ -1,9 +1,7 @@ {% extends 'layout_admin.html.twig' %} {% block content %} -

- Buchungsentwurf -

+ Buchungsentwurf

Vorgang {{ draft.bookingNumber }}

diff --git a/templates/admin/log/index.html.twig b/templates/admin/log/index.html.twig index ad6a91b..d81698a 100644 --- a/templates/admin/log/index.html.twig +++ b/templates/admin/log/index.html.twig @@ -1,9 +1,7 @@ {% extends 'layout_admin.html.twig' %} {% block content %} -

- Logs -

+ Logs
- {% embed '_partials/_dropdown.html.twig' %} - {% block content %} - - Details - - - XLS-Export - - - {% endblock %} - {% endembed %} - + + + Details + + + XLS-Export + + + löschen + +
@@ -53,16 +51,11 @@ diff --git a/templates/admin/log/xml_dumps.html.twig b/templates/admin/log/xml_dumps.html.twig index ff13a3e..7b181c3 100644 --- a/templates/admin/log/xml_dumps.html.twig +++ b/templates/admin/log/xml_dumps.html.twig @@ -1,9 +1,7 @@ {% extends 'layout_admin.html.twig' %} {% block content %} -

- XML-Dumps für Request ID {{ logEntry.requestId }} -

+ XML-Dumps für Request ID {{ logEntry.requestId }} {% if dumps is empty %}
@@ -37,9 +35,9 @@
{% if entry.channel == 'bpn' %} - {% embed '_partials/_dropdown.html.twig' %} - {% block content %} - + + XML-Dumps - - {% endblock %} - {% endembed %} + + {% endif %}
{% if dump.type == 'request' %} - Request + Request {% else %} - Response + Response {% endif %} diff --git a/templates/admin/user/index.html.twig b/templates/admin/user/index.html.twig index d5b1d41..c4178cf 100644 --- a/templates/admin/user/index.html.twig +++ b/templates/admin/user/index.html.twig @@ -1,9 +1,7 @@ {% extends 'layout_admin.html.twig' %} {% block content %} -

- Benutzeraccounts -

+ Benutzeraccounts
diff --git a/templates/base_admin.html.twig b/templates/base_admin.html.twig index a22f927..eda8abd 100644 --- a/templates/base_admin.html.twig +++ b/templates/base_admin.html.twig @@ -9,10 +9,10 @@ {% block stylesheets %} - {{ encore_entry_link_tags('app') }} + {{ encore_entry_link_tags('admin') }} {% endblock %} {% block javascripts %} - {{ encore_entry_script_tags('app') }} + {{ encore_entry_script_tags('admin') }} {% endblock %} diff --git a/templates/components/badge.html.twig b/templates/components/badge.html.twig new file mode 100644 index 0000000..a5b5a49 --- /dev/null +++ b/templates/components/badge.html.twig @@ -0,0 +1,11 @@ +{% set variant = variant ?? 'primary' %} +{% set cva = html_cva('badge', { + variant: { + primary: 'bg-primary text-white', + success: 'bg-green-500 text-white', + warning: 'bg-red-500 text-white', + } +}, [], { variant: 'primary' }) %} + + {{ block('content') }} + diff --git a/templates/components/calendar/grid.html.twig b/templates/components/calendar/grid.html.twig new file mode 100644 index 0000000..dd0fff4 --- /dev/null +++ b/templates/components/calendar/grid.html.twig @@ -0,0 +1,71 @@ +{% set weekdays = ['Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa', 'So'] %} +
+ {% for month in months %} + {% set totalCols = month.firstDow + (month.days | length) %} +
+
{{ month.label }}
+
+
+
+
+ {% for col in 0..(totalCols - 1) %} + {% set dow = col % 7 %} +
+ {{ weekdays[dow] }} +
+ {% endfor %} +
+
+
+ {% if month.firstDow > 0 %} + {% for i in 1..month.firstDow %} +
+ {% endfor %} + {% endif %} + {% for dayNum, day in month.days %} +
+ {{ dayNum }} +
+ {% endfor %} +
+ {% for row in [ + {label: 'Preis', key: 'hasPrice', color: 'bg-blue-500'}, + {label: 'Verpfl.', key: 'hasBoard', color: 'bg-green-500'}, + {label: 'Zusatzl.', key: 'hasAdditional', color: 'bg-amber-500'}, + {label: 'n. v.', key: 'isBlocked', color: 'bg-red-500'}, + ] %} +
+
{{ row.label }}
+ {% if month.firstDow > 0 %} + {% for i in 1..month.firstDow %} +
+ {% endfor %} + {% endif %} + {% for dayNum, day in month.days %} +
+
+
+ {% endfor %} +
+ {% endfor %} +
+
+
+ {% endfor %} +
+
+
+ Preiskonfigurationen +
+
+ Verpflegungsleistungen +
+
+ optionale Zusatzleistungen +
+
+ nicht verfügbar +
+
diff --git a/templates/components/calendar/index.html.twig b/templates/components/calendar/index.html.twig new file mode 100644 index 0000000..ab195ee --- /dev/null +++ b/templates/components/calendar/index.html.twig @@ -0,0 +1,17 @@ +
+ +
+ + +
+
diff --git a/templates/components/dropdown/hxbutton.html.twig b/templates/components/dropdown/hxbutton.html.twig new file mode 100644 index 0000000..442a9cb --- /dev/null +++ b/templates/components/dropdown/hxbutton.html.twig @@ -0,0 +1,20 @@ +{% set warning = warning ?? false %} +{% set method = method ?? 'get' %} + diff --git a/templates/_partials/_dropdown.html.twig b/templates/components/dropdown/index.html.twig similarity index 50% rename from templates/_partials/_dropdown.html.twig rename to templates/components/dropdown/index.html.twig index d4abf09..39d5322 100644 --- a/templates/_partials/_dropdown.html.twig +++ b/templates/components/dropdown/index.html.twig @@ -1,9 +1,16 @@ -
- -
+ + + + + + + + + + + + +
Name{{ booking.accommodation.name }}
Anreise{{ booking.dateFrom|date('d.m.Y') }}
Abreise{{ booking.dateTo|date('d.m.Y') }}
+{% endblock %} diff --git a/templates/email/accommodation_booking_customer.html.twig b/templates/email/accommodation_booking_customer.html.twig new file mode 100644 index 0000000..775db76 --- /dev/null +++ b/templates/email/accommodation_booking_customer.html.twig @@ -0,0 +1,47 @@ +{% extends 'email/layout.html.twig' %} + +{% block body %} + {% if accessLink %} +

{{ booking.inquiry ? 'Dein Angebot ist bereit' : 'Deine Buchung ist bestätigt' }}

+ +

+ Hallo {{ booking.firstName }}, + {% if booking.inquiry %} + vielen Dank für deine Anfrage! Wir haben sie geprüft — dein Angebot wartet auf dich. + {% else %} + vielen Dank! Deine Buchung ist bei uns eingegangen und bestätigt. + {% endif %} +

+ +

+ + {{ booking.inquiry ? 'Angebot ansehen & bestätigen' : 'Buchung ansehen' }} + +

+ {% else %} +

Deine Anfrage ist bei uns eingegangen

+ +

+ Hallo {{ booking.firstName }}, vielen Dank für deine Anfrage! Wir melden uns so schnell wie möglich + bei dir mit deinem persönlichen Angebot. +

+ {% endif %} + +

Unterkunft

+ + + + + + + + + + + + + +
Name{{ booking.accommodation.name }}
Anreise{{ booking.dateFrom|date('d.m.Y') }}
Abreise{{ booking.dateTo|date('d.m.Y') }}
+ +

Bei Fragen antworte einfach auf diese E-Mail.

+{% endblock %} diff --git a/templates/email/offer_accepted.html.twig b/templates/email/offer_accepted.html.twig new file mode 100644 index 0000000..7c1cd55 --- /dev/null +++ b/templates/email/offer_accepted.html.twig @@ -0,0 +1,27 @@ +{% extends 'email/layout.html.twig' %} + +{% block body %} +

Angebot angenommen

+ + {% if accessLink %} +

+ Kundenansicht öffnen +

+ {% endif %} + +

Unterkunft

+ + + + + + + + + + + + + +
Name{{ booking.accommodation.name }}
Anreise{{ booking.dateFrom|date('d.m.Y') }}
Abreise{{ booking.dateTo|date('d.m.Y') }}
+{% endblock %} diff --git a/templates/email/offer_accepted_customer.html.twig b/templates/email/offer_accepted_customer.html.twig new file mode 100644 index 0000000..2d27e33 --- /dev/null +++ b/templates/email/offer_accepted_customer.html.twig @@ -0,0 +1,33 @@ +{% extends 'email/layout.html.twig' %} + +{% block body %} +

Deine Buchung ist bestätigt

+ +

+ Hallo {{ booking.firstName }}, vielen Dank! Deine Buchung ist jetzt verbindlich bestätigt. +

+ + {% if accessLink %} +

+ Buchung ansehen +

+ {% endif %} + +

Unterkunft

+ + + + + + + + + + + + + +
Name{{ booking.accommodation.name }}
Anreise{{ booking.dateFrom|date('d.m.Y') }}
Abreise{{ booking.dateTo|date('d.m.Y') }}
+ +

Bei Fragen antworte einfach auf diese E-Mail.

+{% endblock %} diff --git a/templates/forms_admin.html.twig b/templates/forms_admin.html.twig new file mode 100644 index 0000000..02d8682 --- /dev/null +++ b/templates/forms_admin.html.twig @@ -0,0 +1,245 @@ +{% use 'form_div_layout.html.twig' %} + +{%- block form_row -%} + {%- set widget_attr = {} -%} + {%- if help is not empty -%} + {%- set widget_attr = {attr: {'aria-describedby': id ~"_help"}} -%} + {%- endif -%} + + {{- form_label(form) -}} + {{- form_widget(form, widget_attr) -}} + {{- form_errors(form) -}} + {{- form_help(form) -}} +
+{%- endblock form_row -%} + +{%- block form_label -%} + {% set class = 'block font-bold pb-2' %} + {% if errors|length %} + {% set class = class ~ ' text-red-500' %} + {% endif %} + {% set label_attr = label_attr|merge({'class': (label_attr.class|default('') ~ class)|trim}) %} + {{ parent() }} +{%- endblock form_label -%} + +{%- block form_errors -%} + {%- if errors|length > 0 -%} +
    + {%- for error in errors -%} +
  • {{ error.message }}
  • + {%- endfor -%} +
+ {%- endif -%} +{%- endblock form_errors -%} + +{%- block form_widget_simple -%} + {%- set type = type|default('text') -%} + {%- if type != 'hidden' -%} + {%- set attr = attr|merge({'class': (attr.class|default('') ~ ' block w-full rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 focus:ring-2 focus:ring-inset text-sm')|trim }) -%} + {%- if errors|length -%} + {%- set attr = attr|merge({'class': attr.class|default('') ~ ' ring-red-500 placeholder-red-500 focus:ring-red-500' }) -%} + {% else %} + {%- set attr = attr|merge({'class': attr.class|default('') ~ ' placeholder:text-gray-400 focus:ring-primary' }) -%} + {%- endif -%} + {%- if disabled is defined and disabled == true -%} + {%- set attr = attr|merge({'class': attr.class|default('') ~ ' cursor-not-allowed' }) -%} + {%- endif -%} + {%- endif -%} + {{ parent() }} + {%- if disabled is defined and disabled == true -%} + + {%- endif -%} +{%- endblock form_widget_simple -%} + +{%- block textarea_widget -%} + {%- set attr = attr|merge({'class': (attr.class|default('') ~ ' block w-full rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 focus:ring-2 focus:ring-inset text-sm')|trim }) -%} + {%- if errors|length -%} + {%- set attr = attr|merge({'class': attr.class|default('') ~ ' ring-red-500 placeholder-red-500 focus:ring-red-500' }) -%} + {% else %} + {%- set attr = attr|merge({'class': attr.class|default('') ~ ' placeholder:text-gray-400 focus:ring-primary' }) -%} + {%- endif -%} + {%- if disabled is defined and disabled == true -%} + {%- set attr = attr|merge({'class': attr.class|default('') ~ ' cursor-not-allowed' }) -%} + {%- endif -%} + {{ parent() }} + {%- if disabled is defined and disabled == true -%} + + {%- endif -%} +{%- endblock textarea_widget -%} + +{%- block checkbox_widget -%} + {%- set attr = attr|merge({'class': (attr.class|default('') ~ ' h-4 w-4 rounded text-primary')|trim }) -%} + {%- if errors|length -%} + {%- set attr = attr|merge({'class': attr.class|default('') ~ ' border-red-500 text-red-500 ring-red-500 focus:ring-red-500' }) -%} + {% else %} + {%- set attr = attr|merge({'class': attr.class|default('') ~ ' border-gray-300 focus:ring-primary' }) -%} + {%- endif -%} + {%- if attr.disabled is defined and attr.disabled == true -%} + {%- set attr = attr|merge({'class': attr.class|default('') ~ ' cursor-not-allowed' }) -%} + {%- endif -%} + +{%- endblock checkbox_widget -%} + +{% block checkbox_row %} +
+
+ {{ form_widget(form) }} +
+
+ + {{- form_errors(form) -}} +
+
+{% endblock %} + +{%- block choice_widget_collapsed -%} + {%- set attr = attr|merge({'class': (attr.class|default('') ~ ' block w-full rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 focus:ring-2 focus:ring-inset text-sm')|trim }) -%} + {%- if errors|length -%} + {%- set attr = attr|merge({'class': attr.class|default('') ~ ' ring-red-500 placeholder-red-500 focus:ring-red-500' }) -%} + {% else %} + {%- set attr = attr|merge({'class': attr.class|default('') ~ ' placeholder:text-gray-400 focus:ring-primary' }) -%} + {%- endif -%} + {%- if disabled is defined and disabled == true -%} + {%- set attr = attr|merge({'class': attr.class|default('') ~ ' cursor-not-allowed' }) -%} + {%- endif -%} + {{ parent() }} + {%- if disabled is defined and disabled == true -%} + + {%- endif -%} +{%- endblock choice_widget_collapsed -%} + +{%- block choice_widget_expanded -%} + {%- for child in form %} +
+
+ +
+
+ {{- form_widget(child) -}} +
+
+ {% endfor -%} +{%- endblock choice_widget_expanded -%} + +{%- block birthday_widget -%} +
+ {{ form_widget(form.children['day']) }} + {{ form_widget(form.children['month']) }} + {{ form_widget(form.children['year']) }} +
+{%- endblock -%} + +{% block abbreviated_date_widget %} + {%- set class = 'flex items-center space-x-1 ' ~ attr.class|default('') -%} + {%- do form.setRendered -%} + {%- if errors|length -%} + {%- set attr = attr|merge({'class': attr.class|default('') ~ ' ring-red-500 placeholder-red-500 focus:ring-red-500' }) -%} + {%- endif -%} +
+ {{ form_widget(form.month, { 'attr': attr })}} + / + {{ form_widget(form.year, { 'attr': attr })}} +
+{% endblock %} + +{%- block money_widget -%} + {% set currency_class = 'absolute top-1/2 transform -translate-y-1/2 right-0 mr-2' %} + {% if errors|length %} + {% set currency_class = currency_class ~ ' text-red-500' %} + {% else %} + {% set currency_class = currency_class ~ ' text-gray-600' %} + {% endif %} +
+ {{ block('form_widget_simple') }} + +
+{%- endblock money_widget -%} + +{%- block datepicker_widget -%} + {%- set minDate = form.vars.min_date ? form.vars.min_date | date('Y-m-d') : null -%} + {%- set maxDate = form.vars.max_date ? form.vars.max_date | date('Y-m-d') : null -%} + {%- set displayValue = value ? value|date('d.m.Y') : '' -%} + {%- set inputClass = 'block w-full rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 focus:ring-2 focus:ring-inset text-sm' -%} + {%- if errors|length -%} + {%- set inputClass = inputClass ~ ' ring-red-500 placeholder:red-500 focus:ring-red-500' -%} + {%- else -%} + {%- set inputClass = inputClass ~ ' placeholder:text-gray-900 focus:ring-primary' -%} + {%- endif -%} + {%- if disabled is defined and disabled == true -%} + {%- set inputClass = inputClass ~ ' cursor-not-allowed' -%} + {%- endif -%} +
+ + +
+{%- endblock datepicker_widget %} + +{%- block autocomplete_widget -%} + {%- set attr = attr|merge({'class': (attr.class|default('') ~ ' autocomplete-input block w-full rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 focus:ring-2 focus:ring-inset text-sm')|trim }) -%} + {%- if errors|length -%} + {%- set attr = attr|merge({'class': attr.class|default('') ~ ' ring-red-500 placeholder-red-500 focus:ring-red-500' }) -%} + {% else %} + {%- set attr = attr|merge({'class': attr.class|default('') ~ ' placeholder:text-gray-400 focus:ring-primary' }) -%} + {%- endif -%} + {%- if disabled is defined and disabled == true -%} + {%- set attr = attr|merge({'class': attr.class|default('') ~ ' cursor-not-allowed' }) -%} + {%- endif -%} +
+ +
    + + +
    + {{ icon('search', 'w-4 h-4 text-gray-700') }} +
    +
    +{%- endblock autocomplete_widget -%} + +{%- block multiselect_widget -%} +
    +
    +
    + {{ icon('dots', 'w-4 h-4 mt-2') }} +
    + +
    +{%- endblock multiselect_widget -%} diff --git a/templates/groups/booking/_offer_accept_confirmation_modal.html.twig b/templates/groups/booking/_offer_accept_confirmation_modal.html.twig new file mode 100644 index 0000000..780d987 --- /dev/null +++ b/templates/groups/booking/_offer_accept_confirmation_modal.html.twig @@ -0,0 +1,31 @@ +{% extends 'htmx_modal.html.twig' %} + +{% block title %}Angebot verbindlich buchen{% endblock %} + +{% block content %} + {% from '_partials/_validation_errors.html.twig' import validation_alert %} + {{ validation_alert(confirmationForm, 'Bitte akzeptiere die AGB, um die Buchung abzuschließen.', false) }} + +

    + Möchtest du dieses Angebot jetzt verbindlich buchen? +

    + + {{ form_start(confirmationForm, { + 'action': path('app_groups_booking_offer_confirm', { uuid: booking.uuid }), + 'attr': { + 'hx-target': '#htmx-modal', + 'hx-swap': 'outerHTML', + } + }) }} + {{ form_row(confirmationForm.termsAccepted) }} + +
    + + +
    + {{ form_end(confirmationForm) }} +{% endblock %} diff --git a/templates/groups/booking/_offer_summary.html.twig b/templates/groups/booking/_offer_summary.html.twig new file mode 100644 index 0000000..aa9bdaf --- /dev/null +++ b/templates/groups/booking/_offer_summary.html.twig @@ -0,0 +1,196 @@ +{% block booking_summary %} +
    + {# Header #} +
    + {% if ctx.priceBreakdown is not null %} +
    + Gesamtpreis + {{ (displayTotal / 100)|format_currency(currency) }} +
    + {% endif %} +
    + Übersicht + +
    +
    + + {# Content #} + + +
    +{% endblock %} diff --git a/templates/groups/booking/_pagination.html.twig b/templates/groups/booking/_pagination.html.twig new file mode 100644 index 0000000..4cde89f --- /dev/null +++ b/templates/groups/booking/_pagination.html.twig @@ -0,0 +1,33 @@ +{% set current_step = current_step ?? 1 %} +{% set step_routes = { + 1: 'app_groups_booking_step_1', + 2: 'app_groups_booking_step_2', + 3: 'app_groups_booking_step_3', + 4: 'app_groups_booking_step_4', +} %} + diff --git a/templates/groups/booking/_price_calendar_grid.html.twig b/templates/groups/booking/_price_calendar_grid.html.twig new file mode 100644 index 0000000..68d298e --- /dev/null +++ b/templates/groups/booking/_price_calendar_grid.html.twig @@ -0,0 +1,80 @@ +
    +{% for monthData in months %} +
    + +

    {{ monthData.label }}

    + + {# Weekday headers (Mon–Sun) #} +
    +
    Mo
    +
    Di
    +
    Mi
    +
    Do
    +
    Fr
    +
    Sa
    +
    So
    +
    + + {# Day grid #} +
    + {% for week in monthData.weeks %} + {% for dayData in week %} + {% if dayData.inMonth %} + {% set dateStr = dayData.date|date('Y-m-d') %} + {% set entry = enrichedByDate[dateStr] ?? null %} + {% set status = (dateStr < todayStr) ? 'past' : (entry ? entry.status : 'ok') %} + {% set minNights = entry ? entry.minNights : 0 %} + + {% else %} +
    + {% endif %} + {% endfor %} + {% endfor %} +
    + +
    +{% endfor %} +
    + +
    + {# Status message (arrival hint, short-stay warning, etc.) #} +
    + + {# Reset link — revealed once a start date is selected #} + +
    + +{# Navigation — prev/next trigger HTMX month swap; no Stimulus involvement #} +
    + + +
    diff --git a/templates/groups/booking/_step4_booking_confirmation_modal.html.twig b/templates/groups/booking/_step4_booking_confirmation_modal.html.twig new file mode 100644 index 0000000..f4b3811 --- /dev/null +++ b/templates/groups/booking/_step4_booking_confirmation_modal.html.twig @@ -0,0 +1,27 @@ +{% extends 'htmx_modal.html.twig' %} + +{% block title %}Buchung bestätigen{% endblock %} + +{% block content %} + {% from '_partials/_validation_errors.html.twig' import validation_alert %} + {{ validation_alert(confirmationForm, 'Bitte akzeptiere die AGB, um die Buchung abzuschließen.', false) }} + + {{ form_start(confirmationForm, { + 'action': path('app_groups_booking_step_4_confirm'), + 'attr': { + 'hx-target': '#htmx-modal', + 'hx-swap': 'outerHTML', + } + }) }} + {{ form_row(confirmationForm.termsAccepted) }} + +
    + + +
    + {{ form_end(confirmationForm) }} +{% endblock %} diff --git a/templates/groups/booking/_step4_inquiry_confirmation_modal.html.twig b/templates/groups/booking/_step4_inquiry_confirmation_modal.html.twig new file mode 100644 index 0000000..80e8fc5 --- /dev/null +++ b/templates/groups/booking/_step4_inquiry_confirmation_modal.html.twig @@ -0,0 +1,18 @@ +{% extends 'htmx_modal.html.twig' %} + +{% block title %}Anfrage bestätigen{% endblock %} + +{% block content %} +

    Möchtest du diese unverbindliche Anfrage jetzt absenden?

    + + {{ form_start(inquiryForm, { 'action': path('app_groups_booking_step_4') }) }} +
    + + +
    + {{ form_end(inquiryForm) }} +{% endblock %} diff --git a/templates/groups/booking/_step4_personal_data_recap.html.twig b/templates/groups/booking/_step4_personal_data_recap.html.twig new file mode 100644 index 0000000..051f09d --- /dev/null +++ b/templates/groups/booking/_step4_personal_data_recap.html.twig @@ -0,0 +1,31 @@ +
    +
    Persönliche Daten
    +
    +
    + Gruppenname: + {{ dto.groupName }} +
    +
    + Name: + {{ dto.salutation }} {{ dto.firstName }} {{ dto.lastName }} +
    +
    + E-Mail: + {{ dto.email }} +
    +
    + Telefon: + {{ dto.phone }} +
    +
    + Adresse: + {{ dto.street }}, {{ dto.zip }} {{ dto.city }} +
    + {% if dto.remarks %} +
    + Anmerkungen: + {{ dto.remarks }} +
    + {% endif %} +
    +
    diff --git a/templates/groups/booking/_step4_services_recap.html.twig b/templates/groups/booking/_step4_services_recap.html.twig new file mode 100644 index 0000000..ca4c190 --- /dev/null +++ b/templates/groups/booking/_step4_services_recap.html.twig @@ -0,0 +1,42 @@ +{% set selectedBoardService = null %} +{% for service in ctx.boardServices %} + {% if service.id == dto.selectedBoardServiceId %} + {% set selectedBoardService = service %} + {% endif %} +{% endfor %} + +{% set selectedAdditionalServices = ctx.additionalServices|filter(service => service.id in dto.selectedAdditionalServiceIds) %} + +
    +
    Ausgewählte Leistungen
    +
    +
    + Verpflegung: + {% if selectedBoardService %} + {{ selectedBoardService.label }} + {% if selectedBoardService.price > 0 %} + — {{ (selectedBoardService.price / 100)|format_currency(ctx.accommodation.currency) }} pro Person und Nacht + {% endif %} + {% if selectedBoardService.description %} +
    {{ selectedBoardService.description|nl2br }}
    + {% endif %} + {% else %} + Selbstversorgung + {% endif %} +
    + + {% if selectedAdditionalServices is not empty %} +
    + Zusatzleistungen: +
      + {% for service in selectedAdditionalServices %} +
    • + {{ service.label }} + — {{ (service.price / 100)|format_currency(ctx.accommodation.currency) }} {{ service.type.label|trans }} +
    • + {% endfor %} +
    +
    + {% endif %} +
    +
    diff --git a/templates/groups/booking/_summary.html.twig b/templates/groups/booking/_summary.html.twig new file mode 100644 index 0000000..7a34158 --- /dev/null +++ b/templates/groups/booking/_summary.html.twig @@ -0,0 +1,163 @@ +{% block booking_summary %} +
    + {# Header #} +
    + {% if ctx.priceBreakdown is not null %} +
    + Gesamtpreis + {{ (ctx.priceBreakdown.total / 100)|format_currency(ctx.accommodation.currency) }} +
    + {% endif %} +
    + Übersicht + +
    +
    + + {# Content #} + +
    +{% endblock %} diff --git a/templates/groups/booking/error.html.twig b/templates/groups/booking/error.html.twig new file mode 100644 index 0000000..b7c1848 --- /dev/null +++ b/templates/groups/booking/error.html.twig @@ -0,0 +1,18 @@ +{% extends 'layout.html.twig' %} + +{% block title %}Fehler{% endblock %} + +{% block background %}bg-outer bg-outer--summer{% endblock %} + +{% block content %} +
    +
    + {% set errorMessages = app.flashes('error')|default(['Es ist ein Fehler aufgetreten. Bitte überprüfe den Link oder versuche es erneut.']) %} + {% include '_partials/_alert.html.twig' with { + level: 'error', + title: 'Das hat nicht geklappt', + messages: errorMessages + } %} +
    +
    +{% endblock %} diff --git a/templates/groups/booking/offer.html.twig b/templates/groups/booking/offer.html.twig new file mode 100644 index 0000000..fdd2922 --- /dev/null +++ b/templates/groups/booking/offer.html.twig @@ -0,0 +1,216 @@ +{% extends 'layout_booking.html.twig' %} + +{% macro imageGallery(images, thumbImages, defaultAlt) %} + {% if images|length > 0 %} +
    + {% for image in images %} +
    + {{ image.alt ?? defaultAlt }} + {% if loop.index0 == 1 and images|length > 2 %} +
    + +{{ images|length - 2 }} +
    + {% endif %} +
    + {% endfor %} +
    + {% endif %} +{% endmacro %} + +{% import _self as macros %} + +{% block title %}{{ booking.inquiry ? 'Dein Angebot' : 'Deine Buchung' }}{% endblock %} + +{% block background %}bg-outer bg-outer--summer{% endblock %} + +{% block content %} + {% set currency = booking.pricingCurrency ?? priceBreakdown.currency %} + {% set displayTotal = booking.totalPrice ?? (priceBreakdown.total ?? null) %} + +
    + + {# Sidebar summary #} +
    + {% include 'groups/booking/_offer_summary.html.twig' with { + booking: booking, + ctx: ctx, + currency: currency, + displayTotal: displayTotal, + } %} +
    + + {# Main area #} +
    + {% include '_partials/_flashes.html.twig' %} + +
    +

    + {{ booking.inquiry ? 'Dein Angebot' : 'Deine Buchung' }} +

    +

    + {{ ctx.accommodation.name }} +

    +
    + + {# Booked services #} + {% if booking.boardServiceLabel or booking.additionalServices | length > 0 %} +
    +

    + {{ booking.inquiry ? 'Angefragte' : 'Gebuchte' }} Leistungen +

    +
      + {% if booking.boardServiceLabel %} +
    • {{ booking.boardServiceLabel }}
    • + {% endif %} + {% for service in booking.additionalServices %} +
    • {{ service.label }}
    • + {% endfor %} +
    +
    + {% endif %} + + {% if booking.inquiry %} +
    + +
    + {% elseif booking.acceptedAt is not null %} +
    + {{ icon('info', 'w-5 h-5') }} +
    + Angebot angenommen am {{ booking.acceptedAt | date('d.m.Y') }} +
    +
    + {% endif %} + + {# hotel description #} + {% if ctx.hotelCmsData is not null %} +
    + + +
    + {% set icons = ctx.hotelCmsData.icons %} + {% if icons is not empty %} +
      + {% for icon, label in icons %} +
    • +
      + {{ icon(icon, 'w-8 h-8 shrink-0 text-gray-900') }} +
      + {{ label }} +
    • + {% endfor %} +
    + {% endif %} + + {{ ctx.hotelCmsData.description | raw }} + +

    + Details zur Unterkunft +

    + {{ ctx.hotelCmsData.features | raw }} + +

    + Die Zimmer +

    + {{ ctx.hotelCmsData.roomTypes | raw }} + +

    + Weitere Infos +

    + {{ ctx.hotelCmsData.additionalInformation | raw }} +
    +
    + + {{ macros.imageGallery(ctx.hotelCmsData.images.resized.l, ctx.hotelCmsData.images.resized.m, ctx.accommodation.name) }} + {% endif %} + + {# region description #} + {% if ctx.hotelCmsData is not null and ctx.hotelCmsData.region is not null %} + {% set region = ctx.hotelCmsData.region %} +
    + + +
    + {% if region.altitude or region.length or region.lifts %} +
      + {% if region.altitude %} +
    • {{ region.altitude }} m Höhe
    • + {% endif %} + {% if region.length %} +
    • {{ region.length }} km Pisten
    • + {% endif %} + {% if region.lifts %} +
    • {{ region.lifts }} Lifte
    • + {% endif %} +
    + {% endif %} + {% if region.webcam %} +

    + Webcam der Region +

    + {% endif %} + {{ region.description | default('') | raw }} + +

    + Skigebiet +

    + {{ region.skiArea | default('') | raw }} + {{ region.skiAreaExtended | default('') | raw }} + + {% if region.news %} +

    Aktuelles aus der Region

    + {{ region.news | raw }} + {% endif %} +
    +
    + + {% if region.regionMaps is not null and region.regionMaps | length > 0 %} + {% set regionMapImages = region.regionMaps | map(url => {url: url}) %} + {{ macros.imageGallery(regionMapImages, [], region.name) }} + {% endif %} + + {{ macros.imageGallery(region.images.resized.l ?? [], region.images.resized.m ?? [], region.name) }} + {% endif %} +
    + +
    +{% endblock %} diff --git a/templates/groups/booking/offer_unavailable.html.twig b/templates/groups/booking/offer_unavailable.html.twig new file mode 100644 index 0000000..af5f82e --- /dev/null +++ b/templates/groups/booking/offer_unavailable.html.twig @@ -0,0 +1,13 @@ +{% extends 'layout.html.twig' %} + +{% block title %}Link nicht verfügbar{% endblock %} + +{% block content %} +
    + {% include '_partials/_alert.html.twig' with { + level: 'error', + title: 'Dieser Link ist nicht (mehr) gültig', + messages: ['Bitte wende dich an uns, damit wir dir einen neuen Link zusenden können.'], + } %} +
    +{% endblock %} diff --git a/templates/groups/booking/step_1.html.twig b/templates/groups/booking/step_1.html.twig new file mode 100644 index 0000000..ee7c65a --- /dev/null +++ b/templates/groups/booking/step_1.html.twig @@ -0,0 +1,89 @@ +{% extends 'layout_booking.html.twig' %} + +{% block title %}Schritt 1: Reisezeitraum wählen{% endblock %} + +{% block background %}bg-outer bg-outer--summer{% endblock %} + +{% block content %} +
    + + {# Pagination - mobile only (above summary) #} +
    + {% include 'groups/booking/_pagination.html.twig' with { 'current_step': 1 } %} +
    + +
    + + {# Sidebar summary #} +
    + {% include 'groups/booking/_summary.html.twig' with { 'dto': dto, 'ctx': ctx } %} +
    + + {# Calendar #} +
    + + {% include '_partials/_flashes.html.twig' %} + + {# Pagination - desktop only (fixed above scrollable content) #} + + +
    + +

    + Gewünschter Zeitraum +

    + + {# Calendar mount — HTMX loads the grid; Stimulus wires afterSwap → initAfterLoad() #} +
    +
    Kalender wird geladen…
    +
    + + {# Error state shown by Stimulus on htmx:responseError #} + + +
    +
    + +
    + +
    +
    + + + +
    + +
    +
    +
    + +
    +{% endblock %} diff --git a/templates/groups/booking/step_2.html.twig b/templates/groups/booking/step_2.html.twig new file mode 100644 index 0000000..4970d39 --- /dev/null +++ b/templates/groups/booking/step_2.html.twig @@ -0,0 +1,235 @@ +{% extends 'layout_booking.html.twig' %} + +{% block title %}Schritt 2: Personen & Leistungen{% endblock %} + +{% block background %}bg-outer bg-outer--summer{% endblock %} + +{% block content %} + {% form_theme form 'booking/_form_theme.html.twig' %} + + {{ form_start(form, { + 'attr': { + 'class': 'flex-1 flex flex-col min-h-0', + } + }) }} + + {# Pagination - mobile only (above summary) #} +
    + {% include 'groups/booking/_pagination.html.twig' with { 'current_step': 2 } %} +
    + +
    + + {# Sidebar summary #} + {% block accommodation_summary %} +
    + {% include 'groups/booking/_summary.html.twig' with { 'dto': dto, 'ctx': ctx } %} +
    + {% endblock %} + + {# Main form #} + {% block accommodation_form %} +
    + + {% include '_partials/_flashes.html.twig' %} + + {# Pagination - desktop only (fixed above scrollable content) #} + + +
    + + {# Validation errors #} + {% from '_partials/_validation_errors.html.twig' import validation_alert %} + {{ validation_alert(form) }} + + {% if dto.isInquiry %} + {% include '_partials/_alert.html.twig' with { + level: 'warning', + title: 'Diese Buchung wird als unverbindliche Anfrage behandelt', + messages: dto.inquiryReasons + } %} + {% endif %} + + {# Pax counts #} +

    + Personenanzahl und gewünschte Leistungen +

    + +
    + {{ form_row(form.paxCount) }} + {{ form_row(form.minorsCount) }} + {{ form_row(form.childrenCount) }} +
    + + {# Board services — rendered manually so price is formatted in Twig #} + {% do form.selectedBoardServiceId.setRendered %} + {% if ctx.boardServices is not empty %} +
    +
    + + Verpflegungsleistungen + + + + + + + + {% for service in ctx.boardServices %} + + + + + + {% endfor %} +
    + + + +
    + + {% if service.description %} +
    + + +
    + {% endif %} +
    +
    {{ (service.price / 100)|format_currency(ctx.accommodation.currency) }}
    +
    pro Person und Nacht
    +
    + +
    +
    +
    + {% endif %} + + {# Additional services — rendered manually to support checkbox/radio mix #} + {% do form.selectedAdditionalServiceIds.setRendered %} + {% set selectedAdditionalServiceBaseName = form.selectedAdditionalServiceIds.vars.full_name|replace({'[]': ''}) %} + + {% if ctx.ungroupedAdditionalServices is not empty or ctx.groupedAdditionalServices is not empty %} + + {# Ungrouped → checkboxes #} + {% if ctx.ungroupedAdditionalServices is not empty %} +
    +
    + + Optionale Zusatzleistungen + + + {% for service in ctx.ungroupedAdditionalServices %} + + + + + + {% endfor %} +
    + + {% if service.description %} +
    + + +
    + {% endif %} +
    +
    {{ (service.price / 100)|format_currency(ctx.accommodation.currency) }}
    +
    {{ service.type.label | trans }}
    +
    + +
    +
    +
    + {% endif %} + + {# Grouped → radio buttons per group, one fieldset per group #} + {% for groupName, services in ctx.groupedAdditionalServices %} +
    +
    + {{ groupName }} + + {% for service in services %} + + + + + + {% endfor %} +
    + + {% if service.description %} +
    + + +
    + {% endif %} +
    +
    {{ (service.price / 100)|format_currency(ctx.accommodation.currency) }}
    +
    {{ service.type.label | trans }}
    +
    + +
    +
    +
    + {% endfor %} + + {% endif %} + +
    +
    + {% endblock %} + +
    + +
    +
    + + Zurück + + +
    +
    + + {{ form_rest(form) }} + {{ form_end(form) }} +{% endblock %} diff --git a/templates/groups/booking/step_3.html.twig b/templates/groups/booking/step_3.html.twig new file mode 100644 index 0000000..eef8608 --- /dev/null +++ b/templates/groups/booking/step_3.html.twig @@ -0,0 +1,108 @@ +{% extends 'layout_booking.html.twig' %} + +{% block title %}Schritt 3: Persönliche Daten{% endblock %} + +{% block background %}bg-outer bg-outer--summer{% endblock %} + +{% block content %} + {% form_theme form 'booking/_form_theme.html.twig' %} + + {{ form_start(form, { + 'attr': { + 'class': 'flex-1 flex flex-col min-h-0', + 'novalidate': 'novalidate', + } + }) }} + + {# Pagination - mobile only (above summary) #} +
    + {% include 'groups/booking/_pagination.html.twig' with { 'current_step': 3 } %} +
    + +
    + + {# Static sidebar recap #} +
    + {% include 'groups/booking/_summary.html.twig' with { 'dto': dto, 'ctx': ctx } %} +
    + + {# Personal data form #} +
    + {% include '_partials/_flashes.html.twig' %} + + {# Pagination - desktop only (fixed above scrollable content) #} + + +
    +

    + Persönliche Daten +

    + + {# Validation errors #} + {% from '_partials/_validation_errors.html.twig' import validation_alert %} + {{ validation_alert(form, 'Bitte fülle alle Pflichtfelder aus.') }} + + {% if dto.isInquiry %} + {% include '_partials/_alert.html.twig' with { + level: 'warning', + title: 'Diese Buchung wird als unverbindliche Anfrage behandelt', + messages: dto.inquiryReasons + } %} + {% endif %} + +
    + {{ form_row(form.groupName) }} + {{ form_row(form.salutation) }} +
    + +
    + {{ form_row(form.firstName) }} + {{ form_row(form.lastName) }} +
    + +
    + {{ form_row(form.email) }} + {{ form_row(form.phone) }} +
    + +

    Adresse

    + + {{ form_row(form.street) }} + +
    + {{ form_row(form.zip) }} + {{ form_row(form.city) }} +
    + +

    Anmerkungen

    + {{ form_row(form.remarks) }} + +
    + {% if form.forceInquiry is defined %} + {{ form_row(form.forceInquiry) }} + {% endif %} +
    +
    +
    + +
    + +
    +
    + + Zurück + +
    + +
    +
    +
    + + {{ form_rest(form) }} + {{ form_end(form) }} +{% endblock %} diff --git a/templates/groups/booking/step_4.html.twig b/templates/groups/booking/step_4.html.twig new file mode 100644 index 0000000..72ff1a5 --- /dev/null +++ b/templates/groups/booking/step_4.html.twig @@ -0,0 +1,74 @@ +{% extends 'layout_booking.html.twig' %} + +{% block title %}Buchung bestätigen{% endblock %} + +{% block background %}bg-outer bg-outer--summer{% endblock %} + +{% block content %} + {# Pagination - mobile only (above summary) #} +
    + {% include 'groups/booking/_pagination.html.twig' with { 'current_step': 4 } %} +
    + +
    + + {# Static sidebar recap #} +
    + {% include 'groups/booking/_summary.html.twig' with { 'dto': dto, 'ctx': ctx } %} +
    + + {# Confirmation recap #} +
    + {% include '_partials/_flashes.html.twig' %} + + {# Pagination - desktop only (fixed above scrollable content) #} + + +
    +

    + Bitte bestätige deine Angaben +

    + + {% if dto.isInquiry %} + {% include '_partials/_alert.html.twig' with { + level: 'warning', + title: 'Diese Buchung wird als unverbindliche Anfrage behandelt', + messages: dto.inquiryReasons + } %} + {% endif %} + + {% include 'groups/booking/_step4_services_recap.html.twig' with { 'dto': dto, 'ctx': ctx } %} + {% include 'groups/booking/_step4_personal_data_recap.html.twig' with { 'dto': dto } %} +
    +
    + +
    + +
    +
    + + Zurück + +
    + + +
    +
    +
    +{% endblock %} diff --git a/templates/groups/booking/success.html.twig b/templates/groups/booking/success.html.twig new file mode 100644 index 0000000..9e354a5 --- /dev/null +++ b/templates/groups/booking/success.html.twig @@ -0,0 +1,19 @@ +{% extends 'layout.html.twig' %} + +{% block title %}{{ resultType == 'booking' ? 'Buchung erfolgreich' : 'Anfrage erfolgreich' }}{% endblock %} + +{% block background %}bg-outer bg-outer--summer{% endblock %} + +{% block content %} +
    + {% include '_partials/_alert.html.twig' with { + level: 'success', + title: 'Vielen Dank!', + messages: [ + resultType == 'booking' + ? 'Deine Buchung ist bei uns eingegangen. Du erhältst in Kürze eine Bestätigung.' + : 'Deine Anfrage ist bei uns eingegangen. Wir melden uns so schnell wie möglich bei dir.' + ] + } %} +
    +{% endblock %} diff --git a/templates/htmx_confirmation_modal.html.twig b/templates/htmx_confirmation_modal.html.twig index 7a3cd93..551814f 100644 --- a/templates/htmx_confirmation_modal.html.twig +++ b/templates/htmx_confirmation_modal.html.twig @@ -14,7 +14,12 @@
    {% block content %}{% endblock %}
    -
    -
    +
    {% block content %}{% endblock %}
    diff --git a/templates/htmx_modal_admin.html.twig b/templates/htmx_modal_admin.html.twig new file mode 100644 index 0000000..7cacb9e --- /dev/null +++ b/templates/htmx_modal_admin.html.twig @@ -0,0 +1,23 @@ +
    +
    +
    +
    +
    +
    + {% block title %}{% endblock %} +
    + +
    +
    +
    + {% block content %}{% endblock %} +
    +
    +
    +
    +
    diff --git a/templates/layout_admin.html.twig b/templates/layout_admin.html.twig index 1840214..aa8bb85 100644 --- a/templates/layout_admin.html.twig +++ b/templates/layout_admin.html.twig @@ -17,7 +17,7 @@
    {% endif %}
    - + {% include '_partials/_flashes_admin.html.twig' %} {% endblock %} diff --git a/tests/BusProNet/XmlParser/CrmAttributesResponseParserTest.php b/tests/BusProNet/XmlParser/CrmAttributesResponseParserTest.php new file mode 100644 index 0000000..21dced6 --- /dev/null +++ b/tests/BusProNet/XmlParser/CrmAttributesResponseParserTest.php @@ -0,0 +1,92 @@ +parser = new CrmAttributesResponseParser(); + } + + public function testParseAssignsGroupsManagerRoleWhenSelected(): void + { + $roles = $this->parseRoles($this->selectionXml(1477, true)); + + self::assertContains('ROLE_GROUPS_MANAGER', $roles); + self::assertNotContains('ROLE_GROUPS_ADMIN', $roles); + } + + public function testParseAssignsGroupsAdminRoleWhenSelected(): void + { + $roles = $this->parseRoles($this->selectionXml(1478, true)); + + self::assertContains('ROLE_GROUPS_ADMIN', $roles); + self::assertNotContains('ROLE_GROUPS_MANAGER', $roles); + } + + public function testParseAssignsNoGroupsRolesWhenNotSelected(): void + { + $roles = $this->parseRoles($this->selectionXml(1477, false)); + + self::assertNotContains('ROLE_GROUPS_MANAGER', $roles); + self::assertNotContains('ROLE_GROUPS_ADMIN', $roles); + self::assertSame(['ROLE_CUSTOMER'], $roles); + } + + public function testParseStillAssignsExistingAdminManagerTeamerRoles(): void + { + $xmlContent = ' + + + + + + + + + + +'; + + $roles = $this->parseRoles($xmlContent); + + self::assertContains('ROLE_ADMIN', $roles); + self::assertContains('ROLE_MANAGER', $roles); + self::assertContains('ROLE_TEAMER', $roles); + self::assertContains('ROLE_HOUSE_MANAGER', $roles); + } + + /** + * @return string[] + */ + private function parseRoles(string $xmlContent): array + { + $crawler = new Crawler($xmlContent); + $resultNode = $crawler->filterXPath('//ergebnis'); + + return $this->parser->parse($resultNode)->roles; + } + + private function selectionXml(int $id, bool $selected): string + { + return sprintf(' + + + + + + + + +', $id, $selected ? 'True' : 'False'); + } +} diff --git a/tests/Controller/Accommodation/IndexControllerTest.php b/tests/Controller/Accommodation/IndexControllerTest.php new file mode 100644 index 0000000..b8d05e5 --- /dev/null +++ b/tests/Controller/Accommodation/IndexControllerTest.php @@ -0,0 +1,89 @@ +getFlashBag()->add('groups_booking_result', 'booking'); + + $request = Request::create('/groups/booking/success', 'GET'); + $request->setSession($session); + + $controller = $this->makeController(); + + $response = $controller->success($request); + + self::assertSame(200, $response->getStatusCode()); + self::assertSame('groups/booking/success.html.twig', $controller->renderedView); + self::assertSame('booking', $controller->renderedParameters['resultType']); + // The flash is read-once: a second read on the same request returns nothing. + self::assertSame([], $session->getFlashBag()->get('groups_booking_result')); + } + + public function testSuccessRedirectsToLoginWhenFlashIsMissing(): void + { + $session = new Session(new MockArraySessionStorage()); + + $request = Request::create('/groups/booking/success', 'GET'); + $request->setSession($session); + + $controller = $this->makeController(); + + $response = $controller->success($request); + + self::assertInstanceOf(RedirectResponse::class, $response); + self::assertSame('/app_login', $response->headers->get('Location')); + } + + private function makeController(): TestableAccommodationIndexController + { + return new TestableAccommodationIndexController( + $this->createMock(AccommodationBookingService::class), + $this->createMock(AccommodationSessionManager::class), + ); + } +} + +final class TestableAccommodationIndexController extends IndexController +{ + /** + * @var array + */ + public array $renderedParameters = []; + + public string $renderedView = ''; + + /** + * @param array $parameters + */ + protected function redirectToRoute(string $route, array $parameters = [], int $status = 302): RedirectResponse + { + return new RedirectResponse('/'.$route, $status); + } + + /** + * @param array $parameters + */ + protected function render(string $view, array $parameters = [], ?Response $response = null): Response + { + $this->renderedView = $view; + $this->renderedParameters = $parameters; + + return new Response('ok'); + } +} diff --git a/tests/Controller/Accommodation/Step1ControllerTest.php b/tests/Controller/Accommodation/Step1ControllerTest.php new file mode 100644 index 0000000..7de0762 --- /dev/null +++ b/tests/Controller/Accommodation/Step1ControllerTest.php @@ -0,0 +1,164 @@ +accommodationId = 1; + + $session = new Session(new MockArraySessionStorage()); + $request = Request::create('/groups/booking/step-1', 'POST', [ + 'date_from' => '2026-08-03', + 'date_to' => '2026-08-07', + ]); + $request->setSession($session); + + $sessionManager = new AccommodationSessionManager(); + $sessionManager->save($request, $dto); + + $accommodation = (new Accommodation()) + ->setName('Hotel') + ->setCalendarCode('HOTEL') + ->setMaxAdolescentAge(17); + + $bookingService = $this->createMock(AccommodationBookingService::class); + $bookingService + ->method('applyDates') + ->willReturnCallback(static function (AccommodationBookingDto $dto): void { + $dto->dateFrom = new \DateTimeImmutable('2026-08-03'); + $dto->dateTo = new \DateTimeImmutable('2026-08-07'); + }); + $bookingService + ->method('loadAccommodation') + ->with(1) + ->willReturn($accommodation); + $bookingService + ->method('computeInitialPaxCount') + ->willReturn(4); + + $controller = $this->makeController($bookingService, $sessionManager); + + $response = $controller->index($request); + + self::assertInstanceOf(RedirectResponse::class, $response); + self::assertSame('/app_groups_booking_step_2', $response->headers->get('Location')); + + $savedDto = $sessionManager->getOrFail($request); + self::assertSame(2, $savedDto->currentStep); + self::assertSame(4, $savedDto->paxCount); + self::assertNull($savedDto->selectedBoardServiceId); + self::assertSame([], $savedDto->selectedAdditionalServiceIds); + } + + public function testPostWithInvalidDatesRedirectsBackWithFlash(): void + { + $dto = new AccommodationBookingDto(); + $dto->accommodationId = 1; + + $session = new Session(new MockArraySessionStorage()); + $request = Request::create('/groups/booking/step-1', 'POST', [ + 'date_from' => 'not-a-date', + 'date_to' => '2026-08-07', + ]); + $request->setSession($session); + + $sessionManager = new AccommodationSessionManager(); + $sessionManager->save($request, $dto); + + $bookingService = $this->createMock(AccommodationBookingService::class); + $bookingService + ->method('applyDates') + ->willThrowException(new \InvalidArgumentException('Ungültiges Datumsformat. Erwartet: YYYY-MM-DD.')); + + $controller = $this->makeController($bookingService, $sessionManager); + + $response = $controller->index($request); + + self::assertInstanceOf(RedirectResponse::class, $response); + self::assertSame('/app_groups_booking_step_1', $response->headers->get('Location')); + } + + private function makeController( + AccommodationBookingService $bookingService, + AccommodationSessionManager $sessionManager, + ): TestableAccommodationStep1Controller { + return new TestableAccommodationStep1Controller( + $bookingService, + $sessionManager, + $this->createMock(ContingentsClient::class), + $this->createMock(AccommodationPriceRepository::class), + new PriceTimelineBuilder(), + $this->createMock(CacheInterface::class), + new CalendarGridBuilder(), + new GroupsPriceCalculator(new PriceTimelineBuilder(), ['runningCostsEur' => 0, 'runningCostsChf' => 0, 'undersubscription30Eur' => 0, 'undersubscription30Chf' => 0, 'undersubscription40Eur' => 0, 'undersubscription40Chf' => 0]), + ); + } +} + +final class TestableAccommodationStep1Controller extends Step1Controller +{ + public function __construct( + AccommodationBookingService $bookingService, + AccommodationSessionManager $sessionManager, + ContingentsClient $contingentsClient, + AccommodationPriceRepository $priceRepository, + PriceTimelineBuilder $priceTimelineBuilder, + CacheInterface $cache, + CalendarGridBuilder $calendarGridBuilder, + GroupsPriceCalculator $priceCalculator, + ) { + parent::__construct( + $bookingService, + $sessionManager, + $contingentsClient, + $priceRepository, + $priceTimelineBuilder, + $cache, + $calendarGridBuilder, + $priceCalculator, + ); + } + + /** + * @param array $parameters + */ + protected function redirectToRoute(string $route, array $parameters = [], int $status = 302): RedirectResponse + { + return new RedirectResponse('/'.$route, $status); + } + + /** + * @param array $parameters + */ + protected function render(string $view, array $parameters = [], ?Response $response = null): Response + { + throw new \LogicException('Render should not be called in this test.'); + } + + protected function addFlash(string $type, mixed $message): void + { + } +} diff --git a/tests/Controller/Accommodation/Step2ControllerTest.php b/tests/Controller/Accommodation/Step2ControllerTest.php new file mode 100644 index 0000000..f4e3951 --- /dev/null +++ b/tests/Controller/Accommodation/Step2ControllerTest.php @@ -0,0 +1,137 @@ +currentStep = 2; + $dto->accommodationId = 1; + $dto->dateFrom = new \DateTimeImmutable('2026-03-01'); + $dto->dateTo = new \DateTimeImmutable('2026-03-05'); + $dto->paxCount = 1; + + $session = new Session(new MockArraySessionStorage()); + $request = Request::create('/groups/booking/step-2', 'POST'); + $request->setSession($session); + + $sessionManager = new AccommodationSessionManager(); + $sessionManager->save($request, $dto); + + $form = $this->createMock(FormInterface::class); + $form + ->method('handleRequest') + ->willReturnCallback(function () use ($dto, $form): FormInterface { + $dto->paxCount = 3; + + return $form; + }); + $form + ->method('isSubmitted') + ->willReturn(true); + $form + ->method('isValid') + ->willReturn(true); + + $accommodation = (new Accommodation()) + ->setName('Hotel') + ->setCalendarCode('HOTEL') + ->setMaxAdolescentAge(17); + + $bookingService = $this->createMock(AccommodationBookingService::class); + $bookingService + ->method('loadAccommodation') + ->with(1) + ->willReturn($accommodation); + $bookingService + ->method('loadPrices') + ->with($dto, $accommodation) + ->willReturn([]); + $bookingService + ->method('loadAvailableServices') + ->with($dto, $accommodation) + ->willReturn([ + 'boardServices' => [], + 'additionalServices' => [], + 'groupedAdditionalServices' => [], + 'ungroupedAdditionalServices' => [], + ]); + $bookingService + ->expects(self::once()) + ->method('computeInquiryStatus') + ->with(self::callback(static fn (AccommodationBookingDto $submittedDto): bool => 3 === $submittedDto->paxCount), []) + ->willReturn(new InquiryStatus(true, ['Mindestaufenthalt: 5 Nächte (gebucht: 4)'])); + + $controller = new TestableAccommodationStep2Controller( + $bookingService, + $sessionManager, + new GroupsPriceCalculator(new PriceTimelineBuilder(), ['runningCostsEur' => 0, 'runningCostsChf' => 0, 'undersubscription30Eur' => 0, 'undersubscription30Chf' => 0, 'undersubscription40Eur' => 0, 'undersubscription40Chf' => 0]), + $form, + ); + + $response = $controller->index($request); + + self::assertInstanceOf(RedirectResponse::class, $response); + self::assertSame('/groups/booking/step-3', $response->headers->get('Location')); + self::assertTrue($sessionManager->getOrFail($request)->isInquiry); + } +} + +final class TestableAccommodationStep2Controller extends Step2Controller +{ + /** + * @param FormInterface $form + */ + public function __construct( + AccommodationBookingService $bookingService, + AccommodationSessionManager $sessionManager, + GroupsPriceCalculator $priceCalculator, + private readonly FormInterface $form, + ) { + parent::__construct($bookingService, $sessionManager, $priceCalculator); + } + + /** + * @return FormInterface + */ + protected function createForm(string $type, mixed $data = null, array $options = []): FormInterface + { + return $this->form; + } + + /** + * @param array $parameters + */ + protected function redirectToRoute(string $route, array $parameters = [], int $status = 302): RedirectResponse + { + return new RedirectResponse('/groups/booking/step-3', $status); + } + + /** + * @param array $parameters + */ + protected function render(string $view, array $parameters = [], ?Response $response = null): Response + { + throw new \LogicException('Render should not be called in this test.'); + } +} diff --git a/tests/Controller/Accommodation/Step3ControllerTest.php b/tests/Controller/Accommodation/Step3ControllerTest.php new file mode 100644 index 0000000..b2571c3 --- /dev/null +++ b/tests/Controller/Accommodation/Step3ControllerTest.php @@ -0,0 +1,224 @@ +currentStep = 3; + $dto->accommodationId = 1; + $dto->dateFrom = new \DateTimeImmutable('2026-03-01'); + $dto->dateTo = new \DateTimeImmutable('2026-03-05'); + $dto->selectedBoardServiceId = 10; + $dto->selectedAdditionalServiceIds = [20]; + + $session = new Session(new MockArraySessionStorage()); + $request = Request::create('/groups/booking/step-3', 'GET'); + $request->setSession($session); + + $sessionManager = new AccommodationSessionManager(); + $sessionManager->save($request, $dto); + + $form = $this->createFormMock(submitted: false, valid: false); + + $accommodation = (new Accommodation()) + ->setName('Hotel') + ->setCalendarCode('HOTEL') + ->setMaxAdolescentAge(17); + + $boardService = (new BoardService())->setLabel('Halbpension')->setPrice(1000); + $additionalService = (new AdditionalService())->setLabel('Skipass')->setPrice(2000); + + $bookingService = $this->createMock(AccommodationBookingService::class); + $bookingService + ->method('loadAccommodation') + ->with(1) + ->willReturn($accommodation); + $bookingService + ->expects(self::once()) + ->method('loadAvailableServices') + ->with($dto, $accommodation) + ->willReturn([ + 'boardServices' => [$boardService], + 'additionalServices' => [$additionalService], + 'groupedAdditionalServices' => [], + 'ungroupedAdditionalServices' => [$additionalService], + ]); + + $controller = new TestableAccommodationStep3Controller($bookingService, $sessionManager, $form); + + $response = $controller->index($request); + + self::assertSame(200, $response->getStatusCode()); + self::assertSame('groups/booking/step_3.html.twig', $controller->renderedView); + self::assertSame([$boardService], $controller->renderedParameters['ctx']->boardServices); + self::assertSame([$additionalService], $controller->renderedParameters['ctx']->additionalServices); + } + + public function testValidSubmitRedirectsToStep4WithoutPersisting(): void + { + $dto = new AccommodationBookingDto(); + $dto->currentStep = 3; + $dto->accommodationId = 1; + $dto->isInquiry = false; + + $session = new Session(new MockArraySessionStorage()); + $request = Request::create('/groups/booking/step-3', 'POST'); + $request->setSession($session); + + $sessionManager = new AccommodationSessionManager(); + $sessionManager->save($request, $dto); + + $form = $this->createFormMock(submitted: true, valid: true); + + $accommodation = (new Accommodation()) + ->setName('Hotel') + ->setCalendarCode('HOTEL') + ->setMaxAdolescentAge(17); + + $bookingService = $this->createMock(AccommodationBookingService::class); + $bookingService->method('loadAccommodation')->with(1)->willReturn($accommodation); + $bookingService->method('loadAvailableServices')->willReturn([ + 'boardServices' => [], + 'additionalServices' => [], + 'groupedAdditionalServices' => [], + 'ungroupedAdditionalServices' => [], + ]); + $bookingService->expects(self::never())->method('finalizeBooking'); + + $controller = new TestableAccommodationStep3Controller($bookingService, $sessionManager, $form); + + $response = $controller->index($request); + + self::assertInstanceOf(RedirectResponse::class, $response); + self::assertSame('/app_groups_booking_step_4', $response->getTargetUrl()); + self::assertSame(4, $dto->currentStep); + self::assertSame($dto, $sessionManager->getDto($request)); + } + + public function testInvalidSubmitReRendersFormWithErrors(): void + { + $dto = new AccommodationBookingDto(); + $dto->currentStep = 3; + $dto->accommodationId = 1; + + $session = new Session(new MockArraySessionStorage()); + $request = Request::create('/groups/booking/step-3', 'POST'); + $request->setSession($session); + + $sessionManager = new AccommodationSessionManager(); + $sessionManager->save($request, $dto); + + $form = $this->createFormMock(submitted: true, valid: false); + + $accommodation = (new Accommodation()) + ->setName('Hotel') + ->setCalendarCode('HOTEL') + ->setMaxAdolescentAge(17); + + $bookingService = $this->createMock(AccommodationBookingService::class); + $bookingService->method('loadAccommodation')->with(1)->willReturn($accommodation); + $bookingService->method('loadAvailableServices')->willReturn([ + 'boardServices' => [], + 'additionalServices' => [], + 'groupedAdditionalServices' => [], + 'ungroupedAdditionalServices' => [], + ]); + + $controller = new TestableAccommodationStep3Controller($bookingService, $sessionManager, $form); + + $response = $controller->index($request); + + self::assertSame(200, $response->getStatusCode()); + self::assertSame('groups/booking/step_3.html.twig', $controller->renderedView); + self::assertSame(3, $dto->currentStep); + self::assertSame($dto, $sessionManager->getDto($request)); + } + + private function createFormMock(bool $submitted, bool $valid): FormInterface + { + $form = $this->createMock(FormInterface::class); + $form->method('handleRequest')->willReturnSelf(); + $form->method('isSubmitted')->willReturn($submitted); + $form->method('isValid')->willReturn($valid); + + return $form; + } +} + +final class TestableAccommodationStep3Controller extends Step3Controller +{ + /** + * @var array + */ + public array $renderedParameters = []; + + public string $renderedView = ''; + + public function __construct( + AccommodationBookingService $bookingService, + AccommodationSessionManager $sessionManager, + private readonly FormInterface $form, + ) { + parent::__construct($bookingService, $sessionManager); + } + + /** + * @return FormInterface + */ + protected function createForm(string $type, mixed $data = null, array $options = []): FormInterface + { + return $this->form; + } + + /** + * @param array $parameters + */ + protected function redirectToRoute(string $route, array $parameters = [], int $status = 302): RedirectResponse + { + return new RedirectResponse('/'.$route, $status); + } + + /** + * @param array $parameters + */ + protected function generateUrl(string $route, array $parameters = [], int $referenceType = 1): string + { + return '/'.$route; + } + + protected function addFlash(string $type, mixed $message): void + { + // no-op: avoids requiring a full service container in these unit tests + } + + /** + * @param array $parameters + */ + protected function render(string $view, array $parameters = [], ?Response $response = null): Response + { + $this->renderedView = $view; + $this->renderedParameters = $parameters; + + return new Response('ok'); + } +} diff --git a/tests/Controller/Api/AccommodationBookingControllerTest.php b/tests/Controller/Api/AccommodationBookingControllerTest.php new file mode 100644 index 0000000..a1eb6c2 --- /dev/null +++ b/tests/Controller/Api/AccommodationBookingControllerTest.php @@ -0,0 +1,304 @@ +setName('Berghotel'); + $accommodation->setCalendarCode('CAL123'); + $accommodation->setCmsCode('CMS456'); + $accommodation->setMaxAdolescentAge(15); + $accommodation->setCurrency('EUR'); + + $booking = new AccommodationBooking(); + $booking->setAccommodation($accommodation); + $booking->setDateFrom(new \DateTimeImmutable('2026-07-20')); + $booking->setDateTo(new \DateTimeImmutable('2026-07-25')); + $booking->setPaxCount(40); + $booking->setMinorsCount(2); + $booking->setChildrenCount(1); + $booking->setGroupName('Schulklasse 7b'); + $booking->setSalutation('Frau'); + $booking->setFirstName('Mia'); + $booking->setLastName('Muster'); + $booking->setEmail('mia@example.com'); + $booking->setPhone('+49123456789'); + $booking->setStreet('Musterstr. 1'); + $booking->setZip('12345'); + $booking->setCity('Musterstadt'); + $booking->setRemarks('Bitte am Bahnhof abholen'); + $booking->setBoardServiceLabel('Halbpension'); + $booking->setBoardServicePrice(1500); + $booking->addAdditionalServiceSnapshot('Bettwäsche', 500, 'flat', 3); + $booking->setAccommodationDiscount(10); + $booking->setBoardServiceDiscount(20); + $booking->setAdditionalServicesDiscount(30); + $booking->setIsInquiry(false); + $booking->setAcceptedAt(new \DateTimeImmutable('2026-07-15T10:00:00+00:00')); + + $bookingRepository = $this->createMock(AccommodationBookingRepository::class); + $bookingRepository + ->expects(self::once()) + ->method('findOneBy') + ->with(['uuid' => $booking->getUuid()]) + ->willReturn($booking); + + $breakdown = ['total' => 12345, 'currency' => 'EUR']; + $booking->setPriceSnapshot($breakdown, 11111, 'EUR', 1); + $breakdownCalculator = $this->createMock(AccommodationBookingBreakdownCalculator::class); + $breakdownCalculator + ->expects(self::once()) + ->method('compute') + ->with($booking) + ->willReturn($breakdown); + + $bookingService = $this->createMock(AccommodationBookingService::class); + $bookingService->expects(self::never())->method('acceptBooking'); + + $controller = new AccommodationBookingController($bookingRepository, $breakdownCalculator, $this->serializer(), $bookingService); + + $response = $controller->single($booking->getUuid()); + $payload = json_decode((string) $response->getContent(), true, 512, JSON_THROW_ON_ERROR); + + self::assertSame(Response::HTTP_OK, $response->getStatusCode()); + self::assertSame([ + 'uuid' => $booking->getUuid(), + 'status' => 'booking', + 'dateFrom' => '2026-07-20', + 'dateTo' => '2026-07-25', + 'nights' => 5, + 'paxCount' => 40, + 'minorsCount' => 2, + 'childrenCount' => 1, + 'groupName' => 'Schulklasse 7b', + 'acceptedAt' => '2026-07-15T10:00:00+00:00', + 'personalData' => [ + 'salutation' => 'Frau', + 'firstName' => 'Mia', + 'lastName' => 'Muster', + 'email' => 'mia@example.com', + 'phone' => '+49123456789', + 'street' => 'Musterstr. 1', + 'zip' => '12345', + 'city' => 'Musterstadt', + 'remarks' => 'Bitte am Bahnhof abholen', + ], + 'accommodation' => [ + 'calendarCode' => 'CAL123', + 'cmsCode' => 'CMS456', + ], + 'boardService' => [ + 'label' => 'Halbpension', + 'price' => 1500, + ], + 'additionalServices' => [ + [ + 'label' => 'Bettwäsche', + 'price' => 500, + 'type' => 'flat', + ], + ], + 'accommodationDiscount' => 10, + 'boardServiceDiscount' => 20, + 'additionalServicesDiscount' => 30, + 'totalPrice' => 11111, + 'pricingCurrency' => 'EUR', + 'pricingVersion' => 1, + 'priceBreakdown' => $breakdown, + ], $payload); + + // CMS-only accommodation fields must not leak into the response. + self::assertArrayNotHasKey('name', $payload['accommodation']); + self::assertArrayNotHasKey('maxAdolescentAge', $payload['accommodation']); + self::assertArrayNotHasKey('currency', $payload['accommodation']); + } + + public function testSingleReturnsInquiryStatusWhenBookingIsInquiry(): void + { + $booking = new AccommodationBooking(); + $booking->setDateFrom(new \DateTimeImmutable('2026-08-01')); + $booking->setDateTo(new \DateTimeImmutable('2026-08-02')); + $booking->setGroupName('Verein e.V.'); + $booking->setFirstName('Tom'); + $booking->setLastName('Beispiel'); + $booking->setEmail('tom@example.com'); + $booking->setIsInquiry(true); + + $bookingRepository = $this->createMock(AccommodationBookingRepository::class); + $bookingRepository + ->method('findOneBy') + ->with(['uuid' => $booking->getUuid()]) + ->willReturn($booking); + + $breakdownCalculator = $this->createMock(AccommodationBookingBreakdownCalculator::class); + $breakdownCalculator->method('compute')->willReturn(null); + + $controller = new AccommodationBookingController($bookingRepository, $breakdownCalculator, $this->serializer(), $this->createMock(AccommodationBookingService::class)); + + $response = $controller->single($booking->getUuid()); + $payload = json_decode((string) $response->getContent(), true, 512, JSON_THROW_ON_ERROR); + + self::assertSame('inquiry', $payload['status']); + self::assertNull($payload['priceBreakdown']); + self::assertNull($payload['acceptedAt']); + } + + public function testSingleReturnsNotFoundForUnknownUuid(): void + { + $bookingRepository = $this->createMock(AccommodationBookingRepository::class); + $bookingRepository + ->expects(self::once()) + ->method('findOneBy') + ->with(['uuid' => 'unknown-uuid']) + ->willReturn(null); + + $breakdownCalculator = $this->createMock(AccommodationBookingBreakdownCalculator::class); + $breakdownCalculator->expects(self::never())->method('compute'); + + $controller = new AccommodationBookingController($bookingRepository, $breakdownCalculator, $this->serializer(), $this->createMock(AccommodationBookingService::class)); + + $response = $controller->single('unknown-uuid'); + $payload = json_decode((string) $response->getContent(), true, 512, JSON_THROW_ON_ERROR); + + self::assertSame(Response::HTTP_NOT_FOUND, $response->getStatusCode()); + self::assertSame(['message' => 'Not found'], $payload); + } + + public function testAcceptTransitionsInquiryToBookingAndSetsAcceptedAt(): void + { + $booking = new AccommodationBooking(); + $booking->setDateFrom(new \DateTimeImmutable('2026-08-01')); + $booking->setDateTo(new \DateTimeImmutable('2026-08-02')); + $booking->setGroupName('Verein e.V.'); + $booking->setFirstName('Tom'); + $booking->setLastName('Beispiel'); + $booking->setEmail('tom@example.com'); + $booking->setIsInquiry(true); + + $bookingRepository = $this->createMock(AccommodationBookingRepository::class); + $bookingRepository + ->expects(self::once()) + ->method('findOneBy') + ->with(['uuid' => $booking->getUuid()]) + ->willReturn($booking); + + $breakdownCalculator = $this->createMock(AccommodationBookingBreakdownCalculator::class); + $breakdownCalculator->method('compute')->willReturn(null); + + $bookingService = $this->createMock(AccommodationBookingService::class); + $bookingService + ->expects(self::once()) + ->method('acceptBooking') + ->with($booking) + ->willReturnCallback(static function (AccommodationBooking $b): void { + $b->setIsInquiry(false); + $b->setAcceptedAt(new \DateTimeImmutable()); + }); + + $controller = new AccommodationBookingController($bookingRepository, $breakdownCalculator, $this->serializer(), $bookingService); + + $response = $controller->accept($booking->getUuid()); + $payload = json_decode((string) $response->getContent(), true, 512, JSON_THROW_ON_ERROR); + + self::assertSame(Response::HTTP_OK, $response->getStatusCode()); + self::assertSame('booking', $payload['status']); + self::assertFalse($booking->isInquiry()); + self::assertNotNull($booking->getAcceptedAt()); + self::assertSame($booking->getAcceptedAt()->format(\DATE_ATOM), $payload['acceptedAt']); + } + + public function testAcceptIsIdempotentWhenBookingAlreadyAccepted(): void + { + $acceptedAt = new \DateTimeImmutable('2026-07-15T10:00:00+00:00'); + + $booking = new AccommodationBooking(); + $booking->setDateFrom(new \DateTimeImmutable('2026-08-01')); + $booking->setDateTo(new \DateTimeImmutable('2026-08-02')); + $booking->setGroupName('Verein e.V.'); + $booking->setFirstName('Tom'); + $booking->setLastName('Beispiel'); + $booking->setEmail('tom@example.com'); + $booking->setIsInquiry(false); + $booking->setAcceptedAt($acceptedAt); + + $bookingRepository = $this->createMock(AccommodationBookingRepository::class); + $bookingRepository + ->method('findOneBy') + ->with(['uuid' => $booking->getUuid()]) + ->willReturn($booking); + + $breakdownCalculator = $this->createMock(AccommodationBookingBreakdownCalculator::class); + $breakdownCalculator->method('compute')->willReturn(null); + + $bookingService = $this->createMock(AccommodationBookingService::class); + $bookingService->expects(self::once())->method('acceptBooking')->with($booking); + + $controller = new AccommodationBookingController($bookingRepository, $breakdownCalculator, $this->serializer(), $bookingService); + + $response = $controller->accept($booking->getUuid()); + $payload = json_decode((string) $response->getContent(), true, 512, JSON_THROW_ON_ERROR); + + self::assertSame(Response::HTTP_OK, $response->getStatusCode()); + self::assertSame('booking', $payload['status']); + self::assertSame($acceptedAt, $booking->getAcceptedAt()); + self::assertSame($acceptedAt->format(\DATE_ATOM), $payload['acceptedAt']); + } + + public function testAcceptReturnsNotFoundForUnknownUuid(): void + { + $bookingRepository = $this->createMock(AccommodationBookingRepository::class); + $bookingRepository + ->expects(self::once()) + ->method('findOneBy') + ->with(['uuid' => 'unknown-uuid']) + ->willReturn(null); + + $breakdownCalculator = $this->createMock(AccommodationBookingBreakdownCalculator::class); + $breakdownCalculator->expects(self::never())->method('compute'); + + $bookingService = $this->createMock(AccommodationBookingService::class); + $bookingService->expects(self::never())->method('acceptBooking'); + + $controller = new AccommodationBookingController($bookingRepository, $breakdownCalculator, $this->serializer(), $bookingService); + + $response = $controller->accept('unknown-uuid'); + $payload = json_decode((string) $response->getContent(), true, 512, JSON_THROW_ON_ERROR); + + self::assertSame(Response::HTTP_NOT_FOUND, $response->getStatusCode()); + self::assertSame(['message' => 'Not found'], $payload); + } + + private function serializer(): Serializer + { + $classMetadataFactory = new ClassMetadataFactory(new AttributeLoader()); + + return new Serializer( + [ + new DateTimeNormalizer(), + new ObjectNormalizer($classMetadataFactory, propertyTypeExtractor: new ReflectionExtractor()), + ], + [new JsonEncoder()], + ); + } +} diff --git a/tests/Controller/Api/ContingentControllerTest.php b/tests/Controller/Api/ContingentControllerTest.php new file mode 100644 index 0000000..42ebe1b --- /dev/null +++ b/tests/Controller/Api/ContingentControllerTest.php @@ -0,0 +1,45 @@ +createMock(ContingentsClient::class), + $this->createMock(AccommodationRepository::class), + $this->createMock(AccommodationPriceRepository::class), + $this->createMock(CacheInterface::class), + new PriceTimelineBuilder(), + ); + + $price = new AccommodationPrice(); + $price->setDateFrom(new \DateTimeImmutable('2026-07-01')); + $price->setDateTo(new \DateTimeImmutable('2026-07-31')); + $price->setIncludedPax(4); + $price->setPricePerNight(12345); + $price->setPriceAdditionalPerson(1500); + $price->setMinNights(3); + + $method = new \ReflectionMethod($controller, 'enrichEntry'); + + $result = $method->invoke($controller, '2026-07-06', 'available', [$price], 'EUR'); + + self::assertSame(4, $result['includedPax']); + self::assertSame(3, $result['minNights']); + self::assertSame(123.45, $result['pricePerNight']); + self::assertSame('EUR', $result['currency']); + } +} diff --git a/tests/Controller/Groups/OfferControllerTest.php b/tests/Controller/Groups/OfferControllerTest.php new file mode 100644 index 0000000..4d7ad0d --- /dev/null +++ b/tests/Controller/Groups/OfferControllerTest.php @@ -0,0 +1,411 @@ +createMock(AccommodationBookingRepository::class); + $bookingRepository->method('findOneBy')->with(['uuid' => $booking->getUuid()])->willReturn($booking); + + $linkSigner = $this->createMock(AccommodationBookingLinkSigner::class); + $linkSigner->method('isValidLinkRequest')->willReturn(true); + $linkSigner->expects(self::once())->method('authorizeSession')->with(self::anything(), $booking); + + $controller = new TestableOfferController( + $bookingRepository, + $linkSigner, + $this->createMock(AccommodationBookingBreakdownCalculator::class), + $this->createMock(AccommodationBookingService::class), + ); + + $response = $controller->access($booking->getUuid(), Request::create('/groups/booking/offer/'.$booking->getUuid())); + + self::assertInstanceOf(RedirectResponse::class, $response); + self::assertSame('/app_groups_booking_offer_view?uuid='.$booking->getUuid(), $response->getTargetUrl()); + } + + public function testAccessRendersUnavailableForInvalidLink(): void + { + $booking = new AccommodationBooking(); + + $bookingRepository = $this->createMock(AccommodationBookingRepository::class); + $bookingRepository->method('findOneBy')->willReturn($booking); + + $linkSigner = $this->createMock(AccommodationBookingLinkSigner::class); + $linkSigner->method('isValidLinkRequest')->willReturn(false); + $linkSigner->expects(self::never())->method('authorizeSession'); + + $controller = new TestableOfferController( + $bookingRepository, + $linkSigner, + $this->createMock(AccommodationBookingBreakdownCalculator::class), + $this->createMock(AccommodationBookingService::class), + ); + + $response = $controller->access($booking->getUuid(), Request::create('/groups/booking/offer/'.$booking->getUuid())); + + self::assertSame(Response::HTTP_OK, $response->getStatusCode()); + self::assertSame('groups/booking/offer_unavailable.html.twig', $controller->renderedView); + } + + public function testAccessRendersUnavailableForUnknownUuid(): void + { + $bookingRepository = $this->createMock(AccommodationBookingRepository::class); + $bookingRepository->method('findOneBy')->willReturn(null); + + $linkSigner = $this->createMock(AccommodationBookingLinkSigner::class); + $linkSigner->expects(self::never())->method('isValidLinkRequest'); + + $controller = new TestableOfferController( + $bookingRepository, + $linkSigner, + $this->createMock(AccommodationBookingBreakdownCalculator::class), + $this->createMock(AccommodationBookingService::class), + ); + + $response = $controller->access('unknown-uuid', Request::create('/groups/booking/offer/unknown-uuid')); + + self::assertSame(Response::HTTP_OK, $response->getStatusCode()); + self::assertSame('groups/booking/offer_unavailable.html.twig', $controller->renderedView); + } + + public function testViewRendersOfferWhenSessionAuthorized(): void + { + $booking = new AccommodationBooking(); + $booking->setIsInquiry(true); + $booking->setAccommodation(new Accommodation()); + + $bookingRepository = $this->createMock(AccommodationBookingRepository::class); + $bookingRepository->method('findOneBy')->with(['uuid' => $booking->getUuid()])->willReturn($booking); + + $linkSigner = $this->createMock(AccommodationBookingLinkSigner::class); + $linkSigner->method('isSessionAuthorized')->willReturn(true); + + $breakdownCalculator = $this->createMock(AccommodationBookingBreakdownCalculator::class); + $breakdownCalculator->method('compute')->with($booking)->willReturn(['total' => 1000]); + + $bookingService = $this->createMock(AccommodationBookingService::class); + $bookingService->expects(self::never())->method('acceptBooking'); + $bookingService->method('loadHotelCmsData')->willReturn(null); + + $controller = new TestableOfferController($bookingRepository, $linkSigner, $breakdownCalculator, $bookingService); + + $request = Request::create('/groups/booking/offer/'.$booking->getUuid().'/view'); + $request->setSession(new Session(new MockArraySessionStorage())); + $response = $controller->view($booking->getUuid(), $request); + + self::assertSame(Response::HTTP_OK, $response->getStatusCode()); + self::assertSame('offer', $response->getContent()); + self::assertSame('groups/booking/offer.html.twig', $controller->renderedView); + self::assertSame($booking, $controller->renderedParameters['booking']); + self::assertSame(['total' => 1000], $controller->renderedParameters['priceBreakdown']); + self::assertSame($booking->getAccommodation(), $controller->renderedParameters['ctx']->accommodation); + } + + public function testViewRendersUnavailableWhenSessionNotAuthorized(): void + { + $booking = new AccommodationBooking(); + + $bookingRepository = $this->createMock(AccommodationBookingRepository::class); + $bookingRepository->method('findOneBy')->willReturn($booking); + + $linkSigner = $this->createMock(AccommodationBookingLinkSigner::class); + $linkSigner->method('isSessionAuthorized')->willReturn(false); + + $controller = new TestableOfferController( + $bookingRepository, + $linkSigner, + $this->createMock(AccommodationBookingBreakdownCalculator::class), + $this->createMock(AccommodationBookingService::class), + ); + + $response = $controller->view($booking->getUuid(), Request::create('/groups/booking/offer/'.$booking->getUuid().'/view')); + + self::assertSame(Response::HTTP_OK, $response->getStatusCode()); + self::assertSame('groups/booking/offer_unavailable.html.twig', $controller->renderedView); + } + + public function testConfirmGetRendersModalWithFreshForm(): void + { + $booking = new AccommodationBooking(); + $booking->setIsInquiry(true); + + $bookingRepository = $this->createMock(AccommodationBookingRepository::class); + $bookingRepository->method('findOneBy')->with(['uuid' => $booking->getUuid()])->willReturn($booking); + + $linkSigner = $this->createMock(AccommodationBookingLinkSigner::class); + $linkSigner->method('isSessionAuthorized')->willReturn(true); + + $confirmationForm = $this->createMock(FormInterface::class); + $confirmationForm->method('handleRequest')->willReturnSelf(); + $confirmationForm->method('isSubmitted')->willReturn(false); + + $controller = new TestableOfferController( + $bookingRepository, + $linkSigner, + $this->createMock(AccommodationBookingBreakdownCalculator::class), + $this->createMock(AccommodationBookingService::class), + $confirmationForm, + ); + + $response = $controller->confirm($booking->getUuid(), Request::create('/groups/booking/offer/'.$booking->getUuid().'/confirm')); + + self::assertSame(Response::HTTP_OK, $response->getStatusCode()); + self::assertSame('groups/booking/_offer_accept_confirmation_modal.html.twig', $controller->renderedView); + self::assertSame($booking, $controller->renderedParameters['booking']); + self::assertSame($confirmationForm, $controller->renderedParameters['confirmationForm']); + } + + public function testConfirmPostValidAcceptsBookingAndRedirects(): void + { + $booking = new AccommodationBooking(); + $booking->setIsInquiry(true); + + $bookingRepository = $this->createMock(AccommodationBookingRepository::class); + $bookingRepository->method('findOneBy')->willReturn($booking); + + $linkSigner = $this->createMock(AccommodationBookingLinkSigner::class); + $linkSigner->method('isSessionAuthorized')->willReturn(true); + + $bookingService = $this->createMock(AccommodationBookingService::class); + $bookingService->expects(self::once())->method('acceptBooking')->with($booking); + + $confirmationForm = $this->createMock(FormInterface::class); + $confirmationForm->method('handleRequest')->willReturnSelf(); + $confirmationForm->method('isSubmitted')->willReturn(true); + $confirmationForm->method('isValid')->willReturn(true); + + $controller = new TestableOfferController( + $bookingRepository, + $linkSigner, + $this->createMock(AccommodationBookingBreakdownCalculator::class), + $bookingService, + $confirmationForm, + ); + + $request = Request::create('/groups/booking/offer/'.$booking->getUuid().'/confirm', 'POST'); + $response = $controller->confirm($booking->getUuid(), $request); + + self::assertInstanceOf(RedirectResponse::class, $response); + self::assertSame('/app_groups_booking_offer_view?uuid='.$booking->getUuid(), $response->getTargetUrl()); + self::assertSame([['type' => 'success', 'message' => 'Deine Buchung ist bestätigt.']], $controller->flashes); + } + + public function testConfirmPostValidViaHtmxReturnsHxRedirect(): void + { + $booking = new AccommodationBooking(); + $booking->setIsInquiry(true); + + $bookingRepository = $this->createMock(AccommodationBookingRepository::class); + $bookingRepository->method('findOneBy')->willReturn($booking); + + $linkSigner = $this->createMock(AccommodationBookingLinkSigner::class); + $linkSigner->method('isSessionAuthorized')->willReturn(true); + + $bookingService = $this->createMock(AccommodationBookingService::class); + $bookingService->expects(self::once())->method('acceptBooking')->with($booking); + + $confirmationForm = $this->createMock(FormInterface::class); + $confirmationForm->method('handleRequest')->willReturnSelf(); + $confirmationForm->method('isSubmitted')->willReturn(true); + $confirmationForm->method('isValid')->willReturn(true); + + $controller = new TestableOfferController( + $bookingRepository, + $linkSigner, + $this->createMock(AccommodationBookingBreakdownCalculator::class), + $bookingService, + $confirmationForm, + ); + + $request = Request::create('/groups/booking/offer/'.$booking->getUuid().'/confirm', 'POST'); + $request->headers->set('HX-Request', 'true'); + $response = $controller->confirm($booking->getUuid(), $request); + + self::assertSame(Response::HTTP_OK, $response->getStatusCode()); + self::assertTrue($response->headers->has('HX-Redirect')); + } + + public function testConfirmPostInvalidReRendersModalWithoutAccepting(): void + { + $booking = new AccommodationBooking(); + $booking->setIsInquiry(true); + + $bookingRepository = $this->createMock(AccommodationBookingRepository::class); + $bookingRepository->method('findOneBy')->willReturn($booking); + + $linkSigner = $this->createMock(AccommodationBookingLinkSigner::class); + $linkSigner->method('isSessionAuthorized')->willReturn(true); + + $bookingService = $this->createMock(AccommodationBookingService::class); + $bookingService->expects(self::never())->method('acceptBooking'); + + $confirmationForm = $this->createMock(FormInterface::class); + $confirmationForm->method('handleRequest')->willReturnSelf(); + $confirmationForm->method('isSubmitted')->willReturn(true); + $confirmationForm->method('isValid')->willReturn(false); + + $controller = new TestableOfferController( + $bookingRepository, + $linkSigner, + $this->createMock(AccommodationBookingBreakdownCalculator::class), + $bookingService, + $confirmationForm, + ); + + $response = $controller->confirm($booking->getUuid(), Request::create('/groups/booking/offer/'.$booking->getUuid().'/confirm', 'POST')); + + self::assertSame(Response::HTTP_OK, $response->getStatusCode()); + self::assertFalse($response->headers->has('HX-Redirect')); + self::assertSame('groups/booking/_offer_accept_confirmation_modal.html.twig', $controller->renderedView); + } + + public function testConfirmRedirectsWhenAlreadyAccepted(): void + { + $booking = new AccommodationBooking(); + $booking->setIsInquiry(false); + + $bookingRepository = $this->createMock(AccommodationBookingRepository::class); + $bookingRepository->method('findOneBy')->willReturn($booking); + + $linkSigner = $this->createMock(AccommodationBookingLinkSigner::class); + $linkSigner->method('isSessionAuthorized')->willReturn(true); + + $controller = new TestableOfferController( + $bookingRepository, + $linkSigner, + $this->createMock(AccommodationBookingBreakdownCalculator::class), + $this->createMock(AccommodationBookingService::class), + ); + + $response = $controller->confirm($booking->getUuid(), Request::create('/groups/booking/offer/'.$booking->getUuid().'/confirm')); + + self::assertInstanceOf(RedirectResponse::class, $response); + } + + public function testConfirmRedirectsWhenSessionNotAuthorized(): void + { + $booking = new AccommodationBooking(); + + $bookingRepository = $this->createMock(AccommodationBookingRepository::class); + $bookingRepository->method('findOneBy')->willReturn($booking); + + $linkSigner = $this->createMock(AccommodationBookingLinkSigner::class); + $linkSigner->method('isSessionAuthorized')->willReturn(false); + + $controller = new TestableOfferController( + $bookingRepository, + $linkSigner, + $this->createMock(AccommodationBookingBreakdownCalculator::class), + $this->createMock(AccommodationBookingService::class), + ); + + $response = $controller->confirm($booking->getUuid(), Request::create('/groups/booking/offer/'.$booking->getUuid().'/confirm')); + + self::assertInstanceOf(RedirectResponse::class, $response); + } + + public function testConfirmRedirectsForUnknownUuid(): void + { + $bookingRepository = $this->createMock(AccommodationBookingRepository::class); + $bookingRepository->method('findOneBy')->willReturn(null); + + $linkSigner = $this->createMock(AccommodationBookingLinkSigner::class); + $linkSigner->expects(self::never())->method('isSessionAuthorized'); + + $controller = new TestableOfferController( + $bookingRepository, + $linkSigner, + $this->createMock(AccommodationBookingBreakdownCalculator::class), + $this->createMock(AccommodationBookingService::class), + ); + + $response = $controller->confirm('unknown-uuid', Request::create('/groups/booking/offer/unknown-uuid/confirm')); + + self::assertInstanceOf(RedirectResponse::class, $response); + } +} + +final class TestableOfferController extends OfferController +{ + public ?string $renderedView = null; + + /** @var array */ + public array $renderedParameters = []; + + public function __construct( + AccommodationBookingRepository $bookingRepository, + AccommodationBookingLinkSigner $linkSigner, + AccommodationBookingBreakdownCalculator $breakdownCalculator, + AccommodationBookingService $bookingService, + private readonly ?FormInterface $confirmationForm = null, + ) { + parent::__construct($bookingRepository, $linkSigner, $breakdownCalculator, $bookingService); + } + + protected function createForm(string $type, mixed $data = null, array $options = []): FormInterface + { + return $this->confirmationForm ?? throw new \LogicException('No confirmation form mock configured for this test.'); + } + + protected function getParameter(string $name): array|bool|string|int|float|\UnitEnum|null + { + return 'https://example.test/agb/'; + } + + /** + * @var array + */ + public array $flashes = []; + + protected function addFlash(string $type, mixed $message): void + { + $this->flashes[] = ['type' => $type, 'message' => $message]; + } + + /** + * @param array $parameters + */ + protected function generateUrl(string $route, array $parameters = [], int $referenceType = 1): string + { + return '/'.$route.'?'.http_build_query($parameters); + } + + protected function render(string $view, array $parameters = [], ?Response $response = null): Response + { + $this->renderedView = $view; + $this->renderedParameters = $parameters; + + if ('groups/booking/offer.html.twig' === $view) { + $content = $parameters['booking']->isInquiry() ? 'offer' : 'confirmed'; + } else { + $content = 'unavailable'; + } + + $response ??= new Response(); + $response->setContent($content); + + return $response; + } +} diff --git a/tests/Controller/Groups/Step4ControllerTest.php b/tests/Controller/Groups/Step4ControllerTest.php new file mode 100644 index 0000000..a4a89bc --- /dev/null +++ b/tests/Controller/Groups/Step4ControllerTest.php @@ -0,0 +1,402 @@ +currentStep = 4; + $dto->accommodationId = 1; + $dto->isInquiry = false; + + $session = new Session(new MockArraySessionStorage()); + $request = Request::create('/groups/booking/step-4', 'GET'); + $request->setSession($session); + + $sessionManager = new AccommodationSessionManager(); + $sessionManager->save($request, $dto); + + $accommodation = (new Accommodation()) + ->setName('Hotel') + ->setCalendarCode('HOTEL') + ->setMaxAdolescentAge(17); + + $bookingService = $this->createMock(AccommodationBookingService::class); + $bookingService->method('loadAccommodation')->with(1)->willReturn($accommodation); + $bookingService->method('loadAvailableServices')->willReturn([ + 'boardServices' => [], + 'additionalServices' => [], + 'groupedAdditionalServices' => [], + 'ungroupedAdditionalServices' => [], + ]); + + $controller = new TestableStep4Controller($bookingService, $sessionManager, $this->createMock(FormInterface::class)); + + $response = $controller->index($request); + + self::assertSame(200, $response->getStatusCode()); + self::assertSame('groups/booking/step_4.html.twig', $controller->renderedView); + self::assertSame($dto, $controller->renderedParameters['dto']); + } + + public function testIndexRedirectsToStep3WhenNotYetReached(): void + { + $dto = new AccommodationBookingDto(); + $dto->currentStep = 3; + $dto->accommodationId = 1; + + $session = new Session(new MockArraySessionStorage()); + $request = Request::create('/groups/booking/step-4', 'GET'); + $request->setSession($session); + + $sessionManager = new AccommodationSessionManager(); + $sessionManager->save($request, $dto); + + $controller = new TestableStep4Controller( + $this->createMock(AccommodationBookingService::class), + $sessionManager, + $this->createMock(FormInterface::class), + ); + + $response = $controller->index($request); + + self::assertInstanceOf(RedirectResponse::class, $response); + self::assertSame('/app_groups_booking_step_3', $response->getTargetUrl()); + } + + public function testIndexPostWithValidCsrfPersistsAsInquiryAndRedirects(): void + { + $dto = new AccommodationBookingDto(); + $dto->currentStep = 4; + $dto->accommodationId = 1; + + $session = new Session(new MockArraySessionStorage()); + $request = Request::create('/groups/booking/step-4', 'POST'); + $request->setSession($session); + + $sessionManager = new AccommodationSessionManager(); + $sessionManager->save($request, $dto); + + $accommodation = (new Accommodation()) + ->setName('Hotel') + ->setCalendarCode('HOTEL') + ->setMaxAdolescentAge(17); + + $booking = (new AccommodationBooking())->setIsInquiry(true); + + $bookingService = $this->createMock(AccommodationBookingService::class); + $bookingService->method('loadAccommodation')->with(1)->willReturn($accommodation); + $bookingService->method('loadAvailableServices')->willReturn([ + 'boardServices' => [], + 'additionalServices' => [], + 'groupedAdditionalServices' => [], + 'ungroupedAdditionalServices' => [], + ]); + $bookingService->method('loadPrices')->willReturn([]); + $bookingService->expects(self::once())->method('finalizeBooking')->willReturn($booking); + + $inquiryForm = $this->createMock(FormInterface::class); + $inquiryForm->method('handleRequest')->willReturnSelf(); + $inquiryForm->method('isSubmitted')->willReturn(true); + $inquiryForm->method('isValid')->willReturn(true); + + $controller = new TestableStep4Controller($bookingService, $sessionManager, $inquiryForm); + + $response = $controller->index($request); + + self::assertInstanceOf(RedirectResponse::class, $response); + self::assertSame('/app_groups_booking_success', $response->getTargetUrl()); + self::assertTrue($dto->forceInquiry); + self::assertNull($sessionManager->getDto($request)); + } + + public function testIndexPostWithInvalidFormThrowsAccessDenied(): void + { + $dto = new AccommodationBookingDto(); + $dto->currentStep = 4; + $dto->accommodationId = 1; + + $session = new Session(new MockArraySessionStorage()); + $request = Request::create('/groups/booking/step-4', 'POST'); + $request->setSession($session); + + $sessionManager = new AccommodationSessionManager(); + $sessionManager->save($request, $dto); + + $accommodation = (new Accommodation()) + ->setName('Hotel') + ->setCalendarCode('HOTEL') + ->setMaxAdolescentAge(17); + + $bookingService = $this->createMock(AccommodationBookingService::class); + $bookingService->method('loadAccommodation')->with(1)->willReturn($accommodation); + $bookingService->method('loadAvailableServices')->willReturn([ + 'boardServices' => [], + 'additionalServices' => [], + 'groupedAdditionalServices' => [], + 'ungroupedAdditionalServices' => [], + ]); + $bookingService->expects(self::never())->method('finalizeBooking'); + + $inquiryForm = $this->createMock(FormInterface::class); + $inquiryForm->method('handleRequest')->willReturnSelf(); + $inquiryForm->method('isSubmitted')->willReturn(true); + $inquiryForm->method('isValid')->willReturn(false); + + $controller = new TestableStep4Controller($bookingService, $sessionManager, $inquiryForm); + + $this->expectException(\Symfony\Component\Security\Core\Exception\AccessDeniedException::class); + + $controller->index($request); + } + + public function testConfirmInquiryGetRendersModal(): void + { + $dto = new AccommodationBookingDto(); + $dto->currentStep = 4; + $dto->accommodationId = 1; + + $session = new Session(new MockArraySessionStorage()); + $request = Request::create('/groups/booking/step-4/confirm-inquiry', 'GET'); + $request->setSession($session); + + $sessionManager = new AccommodationSessionManager(); + $sessionManager->save($request, $dto); + + $controller = new TestableStep4Controller( + $this->createMock(AccommodationBookingService::class), + $sessionManager, + $this->createMock(FormInterface::class), + ); + + $response = $controller->confirmInquiry($request); + + self::assertSame(200, $response->getStatusCode()); + self::assertSame('groups/booking/_step4_inquiry_confirmation_modal.html.twig', $controller->renderedView); + } + + public function testConfirmInquiryRedirectsToStep3WhenNotYetReached(): void + { + $dto = new AccommodationBookingDto(); + $dto->currentStep = 3; + $dto->accommodationId = 1; + + $session = new Session(new MockArraySessionStorage()); + $request = Request::create('/groups/booking/step-4/confirm-inquiry', 'GET'); + $request->setSession($session); + + $sessionManager = new AccommodationSessionManager(); + $sessionManager->save($request, $dto); + + $controller = new TestableStep4Controller( + $this->createMock(AccommodationBookingService::class), + $sessionManager, + $this->createMock(FormInterface::class), + ); + + $response = $controller->confirmInquiry($request); + + self::assertInstanceOf(RedirectResponse::class, $response); + self::assertSame('/app_groups_booking_step_3', $response->getTargetUrl()); + } + + public function testConfirmGetRendersModalWithFreshForm(): void + { + $dto = new AccommodationBookingDto(); + $dto->currentStep = 4; + $dto->accommodationId = 1; + + $session = new Session(new MockArraySessionStorage()); + $request = Request::create('/groups/booking/step-4/confirm', 'GET'); + $request->setSession($session); + + $sessionManager = new AccommodationSessionManager(); + $sessionManager->save($request, $dto); + + $accommodation = (new Accommodation()) + ->setName('Hotel') + ->setCalendarCode('HOTEL') + ->setMaxAdolescentAge(17); + + $bookingService = $this->createMock(AccommodationBookingService::class); + $bookingService->method('loadAccommodation')->with(1)->willReturn($accommodation); + $bookingService->expects(self::never())->method('finalizeBooking'); + + $confirmationForm = $this->createMock(FormInterface::class); + $confirmationForm->method('handleRequest')->willReturnSelf(); + $confirmationForm->method('isSubmitted')->willReturn(false); + + $controller = new TestableStep4Controller($bookingService, $sessionManager, $confirmationForm); + + $response = $controller->confirm($request); + + self::assertSame(200, $response->getStatusCode()); + self::assertSame('groups/booking/_step4_booking_confirmation_modal.html.twig', $controller->renderedView); + self::assertSame($confirmationForm, $controller->renderedParameters['confirmationForm']); + self::assertSame($dto, $sessionManager->getDto($request)); + } + + public function testConfirmPostValidPersistsAndRedirects(): void + { + $dto = new AccommodationBookingDto(); + $dto->currentStep = 4; + $dto->accommodationId = 1; + + $session = new Session(new MockArraySessionStorage()); + $request = Request::create('/groups/booking/step-4/confirm', 'POST'); + $request->setSession($session); + $request->headers->set('HX-Request', 'true'); + + $sessionManager = new AccommodationSessionManager(); + $sessionManager->save($request, $dto); + + $accommodation = (new Accommodation()) + ->setName('Hotel') + ->setCalendarCode('HOTEL') + ->setMaxAdolescentAge(17); + + $booking = (new AccommodationBooking())->setIsInquiry(false); + + $bookingService = $this->createMock(AccommodationBookingService::class); + $bookingService->method('loadAccommodation')->with(1)->willReturn($accommodation); + $bookingService->method('loadAvailableServices')->willReturn([ + 'boardServices' => [], + 'additionalServices' => [], + 'groupedAdditionalServices' => [], + 'ungroupedAdditionalServices' => [], + ]); + $bookingService->method('loadPrices')->willReturn([]); + $bookingService->expects(self::once())->method('finalizeBooking')->willReturn($booking); + + $confirmationForm = $this->createMock(FormInterface::class); + $confirmationForm->method('handleRequest')->willReturnSelf(); + $confirmationForm->method('isSubmitted')->willReturn(true); + $confirmationForm->method('isValid')->willReturn(true); + + $controller = new TestableStep4Controller($bookingService, $sessionManager, $confirmationForm); + + $response = $controller->confirm($request); + + self::assertSame(200, $response->getStatusCode()); + self::assertTrue($response->headers->has('HX-Redirect')); + self::assertNull($sessionManager->getDto($request)); + } + + public function testConfirmPostInvalidReRendersModalWithoutPersisting(): void + { + $dto = new AccommodationBookingDto(); + $dto->currentStep = 4; + $dto->accommodationId = 1; + + $session = new Session(new MockArraySessionStorage()); + $request = Request::create('/groups/booking/step-4/confirm', 'POST'); + $request->setSession($session); + + $sessionManager = new AccommodationSessionManager(); + $sessionManager->save($request, $dto); + + $accommodation = (new Accommodation()) + ->setName('Hotel') + ->setCalendarCode('HOTEL') + ->setMaxAdolescentAge(17); + + $bookingService = $this->createMock(AccommodationBookingService::class); + $bookingService->method('loadAccommodation')->with(1)->willReturn($accommodation); + $bookingService->expects(self::never())->method('finalizeBooking'); + + $confirmationForm = $this->createMock(FormInterface::class); + $confirmationForm->method('handleRequest')->willReturnSelf(); + $confirmationForm->method('isSubmitted')->willReturn(true); + $confirmationForm->method('isValid')->willReturn(false); + + $controller = new TestableStep4Controller($bookingService, $sessionManager, $confirmationForm); + + $response = $controller->confirm($request); + + self::assertSame(200, $response->getStatusCode()); + self::assertFalse($response->headers->has('HX-Redirect')); + self::assertSame('groups/booking/_step4_booking_confirmation_modal.html.twig', $controller->renderedView); + self::assertNotNull($sessionManager->getDto($request)); + } +} + +final class TestableStep4Controller extends Step4Controller +{ + /** + * @var array + */ + public array $renderedParameters = []; + + public string $renderedView = ''; + + public function __construct( + AccommodationBookingService $bookingService, + AccommodationSessionManager $sessionManager, + private readonly FormInterface $form, + ) { + parent::__construct($bookingService, $sessionManager); + } + + /** + * @return FormInterface + */ + protected function createForm(string $type, mixed $data = null, array $options = []): FormInterface + { + return $this->form; + } + + protected function getParameter(string $name): array|bool|string|int|float|\UnitEnum|null + { + return 'https://example.test/agb/'; + } + + /** + * @param array $parameters + */ + protected function redirectToRoute(string $route, array $parameters = [], int $status = 302): RedirectResponse + { + return new RedirectResponse('/'.$route, $status); + } + + /** + * @param array $parameters + */ + protected function generateUrl(string $route, array $parameters = [], int $referenceType = 1): string + { + return '/'.$route; + } + + protected function addFlash(string $type, mixed $message): void + { + // no-op: avoids requiring a full service container in these unit tests + } + + /** + * @param array $parameters + */ + protected function render(string $view, array $parameters = [], ?Response $response = null): Response + { + $this->renderedView = $view; + $this->renderedParameters = $parameters; + + return new Response('ok'); + } +} diff --git a/tests/Form/AccommodationStep2TypeTest.php b/tests/Form/AccommodationStep2TypeTest.php new file mode 100644 index 0000000..ea3485d --- /dev/null +++ b/tests/Form/AccommodationStep2TypeTest.php @@ -0,0 +1,74 @@ +getFormFactory() + ->create(AccommodationStep2Type::class, new AccommodationBookingDto(), [ + 'max_adolescent_age' => 15, + ]); + + self::assertSame( + 'davon Kinder (4–15 Jahre)', + $form->get('childrenCount')->getConfig()->getOption('label'), + ); + } + + public function testBlankOptionalChildCountersAreNormalizedToZero(): void + { + $dto = new AccommodationBookingDto(); + $form = Forms::createFormFactoryBuilder() + ->getFormFactory() + ->create(AccommodationStep2Type::class, $dto); + + $form->submit([ + 'paxCount' => '2', + 'minorsCount' => '', + 'childrenCount' => '', + 'selectedBoardServiceId' => '', + 'selectedAdditionalServiceIds' => [], + ]); + + self::assertTrue($form->isSynchronized()); + self::assertSame(0, $dto->minorsCount); + self::assertSame(0, $dto->childrenCount); + } + + public function testGroupedAdditionalServiceValuesCanSubmitUnderSelectionGroupKeys(): void + { + $dto = new AccommodationBookingDto(); + $form = Forms::createFormFactoryBuilder() + ->getFormFactory() + ->create(AccommodationStep2Type::class, $dto, [ + 'additional_service_choices' => [ + 'Ski service' => 101, + 'Board service' => 202, + ], + ]); + + $form->submit([ + 'paxCount' => '2', + 'minorsCount' => '0', + 'childrenCount' => '0', + 'selectedBoardServiceId' => '', + 'selectedAdditionalServiceIds' => [ + 'Ski extras' => '101', + 'Board extras' => '202', + ], + ]); + + self::assertTrue($form->isSynchronized()); + self::assertSame([101, 202], array_values($dto->selectedAdditionalServiceIds)); + } +} diff --git a/tests/Model/ContingentQueryTest.php b/tests/Model/ContingentQueryTest.php new file mode 100644 index 0000000..4995fb0 --- /dev/null +++ b/tests/Model/ContingentQueryTest.php @@ -0,0 +1,50 @@ +validator()->validate($query)); + self::assertSame('2026-01-01', $query->dateFromDate()->format('Y-m-d')); + } + + /** + * @dataProvider invalidCalendarQueries + */ + public function testCalendarQueryRejectsInvalidInput(ContingentCalendarQuery $query): void + { + self::assertGreaterThan(0, $this->validator()->validate($query)->count()); + } + + public function invalidCalendarQueries(): iterable + { + yield 'normalized invalid date' => [new ContingentCalendarQuery('HOTEL', '2026-02-31', '2026-03-01')]; + yield 'reversed range' => [new ContingentCalendarQuery('HOTEL', '2026-03-02', '2026-03-01')]; + yield 'range over 366 days' => [new ContingentCalendarQuery('HOTEL', '2026-01-01', '2027-01-03')]; + yield 'invalid hotel code' => [new ContingentCalendarQuery('HOTEL CODE', '2026-01-01', '2026-01-02')]; + } + + public function testPricesQueryRequiresFourDigitYear(): void + { + self::assertCount(0, $this->validator()->validate(new ContingentPricesQuery('HOTEL', 2026))); + self::assertGreaterThan(0, $this->validator()->validate(new ContingentPricesQuery('HOTEL', 26))->count()); + } + + private function validator(): \Symfony\Component\Validator\Validator\ValidatorInterface + { + return Validation::createValidatorBuilder() + ->enableAttributeMapping() + ->getValidator(); + } +} diff --git a/tests/Service/AccommodationBookingBreakdownCalculatorTest.php b/tests/Service/AccommodationBookingBreakdownCalculatorTest.php new file mode 100644 index 0000000..f736bc4 --- /dev/null +++ b/tests/Service/AccommodationBookingBreakdownCalculatorTest.php @@ -0,0 +1,39 @@ + 12345, 'currency' => 'EUR']; + $booking = new AccommodationBooking(); + $booking->setPriceSnapshot($snapshot, 12345, 'EUR', 1); + + $priceRepository = $this->createMock(AccommodationPriceRepository::class); + $priceRepository->expects(self::never())->method('findByHotelCodeAndDateRange'); + + $calculator = new AccommodationBookingBreakdownCalculator( + new GroupsPriceCalculator(new PriceTimelineBuilder(), [ + 'runningCostsEur' => 0, + 'runningCostsChf' => 0, + 'undersubscription30Eur' => 0, + 'undersubscription30Chf' => 0, + 'undersubscription40Eur' => 0, + 'undersubscription40Chf' => 0, + ]), + $priceRepository, + ); + + self::assertSame($snapshot, $calculator->compute($booking)); + } +} diff --git a/tests/Service/AccommodationBookingLinkSignerTest.php b/tests/Service/AccommodationBookingLinkSignerTest.php new file mode 100644 index 0000000..db91149 --- /dev/null +++ b/tests/Service/AccommodationBookingLinkSignerTest.php @@ -0,0 +1,192 @@ +bookingWithAccessLink(); + $signer = $this->createSigner(); + + $signedUrl = $signer->sign($booking); + $request = Request::create($signedUrl); + + self::assertTrue($signer->isValidLinkRequest($request, $booking)); + } + + public function testTamperedQueryParamFails(): void + { + $booking = $this->bookingWithAccessLink(); + $signer = $this->createSigner(); + + $signedUrl = $signer->sign($booking); + self::assertTrue($signer->isValidLinkRequest(Request::create($signedUrl), $booking)); + + // Flip the `t` value while keeping the original _hash — signature no longer matches. + $tamperedUrl = preg_replace('/(?<=[?&]t=)\d+/', '999999999', $signedUrl); + self::assertNotNull($tamperedUrl); + + self::assertFalse($signer->isValidLinkRequest(Request::create($tamperedUrl), $booking)); + } + + public function testRegeneratedLinkInvalidatesThePreviousOne(): void + { + $booking = $this->bookingWithAccessLink(); + $signer = $this->createSigner(); + + $signedUrl = $signer->sign($booking); + $request = Request::create($signedUrl); + + // Regenerating overwrites accessLinkIssuedAt — the old signed `t` no longer matches. + $booking->setAccessLinkIssuedAt(new \DateTimeImmutable('+1 minute')); + + self::assertFalse($signer->isValidLinkRequest($request, $booking)); + } + + public function testExpiredLinkFails(): void + { + $booking = new AccommodationBooking(); + $booking->setAccessLinkIssuedAt(new \DateTimeImmutable('-91 days')); + $signer = $this->createSigner(); + + $signedUrl = $signer->sign($booking); + $request = Request::create($signedUrl); + + self::assertFalse($signer->isValidLinkRequest($request, $booking)); + } + + public function testMissingAccessLinkIssuedAtFails(): void + { + $booking = new AccommodationBooking(); + $signer = $this->createSigner(); + + $request = Request::create('https://example.com/groups/booking/offer/'.$booking->getUuid().'?t=123'); + + self::assertFalse($signer->isValidLinkRequest($request, $booking)); + } + + public function testSignThrowsWithoutAccessLinkIssuedAt(): void + { + $booking = new AccommodationBooking(); + $signer = $this->createSigner(); + + $this->expectException(\LogicException::class); + + $signer->sign($booking); + } + + public function testExpiresAtIsNinetyDaysAfterIssuedAt(): void + { + $issuedAt = new \DateTimeImmutable('2026-01-01T00:00:00+00:00'); + $booking = new AccommodationBooking(); + $booking->setAccessLinkIssuedAt($issuedAt); + $signer = $this->createSigner(); + + self::assertSame('2026-04-01T00:00:00+00:00', $signer->expiresAt($booking)?->format(\DATE_ATOM)); + } + + public function testSessionIsAuthorizedAfterAuthorizeSession(): void + { + $booking = $this->bookingWithAccessLink(); + $signer = $this->createSigner(); + $request = $this->requestWithSession(); + + self::assertFalse($signer->isSessionAuthorized($request, $booking)); + + $signer->authorizeSession($request, $booking); + + self::assertTrue($signer->isSessionAuthorized($request, $booking)); + } + + public function testSessionAuthorizationIsPerBooking(): void + { + $booking = $this->bookingWithAccessLink(); + $otherBooking = $this->bookingWithAccessLink(); + $signer = $this->createSigner(); + $request = $this->requestWithSession(); + + $signer->authorizeSession($request, $booking); + + self::assertTrue($signer->isSessionAuthorized($request, $booking)); + self::assertFalse($signer->isSessionAuthorized($request, $otherBooking)); + } + + public function testSessionAuthorizationIsRevokedWhenLinkIsRegenerated(): void + { + $booking = $this->bookingWithAccessLink(); + $signer = $this->createSigner(); + $request = $this->requestWithSession(); + + $signer->authorizeSession($request, $booking); + self::assertTrue($signer->isSessionAuthorized($request, $booking)); + + // Regenerating the access link overwrites accessLinkIssuedAt — the + // previously-authorized session no longer matches. + $booking->setAccessLinkIssuedAt(new \DateTimeImmutable('+1 minute')); + + self::assertFalse($signer->isSessionAuthorized($request, $booking)); + } + + public function testSessionAuthorizationFailsPastTtlEvenIfSessionMatches(): void + { + $booking = new AccommodationBooking(); + $booking->setAccessLinkIssuedAt(new \DateTimeImmutable('-91 days')); + $signer = $this->createSigner(); + $request = $this->requestWithSession(); + + $signer->authorizeSession($request, $booking); + + self::assertFalse($signer->isSessionAuthorized($request, $booking)); + } + + public function testSessionAuthorizationFailsWithoutAccessLinkIssuedAt(): void + { + $booking = new AccommodationBooking(); + $signer = $this->createSigner(); + $request = $this->requestWithSession(); + + self::assertFalse($signer->isSessionAuthorized($request, $booking)); + } + + private function requestWithSession(): Request + { + $request = Request::create('https://example.com/'); + $request->setSession(new Session(new MockArraySessionStorage())); + + return $request; + } + + private function bookingWithAccessLink(): AccommodationBooking + { + $booking = new AccommodationBooking(); + $booking->setPaxCount(10); + $booking->setAccessLinkIssuedAt(new \DateTimeImmutable()); + + return $booking; + } + + private function createSigner(): AccommodationBookingLinkSigner + { + $urlGenerator = $this->createMock(UrlGeneratorInterface::class); + $urlGenerator + ->method('generate') + ->willReturnCallback(static fn (string $name, array $parameters) => sprintf( + 'https://example.com/groups/booking/offer/%s?t=%s', + $parameters['uuid'], + $parameters['t'], + )); + + return new AccommodationBookingLinkSigner($urlGenerator, 'test-secret'); + } +} diff --git a/tests/Service/AccommodationBookingServiceTest.php b/tests/Service/AccommodationBookingServiceTest.php new file mode 100644 index 0000000..d44a79f --- /dev/null +++ b/tests/Service/AccommodationBookingServiceTest.php @@ -0,0 +1,359 @@ +createServiceWithAccommodation(); + + $dto = $service->initFromParams(new AccommodationBookingQueryParams('HOTEL', '2026-02-28', '2026-03-01')); + + self::assertSame('2026-02-28', $dto->dateFrom?->format('Y-m-d')); + self::assertSame('2026-03-01', $dto->dateTo?->format('Y-m-d')); + } + + public function testInitFromParamsPrefillsPaxCountFromEffectiveMinPax(): void + { + $price = (new AccommodationPrice()) + ->setDateFrom(new \DateTimeImmutable('2026-02-01')) + ->setDateTo(new \DateTimeImmutable('2026-03-31')) + ->setIncludedPax(4); + $service = $this->createServiceWithAccommodation([$price]); + + $dto = $service->initFromParams(new AccommodationBookingQueryParams('HOTEL', '2026-02-28', '2026-03-01')); + + self::assertSame(4, $dto->paxCount); + } + + public function testInitFromParamsRejectsNormalizedInvalidCalendarDates(): void + { + $service = $this->createServiceWithAccommodation(); + + $this->expectException(\InvalidArgumentException::class); + $this->expectExceptionMessage('Ungültiges Datumsformat. Erwartet: YYYY-MM-DD.'); + + $service->initFromParams(new AccommodationBookingQueryParams('HOTEL', '2026-02-31', '2026-03-05')); + } + + public function testIssueAccessLinkForDirectBookingSetsTimestampForDirectBooking(): void + { + $entityManager = $this->createMock(EntityManagerInterface::class); + $entityManager->expects(self::once())->method('flush'); + + $service = $this->createServiceWithAccommodation(entityManager: $entityManager); + + $booking = new AccommodationBooking(); + $booking->setIsInquiry(false); + + $service->issueAccessLinkForDirectBooking($booking); + + self::assertNotNull($booking->getAccessLinkIssuedAt()); + } + + public function testIssueAccessLinkForDirectBookingNoOpsForInquiry(): void + { + $entityManager = $this->createMock(EntityManagerInterface::class); + $entityManager->expects(self::never())->method('flush'); + + $service = $this->createServiceWithAccommodation(entityManager: $entityManager); + + $booking = new AccommodationBooking(); + $booking->setIsInquiry(true); + + $service->issueAccessLinkForDirectBooking($booking); + + self::assertNull($booking->getAccessLinkIssuedAt()); + } + + public function testIssueAccessLinkForDirectBookingNoOpsWhenAlreadySet(): void + { + $entityManager = $this->createMock(EntityManagerInterface::class); + $entityManager->expects(self::never())->method('flush'); + + $service = $this->createServiceWithAccommodation(entityManager: $entityManager); + + $booking = new AccommodationBooking(); + $booking->setIsInquiry(false); + $issuedAt = new \DateTimeImmutable('2026-01-01'); + $booking->setAccessLinkIssuedAt($issuedAt); + + $service->issueAccessLinkForDirectBooking($booking); + + self::assertSame($issuedAt, $booking->getAccessLinkIssuedAt()); + } + + public function testSendCustomerConfirmationEmailAlwaysSendsWithLinkWhenIssued(): void + { + $booking = new AccommodationBooking(); + $booking->setEmail('customer@example.com'); + $booking->setIsInquiry(false); + $booking->setAccessLinkIssuedAt(new \DateTimeImmutable()); + + $linkSigner = $this->createMock(AccommodationBookingLinkSigner::class); + $linkSigner->method('sign')->with($booking)->willReturn('https://example.com/offer/signed-link'); + + $breakdownCalculator = $this->createMock(AccommodationBookingBreakdownCalculator::class); + $breakdownCalculator->method('compute')->willReturn(['total' => 1000, 'currency' => 'EUR']); + + $mailer = $this->createMock(Mailer::class); + $mailer + ->expects(self::once()) + ->method('createAndSendEmail') + ->with( + self::callback(static fn (array $context) => 'https://example.com/offer/signed-link' === $context['accessLink']), + self::callback(static fn (array $options) => 'customer@example.com' === $options['to'] + && 'email/accommodation_booking_customer.html.twig' === $options['template']), + ); + + $service = $this->createServiceWithAccommodation(mailer: $mailer, linkSigner: $linkSigner, breakdownCalculator: $breakdownCalculator); + + $service->sendCustomerConfirmationEmail($booking); + } + + public function testSendCustomerConfirmationEmailSendsWithoutLinkForInquiry(): void + { + $booking = new AccommodationBooking(); + $booking->setEmail('customer@example.com'); + $booking->setIsInquiry(true); + + $breakdownCalculator = $this->createMock(AccommodationBookingBreakdownCalculator::class); + $breakdownCalculator->method('compute')->willReturn(null); + + $mailer = $this->createMock(Mailer::class); + $mailer + ->expects(self::once()) + ->method('createAndSendEmail') + ->with( + self::callback(static fn (array $context) => null === $context['accessLink']), + self::anything(), + ); + + $service = $this->createServiceWithAccommodation(mailer: $mailer, breakdownCalculator: $breakdownCalculator); + + $service->sendCustomerConfirmationEmail($booking); + } + + public function testSendCustomerConfirmationEmailLogsAndSwallowsMailerFailures(): void + { + $booking = new AccommodationBooking(); + $booking->setEmail('customer@example.com'); + $booking->setIsInquiry(true); + + $breakdownCalculator = $this->createMock(AccommodationBookingBreakdownCalculator::class); + $breakdownCalculator->method('compute')->willReturn(null); + + $mailer = $this->createMock(Mailer::class); + $mailer->method('createAndSendEmail')->willThrowException(new \RuntimeException('SMTP down')); + + $logger = $this->createMock(LoggerInterface::class); + $logger->expects(self::once())->method('error'); + + $service = $this->createServiceWithAccommodation(mailer: $mailer, breakdownCalculator: $breakdownCalculator, logger: $logger); + + $service->sendCustomerConfirmationEmail($booking); + } + + public function testRegenerateAccessLinkOverwritesAccessLinkIssuedAt(): void + { + $booking = new AccommodationBooking(); + $booking->setEmail('customer@example.com'); + $booking->setIsInquiry(true); + $previousIssuedAt = new \DateTimeImmutable('2026-01-01'); + $booking->setAccessLinkIssuedAt($previousIssuedAt); + + $entityManager = $this->createMock(EntityManagerInterface::class); + $entityManager->expects(self::once())->method('flush'); + + $breakdownCalculator = $this->createMock(AccommodationBookingBreakdownCalculator::class); + $breakdownCalculator->method('compute')->willReturn(null); + + $mailer = $this->createMock(Mailer::class); + $mailer->expects(self::never())->method('createAndSendEmail'); + + $service = $this->createServiceWithAccommodation( + entityManager: $entityManager, + mailer: $mailer, + breakdownCalculator: $breakdownCalculator, + ); + + $service->regenerateAccessLink($booking); + + self::assertNotSame($previousIssuedAt, $booking->getAccessLinkIssuedAt()); + } + + public function testAcceptBookingTransitionsInquiryToBookingAndSendsNotifications(): void + { + $entityManager = $this->createMock(EntityManagerInterface::class); + $entityManager->expects(self::once())->method('flush'); + + $booking = new AccommodationBooking(); + $booking->setIsInquiry(true); + $booking->setEmail('customer@example.com'); + + $mailer = $this->createMock(Mailer::class); + $mailer + ->expects(self::exactly(2)) + ->method('createAndSendEmail') + ->with( + self::anything(), + self::callback(static fn (array $options) => in_array($options['to'], ['office@example.com', 'customer@example.com'], true) + && in_array($options['template'], ['email/offer_accepted.html.twig', 'email/offer_accepted_customer.html.twig'], true)), + ); + + $service = $this->createServiceWithAccommodation(entityManager: $entityManager, mailer: $mailer); + + $service->acceptBooking($booking); + + self::assertFalse($booking->isInquiry()); + self::assertNotNull($booking->getAcceptedAt()); + } + + public function testAcceptBookingIsIdempotentAndSendsNoNotifications(): void + { + $entityManager = $this->createMock(EntityManagerInterface::class); + $entityManager->expects(self::never())->method('flush'); + + $mailer = $this->createMock(Mailer::class); + $mailer->expects(self::never())->method('createAndSendEmail'); + + $service = $this->createServiceWithAccommodation(entityManager: $entityManager, mailer: $mailer); + + $booking = new AccommodationBooking(); + $booking->setIsInquiry(false); + + $service->acceptBooking($booking); + + self::assertNull($booking->getAcceptedAt()); + } + + public function testSendOfferAcceptedNotificationEmailLogsAndSwallowsMailerFailures(): void + { + $booking = new AccommodationBooking(); + $booking->setIsInquiry(false); + + $mailer = $this->createMock(Mailer::class); + $mailer->method('createAndSendEmail')->willThrowException(new \RuntimeException('SMTP down')); + + $logger = $this->createMock(LoggerInterface::class); + $logger->expects(self::once())->method('error'); + + $service = $this->createServiceWithAccommodation(mailer: $mailer, logger: $logger); + + $service->sendOfferAcceptedNotificationEmail($booking); + } + + public function testSendOfferAcceptedCustomerEmailLogsAndSwallowsMailerFailures(): void + { + $booking = new AccommodationBooking(); + $booking->setEmail('customer@example.com'); + $booking->setIsInquiry(false); + + $mailer = $this->createMock(Mailer::class); + $mailer->method('createAndSendEmail')->willThrowException(new \RuntimeException('SMTP down')); + + $logger = $this->createMock(LoggerInterface::class); + $logger->expects(self::once())->method('error'); + + $service = $this->createServiceWithAccommodation(mailer: $mailer, logger: $logger); + + $service->sendOfferAcceptedCustomerEmail($booking); + } + + public function testRefreshPriceSnapshotStoresDiscountedFinalTotal(): void + { + $booking = new AccommodationBooking(); + $booking->setAccommodationDiscount(10); + $booking->setBoardServiceDiscount(20); + $booking->setAdditionalServicesDiscount(50); + + $breakdown = [ + 'total' => 12345, + 'currency' => 'CHF', + 'basePrice' => 8000, + 'additionalPersonsPrice' => 2000, + 'boardPrice' => 1000, + 'servicesPrice' => 500, + ]; + + $breakdownCalculator = $this->createMock(AccommodationBookingBreakdownCalculator::class); + $breakdownCalculator + ->expects(self::once()) + ->method('computeCurrent') + ->with($booking) + ->willReturn($breakdown); + + $service = $this->createServiceWithAccommodation(breakdownCalculator: $breakdownCalculator); + $service->refreshPriceSnapshot($booking); + + // accommodation: (8000+2000)*10% = 1000, board: 1000*20% = 200, services: 500*50% = 250 + self::assertSame($breakdown, $booking->getPriceBreakdown()); + self::assertSame(12345 - 1000 - 200 - 250, $booking->getTotalPrice()); + self::assertSame('CHF', $booking->getPricingCurrency()); + self::assertSame(1, $booking->getPricingVersion()); + } + + /** + * @param AccommodationPrice[] $prices + */ + private function createServiceWithAccommodation( + array $prices = [], + ?EntityManagerInterface $entityManager = null, + ?Mailer $mailer = null, + ?LoggerInterface $logger = null, + ?AccommodationBookingLinkSigner $linkSigner = null, + ?AccommodationBookingBreakdownCalculator $breakdownCalculator = null, + ): AccommodationBookingService { + $accommodation = (new Accommodation()) + ->setName('Hotel') + ->setCalendarCode('HOTEL') + ->setMaxAdolescentAge(17); + + $accommodationRepo = $this->createMock(AccommodationRepository::class); + $accommodationRepo + ->method('findOneBy') + ->with(['calendarCode' => 'HOTEL']) + ->willReturn($accommodation); + + $priceRepo = $this->createMock(AccommodationPriceRepository::class); + $priceRepo + ->method('findByHotelCodeAndDateRange') + ->willReturn($prices); + + return new AccommodationBookingService( + $accommodationRepo, + $priceRepo, + $this->createMock(AdditionalServiceRepository::class), + $this->createMock(BoardServiceRepository::class), + new PriceTimelineBuilder(), + $entityManager ?? $this->createMock(EntityManagerInterface::class), + $mailer ?? $this->createMock(Mailer::class), + $logger ?? $this->createMock(LoggerInterface::class), + $this->createMock(CmsDataProvider::class), + $linkSigner ?? $this->createMock(AccommodationBookingLinkSigner::class), + $breakdownCalculator ?? $this->createMock(AccommodationBookingBreakdownCalculator::class), + 'office@example.com', + ); + } +} diff --git a/tests/Service/CmsDataProviderTest.php b/tests/Service/CmsDataProviderTest.php new file mode 100644 index 0000000..690cfee --- /dev/null +++ b/tests/Service/CmsDataProviderTest.php @@ -0,0 +1,74 @@ + new MockResponse(json_encode([ + 'success' => true, + 'name' => 'Hotel Alpin', + 'address' => "Musterstraße 1\n1234 Musterort", + 'description' => '

    Beschreibung

    ', + 'features' => '

    Ausstattung

    ', + 'room_types' => '

    Zimmer

    ', + 'additional_information' => '

    Weitere Infos

    ', + 'images' => ['resized' => ['l' => [['url' => 'l.jpg', 'alt' => 'Alt']]]], + 'icons' => ['sauna' => ['label' => 'Sauna', 'value' => true]], + 'region' => [ + 'name' => 'Alpenregion', + 'latitude' => 47.1, + 'longitude' => 11.2, + 'webcam' => 'https://webcam.test', + 'ski_area' => '

    Skigebiet

    ', + 'ski_area_extended' => '

    Mehr Skigebiet

    ', + 'description' => '

    Region

    ', + 'news' => '

    News

    ', + 'length' => '42', + 'altitude' => '1800', + 'lifts' => '5', + 'images' => ['resized' => ['l' => []]], + 'region_maps' => ['map1.jpg', 'map2.jpg'], + ], + ], JSON_THROW_ON_ERROR))); + + $provider = new CmsDataProvider($client, new ArrayAdapter(), 'test-key'); + + $data = $provider->getHotelDetails('HOTEL1'); + + self::assertNotNull($data); + self::assertSame('Hotel Alpin', $data->name); + self::assertSame("Musterstraße 1\n1234 Musterort", $data->address); + self::assertSame('

    Zimmer

    ', $data->roomTypes); + self::assertSame('

    Weitere Infos

    ', $data->additionalInformation); + self::assertSame(['sauna' => ['label' => 'Sauna', 'value' => true]], $data->icons); + self::assertNotNull($data->region); + self::assertSame('Alpenregion', $data->region->name); + self::assertSame('

    Skigebiet

    ', $data->region->skiArea); + self::assertSame('

    Mehr Skigebiet

    ', $data->region->skiAreaExtended); + self::assertSame(['map1.jpg', 'map2.jpg'], $data->region->regionMaps); + self::assertSame(42, $data->region->length); + self::assertSame(1800, $data->region->altitude); + self::assertSame(5, $data->region->lifts); + self::assertSame(47.1, $data->region->latitude); + self::assertSame(11.2, $data->region->longitude); + } + + public function testGetHotelDetailsReturnsNullOnFailure(): void + { + $client = new MockHttpClient(fn () => new MockResponse('', ['http_code' => 500])); + + $provider = new CmsDataProvider($client, new ArrayAdapter(), 'test-key'); + + self::assertNull($provider->getHotelDetails('UNKNOWN')); + } +} diff --git a/tests/Service/PriceTimelineBuilderTest.php b/tests/Service/PriceTimelineBuilderTest.php new file mode 100644 index 0000000..a77a4d5 --- /dev/null +++ b/tests/Service/PriceTimelineBuilderTest.php @@ -0,0 +1,261 @@ +builder = new PriceTimelineBuilder(); + } + + // --- buildTimeline --- + + public function testReturnsEmptyArrayForNoPrices(): void + { + $result = $this->builder->buildTimeline([], new \DateTimeImmutable('2026-01-01'), new \DateTimeImmutable('2026-12-31'), 'EUR'); + + $this->assertSame([], $result); + } + + public function testSingleBasePriceWithinYear(): void + { + $price = $this->makePrice('2026-01-01', '2026-03-31', pricePerNight: 15000, priceAdditionalPerson: 2000, includedPax: 2); + + $result = $this->builder->buildTimeline([$price], new \DateTimeImmutable('2026-01-01'), new \DateTimeImmutable('2026-12-31'), 'EUR'); + + $this->assertCount(1, $result); + $this->assertSame('2026-01-01', $result[0]->dateFrom); + $this->assertSame('2026-03-31', $result[0]->dateTo); + $this->assertSame(150.0, $result[0]->pricePerNight); + $this->assertSame(20.0, $result[0]->priceAdditionalPerson); + $this->assertSame(2, $result[0]->includedPax); + $this->assertNull($result[0]->type); + $this->assertNull($result[0]->defaultPricePerNight); + $this->assertNull($result[0]->defaultPriceAdditionalPerson); + $this->assertSame('EUR', $result[0]->currency); + } + + public function testBasePriceStartingBeforeYearIsClamped(): void + { + $price = $this->makePrice('2025-12-01', '2026-03-31', pricePerNight: 10000); + + $result = $this->builder->buildTimeline([$price], new \DateTimeImmutable('2026-01-01'), new \DateTimeImmutable('2026-12-31'), 'EUR'); + + $this->assertCount(1, $result); + $this->assertSame('2026-01-01', $result[0]->dateFrom); + $this->assertSame('2026-03-31', $result[0]->dateTo); + } + + public function testBasePriceEndingAfterYearIsClamped(): void + { + $price = $this->makePrice('2026-10-01', '2027-01-31', pricePerNight: 10000); + + $result = $this->builder->buildTimeline([$price], new \DateTimeImmutable('2026-01-01'), new \DateTimeImmutable('2026-12-31'), 'EUR'); + + $this->assertCount(1, $result); + $this->assertSame('2026-10-01', $result[0]->dateFrom); + $this->assertSame('2026-12-31', $result[0]->dateTo); + } + + public function testDiscountSplitsBasePeriodIntoThreeRows(): void + { + $base = $this->makePrice('2026-01-01', '2026-03-31', pricePerNight: 15000); + $discount = $this->makePrice('2026-01-15', '2026-01-31', pricePerNight: 12000, type: PriceType::DISCOUNT); + + $result = $this->builder->buildTimeline([$base, $discount], new \DateTimeImmutable('2026-01-01'), new \DateTimeImmutable('2026-12-31'), 'EUR'); + + $this->assertCount(3, $result); + $this->assertSame('2026-01-01', $result[0]->dateFrom); + $this->assertSame('2026-01-14', $result[0]->dateTo); + $this->assertNull($result[0]->type); + + $this->assertSame('2026-01-15', $result[1]->dateFrom); + $this->assertSame('2026-01-31', $result[1]->dateTo); + $this->assertSame('discount', $result[1]->type); + + $this->assertSame('2026-02-01', $result[2]->dateFrom); + $this->assertSame('2026-03-31', $result[2]->dateTo); + $this->assertNull($result[2]->type); + } + + public function testDiscountRowIncludesDefaultPrice(): void + { + $base = $this->makePrice('2026-01-01', '2026-03-31', pricePerNight: 15000, priceAdditionalPerson: 3000); + $discount = $this->makePrice('2026-01-15', '2026-01-31', pricePerNight: 12000, priceAdditionalPerson: 2000, type: PriceType::DISCOUNT); + + $result = $this->builder->buildTimeline([$base, $discount], new \DateTimeImmutable('2026-01-01'), new \DateTimeImmutable('2026-12-31'), 'EUR'); + + $discountRow = $result[1]; + $this->assertSame(120.0, $discountRow->pricePerNight); + $this->assertSame(150.0, $discountRow->defaultPricePerNight); + $this->assertSame(20.0, $discountRow->priceAdditionalPerson); + $this->assertSame(30.0, $discountRow->defaultPriceAdditionalPerson); + } + + public function testBaseRowsHaveNullDefaultPriceFields(): void + { + $base = $this->makePrice('2026-01-01', '2026-03-31', pricePerNight: 15000); + $discount = $this->makePrice('2026-01-15', '2026-01-31', pricePerNight: 12000, type: PriceType::DISCOUNT); + + $result = $this->builder->buildTimeline([$base, $discount], new \DateTimeImmutable('2026-01-01'), new \DateTimeImmutable('2026-12-31'), 'EUR'); + + $this->assertNull($result[0]->defaultPricePerNight); + $this->assertNull($result[0]->defaultPriceAdditionalPerson); + $this->assertNull($result[2]->defaultPricePerNight); + $this->assertNull($result[2]->defaultPriceAdditionalPerson); + } + + public function testDiscountWithNoBasePriceHasNullDefaultPrice(): void + { + $discount = $this->makePrice('2026-01-15', '2026-01-31', pricePerNight: 12000, type: PriceType::DISCOUNT); + + $result = $this->builder->buildTimeline([$discount], new \DateTimeImmutable('2026-01-01'), new \DateTimeImmutable('2026-12-31'), 'EUR'); + + $this->assertCount(1, $result); + $this->assertSame('discount', $result[0]->type); + $this->assertNull($result[0]->defaultPricePerNight); + } + + public function testGapBetweenTwoPricesIsOmitted(): void + { + $first = $this->makePrice('2026-01-01', '2026-01-31', pricePerNight: 10000); + $second = $this->makePrice('2026-03-01', '2026-03-31', pricePerNight: 20000); + + $result = $this->builder->buildTimeline([$first, $second], new \DateTimeImmutable('2026-01-01'), new \DateTimeImmutable('2026-12-31'), 'EUR'); + + $this->assertCount(2, $result); + $this->assertSame('2026-01-01', $result[0]->dateFrom); + $this->assertSame('2026-01-31', $result[0]->dateTo); + $this->assertSame('2026-03-01', $result[1]->dateFrom); + $this->assertSame('2026-03-31', $result[1]->dateTo); + } + + public function testOverrideSplitsBasePeriod(): void + { + $base = $this->makePrice('2026-01-01', '2026-03-31', pricePerNight: 15000); + $override = $this->makePrice('2026-01-15', '2026-01-31', pricePerNight: 18000, type: PriceType::OVERRIDE); + + $result = $this->builder->buildTimeline([$base, $override], new \DateTimeImmutable('2026-01-01'), new \DateTimeImmutable('2026-12-31'), 'EUR'); + + $this->assertCount(3, $result); + $this->assertNull($result[0]->type); + $this->assertSame('override', $result[1]->type); + $this->assertSame(180.0, $result[1]->pricePerNight); + $this->assertNull($result[2]->type); + } + + public function testDiscountOverTwoDifferentBasePricesProducesTwoDiscountRows(): void + { + // The discount spans two different base price periods. Even though the discount entity + // is the same, the rows must NOT be merged because defaultPricePerNight differs. + $baseA = $this->makePrice('2026-01-01', '2026-01-20', pricePerNight: 10000); + $baseB = $this->makePrice('2026-01-21', '2026-03-31', pricePerNight: 12000); + $discount = $this->makePrice('2026-01-15', '2026-01-31', pricePerNight: 8000, type: PriceType::DISCOUNT); + + $result = $this->builder->buildTimeline([$baseA, $baseB, $discount], new \DateTimeImmutable('2026-01-01'), new \DateTimeImmutable('2026-12-31'), 'EUR'); + + $this->assertCount(4, $result); + + $this->assertSame('2026-01-01', $result[0]->dateFrom); + $this->assertSame('2026-01-14', $result[0]->dateTo); + $this->assertNull($result[0]->type); + + $this->assertSame('2026-01-15', $result[1]->dateFrom); + $this->assertSame('2026-01-20', $result[1]->dateTo); + $this->assertSame('discount', $result[1]->type); + $this->assertSame(100.0, $result[1]->defaultPricePerNight); // baseA + + $this->assertSame('2026-01-21', $result[2]->dateFrom); + $this->assertSame('2026-01-31', $result[2]->dateTo); + $this->assertSame('discount', $result[2]->type); + $this->assertSame(120.0, $result[2]->defaultPricePerNight); // baseB + + $this->assertSame('2026-02-01', $result[3]->dateFrom); + $this->assertSame('2026-03-31', $result[3]->dateTo); + $this->assertNull($result[3]->type); + } + + // --- resolveWinner --- + + public function testResolveWinnerReturnsNullForEmptyArray(): void + { + $this->assertNull($this->builder->resolveWinner([])); + } + + public function testResolveWinnerReturnsSingleCandidate(): void + { + $price = $this->makePrice('2026-01-01', '2026-03-31', pricePerNight: 10000); + + $this->assertSame($price, $this->builder->resolveWinner([$price])); + } + + public function testResolveWinnerPrefersDiscountOverBase(): void + { + $base = $this->makePrice('2026-01-01', '2026-03-31', pricePerNight: 15000); + $discount = $this->makePrice('2026-01-15', '2026-01-31', pricePerNight: 12000, type: PriceType::DISCOUNT); + + $this->assertSame($discount, $this->builder->resolveWinner([$base, $discount])); + } + + public function testResolveWinnerPrefersOverrideOverBase(): void + { + $base = $this->makePrice('2026-01-01', '2026-03-31', pricePerNight: 15000); + $override = $this->makePrice('2026-01-15', '2026-01-31', pricePerNight: 18000, type: PriceType::OVERRIDE); + + $this->assertSame($override, $this->builder->resolveWinner([$base, $override])); + } + + public function testResolveWinnerPrefersDiscountOverOverride(): void + { + $override = $this->makePrice('2026-01-01', '2026-01-31', pricePerNight: 18000, type: PriceType::OVERRIDE); + $discount = $this->makePrice('2026-01-01', '2026-01-31', pricePerNight: 12000, type: PriceType::DISCOUNT); + + $this->assertSame($discount, $this->builder->resolveWinner([$override, $discount])); + } + + public function testResolveWinnerPrefersShorterPeriodOnEqualTypeTie(): void + { + $wide = $this->makePrice('2026-01-01', '2026-03-31', pricePerNight: 15000); + $narrow = $this->makePrice('2026-01-15', '2026-01-31', pricePerNight: 12000); + + $this->assertSame($narrow, $this->builder->resolveWinner([$wide, $narrow])); + } + + public function testResolveWinnerPrefersLaterStartOnEqualLengthTie(): void + { + // Both cover 30 days; the one starting later should win. + $earlier = $this->makePrice('2026-01-01', '2026-01-30', pricePerNight: 15000); + $later = $this->makePrice('2026-02-01', '2026-03-02', pricePerNight: 12000); + + $this->assertSame($later, $this->builder->resolveWinner([$earlier, $later])); + } + + private function makePrice( + string $dateFrom, + string $dateTo, + int $pricePerNight, + int $priceAdditionalPerson = 0, + int $includedPax = 2, + ?PriceType $type = null, + ): AccommodationPrice { + $price = new AccommodationPrice(); + $price->setDateFrom(new \DateTimeImmutable($dateFrom)); + $price->setDateTo(new \DateTimeImmutable($dateTo)); + $price->setPricePerNight($pricePerNight); + $price->setPriceAdditionalPerson($priceAdditionalPerson); + $price->setIncludedPax($includedPax); + $price->setType($type); + + return $price; + } +} diff --git a/translations/messages.de.yaml b/translations/messages.de.yaml index 8e50e5f..090fe23 100644 --- a/translations/messages.de.yaml +++ b/translations/messages.de.yaml @@ -13,6 +13,23 @@ service: mixed: separator: ' und ' +enum: + additional_service: + flat: pauschal + per_person: pro Person + per_night: pro Nacht + per_person_per_night: pro Person und Nacht + season: + peak: + label: Hauptsaison + token: HS + secondary: + label: Nebensaison + token: NS + adv_secondary: + label: Vorteils-Nebensaison + token: VNS + paginator: previous: vorherige next: nächste diff --git a/translations/validators.de.yaml b/translations/validators.de.yaml new file mode 100644 index 0000000..12d9768 --- /dev/null +++ b/translations/validators.de.yaml @@ -0,0 +1,2 @@ +required: Bitte angeben +invalid: Bitte einen gültigen Wert angeben diff --git a/webpack.config.js b/webpack.config.js index 8bc39b0..15222e6 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -8,6 +8,7 @@ Encore .setOutputPath('public/build/') .setPublicPath('/build') .addEntry('app', './assets/app.js') + .addEntry('admin', './assets/admin.js') .splitEntryChunks() // enables the Symfony UX Stimulus bridge (used in assets/bootstrap.js)

    $4+v5ZvZrVJkF5SimLs_Vy3FU?t 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