// booking-drawer.jsx — Right-side drawer with booking detail function BookingDrawer({ booking, onClose, onAction, onEdit, onOrder, onMarkOrderServed }) { const data = window.HotelData; const room = findRoom(data.rooms, booking.roomId); const guest = booking.guestId ? findGuest(data.guests, booking.guestId) : booking._newGuest || null; const t = computeBookingTotal(booking, data.rooms, data.serviceCatalog, data.inStayMenu); const status = data.statuses.find(s => s.key === booking.status); const balance = Math.max(0, t.total - (booking.paid || 0)); const isMaint = booking.status === 'maintenance'; const isCancelled = booking.status === 'cancelled'; const isActive = booking.checkedIn && !isMaint && !isCancelled; const orders = (booking.orders || []).slice().sort((a, b) => new Date(b.orderedAt) - new Date(a.orderedAt)); const pendingOrders = orders.filter(o => o.status === 'pending').length; // Activity log (synthetic) const activity = [ { h: 'Tạo đặt phòng', m: booking.createdBy + ' · ' + formatDateShort(window.HotelData.addDays(booking.checkIn, -3)) }, ]; if (booking.paid > 0) activity.push({ h: 'Ghi nhận thanh toán', m: `${VND(booking.paid)} · ${booking.paymentMethod === 'card' ? 'Thẻ' : booking.paymentMethod === 'cash' ? 'Tiền mặt' : booking.paymentMethod === 'transfer' ? 'Chuyển khoản' : 'Khác'}` }); if (booking.checkedIn) activity.push({ h: 'Khách đã nhận phòng', m: 'Lễ tân Hà · ' + formatDateShort(booking.checkIn) + ' ' + booking.checkInTime }); return ( <>
); } window.BookingDrawer = BookingDrawer;