diff --git a/apps/scandic-web/components/HotelReservation/BookingConfirmation/PriceDetails/index.tsx b/apps/scandic-web/components/HotelReservation/BookingConfirmation/PriceDetails/index.tsx index 27a13a983..65cad22fb 100644 --- a/apps/scandic-web/components/HotelReservation/BookingConfirmation/PriceDetails/index.tsx +++ b/apps/scandic-web/components/HotelReservation/BookingConfirmation/PriceDetails/index.tsx @@ -132,6 +132,7 @@ export default function PriceDetails() { toDate={checkOutDate} totalPrice={totalPrice} vat={vat} + defaultCurrency={currency} /> ) } diff --git a/apps/scandic-web/components/HotelReservation/EnterDetails/Summary/Desktop.tsx b/apps/scandic-web/components/HotelReservation/EnterDetails/Summary/Desktop.tsx index f65600b4d..0ec7d704e 100644 --- a/apps/scandic-web/components/HotelReservation/EnterDetails/Summary/Desktop.tsx +++ b/apps/scandic-web/components/HotelReservation/EnterDetails/Summary/Desktop.tsx @@ -13,12 +13,14 @@ export default function DesktopSummary({ isMember }: SummaryProps) { (state) => state.actions.toggleSummaryOpen ) - const { booking, rooms, totalPrice, vat } = useEnterDetailsStore((state) => ({ - booking: state.booking, - rooms: state.rooms, - totalPrice: state.totalPrice, - vat: state.vat, - })) + const { booking, rooms, totalPrice, vat, defaultCurrency } = + useEnterDetailsStore((state) => ({ + booking: state.booking, + rooms: state.rooms, + totalPrice: state.totalPrice, + vat: state.vat, + defaultCurrency: state.defaultCurrency, + })) return ( @@ -29,6 +31,7 @@ export default function DesktopSummary({ isMember }: SummaryProps) { totalPrice={totalPrice} vat={vat} toggleSummaryOpen={toggleSummaryOpen} + defaultCurrency={defaultCurrency} /> ) diff --git a/apps/scandic-web/components/HotelReservation/EnterDetails/Summary/Mobile/index.tsx b/apps/scandic-web/components/HotelReservation/EnterDetails/Summary/Mobile/index.tsx index e34a740b5..18ec13071 100644 --- a/apps/scandic-web/components/HotelReservation/EnterDetails/Summary/Mobile/index.tsx +++ b/apps/scandic-web/components/HotelReservation/EnterDetails/Summary/Mobile/index.tsx @@ -19,12 +19,14 @@ export default function MobileSummary({ isMember }: SummaryProps) { }) ) - const { booking, rooms, totalPrice, vat } = useEnterDetailsStore((state) => ({ - booking: state.booking, - rooms: state.rooms, - totalPrice: state.totalPrice, - vat: state.vat, - })) + const { booking, rooms, totalPrice, vat, defaultCurrency } = + useEnterDetailsStore((state) => ({ + booking: state.booking, + rooms: state.rooms, + totalPrice: state.totalPrice, + vat: state.vat, + defaultCurrency: state.defaultCurrency, + })) const showPromo = !isMember && @@ -58,6 +60,7 @@ export default function MobileSummary({ isMember }: SummaryProps) { totalPrice={totalPrice} vat={vat} toggleSummaryOpen={toggleSummaryOpen} + defaultCurrency={defaultCurrency} /> diff --git a/apps/scandic-web/components/HotelReservation/EnterDetails/Summary/UI/index.tsx b/apps/scandic-web/components/HotelReservation/EnterDetails/Summary/UI/index.tsx index 510746d47..ef41b7c68 100644 --- a/apps/scandic-web/components/HotelReservation/EnterDetails/Summary/UI/index.tsx +++ b/apps/scandic-web/components/HotelReservation/EnterDetails/Summary/UI/index.tsx @@ -28,14 +28,6 @@ import styles from "./ui.module.css" import { ChildBedMapEnum } from "@/types/components/bookingWidget/enums" import type { RoomRate } from "@/types/components/hotelReservation/enterDetails/details" import type { EnterDetailsSummaryProps } from "@/types/components/hotelReservation/summary" -import { CurrencyEnum } from "@/types/enums/currency" - -const notDisplayableCurrencies = [ - CurrencyEnum.CC, - CurrencyEnum.POINTS, - CurrencyEnum.Voucher, - CurrencyEnum.Unknown, -] export default function SummaryUI({ booking, @@ -44,6 +36,7 @@ export default function SummaryUI({ isMember, vat, toggleSummaryOpen, + defaultCurrency, }: EnterDetailsSummaryProps) { const intl = useIntl() const lang = useLang() @@ -190,10 +183,6 @@ export default function SummaryUI({ const guests = guestsParts.join(", ") - const hideBedCurrency = notDisplayableCurrencies.includes( - room.roomPrice.perStay.local.currency - ) - let rateDetails = room.rateDetails if (room.memberRateDetails) { if (isMember || room.guest.join) { @@ -201,6 +190,8 @@ export default function SummaryUI({ } } + const zeroPrice = formatPrice(intl, 0, defaultCurrency) + return (
- - {formatPrice( - intl, - 0, - hideBedCurrency - ? "" - : room.roomPrice.perStay.local.currency - )} - + {zeroPrice}
) : null} {childBedCrib ? ( @@ -342,13 +325,7 @@ export default function SummaryUI({ })} - - {formatPrice( - intl, - 0, - room.roomPrice.perStay.local.currency - )} - + {zeroPrice} ) : null} {childBedExtraBed ? ( @@ -365,13 +342,7 @@ export default function SummaryUI({ )} - - {formatPrice( - intl, - 0, - room.roomPrice.perStay.local.currency - )} - + {zeroPrice} ) : null}
diff --git a/apps/scandic-web/components/HotelReservation/MyStay/PriceDetails/index.tsx b/apps/scandic-web/components/HotelReservation/MyStay/PriceDetails/index.tsx index fbe08622f..e5f78f322 100644 --- a/apps/scandic-web/components/HotelReservation/MyStay/PriceDetails/index.tsx +++ b/apps/scandic-web/components/HotelReservation/MyStay/PriceDetails/index.tsx @@ -36,6 +36,7 @@ export default function PriceDetails() { toDate={toDate} totalPrice={totalPrice} vat={bookedRoom.vatPercentage} + defaultCurrency={bookedRoom.currencyCode} />
) diff --git a/apps/scandic-web/components/HotelReservation/PriceDetailsModal/PriceDetailsTable/index.tsx b/apps/scandic-web/components/HotelReservation/PriceDetailsModal/PriceDetailsTable/index.tsx index d1b5526d9..ffe1df8f0 100644 --- a/apps/scandic-web/components/HotelReservation/PriceDetailsModal/PriceDetailsTable/index.tsx +++ b/apps/scandic-web/components/HotelReservation/PriceDetailsModal/PriceDetailsTable/index.tsx @@ -31,6 +31,7 @@ import type { BreakfastPackage } from "@/types/components/hotelReservation/break import type { BedTypeSchema } from "@/types/components/hotelReservation/enterDetails/bedType" import type { Price } from "@/types/components/hotelReservation/price" import type { Child } from "@/types/components/hotelReservation/selectRate/selectRate" +import type { CurrencyEnum } from "@/types/enums/currency" import type { Package, Packages } from "@/types/requests/packages" type RoomPrice = @@ -59,6 +60,7 @@ export interface PriceDetailsTableProps { toDate: string totalPrice: Price vat: number + defaultCurrency: CurrencyEnum } export default function PriceDetailsTable({ @@ -69,6 +71,7 @@ export default function PriceDetailsTable({ toDate, totalPrice, vat, + defaultCurrency, }: PriceDetailsTableProps) { const intl = useIntl() const lang = useLang() @@ -122,11 +125,7 @@ export default function PriceDetailsTable({ } if (!currency) { - if (room.packages?.length) { - currency = room.packages[0].localPrice.currency - } else if (room.breakfast) { - currency = room.breakfast.localPrice.currency - } + currency = defaultCurrency } if (!price && !voucherPrice && !chequePrice && !redemptionPrice) { diff --git a/apps/scandic-web/components/HotelReservation/SelectRate/RoomsContainer/RateSummary/MobileSummary/Summary.tsx b/apps/scandic-web/components/HotelReservation/SelectRate/RoomsContainer/RateSummary/MobileSummary/Summary.tsx index 185889dee..e4beaff51 100644 --- a/apps/scandic-web/components/HotelReservation/SelectRate/RoomsContainer/RateSummary/MobileSummary/Summary.tsx +++ b/apps/scandic-web/components/HotelReservation/SelectRate/RoomsContainer/RateSummary/MobileSummary/Summary.tsx @@ -36,7 +36,10 @@ export default function Summary({ vat, toggleSummaryOpen, }: SelectRateSummaryProps) { - const rateSummary = useRatesStore((state) => state.rateSummary) + const { rateSummary, defaultCurrency } = useRatesStore((state) => ({ + rateSummary: state.rateSummary, + defaultCurrency: state.defaultCurrency, + })) const intl = useIntl() const lang = useLang() @@ -153,6 +156,7 @@ export default function Summary({ } const roomPackages = room.packages + const zeroPrice = formatPrice(intl, 0, defaultCurrency) return ( @@ -247,13 +251,7 @@ export default function Summary({ })} - - {formatPrice( - intl, - 0, - room.roomPrice.perStay.local.currency - )} - + {zeroPrice} ) : null} {childBedExtraBed ? ( @@ -270,13 +268,7 @@ export default function Summary({ )} - - {formatPrice( - intl, - 0, - room.roomPrice.perStay.local.currency - )} - + {zeroPrice} ) : null} {roomPackages?.map((pkg) => ( @@ -317,6 +309,7 @@ export default function Summary({ toDate={booking.toDate} totalPrice={totalPrice} vat={vat} + defaultCurrency={defaultCurrency} />
diff --git a/apps/scandic-web/stores/enter-details/index.ts b/apps/scandic-web/stores/enter-details/index.ts index 6bf18c243..4508f0c1a 100644 --- a/apps/scandic-web/stores/enter-details/index.ts +++ b/apps/scandic-web/stores/enter-details/index.ts @@ -378,6 +378,7 @@ export function createDetailsStore( searchParamString: searchParams, totalPrice: initialTotalPrice, vat: initialState.vat, + defaultCurrency: breakfastPackages[0].localPrice.currency, preSubmitCallbacks: {}, actions: { diff --git a/apps/scandic-web/stores/select-rate/helpers.ts b/apps/scandic-web/stores/select-rate/helpers.ts index 9c597d28d..82c78853a 100644 --- a/apps/scandic-web/stores/select-rate/helpers.ts +++ b/apps/scandic-web/stores/select-rate/helpers.ts @@ -1,8 +1,10 @@ import { RoomPackageCodeEnum } from "@/types/components/hotelReservation/selectRate/roomFilter" +import { CurrencyEnum } from "@/types/enums/currency" import type { AvailabilityError } from "@/types/stores/rates" import type { Product, RoomConfiguration, + RoomsAvailability, } from "@/types/trpc/routers/hotel/roomAvailability" export function findProduct( @@ -117,3 +119,28 @@ export function clearRoomSelectionFromUrl( searchParams.delete(`room[${roomIdx}].roomtype`) return searchParams } + +export function findDefaultCurrency( + roomsAvailability: (RoomsAvailability | AvailabilityError)[] | undefined +) { + if (!roomsAvailability || !roomsAvailability.length) { + return CurrencyEnum.Unknown + } + + const availability = roomsAvailability.filter( + (room): room is RoomsAvailability => { + if ("error" in room) { + return false + } + return true + } + )[0] + + const pkg = availability?.packages.find((pkg) => pkg.localPrice.currency) + if (!pkg) { + return CurrencyEnum.Unknown + } + + const defaultCurrency = pkg.localPrice.currency + return defaultCurrency +} diff --git a/apps/scandic-web/stores/select-rate/index.ts b/apps/scandic-web/stores/select-rate/index.ts index 138d448d6..dd578fab6 100644 --- a/apps/scandic-web/stores/select-rate/index.ts +++ b/apps/scandic-web/stores/select-rate/index.ts @@ -8,6 +8,7 @@ import { RatesContext } from "@/contexts/Rates" import { clearRoomSelectionFromUrl, + findDefaultCurrency, findProductInRoom, findSelectedRate, } from "./helpers" @@ -118,6 +119,8 @@ export function createRatesStore({ const isRedemptionBooking = booking.searchType === REDEMPTION + const defaultCurrency = findDefaultCurrency(roomsAvailability) + return create()((set) => { return { activeRoom, @@ -133,6 +136,7 @@ export function createRatesStore({ roomsAvailability, searchParams, vat, + defaultCurrency, rooms: booking.rooms.map((room, idx) => { const roomConfiguration = roomConfigurations[idx] const roomPackages = roomsPackages[idx] diff --git a/apps/scandic-web/types/components/hotelReservation/summary.ts b/apps/scandic-web/types/components/hotelReservation/summary.ts index 5c293cad2..d6822f45d 100644 --- a/apps/scandic-web/types/components/hotelReservation/summary.ts +++ b/apps/scandic-web/types/components/hotelReservation/summary.ts @@ -1,3 +1,4 @@ +import type { CurrencyEnum } from "@/types/enums/currency" import type { Packages } from "@/types/requests/packages" import type { RoomState } from "@/types/stores/enter-details" import type { RoomPrice, RoomRate } from "./enterDetails/details" @@ -25,6 +26,7 @@ export interface EnterDetailsSummaryProps { vat: number rooms: RoomState[] toggleSummaryOpen: () => void + defaultCurrency: CurrencyEnum } export interface SelectRateSummaryProps { diff --git a/apps/scandic-web/types/stores/enter-details.ts b/apps/scandic-web/types/stores/enter-details.ts index ce23b5220..897638d11 100644 --- a/apps/scandic-web/types/stores/enter-details.ts +++ b/apps/scandic-web/types/stores/enter-details.ts @@ -13,6 +13,7 @@ import type { RoomRate, SignedInDetailsSchema, } from "@/types/components/hotelReservation/enterDetails/details" +import type { CurrencyEnum } from "@/types/enums/currency" import type { StepEnum } from "@/types/enums/step" import type { Price } from "../components/hotelReservation/price" import type { @@ -102,6 +103,7 @@ export interface DetailsState { searchParamString: string totalPrice: Price vat: number + defaultCurrency: CurrencyEnum preSubmitCallbacks: Record void> } diff --git a/apps/scandic-web/types/stores/rates.ts b/apps/scandic-web/types/stores/rates.ts index cdf89f53e..c51160932 100644 --- a/apps/scandic-web/types/stores/rates.ts +++ b/apps/scandic-web/types/stores/rates.ts @@ -4,6 +4,7 @@ import type { Room as RoomBooking, SelectRateSearchParams, } from "@/types/components/hotelReservation/selectRate/selectRate" +import type { CurrencyEnum } from "@/types/enums/currency" import type { Room } from "@/types/hotel" import type { Package, PackageEnum } from "@/types/requests/packages" import type { @@ -66,6 +67,7 @@ export interface RatesState { roomsAvailability: (RoomsAvailability | AvailabilityError)[] | undefined searchParams: URLSearchParams vat: number + defaultCurrency: CurrencyEnum } export interface InitialState