diff --git a/app/[lang]/(live)/(public)/hotelreservation/(standard)/[step]/@summary/page.tsx b/app/[lang]/(live)/(public)/hotelreservation/(standard)/[step]/@summary/page.tsx index a91aa9cb0..d97115df5 100644 --- a/app/[lang]/(live)/(public)/hotelreservation/(standard)/[step]/@summary/page.tsx +++ b/app/[lang]/(live)/(public)/hotelreservation/(standard)/[step]/@summary/page.tsx @@ -1,3 +1,6 @@ +import { redirect } from "next/navigation" + +import { selectRate } from "@/constants/routes/hotelReservation" import { getPackages, getProfileSafely, @@ -17,6 +20,7 @@ import { SelectRateSearchParams } from "@/types/components/hotelReservation/sele import { LangParams, PageArgs, SearchParams } from "@/types/params" export default async function SummaryPage({ + params, searchParams, }: PageArgs>) { const selectRoomParams = new URLSearchParams(searchParams) @@ -39,6 +43,7 @@ export default async function SummaryPage({ roomStayEndDate: toDate, rateCode, roomTypeCode, + packageCodes, }) const user = await getProfileSafely() const packages = await getPackages({ @@ -50,10 +55,10 @@ export default async function SummaryPage({ packageCodes, }) - if (!availability) { + if (!availability || !availability.selectedRoom) { console.error("No hotel or availability data", availability) // TODO: handle this case - return null + redirect(selectRate[params.lang]) } const prices = diff --git a/app/[lang]/(live)/(public)/hotelreservation/(standard)/[step]/page.tsx b/app/[lang]/(live)/(public)/hotelreservation/(standard)/[step]/page.tsx index 982157ceb..f7c155d6c 100644 --- a/app/[lang]/(live)/(public)/hotelreservation/(standard)/[step]/page.tsx +++ b/app/[lang]/(live)/(public)/hotelreservation/(standard)/[step]/page.tsx @@ -46,7 +46,7 @@ export default async function StepPage({ toDate, } = getQueryParamsForEnterDetails(selectRoomParams) - const { adults, children, roomTypeCode, rateCode } = rooms[0] // TODO: Handle multiple rooms + const { adults, children, roomTypeCode, rateCode, packages } = rooms[0] // TODO: Handle multiple rooms const childrenAsString = children && generateChildrenString(children) @@ -60,6 +60,7 @@ export default async function StepPage({ roomStayEndDate: toDate, rateCode, roomTypeCode, + packageCodes: packages, }) const roomAvailability = await getSelectedRoomAvailability({ @@ -70,6 +71,7 @@ export default async function StepPage({ roomStayEndDate: toDate, rateCode, roomTypeCode, + packageCodes: packages, }) const hotelData = await getHotelData({ hotelId, diff --git a/server/routers/hotels/input.ts b/server/routers/hotels/input.ts index f6b78f1ac..04bb16b17 100644 --- a/server/routers/hotels/input.ts +++ b/server/routers/hotels/input.ts @@ -1,5 +1,7 @@ import { z } from "zod" +import { RoomPackageCodeEnum } from "@/types/components/hotelReservation/selectRate/roomFilter" + export const getHotelsAvailabilityInputSchema = z.object({ cityId: z.string(), roomStayStartDate: z.string(), @@ -34,6 +36,7 @@ export const getSelectedRoomAvailabilityInputSchema = z.object({ attachedProfileId: z.string().optional().default(""), rateCode: z.string(), roomTypeCode: z.string(), + packageCodes: z.array(z.nativeEnum(RoomPackageCodeEnum)).optional(), }) export type GetSelectedRoomAvailabilityInput = z.input< diff --git a/server/routers/hotels/query.ts b/server/routers/hotels/query.ts index 9b0b97d59..20db2922e 100644 --- a/server/routers/hotels/query.ts +++ b/server/routers/hotels/query.ts @@ -624,6 +624,7 @@ export const hotelQueryRouter = router({ attachedProfileId, rateCode, roomTypeCode, + packageCodes, } = input const params: Record = { @@ -723,17 +724,35 @@ export const hotelQueryRouter = router({ ctx.serviceToken ) - const selectedRoom = validateAvailabilityData.data.roomConfigurations - .filter((room) => room.status === "Available") - .find((room) => room.roomTypeCode === roomTypeCode) + console.log({ packageCodes }) - const availableRoomsInCategory = - validateAvailabilityData.data.roomConfigurations.filter( - (room) => - room.status === "Available" && - room.roomType === selectedRoom?.roomType - ) + const availableRooms = + validateAvailabilityData.data.roomConfigurations.filter((room) => { + if (packageCodes) { + return ( + room.status === "Available" && + room.features.some( + (feature) => + packageCodes.includes(feature.code) && feature.inventory > 0 + ) + ) + } + return room.status === "Available" + }) + console.log("hrteij", JSON.stringify(availableRooms, null, 4)) + const selectedRoom = availableRooms.find( + (room) => room.roomTypeCode === roomTypeCode + ) + + const availableRoomsInCategory = availableRooms.filter( + (room) => room.roomType === selectedRoom?.roomType + ) + + console.log( + "availableRoomsInCategory", + JSON.stringify(availableRoomsInCategory, null, 4) + ) if (!selectedRoom) { console.error("No matching room found") return null