Fix sync not updating arrival/departure dates on re-sync

ON CONFLICT clause was missing arrival_date, departure_date, nights, and
room_number — so early checkouts (where NewBook updates booking_departure
to the actual checkout date) never propagated to the DB columns. Reverts
the COUNT(DISTINCT) workaround since the root cause is now fixed.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
jtricerolph 2026-07-21 17:23:09 +00:00
parent 7ebc31756d
commit 1fae3ce60b
2 changed files with 5 additions and 4 deletions

View file

@ -455,6 +455,10 @@ def run_bookings_data_sync(
ON CONFLICT (newbook_id) DO UPDATE SET ON CONFLICT (newbook_id) DO UPDATE SET
booking_reference = EXCLUDED.booking_reference, booking_reference = EXCLUDED.booking_reference,
booking_placed = COALESCE(EXCLUDED.booking_placed, newbook_bookings_data.booking_placed), booking_placed = COALESCE(EXCLUDED.booking_placed, newbook_bookings_data.booking_placed),
arrival_date = EXCLUDED.arrival_date,
departure_date = EXCLUDED.departure_date,
nights = EXCLUDED.nights,
room_number = EXCLUDED.room_number,
status = EXCLUDED.status, status = EXCLUDED.status,
total_amount = EXCLUDED.total_amount, total_amount = EXCLUDED.total_amount,
tariff_total = EXCLUDED.tariff_total, tariff_total = EXCLUDED.tariff_total,

View file

@ -304,12 +304,9 @@ async def get_current_otb_rooms_by_category(db, stay_date: date) -> Dict[str, in
return {} return {}
# Query actual bookings for real-time OTB count # Query actual bookings for real-time OTB count
# COUNT DISTINCT room_number so that multiple bookings on the same room
# (e.g. early-checkout Departed + new Arrived) count as one occupied room.
# COALESCE to newbook_id ensures unassigned rooms (no room_number) still count.
result = await db.execute( result = await db.execute(
text(""" text("""
SELECT category_id, COUNT(DISTINCT COALESCE(room_number, newbook_id)) as room_count SELECT category_id, COUNT(*) as room_count
FROM newbook_bookings_data FROM newbook_bookings_data
WHERE arrival_date <= :stay_date WHERE arrival_date <= :stay_date
AND departure_date > :stay_date AND departure_date > :stay_date