diff --git a/apps/scandic-web/components/HotelReservation/EnterDetails/Breakfast/index.tsx b/apps/scandic-web/components/HotelReservation/EnterDetails/Breakfast/index.tsx index e4aa355c9..7675637b3 100644 --- a/apps/scandic-web/components/HotelReservation/EnterDetails/Breakfast/index.tsx +++ b/apps/scandic-web/components/HotelReservation/EnterDetails/Breakfast/index.tsx @@ -80,7 +80,7 @@ export default function Breakfast() { ancillary={{ title: intl.formatMessage({ id: "Breakfast buffet" }), price: { - total: pkg.localPrice.price, + totalPrice: pkg.localPrice.price, currency: pkg.localPrice.currency, included: pkg.code === BreakfastPackageEnum.FREE_MEMBER_BREAKFAST, @@ -100,7 +100,7 @@ export default function Breakfast() { ancillary={{ title: intl.formatMessage({ id: "No breakfast" }), price: { - total: 0, + totalPrice: 0, currency: packages?.[0].localPrice.currency ?? "", }, description: intl.formatMessage({ diff --git a/apps/scandic-web/components/HotelReservation/MyStay/Ancillaries/AddAncillaryFlow/AddAncillaryFlowModal/PriceDetails/PriceSummary/index.tsx b/apps/scandic-web/components/HotelReservation/MyStay/Ancillaries/AddAncillaryFlow/AddAncillaryFlowModal/PriceDetails/PriceSummary/index.tsx index 4e3ca8dfa..1a72e2908 100644 --- a/apps/scandic-web/components/HotelReservation/MyStay/Ancillaries/AddAncillaryFlow/AddAncillaryFlowModal/PriceDetails/PriceSummary/index.tsx +++ b/apps/scandic-web/components/HotelReservation/MyStay/Ancillaries/AddAncillaryFlow/AddAncillaryFlowModal/PriceDetails/PriceSummary/index.tsx @@ -44,7 +44,7 @@ export default function PriceSummary({ label={intl.formatMessage({ id: "Price including VAT" })} value={formatPrice( intl, - selectedAncillary.price.total, + selectedAncillary.price.totalPrice, selectedAncillary.price.currency )} /> diff --git a/apps/scandic-web/components/HotelReservation/MyStay/Ancillaries/AddAncillaryFlow/AddAncillaryFlowModal/PriceDetails/index.tsx b/apps/scandic-web/components/HotelReservation/MyStay/Ancillaries/AddAncillaryFlow/AddAncillaryFlowModal/PriceDetails/index.tsx index b4c0f8b48..e990217c9 100644 --- a/apps/scandic-web/components/HotelReservation/MyStay/Ancillaries/AddAncillaryFlow/AddAncillaryFlowModal/PriceDetails/index.tsx +++ b/apps/scandic-web/components/HotelReservation/MyStay/Ancillaries/AddAncillaryFlow/AddAncillaryFlowModal/PriceDetails/index.tsx @@ -36,7 +36,7 @@ export default function PriceDetails({ } const totalPrice = quantityWithCard && selectedAncillary - ? selectedAncillary.price.total * quantityWithCard + ? selectedAncillary.price.totalPrice * quantityWithCard : null const totalPoints = diff --git a/apps/scandic-web/components/HotelReservation/MyStay/Ancillaries/AddAncillaryFlow/AddAncillaryFlowModal/Steps/SelectQuantityStep/index.tsx b/apps/scandic-web/components/HotelReservation/MyStay/Ancillaries/AddAncillaryFlow/AddAncillaryFlowModal/Steps/SelectQuantityStep/index.tsx index 05628aa83..8160e36be 100644 --- a/apps/scandic-web/components/HotelReservation/MyStay/Ancillaries/AddAncillaryFlow/AddAncillaryFlowModal/Steps/SelectQuantityStep/index.tsx +++ b/apps/scandic-web/components/HotelReservation/MyStay/Ancillaries/AddAncillaryFlow/AddAncillaryFlowModal/Steps/SelectQuantityStep/index.tsx @@ -12,6 +12,7 @@ import Select from "@/components/TempDesignSystem/Form/Select" import styles from "./selectQuantityStep.module.css" import type { SelectQuantityStepProps } from "@/types/components/myPages/myStay/ancillaries" +import { BreakfastPackageEnum } from "@/types/enums/breakfast" export default function SelectQuantityStep({ user }: SelectQuantityStepProps) { const intl = useIntl() @@ -46,6 +47,13 @@ export default function SelectQuantityStep({ user }: SelectQuantityStepProps) { ? intl.formatMessage({ id: "Insufficient points" }) : intl.formatMessage({ id: "Select quantity" }) + // TODO: Remove this when add breakfast is implemented + if ( + selectedAncillary?.id === BreakfastPackageEnum.ANCILLARY_REGULAR_BREAKFAST + ) { + return "Breakfast TBI" + } + return (
{selectedAncillary?.points && user && ( diff --git a/apps/scandic-web/components/HotelReservation/MyStay/Ancillaries/AddAncillaryFlow/AddAncillaryFlowModal/index.tsx b/apps/scandic-web/components/HotelReservation/MyStay/Ancillaries/AddAncillaryFlow/AddAncillaryFlowModal/index.tsx index d75f01a2c..3519761ee 100644 --- a/apps/scandic-web/components/HotelReservation/MyStay/Ancillaries/AddAncillaryFlow/AddAncillaryFlowModal/index.tsx +++ b/apps/scandic-web/components/HotelReservation/MyStay/Ancillaries/AddAncillaryFlow/AddAncillaryFlowModal/index.tsx @@ -40,6 +40,7 @@ import Steps from "./Steps" import styles from "./addAncillaryFlowModal.module.css" import type { AddAncillaryFlowModalProps } from "@/types/components/myPages/myStay/ancillaries" +import { BreakfastPackageEnum } from "@/types/enums/breakfast" export default function AddAncillaryFlowModal({ booking, @@ -218,6 +219,7 @@ export default function AddAncillaryFlowModal({
) } + const modalTitle = currentStep === AncillaryStepEnum.selectAncillary ? intl.formatMessage({ id: "Upgrade your stay" }) @@ -251,7 +253,7 @@ export default function AddAncillaryFlowModal({

{formatPrice( intl, - selectedAncillary.price.total, + selectedAncillary.price.totalPrice, selectedAncillary.price.currency )}

@@ -290,7 +292,10 @@ export default function AddAncillaryFlowModal({ - {currentStep === AncillaryStepEnum.selectAncillary ? null : ( + {/* TODO: Remove the berakfast check when add breakfast is implemented */} + {currentStep === AncillaryStepEnum.selectAncillary || + selectedAncillary?.id === + BreakfastPackageEnum.ANCILLARY_REGULAR_BREAKFAST ? null : (
{ + return { + ...ancillary, + ancillaryContent: ancillary.ancillaryContent.map( + ({ points, ...ancillary }) => ({ + ...ancillary, + points: user ? points : undefined, + }) + ), + } + }) +} + +function generateUniqueAncillaries( + ancillaries: Ancillaries +): Ancillary["ancillaryContent"] { + const uniqueAncillaries = new Map( + ancillaries.flatMap((a) => { + return a.ancillaryContent.map((ancillary) => [ancillary.id, ancillary]) + }) + ) + return [...uniqueAncillaries.values()] +} + +/** + * Adds the breakfast package to the ancillaries + * + * Returns the ancillaries array with the breakfast package added to the + * specified category. If the category doesn't exist it's created. + */ +function addBreakfastPackage( + ancillaries: Ancillaries, + breakfast: SelectedAncillary | undefined, + categoryName: string +): Ancillaries { + if (!breakfast) return ancillaries + + const category = ancillaries.find((a) => a.categoryName === categoryName) + + if (category) { + const newCategory = { + ...category, + ancillaryContent: [breakfast, ...category.ancillaryContent], + } + + return ancillaries.map((ancillary) => + ancillary.categoryName === categoryName ? newCategory : ancillary + ) + } + + return [{ categoryName, ancillaryContent: [breakfast] }, ...ancillaries] +} export function Ancillaries({ ancillaries, booking, + packages, user, savedCreditCards, refId, }: AncillariesProps) { const intl = useIntl() + /** + * A constructed ancillary for breakfast + * + * This is a "fake" ancillary for breakfast, since breakfast isn't really an + * ancillary in the system. This makes it play nicely with the add ancillary + * flow. If the user shouldn't be able to add breakfast this will be `undefined`. + */ + const breakfastAncillary = useMemo(() => { + // This is the logic deciding if breakfast should be addable or not + if ( + booking.rateDefinition.breakfastIncluded || + booking.packages.some((p) => + Object.values(BreakfastPackageEnum).includes( + p.code as unknown as BreakfastPackageEnum + ) + ) + ) { + return undefined + } + + const breakfastPackage = packages?.find( + (p) => p.code === BreakfastPackageEnum.ANCILLARY_REGULAR_BREAKFAST + ) + + const breakfastAncillary: SelectedAncillary | undefined = breakfastPackage + ? { + description: intl.formatMessage({ id: "Buffet" }), + id: breakfastPackage.code, + title: intl.formatMessage({ id: "Breakfast" }), + price: breakfastPackage.localPrice, + // TODO: Change this to the correct URL, whatever that is + imageUrl: + "https://images-test.scandichotels.com/publishedmedia/hcf9hchiad7zrvlkc2pt/Breakfast_-_Scandic_Sweden_-_Free_to_use.jpg", + requiresDeliveryTime: false, + loyaltyCode: undefined, + points: undefined, + } + : undefined + + return breakfastAncillary + }, [ + booking.packages, + booking.rateDefinition.breakfastIncluded, + intl, + packages, + ]) + + const allAncillaries = useMemo(() => { + if (!ancillaries?.length) { + return [] + } + + const withBreakfastPopular = addBreakfastPackage( + ancillaries, + breakfastAncillary, + "Popular" + ) + const withBreakfastFood = addBreakfastPackage( + withBreakfastPopular, + breakfastAncillary, + "Food" + ) + const filtered = filterPoints(withBreakfastFood, user) + return filtered + }, [ancillaries, breakfastAncillary, user]) + if (!ancillaries?.length) { return null } - function filterPoints(ancillaries: Ancillaries) { - return ancillaries.map((ancillary) => { - return { - ...ancillary, - ancillaryContent: ancillary.ancillaryContent.map( - ({ points, ...ancillary }) => ({ - ...ancillary, - points: user ? points : undefined, - }) - ), - } - }) - } - - function generateUniqueAncillaries( - ancillaries: Ancillaries - ): Ancillary["ancillaryContent"] { - const uniqueAncillaries = new Map( - ancillaries.flatMap((a) => - a.ancillaryContent.map((ancillary) => [ancillary.id, ancillary]) - ) - ) - return [...uniqueAncillaries.values()] - } - const allAncillaries = filterPoints(ancillaries) const uniqueAncillaries = generateUniqueAncillaries(allAncillaries) return ( @@ -77,7 +177,7 @@ export function Ancillaries({
- + {uniqueAncillaries.map((ancillary) => { return ( @@ -86,8 +186,8 @@ export function Ancillaries({ ) })} - - + +
diff --git a/apps/scandic-web/components/HotelReservation/MyStay/SingleRoom/index.tsx b/apps/scandic-web/components/HotelReservation/MyStay/SingleRoom/index.tsx index 95450117e..102e26637 100644 --- a/apps/scandic-web/components/HotelReservation/MyStay/SingleRoom/index.tsx +++ b/apps/scandic-web/components/HotelReservation/MyStay/SingleRoom/index.tsx @@ -109,7 +109,9 @@ export function SingleRoom({ bedType, image, hotel, user }: RoomProps) { const adultsAndChildrenMsg = [adultsMsg, childrenMsg].join(", ") const hasPackages = packages?.some((item) => - Object.values(RoomPackageCodeEnum).includes(item.code) + Object.values(RoomPackageCodeEnum).includes( + item.code as RoomPackageCodeEnum + ) ) return ( @@ -270,7 +272,7 @@ export function SingleRoom({ bedType, image, hotel, user }: RoomProps) { {packages! .filter((item) => Object.values(RoomPackageCodeEnum).includes( - item.code + item.code as RoomPackageCodeEnum ) ) .map((item) => item.description) diff --git a/apps/scandic-web/components/HotelReservation/MyStay/index.tsx b/apps/scandic-web/components/HotelReservation/MyStay/index.tsx index 221ffde45..649463675 100644 --- a/apps/scandic-web/components/HotelReservation/MyStay/index.tsx +++ b/apps/scandic-web/components/HotelReservation/MyStay/index.tsx @@ -9,6 +9,7 @@ import { dt } from "@/lib/dt" import { getAncillaryPackages, getBookingConfirmation, + getPackages, getProfileSafely, getSavedPaymentCardsSafely, } from "@/lib/trpc/memoizedRequests" @@ -33,6 +34,8 @@ import Rooms from "./Rooms" import styles from "./myStay.module.css" +import { BreakfastPackageEnum } from "@/types/enums/breakfast" + export async function MyStay({ refId }: { refId: string }) { const value = decrypt(refId) if (!value) { @@ -58,6 +61,21 @@ export async function MyStay({ refId }: { refId: string }) { hotelId: hotel.operaId, toDate: dt(booking.checkOutDate).format("YYYY-MM-DD"), }) + + const packages = await getPackages({ + startDate: dt(booking.checkInDate).format("YYYY-MM-DD"), + hotelId: hotel.operaId, + endDate: dt(booking.checkOutDate).format("YYYY-MM-DD"), + adults: booking.adults, + children: booking.childrenAges.length, + packageCodes: [ + BreakfastPackageEnum.ANCILLARY_REGULAR_BREAKFAST, + BreakfastPackageEnum.ANCILLARY_CHILD_PAYING_BREAKFAST, + BreakfastPackageEnum.FREE_CHILD_BREAKFAST, + ], + lang, + }) + const supportedCards = hotel.merchantInformationData.cards const savedCreditCards = await getSavedPaymentCardsSafely({ supportedCards, @@ -97,6 +115,7 @@ export async function MyStay({ refId }: { refId: string }) {
{packages?.some((item) => - Object.values(RoomPackageCodeEnum).includes(item.code) + Object.values(RoomPackageCodeEnum).includes( + item.code as RoomPackageCodeEnum + ) ) && (
@@ -244,7 +246,9 @@ export default function BookedRoomSidePeek({

{packages ?.filter((item) => - Object.values(RoomPackageCodeEnum).includes(item.code) + Object.values(RoomPackageCodeEnum).includes( + item.code as RoomPackageCodeEnum + ) ) .map((item) => item.description) .join(", ")} diff --git a/apps/scandic-web/components/TempDesignSystem/AncillaryCard/index.tsx b/apps/scandic-web/components/TempDesignSystem/AncillaryCard/index.tsx index 011f646e9..753e2f7db 100644 --- a/apps/scandic-web/components/TempDesignSystem/AncillaryCard/index.tsx +++ b/apps/scandic-web/components/TempDesignSystem/AncillaryCard/index.tsx @@ -13,7 +13,7 @@ import type { AncillaryCardProps } from "@/types/components/ancillaryCard" export function AncillaryCard({ ancillary }: AncillaryCardProps) { const intl = useIntl() - const priceMsg = `${formatPrice(intl, ancillary.price.total, ancillary.price.currency)} ${ancillary.price.text ?? ""}` + const priceMsg = `${formatPrice(intl, ancillary.price.totalPrice, ancillary.price.currency)} ${ancillary.price.text ?? ""}` return (

diff --git a/apps/scandic-web/i18n/dictionaries/da.json b/apps/scandic-web/i18n/dictionaries/da.json index f10491ec6..d5c2b38dd 100644 --- a/apps/scandic-web/i18n/dictionaries/da.json +++ b/apps/scandic-web/i18n/dictionaries/da.json @@ -131,6 +131,7 @@ "Breakfast included": "Morgenmad inkluderet", "Breakfast is included.": "Morgenmad er inkluderet.", "Breakfast selection in next step.": "Valg af morgenmad i næste trin.", + "Buffet": "Buffet", "Bus terminal": "Busstation", "Business": "Forretning", "By accepting the Terms and Conditions for Scandic Friends I understand that my personal data will be processed in accordance with Scandic's Privacy Policy.": "Ved at acceptere vilkårene og betingelserne for Scandic Friends, forstår jeg, at mine personlige oplysninger vil blive behandlet i overensstemmelse med Scandics privatlivspolitik.", diff --git a/apps/scandic-web/i18n/dictionaries/de.json b/apps/scandic-web/i18n/dictionaries/de.json index f26735d77..74db95108 100644 --- a/apps/scandic-web/i18n/dictionaries/de.json +++ b/apps/scandic-web/i18n/dictionaries/de.json @@ -132,6 +132,7 @@ "Breakfast included": "Frühstück inbegriffen", "Breakfast is included.": "Frühstück ist inbegriffen.", "Breakfast selection in next step.": "Frühstücksauswahl in nächsten Schritt.", + "Buffet": "Büfett", "Bus terminal": "Bus terminal", "Business": "Geschäft", "By accepting the Terms and Conditions for Scandic Friends I understand that my personal data will be processed in accordance with Scandic's Privacy Policy.": "Mit der Annahme der Allgemeinen Geschäftsbedingungen für Scandic Friends erkläre ich mich damit einverstanden, dass meine persönlichen Daten in Übereinstimmung mit der Datenschutzrichtlinie von Scandic verarbeitet werden.", diff --git a/apps/scandic-web/i18n/dictionaries/en.json b/apps/scandic-web/i18n/dictionaries/en.json index cb170a283..29d884464 100644 --- a/apps/scandic-web/i18n/dictionaries/en.json +++ b/apps/scandic-web/i18n/dictionaries/en.json @@ -130,6 +130,7 @@ "Breakfast included": "Breakfast included", "Breakfast is included.": "Breakfast is included.", "Breakfast selection in next step.": "Breakfast selection in next step.", + "Buffet": "Buffet", "Bus terminal": "Bus terminal", "Business": "Business", "By accepting the Terms and Conditions for Scandic Friends I understand that my personal data will be processed in accordance with Scandic's Privacy Policy.": "By accepting the Terms and Conditions for Scandic Friends I understand that my personal data will be processed in accordance with Scandic's Privacy Policy.", diff --git a/apps/scandic-web/i18n/dictionaries/fi.json b/apps/scandic-web/i18n/dictionaries/fi.json index fbbfe9911..08ba0ddd3 100644 --- a/apps/scandic-web/i18n/dictionaries/fi.json +++ b/apps/scandic-web/i18n/dictionaries/fi.json @@ -130,6 +130,7 @@ "Breakfast included": "Aamiainen sisältyy", "Breakfast is included.": "Aamiainen sisältyy.", "Breakfast selection in next step.": "Aamiaisvalinta seuraavassa vaiheessa.", + "Buffet": "Buffet", "Bus terminal": "Bussiasema", "Business": "Business", "By accepting the Terms and Conditions for Scandic Friends I understand that my personal data will be processed in accordance with Scandic's Privacy Policy.": "Kyllä, hyväksyn Scandic Friends -jäsenyyttä koskevat ehdot ja ymmärrän, että Scandic käsittelee henkilötietojani Scandicin Tietosuojaselosteen mukaisesti.", diff --git a/apps/scandic-web/i18n/dictionaries/no.json b/apps/scandic-web/i18n/dictionaries/no.json index 0fe7f5d75..479d125c0 100644 --- a/apps/scandic-web/i18n/dictionaries/no.json +++ b/apps/scandic-web/i18n/dictionaries/no.json @@ -130,6 +130,7 @@ "Breakfast included": "Frokost inkludert", "Breakfast is included.": "Frokost er inkludert.", "Breakfast selection in next step.": "Frokostvalg i neste steg.", + "Buffet": "Buffet", "Bus terminal": "Bussterminal", "Business": "Forretnings", "By accepting the Terms and Conditions for Scandic Friends I understand that my personal data will be processed in accordance with Scandic's Privacy Policy.": "Ved å akseptere vilkårene og betingelsene for Scandic Friends, er jeg inneforstått med at mine personopplysninger vil bli behandlet i samsvar med Scandics personvernpolicy.", diff --git a/apps/scandic-web/i18n/dictionaries/sv.json b/apps/scandic-web/i18n/dictionaries/sv.json index 5b2556fb3..ef4093e87 100644 --- a/apps/scandic-web/i18n/dictionaries/sv.json +++ b/apps/scandic-web/i18n/dictionaries/sv.json @@ -130,6 +130,7 @@ "Breakfast included": "Frukost ingår", "Breakfast is included.": "Frukost ingår.", "Breakfast selection in next step.": "Frukostval i nästa steg.", + "Buffet": "Buffé", "Bus terminal": "Bussterminal", "Business": "Business", "By accepting the Terms and Conditions for Scandic Friends I understand that my personal data will be processed in accordance with Scandic's Privacy Policy.": "Genom att acceptera villkoren för Scandic Friends förstår jag att mina personuppgifter kommer att behandlas i enlighet med Scandics Integritetspolicy.", diff --git a/apps/scandic-web/server/routers/hotels/output.ts b/apps/scandic-web/server/routers/hotels/output.ts index f174b78a1..73a475853 100644 --- a/apps/scandic-web/server/routers/hotels/output.ts +++ b/apps/scandic-web/server/routers/hotels/output.ts @@ -507,7 +507,7 @@ export const ancillaryPackagesSchema = z description: item.descriptions.html, imageUrl: item.images[0]?.imageSizes.small, price: { - total: item.variants.ancillary.price.totalPrice, + totalPrice: item.variants.ancillary.price.totalPrice, currency: item.variants.ancillary.price.currency, }, points: item.variants.ancillaryLoyalty?.points, diff --git a/apps/scandic-web/server/routers/hotels/schemas/packages.ts b/apps/scandic-web/server/routers/hotels/schemas/packages.ts index affd1cfac..fc2bd1860 100644 --- a/apps/scandic-web/server/routers/hotels/schemas/packages.ts +++ b/apps/scandic-web/server/routers/hotels/schemas/packages.ts @@ -3,6 +3,7 @@ import { z } from "zod" import { imageSizesSchema } from "./image" import { RoomPackageCodeEnum } from "@/types/components/hotelReservation/selectRate/roomFilter" +import { BreakfastPackageEnum } from "@/types/enums/breakfast" import { PackageTypeEnum } from "@/types/enums/packages" // TODO: Remove optional and default when the API change has been deployed @@ -41,7 +42,7 @@ export const ancillaryContentSchema = z.object({ }) export const packageSchema = z.object({ - code: z.nativeEnum(RoomPackageCodeEnum), + code: z.nativeEnum({ ...RoomPackageCodeEnum, ...BreakfastPackageEnum }), description: z.string(), inventories: z.array(inventorySchema), itemCode: z.string().default(""), diff --git a/apps/scandic-web/types/components/ancillaryCard.ts b/apps/scandic-web/types/components/ancillaryCard.ts index c300d7723..aafb9d5d8 100644 --- a/apps/scandic-web/types/components/ancillaryCard.ts +++ b/apps/scandic-web/types/components/ancillaryCard.ts @@ -4,7 +4,7 @@ export interface AncillaryCardProps { imageUrl: string imageOpacity?: number price: { - total: number + totalPrice: number currency: string text?: string included?: boolean diff --git a/apps/scandic-web/types/components/myPages/myStay/ancillaries.ts b/apps/scandic-web/types/components/myPages/myStay/ancillaries.ts index f5834016f..8e5ec5c0e 100644 --- a/apps/scandic-web/types/components/myPages/myStay/ancillaries.ts +++ b/apps/scandic-web/types/components/myPages/myStay/ancillaries.ts @@ -2,14 +2,19 @@ import type { z } from "zod" import type { BookingConfirmation } from "@/types/trpc/routers/booking/confirmation" import type { CreditCard, User } from "@/types/user" -import type { ancillaryPackagesSchema } from "@/server/routers/hotels/output" +import type { + ancillaryPackagesSchema, + packagesSchema, +} from "@/server/routers/hotels/output" export type Ancillaries = z.output export type Ancillary = Ancillaries[number] export type SelectedAncillary = Ancillary["ancillaryContent"][number] +export type Packages = z.output export interface AncillariesProps extends Pick { ancillaries: Ancillaries | null + packages: Packages | null user: User | null savedCreditCards: CreditCard[] | null refId: string diff --git a/apps/scandic-web/types/enums/breakfast.ts b/apps/scandic-web/types/enums/breakfast.ts index 8baf581d2..e47292393 100644 --- a/apps/scandic-web/types/enums/breakfast.ts +++ b/apps/scandic-web/types/enums/breakfast.ts @@ -1,5 +1,8 @@ export enum BreakfastPackageEnum { FREE_MEMBER_BREAKFAST = "BRF0", + FREE_CHILD_BREAKFAST = "BRFINF", REGULAR_BREAKFAST = "BRF1", SPECIAL_PACKAGE_BREAKFAST = "F01S", + ANCILLARY_REGULAR_BREAKFAST = "BRF2", + ANCILLARY_CHILD_PAYING_BREAKFAST = "BRF2C", }