feat(SW-1078): mixed rate scenario * feat(SW-1078): mixed rate scenario * fix: change from css string modification to array join * refactor: split out big reduce function into smaller parts * fix: minor fixes and improvments * fix: added room index map to localization string Approved-by: Christian Andolf
45 lines
1.3 KiB
TypeScript
45 lines
1.3 KiB
TypeScript
import { CancellationRuleEnum, PaymentMethodEnum } from "@/constants/booking"
|
|
|
|
import type { RoomState } from "@/types/stores/enter-details"
|
|
|
|
export function isPaymentMethodEnum(value: string): value is PaymentMethodEnum {
|
|
return Object.values<string>(PaymentMethodEnum).includes(value)
|
|
}
|
|
|
|
export function hasFlexibleRate({ room }: RoomState): boolean {
|
|
return room.cancellationRule === CancellationRuleEnum.CancellableBefore6PM
|
|
}
|
|
|
|
export function hasPrepaidRate({ room }: RoomState): boolean {
|
|
return room.cancellationRule !== CancellationRuleEnum.CancellableBefore6PM
|
|
}
|
|
|
|
export function calculateTotalRoomPrice({ room }: RoomState) {
|
|
let totalPrice = room.roomPrice.perStay.local.price
|
|
|
|
if (room.breakfast) {
|
|
totalPrice += Number(room.breakfast.localPrice.totalPrice) * room.adults
|
|
}
|
|
|
|
if (room.roomFeatures) {
|
|
room.roomFeatures.forEach((pkg) => {
|
|
totalPrice += Number(pkg.localPrice.price)
|
|
})
|
|
}
|
|
|
|
let comparisonPrice = totalPrice
|
|
|
|
const isMember = room.guest.join || room.guest.membershipNo
|
|
if (isMember) {
|
|
const publicPrice = room.roomRate.publicRate?.localPrice.pricePerStay ?? 0
|
|
const memberPrice = room.roomRate.memberRate?.localPrice.pricePerStay ?? 0
|
|
const diff = publicPrice - memberPrice
|
|
comparisonPrice = totalPrice + diff
|
|
}
|
|
|
|
return {
|
|
totalPrice,
|
|
comparisonPrice,
|
|
}
|
|
}
|