48 lines
1.3 KiB
TypeScript
48 lines
1.3 KiB
TypeScript
import { 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.isFlexRate
|
|
}
|
|
|
|
export function hasPrepaidRate({ room }: RoomState): boolean {
|
|
return !room.isFlexRate
|
|
}
|
|
|
|
export function calculateTotalRoomPrice(
|
|
{ room }: RoomState,
|
|
initialRoomPrice?: number
|
|
) {
|
|
let totalPrice = initialRoomPrice ?? 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 && "member" in room.roomRate) {
|
|
const publicPrice = room.roomRate.public?.localPrice.pricePerStay ?? 0
|
|
const memberPrice = room.roomRate.member?.localPrice.pricePerStay ?? 0
|
|
const diff = publicPrice - memberPrice
|
|
comparisonPrice = totalPrice + diff
|
|
}
|
|
|
|
return {
|
|
totalPrice,
|
|
comparisonPrice,
|
|
}
|
|
}
|