From ddd4b7c53192b44e3c99b2e1d70f931bf72c2b2a Mon Sep 17 00:00:00 2001 From: Bianca Widstam Date: Wed, 10 Sep 2025 08:57:44 +0000 Subject: [PATCH] Merged in fix/SW-3449-corporatecheque-reward-nights-price (pull request #2782) fix(SW-3449): corporate cheque and rewards price fixes in select rate * fix(SW-3449): corporate cheque and rewards price fixes in select rate Approved-by: Erik Tiekstra Approved-by: Anton Gunnarsson --- .../MobileSummary/Content/index.tsx | 4 +- .../RoomsList/RoomListItem/Rates/Code.tsx | 31 ++++++++----- .../lib/contexts/SelectRate/getTotalPrice.ts | 45 +++++++++++++------ 3 files changed, 52 insertions(+), 28 deletions(-) diff --git a/packages/booking-flow/lib/components/SelectRate/RoomsContainer/RateSummary/MobileSummary/Content/index.tsx b/packages/booking-flow/lib/components/SelectRate/RoomsContainer/RateSummary/MobileSummary/Content/index.tsx index 16419b02f..b17aa206d 100644 --- a/packages/booking-flow/lib/components/SelectRate/RoomsContainer/RateSummary/MobileSummary/Content/index.tsx +++ b/packages/booking-flow/lib/components/SelectRate/RoomsContainer/RateSummary/MobileSummary/Content/index.tsx @@ -255,12 +255,12 @@ export default function SummaryContent({ } case "redemption": return { - redemption: room.redemption, + redemption: room.redemption.localPrice, } case "code": { if ("corporateCheque" in room) { return { - corporateCheque: room.corporateCheque, + corporateCheque: room.corporateCheque.localPrice, } } diff --git a/packages/booking-flow/lib/components/SelectRate/RoomsContainer/Rooms/RoomsList/RoomListItem/Rates/Code.tsx b/packages/booking-flow/lib/components/SelectRate/RoomsContainer/Rooms/RoomsList/RoomListItem/Rates/Code.tsx index 0c060dfce..56f38226e 100644 --- a/packages/booking-flow/lib/components/SelectRate/RoomsContainer/Rooms/RoomsList/RoomListItem/Rates/Code.tsx +++ b/packages/booking-flow/lib/components/SelectRate/RoomsContainer/Rooms/RoomsList/RoomListItem/Rates/Code.tsx @@ -90,6 +90,7 @@ function InnerCode({ roomTypeCode={roomTypeCode} bannerText={bannerText} packagesSum={pkgsSum} + requestedPackagesSum={pkgsSumRequested} handleSelectRate={handleSelectRate} isSelected={isSelected} /> @@ -154,6 +155,7 @@ function CorporateChequeCode({ roomIndex, bannerText, packagesSum, + requestedPackagesSum, handleSelectRate, isSelected, }: { @@ -162,6 +164,7 @@ function CorporateChequeCode({ roomTypeCode: string bannerText: string packagesSum: ReturnType + requestedPackagesSum: ReturnType handleSelectRate: (rateCode: string) => void isSelected: boolean }) { @@ -185,18 +188,22 @@ function CorporateChequeCode({ ? (localPrice.currency ?? packagesSum.currency ?? "") : "" - const approximateRate = - requestedPrice?.additionalPricePerStay && requestedPrice?.currency - ? { - label: intl.formatMessage({ - defaultMessage: "Approx.", - }), - price: - `${requestedPrice.numberOfCheques} CC + ` + - requestedPrice.additionalPricePerStay, - unit: requestedPrice.currency, - } - : undefined + let approximateRate = undefined + + if (requestedPrice?.currency && requestedPrice?.numberOfCheques) { + const base = requestedPrice.numberOfCheques + const additionalPrice = + (requestedPrice.additionalPricePerStay ?? 0) + + (requestedPackagesSum?.price ?? 0) + + if (additionalPrice > 0) { + approximateRate = { + label: intl.formatMessage({ defaultMessage: "Approx." }), + price: `${base} CC + ${additionalPrice}`, + unit: requestedPrice.currency, + } + } + } return ( => !!x ) - if (summaryArray.some((rate) => "corporateCheque" in rate)) { - return calculateCorporateChequePrice(summaryArray) + if ( + summaryArray.some((room) => room.rate && "corporateCheque" in room.rate) + ) { + return calculateCorporateChequePrice(summaryArray, addAdditionalCost) } if (!mainRoomRate) { @@ -42,11 +44,12 @@ export function getTotalPrice({ mainRoomRate.redemption, mainRoom.roomConfiguration?.selectedPackages.filter( (pkg) => "localPrice" in pkg - ) ?? null + ) ?? null, + addAdditionalCost ) } if ("voucher" in mainRoomRate) { - const voucherPrice = calculateVoucherPrice(summaryArray) + const voucherPrice = calculateVoucherPrice(summaryArray, addAdditionalCost) return voucherPrice } @@ -152,9 +155,12 @@ function calculateTotalPrice( function calculateRedemptionTotalPrice( redemption: RedemptionProduct["redemption"], - packages: RoomPackage[] | null + packages: RoomPackage[] | null, + addAdditonalCost: boolean ) { - const pkgsSum = sumPackages(packages) + const pkgsSum = addAdditonalCost + ? sumPackages(packages) + : { price: 0, currency: undefined } let additionalPrice if (redemption.localPrice.additionalPricePerStay) { additionalPrice = @@ -180,7 +186,8 @@ function calculateRedemptionTotalPrice( } function calculateVoucherPrice( - selectedRateSummary: OneLevelNonNullable[] + selectedRateSummary: OneLevelNonNullable[], + addAdditionalPrice?: boolean ) { return selectedRateSummary.reduce( (total, room) => { @@ -191,7 +198,9 @@ function calculateVoucherPrice( total.local.price = total.local.price + rate.numberOfVouchers - const pkgsSum = sumPackages(room.roomConfiguration?.selectedPackages) + const pkgsSum = addAdditionalPrice + ? sumPackages(room.roomConfiguration?.selectedPackages) + : { price: 0, currency: undefined } if (pkgsSum.price && pkgsSum.currency) { total.local.additionalPrice = (total.local.additionalPrice || 0) + pkgsSum.price @@ -216,18 +225,22 @@ type OneLevelNonNullable = { } export function calculateCorporateChequePrice( - selectedRates: OneLevelNonNullable[] + selectedRates: OneLevelNonNullable[], + addAdditionalCost?: boolean ) { return selectedRates.reduce( (total, room) => { - if (!("corporateCheque" in room.rate)) { + if (!(room.rate && "corporateCheque" in room.rate)) { return total } const rate = room.rate.corporateCheque - const pkgsSum = sumPackages( - selectedRates.flatMap((x) => x.roomConfiguration?.selectedPackages) - ) + const pkgsSum = addAdditionalCost + ? sumPackages(room.roomConfiguration?.selectedPackages) + : { price: 0, currency: undefined } + const packagesRequestedPrice = addAdditionalCost + ? sumPackagesRequestedPrice(room.roomConfiguration?.selectedPackages) + : { price: 0, currency: undefined } total.local.price = total.local.price + rate.localPrice.numberOfCheques if (rate.localPrice.additionalPricePerStay) { @@ -257,7 +270,11 @@ export function calculateCorporateChequePrice( if (rate.requestedPrice.additionalPricePerStay) { total.requested.additionalPrice = (total.requested.additionalPrice || 0) + - rate.requestedPrice.additionalPricePerStay + rate.requestedPrice.additionalPricePerStay + + packagesRequestedPrice.price + } else if (packagesRequestedPrice.price) { + total.local.additionalPrice = + (total.local.additionalPrice || 0) + packagesRequestedPrice.price } if (rate.requestedPrice.currency) {