Merged in feat/SW-2440-ancillaries-tracking (pull request #1846)

Feat(SW-2440): Ancillaries tracking

* fix(SW-2440): move ancillaries tracking to separate object


Approved-by: Christian Andolf
This commit is contained in:
Matilda Landström
2025-04-24 15:08:40 +00:00
parent d097547ec7
commit 6d7fbe0894
5 changed files with 49 additions and 31 deletions

View File

@@ -23,18 +23,20 @@ export default function Tracking({
const rooms = bookingRooms.filter((room): room is Room => !!room)
const { hotelsTrackingData, pageTrackingData, paymentInfo } = getTracking(
lang,
bookingConfirmation.booking,
bookingConfirmation.hotel,
rooms
)
const { hotelsTrackingData, pageTrackingData, paymentInfo, ancillaries } =
getTracking(
lang,
bookingConfirmation.booking,
bookingConfirmation.hotel,
rooms
)
return (
<TrackingSDK
pageData={pageTrackingData}
hotelInfo={hotelsTrackingData}
paymentInfo={paymentInfo}
ancillaries={ancillaries}
/>
)
}

View File

@@ -6,8 +6,10 @@ import { getSpecialRoomType } from "@/utils/specialRoomType"
import { invertedBedTypeMap } from "../../utils"
import { RoomPackageCodeEnum } from "@/types/components/hotelReservation/selectRate/roomFilter"
import {
TrackingChannelEnum,
type TrackingSDKAncillaries,
type TrackingSDKHotelInfo,
type TrackingSDKPageData,
type TrackingSDKPaymentInfo,
@@ -32,28 +34,30 @@ function getRate(cancellationRule: RateDefinition["cancellationRule"] | null) {
}
}
function findBreakfastPackage(
function findAncillaryPackages(
packages: BookingConfirmation["booking"]["packages"]
) {
return packages.find(
(pkg) => pkg.code === BreakfastPackageEnum.REGULAR_BREAKFAST
): BookingConfirmation["booking"]["packages"] {
return packages.filter(
(pkg) =>
pkg.code === RoomPackageCodeEnum.PET_ROOM ||
pkg.code === BreakfastPackageEnum.REGULAR_BREAKFAST
)
}
function mapBreakfastPackage(
breakfastPackage: BookingConfirmation["booking"]["packages"][number],
adults: number,
function mapAncillaryPackage(
ancillaryPackage: BookingConfirmation["booking"]["packages"][number],
operaId: string
) {
return {
hotelid: operaId,
productCategory: "", // TODO: Add category
productId: breakfastPackage.code!, // Is not found unless code exists
productName: "BreakfastAdult",
productPoints: 0,
productPrice: +breakfastPackage.unitPrice,
productType: "food",
productUnits: adults,
productId: ancillaryPackage.code,
productName: ancillaryPackage.description,
productPoints: ancillaryPackage.points,
productPrice: ancillaryPackage.unitPrice,
productType: ancillaryPackage.type ?? "",
productUnits: ancillaryPackage.unit,
productDeliveryTime: "",
}
}
@@ -83,20 +87,17 @@ export function getTracking(
booking.rateDefinition.cancellationRule ===
CancellationRuleEnum.CancellableBefore6PM
const ancillaries: TrackingSDKAncillaries = rooms
.filter((r) => findAncillaryPackages(r.packages))
.flatMap((r) => {
return r.packages.map((pkg) => mapAncillaryPackage(pkg, hotel.operaId))
})
const hotelsTrackingData: TrackingSDKHotelInfo = {
ageOfChildren: rooms.map((r) => r.childrenAges?.join(",") ?? "-").join("|"),
analyticsRateCode: rooms
.map((r) => getRate(r.rateDefinition.cancellationRule))
.join("|"),
ancillaries: rooms
.filter((r) => findBreakfastPackage(r.packages))
.map((r) => {
return mapBreakfastPackage(
findBreakfastPackage(r.packages)!,
r.adults,
hotel.operaId
)
}),
arrivalDate: format(arrivalDate, "yyyy-MM-dd"),
bedType: rooms
.map((r) => r.bedDescription)
@@ -182,5 +183,6 @@ export function getTracking(
hotelsTrackingData,
pageTrackingData,
paymentInfo,
ancillaries,
}
}