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
This commit is contained in:
Bianca Widstam
2025-09-10 08:57:44 +00:00
parent 1ceb1520a6
commit ddd4b7c531
3 changed files with 52 additions and 28 deletions

View File

@@ -255,12 +255,12 @@ export default function SummaryContent({
} }
case "redemption": case "redemption":
return { return {
redemption: room.redemption, redemption: room.redemption.localPrice,
} }
case "code": { case "code": {
if ("corporateCheque" in room) { if ("corporateCheque" in room) {
return { return {
corporateCheque: room.corporateCheque, corporateCheque: room.corporateCheque.localPrice,
} }
} }

View File

@@ -90,6 +90,7 @@ function InnerCode({
roomTypeCode={roomTypeCode} roomTypeCode={roomTypeCode}
bannerText={bannerText} bannerText={bannerText}
packagesSum={pkgsSum} packagesSum={pkgsSum}
requestedPackagesSum={pkgsSumRequested}
handleSelectRate={handleSelectRate} handleSelectRate={handleSelectRate}
isSelected={isSelected} isSelected={isSelected}
/> />
@@ -154,6 +155,7 @@ function CorporateChequeCode({
roomIndex, roomIndex,
bannerText, bannerText,
packagesSum, packagesSum,
requestedPackagesSum,
handleSelectRate, handleSelectRate,
isSelected, isSelected,
}: { }: {
@@ -162,6 +164,7 @@ function CorporateChequeCode({
roomTypeCode: string roomTypeCode: string
bannerText: string bannerText: string
packagesSum: ReturnType<typeof sumPackages> packagesSum: ReturnType<typeof sumPackages>
requestedPackagesSum: ReturnType<typeof sumPackagesRequestedPrice>
handleSelectRate: (rateCode: string) => void handleSelectRate: (rateCode: string) => void
isSelected: boolean isSelected: boolean
}) { }) {
@@ -185,18 +188,22 @@ function CorporateChequeCode({
? (localPrice.currency ?? packagesSum.currency ?? "") ? (localPrice.currency ?? packagesSum.currency ?? "")
: "" : ""
const approximateRate = let approximateRate = undefined
requestedPrice?.additionalPricePerStay && requestedPrice?.currency
? { if (requestedPrice?.currency && requestedPrice?.numberOfCheques) {
label: intl.formatMessage({ const base = requestedPrice.numberOfCheques
defaultMessage: "Approx.", const additionalPrice =
}), (requestedPrice.additionalPricePerStay ?? 0) +
price: (requestedPackagesSum?.price ?? 0)
`${requestedPrice.numberOfCheques} CC + ` +
requestedPrice.additionalPricePerStay, if (additionalPrice > 0) {
unit: requestedPrice.currency, approximateRate = {
} label: intl.formatMessage({ defaultMessage: "Approx." }),
: undefined price: `${base} CC + ${additionalPrice}`,
unit: requestedPrice.currency,
}
}
}
return ( return (
<CodeRateCard <CodeRateCard

View File

@@ -28,8 +28,10 @@ export function getTotalPrice({
(x): x is OneLevelNonNullable<SelectedRate> => !!x (x): x is OneLevelNonNullable<SelectedRate> => !!x
) )
if (summaryArray.some((rate) => "corporateCheque" in rate)) { if (
return calculateCorporateChequePrice(summaryArray) summaryArray.some((room) => room.rate && "corporateCheque" in room.rate)
) {
return calculateCorporateChequePrice(summaryArray, addAdditionalCost)
} }
if (!mainRoomRate) { if (!mainRoomRate) {
@@ -42,11 +44,12 @@ export function getTotalPrice({
mainRoomRate.redemption, mainRoomRate.redemption,
mainRoom.roomConfiguration?.selectedPackages.filter( mainRoom.roomConfiguration?.selectedPackages.filter(
(pkg) => "localPrice" in pkg (pkg) => "localPrice" in pkg
) ?? null ) ?? null,
addAdditionalCost
) )
} }
if ("voucher" in mainRoomRate) { if ("voucher" in mainRoomRate) {
const voucherPrice = calculateVoucherPrice(summaryArray) const voucherPrice = calculateVoucherPrice(summaryArray, addAdditionalCost)
return voucherPrice return voucherPrice
} }
@@ -152,9 +155,12 @@ function calculateTotalPrice(
function calculateRedemptionTotalPrice( function calculateRedemptionTotalPrice(
redemption: RedemptionProduct["redemption"], 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 let additionalPrice
if (redemption.localPrice.additionalPricePerStay) { if (redemption.localPrice.additionalPricePerStay) {
additionalPrice = additionalPrice =
@@ -180,7 +186,8 @@ function calculateRedemptionTotalPrice(
} }
function calculateVoucherPrice( function calculateVoucherPrice(
selectedRateSummary: OneLevelNonNullable<SelectedRate>[] selectedRateSummary: OneLevelNonNullable<SelectedRate>[],
addAdditionalPrice?: boolean
) { ) {
return selectedRateSummary.reduce<Price>( return selectedRateSummary.reduce<Price>(
(total, room) => { (total, room) => {
@@ -191,7 +198,9 @@ function calculateVoucherPrice(
total.local.price = total.local.price + rate.numberOfVouchers 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) { if (pkgsSum.price && pkgsSum.currency) {
total.local.additionalPrice = total.local.additionalPrice =
(total.local.additionalPrice || 0) + pkgsSum.price (total.local.additionalPrice || 0) + pkgsSum.price
@@ -216,18 +225,22 @@ type OneLevelNonNullable<T> = {
} }
export function calculateCorporateChequePrice( export function calculateCorporateChequePrice(
selectedRates: OneLevelNonNullable<SelectedRate>[] selectedRates: OneLevelNonNullable<SelectedRate>[],
addAdditionalCost?: boolean
) { ) {
return selectedRates.reduce<Price>( return selectedRates.reduce<Price>(
(total, room) => { (total, room) => {
if (!("corporateCheque" in room.rate)) { if (!(room.rate && "corporateCheque" in room.rate)) {
return total return total
} }
const rate = room.rate.corporateCheque const rate = room.rate.corporateCheque
const pkgsSum = sumPackages( const pkgsSum = addAdditionalCost
selectedRates.flatMap((x) => x.roomConfiguration?.selectedPackages) ? 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 total.local.price = total.local.price + rate.localPrice.numberOfCheques
if (rate.localPrice.additionalPricePerStay) { if (rate.localPrice.additionalPricePerStay) {
@@ -257,7 +270,11 @@ export function calculateCorporateChequePrice(
if (rate.requestedPrice.additionalPricePerStay) { if (rate.requestedPrice.additionalPricePerStay) {
total.requested.additionalPrice = total.requested.additionalPrice =
(total.requested.additionalPrice || 0) + (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) { if (rate.requestedPrice.currency) {