diff --git a/backend/src/lib/booking-flow.js b/backend/src/lib/booking-flow.js index ec9133d..1722b17 100644 --- a/backend/src/lib/booking-flow.js +++ b/backend/src/lib/booking-flow.js @@ -23,12 +23,18 @@ export function toTimeStr(dt) { return t || null } +// Match a booking to a site ID. NewBook sometimes uses booking_site_id instead of site_id. +function siteMatches(b, siteId) { + const bid = String(b.site_id || b.booking_site_id || '') + return bid === String(siteId) +} + // Find all bookings for a given site on a specific date. // A booking occupies a site on viewDate if: arrival <= viewDate < departure // (departure date is the check-out day, so the room is vacated on that morning) export function bookingsForSiteOnDate(bookings, siteId, viewDate) { return bookings.filter(b => { - if (String(b.site_id) !== String(siteId)) return false + if (!siteMatches(b, siteId)) return false const arrival = toDateStr(b.booking_arrival) const departure = toDateStr(b.booking_departure) if (!arrival || !departure) return false @@ -39,7 +45,7 @@ export function bookingsForSiteOnDate(bookings, siteId, viewDate) { // Find the departing booking for a site on viewDate (departure_date === viewDate) export function departingBookingForSite(bookings, siteId, viewDate) { return bookings.find(b => - String(b.site_id) === String(siteId) && + siteMatches(b, siteId) && toDateStr(b.booking_departure) === viewDate ) ?? null } diff --git a/backend/src/routes/rooms.js b/backend/src/routes/rooms.js index 50a0944..f10b541 100644 --- a/backend/src/routes/rooms.js +++ b/backend/src/routes/rooms.js @@ -74,24 +74,18 @@ export async function roomRoutes(app) { // Fetch from NewBook in parallel let sites, bookings, tasks try { + // Fetch bookings one day beyond tomorrow so tomorrow-arriving bookings appear + // in nextBooking lookups (some NewBook regions exclude period_to-date arrivals). + const dayAfterTomorrow = dateOffset(viewDate, +2) ;[sites, bookings, tasks] = await Promise.all([ fetchSites(), - fetchBookings(yesterday, tomorrow), + fetchBookings(yesterday, dayAfterTomorrow), fetchTasks(yesterday, tomorrow), ]) } catch (err) { return reply.status(502).send({ error: `NewBook fetch failed: ${err.message}` }) } - // Derive category map from sites. Log first site keys to help diagnose field names. - if (sites.length > 0) { - const sample = sites[0] - console.log('[rooms] sample site keys:', Object.keys(sample)) - console.log('[rooms] sample site_category_id:', sample.site_category_id, - '| category_id:', sample.category_id, - '| category:', JSON.stringify(sample.category)) - } - const categoryMap = {} for (const site of sites) { const catId = String(