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:
@@ -255,12 +255,12 @@ export default function SummaryContent({
|
||||
}
|
||||
case "redemption":
|
||||
return {
|
||||
redemption: room.redemption,
|
||||
redemption: room.redemption.localPrice,
|
||||
}
|
||||
case "code": {
|
||||
if ("corporateCheque" in room) {
|
||||
return {
|
||||
corporateCheque: room.corporateCheque,
|
||||
corporateCheque: room.corporateCheque.localPrice,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -90,6 +90,7 @@ function InnerCode({
|
||||
roomTypeCode={roomTypeCode}
|
||||
bannerText={bannerText}
|
||||
packagesSum={pkgsSum}
|
||||
requestedPackagesSum={pkgsSumRequested}
|
||||
handleSelectRate={handleSelectRate}
|
||||
isSelected={isSelected}
|
||||
/>
|
||||
@@ -154,6 +155,7 @@ function CorporateChequeCode({
|
||||
roomIndex,
|
||||
bannerText,
|
||||
packagesSum,
|
||||
requestedPackagesSum,
|
||||
handleSelectRate,
|
||||
isSelected,
|
||||
}: {
|
||||
@@ -162,6 +164,7 @@ function CorporateChequeCode({
|
||||
roomTypeCode: string
|
||||
bannerText: string
|
||||
packagesSum: ReturnType<typeof sumPackages>
|
||||
requestedPackagesSum: ReturnType<typeof sumPackagesRequestedPrice>
|
||||
handleSelectRate: (rateCode: string) => void
|
||||
isSelected: boolean
|
||||
}) {
|
||||
@@ -185,18 +188,22 @@ function CorporateChequeCode({
|
||||
? (localPrice.currency ?? packagesSum.currency ?? "")
|
||||
: ""
|
||||
|
||||
const approximateRate =
|
||||
requestedPrice?.additionalPricePerStay && requestedPrice?.currency
|
||||
? {
|
||||
label: intl.formatMessage({
|
||||
defaultMessage: "Approx.",
|
||||
}),
|
||||
price:
|
||||
`${requestedPrice.numberOfCheques} CC + ` +
|
||||
requestedPrice.additionalPricePerStay,
|
||||
unit: requestedPrice.currency,
|
||||
}
|
||||
: undefined
|
||||
let approximateRate = undefined
|
||||
|
||||
if (requestedPrice?.currency && requestedPrice?.numberOfCheques) {
|
||||
const base = requestedPrice.numberOfCheques
|
||||
const additionalPrice =
|
||||
(requestedPrice.additionalPricePerStay ?? 0) +
|
||||
(requestedPackagesSum?.price ?? 0)
|
||||
|
||||
if (additionalPrice > 0) {
|
||||
approximateRate = {
|
||||
label: intl.formatMessage({ defaultMessage: "Approx." }),
|
||||
price: `${base} CC + ${additionalPrice}`,
|
||||
unit: requestedPrice.currency,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return (
|
||||
<CodeRateCard
|
||||
|
||||
@@ -28,8 +28,10 @@ export function getTotalPrice({
|
||||
(x): x is OneLevelNonNullable<SelectedRate> => !!x
|
||||
)
|
||||
|
||||
if (summaryArray.some((rate) => "corporateCheque" in rate)) {
|
||||
return calculateCorporateChequePrice(summaryArray)
|
||||
if (
|
||||
summaryArray.some((room) => room.rate && "corporateCheque" in room.rate)
|
||||
) {
|
||||
return calculateCorporateChequePrice(summaryArray, addAdditionalCost)
|
||||
}
|
||||
|
||||
if (!mainRoomRate) {
|
||||
@@ -42,11 +44,12 @@ export function getTotalPrice({
|
||||
mainRoomRate.redemption,
|
||||
mainRoom.roomConfiguration?.selectedPackages.filter(
|
||||
(pkg) => "localPrice" in pkg
|
||||
) ?? null
|
||||
) ?? null,
|
||||
addAdditionalCost
|
||||
)
|
||||
}
|
||||
if ("voucher" in mainRoomRate) {
|
||||
const voucherPrice = calculateVoucherPrice(summaryArray)
|
||||
const voucherPrice = calculateVoucherPrice(summaryArray, addAdditionalCost)
|
||||
return voucherPrice
|
||||
}
|
||||
|
||||
@@ -152,9 +155,12 @@ function calculateTotalPrice(
|
||||
|
||||
function calculateRedemptionTotalPrice(
|
||||
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
|
||||
if (redemption.localPrice.additionalPricePerStay) {
|
||||
additionalPrice =
|
||||
@@ -180,7 +186,8 @@ function calculateRedemptionTotalPrice(
|
||||
}
|
||||
|
||||
function calculateVoucherPrice(
|
||||
selectedRateSummary: OneLevelNonNullable<SelectedRate>[]
|
||||
selectedRateSummary: OneLevelNonNullable<SelectedRate>[],
|
||||
addAdditionalPrice?: boolean
|
||||
) {
|
||||
return selectedRateSummary.reduce<Price>(
|
||||
(total, room) => {
|
||||
@@ -191,7 +198,9 @@ function calculateVoucherPrice(
|
||||
|
||||
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) {
|
||||
total.local.additionalPrice =
|
||||
(total.local.additionalPrice || 0) + pkgsSum.price
|
||||
@@ -216,18 +225,22 @@ type OneLevelNonNullable<T> = {
|
||||
}
|
||||
|
||||
export function calculateCorporateChequePrice(
|
||||
selectedRates: OneLevelNonNullable<SelectedRate>[]
|
||||
selectedRates: OneLevelNonNullable<SelectedRate>[],
|
||||
addAdditionalCost?: boolean
|
||||
) {
|
||||
return selectedRates.reduce<Price>(
|
||||
(total, room) => {
|
||||
if (!("corporateCheque" in room.rate)) {
|
||||
if (!(room.rate && "corporateCheque" in room.rate)) {
|
||||
return total
|
||||
}
|
||||
|
||||
const rate = room.rate.corporateCheque
|
||||
const pkgsSum = sumPackages(
|
||||
selectedRates.flatMap((x) => x.roomConfiguration?.selectedPackages)
|
||||
)
|
||||
const pkgsSum = addAdditionalCost
|
||||
? 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
|
||||
if (rate.localPrice.additionalPricePerStay) {
|
||||
@@ -257,7 +270,11 @@ export function calculateCorporateChequePrice(
|
||||
if (rate.requestedPrice.additionalPricePerStay) {
|
||||
total.requested.additionalPrice =
|
||||
(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) {
|
||||
|
||||
Reference in New Issue
Block a user