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