fix: unite all price details modals to one and align on ui
This commit is contained in:
committed by
Michael Zetterberg
parent
8152aea649
commit
1f94c581ae
@@ -1,5 +1,10 @@
|
||||
import isEqual from "fast-deep-equal"
|
||||
|
||||
import {
|
||||
sumPackages,
|
||||
sumPackagesRequestedPrice,
|
||||
} from "@/components/HotelReservation/utils"
|
||||
|
||||
import { detailsStorageName } from "."
|
||||
|
||||
import { type RoomRate } from "@/types/components/hotelReservation/enterDetails/details"
|
||||
@@ -423,6 +428,11 @@ export function calcTotalPrice(
|
||||
return acc
|
||||
}
|
||||
|
||||
const isSpecialRate =
|
||||
"corporateCheque" in room.roomRate ||
|
||||
"redemption" in room.roomRate ||
|
||||
"voucher" in room.roomRate
|
||||
|
||||
const breakfastRequestedPrice = room.breakfast
|
||||
? (room.breakfast.requestedPrice?.price ?? 0)
|
||||
: 0
|
||||
@@ -430,21 +440,11 @@ export function calcTotalPrice(
|
||||
? (room.breakfast.localPrice?.price ?? 0)
|
||||
: 0
|
||||
|
||||
const roomFeaturesTotal = (room.roomFeatures || []).reduce(
|
||||
(total, pkg) => {
|
||||
if (pkg.requestedPrice.totalPrice) {
|
||||
total.requestedPrice = add(
|
||||
total.requestedPrice,
|
||||
pkg.requestedPrice.totalPrice
|
||||
)
|
||||
}
|
||||
total.local = add(total.local, pkg.localPrice.totalPrice)
|
||||
|
||||
return total
|
||||
},
|
||||
{ local: 0, requestedPrice: 0 }
|
||||
)
|
||||
const pkgsSum = sumPackages(room.roomFeatures)
|
||||
const pkgsSumRequested = sumPackagesRequestedPrice(room.roomFeatures)
|
||||
|
||||
const breakfastRequestedTotalPrice =
|
||||
breakfastRequestedPrice * room.adults * nights
|
||||
if (roomPrice.perStay.requested) {
|
||||
if (!acc.requested) {
|
||||
acc.requested = {
|
||||
@@ -453,61 +453,84 @@ export function calcTotalPrice(
|
||||
}
|
||||
}
|
||||
|
||||
acc.requested.price = add(
|
||||
acc.requested.price,
|
||||
roomPrice.perStay.requested.price,
|
||||
breakfastRequestedPrice * room.adults * nights
|
||||
)
|
||||
|
||||
// TODO: Come back and verify on CC, PTS, Voucher
|
||||
if (roomPrice.perStay.requested.additionalPrice) {
|
||||
acc.requested.additionalPrice = add(
|
||||
acc.requested.additionalPrice,
|
||||
roomPrice.perStay.requested.additionalPrice
|
||||
if (isSpecialRate) {
|
||||
acc.requested.price = add(
|
||||
acc.requested.price,
|
||||
roomPrice.perStay.requested.price
|
||||
)
|
||||
}
|
||||
|
||||
if (
|
||||
roomPrice.perStay.requested.additionalPriceCurrency &&
|
||||
!acc.requested.additionalPriceCurrency
|
||||
) {
|
||||
acc.requested.additionalPriceCurrency =
|
||||
roomPrice.perStay.requested.additionalPriceCurrency
|
||||
acc.requested.additionalPrice = add(
|
||||
breakfastRequestedTotalPrice,
|
||||
pkgsSumRequested.price
|
||||
)
|
||||
|
||||
if (!acc.requested.additionalPriceCurrency) {
|
||||
if (roomPrice.perStay.requested.additionalPriceCurrency) {
|
||||
acc.requested.additionalPriceCurrency =
|
||||
roomPrice.perStay.requested.additionalPriceCurrency
|
||||
} else if (room.breakfast) {
|
||||
acc.requested.additionalPriceCurrency =
|
||||
room.breakfast.localPrice.currency
|
||||
} else if (pkgsSumRequested.currency) {
|
||||
acc.requested.additionalPriceCurrency = pkgsSumRequested.currency
|
||||
}
|
||||
}
|
||||
} else {
|
||||
acc.requested.price = add(
|
||||
acc.requested.price,
|
||||
roomPrice.perStay.requested.price,
|
||||
breakfastRequestedTotalPrice,
|
||||
pkgsSumRequested.price
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
const breakfastLocalTotalPrice =
|
||||
breakfastLocalPrice * room.adults * nights
|
||||
|
||||
acc.local.price = add(
|
||||
acc.local.price,
|
||||
roomPrice.perStay.local.price,
|
||||
breakfastLocalTotalPrice,
|
||||
roomFeaturesTotal.local
|
||||
)
|
||||
if (isSpecialRate) {
|
||||
acc.local.price = add(acc.local.price, roomPrice.perStay.local.price)
|
||||
|
||||
if (roomPrice.perStay.local.regularPrice) {
|
||||
acc.local.regularPrice = add(
|
||||
acc.local.regularPrice,
|
||||
roomPrice.perStay.local.regularPrice,
|
||||
if (
|
||||
roomPrice.perStay.local.additionalPrice ||
|
||||
breakfastLocalTotalPrice ||
|
||||
pkgsSum.price
|
||||
) {
|
||||
acc.local.additionalPrice = add(
|
||||
acc.local.additionalPrice,
|
||||
roomPrice.perStay.local.additionalPrice,
|
||||
breakfastLocalTotalPrice,
|
||||
pkgsSum.price
|
||||
)
|
||||
}
|
||||
|
||||
if (!acc.local.additionalPriceCurrency) {
|
||||
if (roomPrice.perStay.local.additionalPriceCurrency) {
|
||||
acc.local.additionalPriceCurrency =
|
||||
roomPrice.perStay.local.additionalPriceCurrency
|
||||
} else if (room.breakfast) {
|
||||
acc.local.additionalPriceCurrency =
|
||||
room.breakfast.localPrice.currency
|
||||
} else if (pkgsSum.currency) {
|
||||
acc.local.additionalPriceCurrency = pkgsSum.currency
|
||||
}
|
||||
}
|
||||
} else {
|
||||
acc.local.price = add(
|
||||
acc.local.price,
|
||||
roomPrice.perStay.local.price,
|
||||
breakfastLocalTotalPrice,
|
||||
roomFeaturesTotal.local
|
||||
pkgsSum.price
|
||||
)
|
||||
}
|
||||
|
||||
if (roomPrice.perStay.local.additionalPrice) {
|
||||
acc.local.additionalPrice = add(
|
||||
acc.local.additionalPrice,
|
||||
roomPrice.perStay.local.additionalPrice
|
||||
)
|
||||
}
|
||||
|
||||
if (
|
||||
roomPrice.perStay.local.additionalPriceCurrency &&
|
||||
!acc.local.additionalPriceCurrency
|
||||
) {
|
||||
acc.local.additionalPriceCurrency =
|
||||
roomPrice.perStay.local.additionalPriceCurrency
|
||||
if (roomPrice.perStay.local.regularPrice) {
|
||||
acc.local.regularPrice = add(
|
||||
acc.local.regularPrice,
|
||||
roomPrice.perStay.local.regularPrice,
|
||||
breakfastLocalTotalPrice,
|
||||
pkgsSum.price
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
return acc
|
||||
|
||||
@@ -6,6 +6,10 @@ import { create, useStore } from "zustand"
|
||||
import { REDEMPTION } from "@/constants/booking"
|
||||
import { dt } from "@/lib/dt"
|
||||
|
||||
import {
|
||||
sumPackages,
|
||||
sumPackagesRequestedPrice,
|
||||
} from "@/components/HotelReservation/utils"
|
||||
import { DetailsContext } from "@/contexts/Details"
|
||||
|
||||
import {
|
||||
@@ -64,6 +68,7 @@ export function createDetailsStore(
|
||||
|
||||
let initialTotalPrice: Price
|
||||
const roomOneRoomRate = initialState.rooms[0].roomRate
|
||||
const initialRoomRates = initialState.rooms.map((r) => r.roomRate)
|
||||
if (isRedemption && "redemption" in roomOneRoomRate) {
|
||||
initialTotalPrice = {
|
||||
local: {
|
||||
@@ -80,34 +85,56 @@ export function createDetailsStore(
|
||||
roomOneRoomRate.redemption.localPrice.additionalPricePerStay
|
||||
}
|
||||
} else if (isVoucher) {
|
||||
initialTotalPrice = calculateVoucherPrice(
|
||||
initialState.rooms.map((r) => r.roomRate)
|
||||
)
|
||||
initialTotalPrice = calculateVoucherPrice(initialRoomRates)
|
||||
} else if (isCorpChq) {
|
||||
initialTotalPrice = calculateCorporateChequePrice(
|
||||
initialState.rooms.map((r) => r.roomRate)
|
||||
)
|
||||
initialTotalPrice = calculateCorporateChequePrice(initialRoomRates)
|
||||
} else {
|
||||
initialTotalPrice = getTotalPrice(
|
||||
initialState.rooms.map((r) => r.roomRate),
|
||||
isMember
|
||||
)
|
||||
initialTotalPrice = getTotalPrice(initialRoomRates, isMember)
|
||||
}
|
||||
|
||||
initialState.rooms.forEach((room) => {
|
||||
if (room.roomFeatures) {
|
||||
room.roomFeatures.forEach((pkg) => {
|
||||
const pkgsSum = sumPackages(room.roomFeatures)
|
||||
const pkgsSumRequested = sumPackagesRequestedPrice(room.roomFeatures)
|
||||
|
||||
if ("corporateCheque" in room.roomRate || "redemption" in room.roomRate) {
|
||||
initialTotalPrice.local.additionalPrice = add(
|
||||
initialTotalPrice.local.additionalPrice,
|
||||
pkgsSum.price
|
||||
)
|
||||
if (
|
||||
!initialTotalPrice.local.additionalPriceCurrency &&
|
||||
pkgsSum.currency
|
||||
) {
|
||||
initialTotalPrice.local.additionalPriceCurrency = pkgsSum.currency
|
||||
}
|
||||
|
||||
if (initialTotalPrice.requested) {
|
||||
initialTotalPrice.requested.additionalPrice = add(
|
||||
initialTotalPrice.requested.additionalPrice,
|
||||
pkgsSumRequested.price
|
||||
)
|
||||
if (
|
||||
!initialTotalPrice.requested.additionalPriceCurrency &&
|
||||
pkgsSumRequested.currency
|
||||
) {
|
||||
initialTotalPrice.requested.additionalPriceCurrency =
|
||||
pkgsSumRequested.currency
|
||||
}
|
||||
}
|
||||
} else if ("public" in room.roomRate) {
|
||||
if (initialTotalPrice.requested) {
|
||||
initialTotalPrice.requested.price = add(
|
||||
initialTotalPrice.requested.price,
|
||||
pkg.requestedPrice.totalPrice
|
||||
pkgsSumRequested.price
|
||||
)
|
||||
}
|
||||
|
||||
initialTotalPrice.local.price = add(
|
||||
initialTotalPrice.local.price,
|
||||
pkg.localPrice.totalPrice
|
||||
pkgsSum.price
|
||||
)
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
@@ -11,10 +11,12 @@ interface RoomPrice {
|
||||
}
|
||||
|
||||
interface MyStayTotalPriceState {
|
||||
rooms: RoomPrice[]
|
||||
totalPrice: number | null
|
||||
currencyCode: CurrencyEnum
|
||||
rooms: RoomPrice[]
|
||||
totalCheques: number
|
||||
totalPoints: number
|
||||
totalPrice: number | null
|
||||
totalVouchers: number
|
||||
actions: {
|
||||
// Add a single room price
|
||||
addRoomPrice: (room: RoomPrice) => void
|
||||
|
||||
@@ -89,12 +89,14 @@ export function createRatesStore({
|
||||
room.counterRateCode
|
||||
)
|
||||
if (product) {
|
||||
const roomPackages = roomsPackages[idx].filter((pkg) =>
|
||||
room.packages?.includes(pkg.code)
|
||||
)
|
||||
|
||||
rateSummary[idx] = {
|
||||
features: selectedRoom.features,
|
||||
product,
|
||||
packages: roomsPackages[idx].filter((pkg) =>
|
||||
room.packages?.includes(pkg.code)
|
||||
),
|
||||
packages: roomPackages,
|
||||
rate: product.rate,
|
||||
roomType: selectedRoom.roomType,
|
||||
roomTypeCode: selectedRoom.roomTypeCode,
|
||||
|
||||
Reference in New Issue
Block a user