fix: make sure calculations in booking flow are correct

This commit is contained in:
Simon Emanuelsson
2025-04-02 15:49:59 +02:00
committed by Michael Zetterberg
parent 3e0f503314
commit a222ecfc5c
28 changed files with 309 additions and 276 deletions

View File

@@ -30,6 +30,7 @@ import { rateDefinitionSchema } from "./schemas/roomAvailability/rateDefinition"
import { AvailabilityEnum } from "@/types/components/hotelReservation/selectHotel/selectHotel"
import { RoomPackageCodeEnum } from "@/types/components/hotelReservation/selectRate/roomFilter"
import { RateEnum } from "@/types/enums/rate"
import { RateTypeEnum } from "@/types/enums/rateType"
import type {
AdditionalData,
@@ -112,11 +113,11 @@ export const hotelsAvailabilitySchema = z.object({
function getRate(rate: RateDefinition) {
switch (rate.cancellationRule) {
case "CancellableBefore6PM":
return "flex"
return RateEnum.flex
case "Changeable":
return "change"
return RateEnum.change
case "NotCancellable":
return "save"
return RateEnum.save
default:
console.info(
`Unknown cancellationRule [${rate.cancellationRule}]. This should never happen!`
@@ -276,7 +277,6 @@ export const roomsAvailabilitySchema = z
} else {
product.bookingCode = undefined
}
product.breakfastIncluded = rateDefinition.breakfastIncluded
product.rate = rate
product.rateDefinition = rateDefinition
@@ -292,7 +292,9 @@ export const roomsAvailabilitySchema = z
if ("corporateCheque" in product) {
const rateDetails = getRateDetails(product)
if (rateDetails) {
breakfastIncluded.push(rateDetails.breakfastIncluded)
breakfastIncluded.push(
rateDetails.rateDefinition.breakfastIncluded
)
room.code.push({
...rateDetails,
corporateCheque: product.corporateCheque,
@@ -304,7 +306,9 @@ export const roomsAvailabilitySchema = z
if ("voucher" in product) {
const rateDetails = getRateDetails(product)
if (rateDetails) {
breakfastIncluded.push(rateDetails.breakfastIncluded)
breakfastIncluded.push(
rateDetails.rateDefinition.breakfastIncluded
)
room.code.push({
...rateDetails,
voucher: product.voucher,
@@ -319,7 +323,9 @@ export const roomsAvailabilitySchema = z
for (const redemption of product) {
const rateDetails = getRateDetails(redemption)
if (rateDetails) {
breakfastIncluded.push(rateDetails.breakfastIncluded)
breakfastIncluded.push(
rateDetails.rateDefinition.breakfastIncluded
)
room.redemptions.push({
...redemption,
...rateDetails,
@@ -336,45 +342,46 @@ export const roomsAvailabilitySchema = z
) {
const memberRate = product.member
const publicRate = product.public
const rateCode = publicRate?.rateCode ?? memberRate?.rateCode
const rateDetails = getRateDetails(product)
const rateDetailsMember = getRateDetails({
...product,
public: null,
})
if (rateDetails && rateCode) {
if (rateDetails) {
if (publicRate) {
breakfastIncluded.push(
rateDetails.rateDefinition.breakfastIncluded
)
}
if (rateDetailsMember) {
breakfastIncludedMember.push(
rateDetailsMember.breakfastIncluded
rateDetailsMember.rateDefinition.breakfastIncluded
)
rateDetails.rateDefinitionMember =
rateDetailsMember.rateDefinition
}
const rateDefinition = findRateDefintion(rateCode)
if (rateDefinition) {
switch (rateDefinition.rateType) {
case RateTypeEnum.PublicPromotion:
room.campaign.push({
...rateDetails,
member: memberRate,
public: publicRate,
})
break
case RateTypeEnum.Regular:
room.regular.push({
...rateDetails,
member: memberRate,
public: publicRate,
})
break
default:
room.code.push({
...rateDetails,
member: memberRate,
public: publicRate,
})
}
switch (rateDetails.rateDefinition.rateType) {
case RateTypeEnum.PublicPromotion:
room.campaign.push({
...rateDetails,
member: memberRate,
public: publicRate,
})
break
case RateTypeEnum.Regular:
room.regular.push({
...rateDetails,
member: memberRate,
public: publicRate,
})
break
default:
room.code.push({
...rateDetails,
member: memberRate,
public: publicRate,
})
}
continue
}