Merged in feat/SW-2680-tracking-fixes (pull request #2373)

fix(SW-2680): Added new properties used for tracking

* fix(SW-2680): Added new properties used for tracking


Approved-by: Michael Zetterberg
This commit is contained in:
Tobias Johansson
2025-06-25 08:56:37 +00:00
parent 7a56d21a3e
commit 8c4715dd24
11 changed files with 80 additions and 13 deletions

View File

@@ -9,7 +9,10 @@ import type { Lang } from "@scandic-hotels/common/constants/language"
import { ChildBedMapEnum } from "@/types/components/bookingWidget/enums"
import type { BreakfastPackages } from "@/types/components/hotelReservation/breakfast"
import type { DetailsBooking } from "@/types/components/hotelReservation/enterDetails/details"
import type {
DetailsBooking,
RoomRate,
} from "@/types/components/hotelReservation/enterDetails/details"
import { RoomPackageCodeEnum } from "@/types/components/hotelReservation/selectRate/roomFilter"
import {
TrackingChannelEnum,
@@ -69,7 +72,7 @@ export function getTracking(
analyticsRateCode: rooms.map((room) => room.rate).join("|"),
arrivalDate: format(arrivalDate, "yyyy-MM-dd"),
bedType: storedRooms
.map((r) => (r.room.bedType ? r.room.bedType.description : ""))
.map((r) => (r.room.bedType ? r.room.bedType.type : ""))
.join("|"),
// Comma separated booking code values in "code,code,n/a" format for multiroom and "code" or "n/a" for singleroom
// n/a is used whenever code is Not applicable as defined by Tracking team
@@ -158,9 +161,17 @@ export function getTracking(
.join("|"),
rateCodeCancellationRule: rooms
.map((room) => room.cancellationText.toLowerCase())
.map((room) => room.cancellationRule)
.join(","),
rateCodeName: rooms
.map((room) =>
constructRateCodeName(
room.roomRate,
room.breakfastIncluded,
booking.bookingCode
)
)
.join(","),
rateCodeName: rooms.map((room) => room.rateDefinitionTitle).join(","),
rateCodeType: rooms.map((room) => room.rateType.toLowerCase()).join(","),
region: hotel?.address.city,
revenueCurrencyCode: [
@@ -310,7 +321,7 @@ function calcTotalRoomPrice(rooms: RoomState[], isMember: boolean) {
if ("redemption" in room.roomRate) {
return room.roomRate.redemption.localPrice?.additionalPricePerStay ?? 0
} else if (
"corporateCheck" in room.roomRate ||
"corporateCheque" in room.roomRate ||
"voucher" in room.roomRate
) {
return 0
@@ -324,3 +335,27 @@ function calcTotalRoomPrice(rooms: RoomState[], isMember: boolean) {
return total
}, 0)
}
function constructRateCodeName(
roomRate: RoomRate,
breakfastIncluded: boolean,
bookingCode?: string
) {
if ("corporateCheque" in roomRate) {
return "corporate cheque"
} else if ("voucher" in roomRate) {
return "voucher"
} else if ("redemption" in roomRate) {
return "redemption"
}
const bookingCodeStr = bookingCode ? bookingCode.toUpperCase() : ""
const breakfastIncludedStr = breakfastIncluded
? "incl. breakfast"
: "excl. breakfast"
return [bookingCodeStr, roomRate.rate, breakfastIncludedStr]
.filter(Boolean)
.join(" - ")
}