diff --git a/client/src/components/Planner/ReservationsPanel.tsx b/client/src/components/Planner/ReservationsPanel.tsx index 990d9928..ff98434a 100644 --- a/client/src/components/Planner/ReservationsPanel.tsx +++ b/client/src/components/Planner/ReservationsPanel.tsx @@ -112,17 +112,30 @@ function ReservationCard({ r, tripId, onEdit, onDelete, files = [], onNavigateTo const TRANSPORT_TYPES_SET = new Set(['flight', 'train', 'bus', 'car', 'cruise']) const isTransportType = TRANSPORT_TYPES_SET.has(r.type) - const startDay = r.day_id ? days.find(d => d.id === r.day_id) : undefined - const endDay = r.end_day_id ? days.find(d => d.id === r.end_day_id) : undefined - const dayLabel = (day: typeof startDay): string => { - if (!day) return '' - const base = day.title || t('dayplan.dayN', { n: day.day_number }) - if (day.date) { - const d = new Date(day.date + 'T00:00:00Z') - const dateStr = d.toLocaleDateString(locale, { day: 'numeric', month: 'short', timeZone: 'UTC' }) - return `${base} · ${dateStr}` - } - return base + const isHotel = r.type === 'hotel' + const startDay = r.day_id ? days.find(d => d.id === r.day_id) + : (isHotel && r.accommodation_start_day_id) ? days.find(d => d.id === r.accommodation_start_day_id) + : undefined + const endDay = r.end_day_id ? days.find(d => d.id === r.end_day_id) + : (isHotel && r.accommodation_end_day_id) ? days.find(d => d.id === r.accommodation_end_day_id) + : undefined + const DayLabel = ({ day }: { day: typeof startDay }) => { + if (!day) return null + const name = day.title || t('dayplan.dayN', { n: day.day_number }) + const badge = day.date + ? new Date(day.date + 'T00:00:00Z').toLocaleDateString(locale, { day: 'numeric', month: 'short', timeZone: 'UTC' }) + : null + return ( + + {name} + {badge && ( + {badge} + )} + + ) } return ( @@ -202,12 +215,15 @@ function ReservationCard({ r, tripId, onEdit, onDelete, files = [], onNavigateTo {/* Body */}
- {/* Day label for transport reservations linked to a day */} - {isTransportType && startDay && ( + {/* Day label for transport/hotel reservations linked to days */} + {(isTransportType || isHotel) && startDay && (
{t('reservations.date')}
-
- {dayLabel(startDay)}{endDay && endDay.id !== startDay.id ? ` – ${dayLabel(endDay)}` : ''} +
+ + {endDay && endDay.id !== startDay.id && ( + <> + )}
)} diff --git a/client/src/types.ts b/client/src/types.ts index 69a06189..5701597a 100644 --- a/client/src/types.ts +++ b/client/src/types.ts @@ -171,6 +171,8 @@ export interface Reservation { place_id?: number | null assignment_id?: number | null accommodation_id?: number | null + accommodation_start_day_id?: number | null + accommodation_end_day_id?: number | null day_plan_position?: number | null metadata?: Record | string | null needs_review?: number diff --git a/server/src/services/reservationService.ts b/server/src/services/reservationService.ts index af5c0851..0be86264 100644 --- a/server/src/services/reservationService.ts +++ b/server/src/services/reservationService.ts @@ -57,7 +57,8 @@ const saveEndpoints = db.transaction((reservationId: number, endpoints: Endpoint export function listReservations(tripId: string | number) { const reservations = db.prepare(` SELECT r.*, d.day_number, p.name as place_name, r.assignment_id, - ap.place_id as accommodation_place_id, acc_p.name as accommodation_name + ap.place_id as accommodation_place_id, acc_p.name as accommodation_name, + ap.start_day_id as accommodation_start_day_id, ap.end_day_id as accommodation_end_day_id FROM reservations r LEFT JOIN days d ON r.day_id = d.id LEFT JOIN places p ON r.place_id = p.id @@ -93,7 +94,8 @@ export function listReservations(tripId: string | number) { export function getReservationWithJoins(id: string | number) { const row = db.prepare(` SELECT r.*, d.day_number, p.name as place_name, r.assignment_id, - ap.place_id as accommodation_place_id, acc_p.name as accommodation_name + ap.place_id as accommodation_place_id, acc_p.name as accommodation_name, + ap.start_day_id as accommodation_start_day_id, ap.end_day_id as accommodation_end_day_id FROM reservations r LEFT JOIN days d ON r.day_id = d.id LEFT JOIN places p ON r.place_id = p.id