setDateRange({ start, end })} />
{/* KPI Cards with delta indicators */}
{/* Period comparison */}
Periodjamforelse
RevPAR
{current.revpar.toLocaleString('sv-SE')} kr
Foregaende: {prev.revpar.toLocaleString('sv-SE')} kr
ADR
{current.adr.toLocaleString('sv-SE')} kr
Foregaende: {prev.adr.toLocaleString('sv-SE')} kr
Belaggning
{current.occupancyPct}%
Foregaende: {prev.occupancyPct}%
Foregaende period: {prevPeriod.start} — {prevPeriod.end}
{/* Data entry form with validation */}
{/* Monthly trend with RevPAR, ADR, Occupancy */}
{monthlyTrend.length > 0 && (
Manadstrend
Period
RevPAR
ADR
Belaggning
{monthlyTrend.map(row => (
{row.month}
{row.revpar.toLocaleString('sv-SE')} kr
{row.adr.toLocaleString('sv-SE')} kr
{row.occupancy}%
))}
)}
{/* Daily data table with edit and delete */}
Daglig data
{entries.length === 0 ? (
Ingen data registrerad i vald period.
) : (
Datum
Rum salda
Intakt
ADR
{entries.map(e => (
{e.date}
{e.roomsSold} / {totalRooms}
{e.roomRevenue.toLocaleString('sv-SE')} kr
{e.roomsSold > 0
? Math.round(e.roomRevenue / e.roomsSold).toLocaleString('sv-SE')
: 0} kr
))}
)}
{/* Edit entry dialog */}
{/* Confirm delete dialog */}
{/* Settings dialog */}
setSettingsRoomCount(e.target.value)}
/>
{settingsRoomCount !== '' && !settingsValid && (
Ange ett giltigt antal rum (minst 1)
)}
)
}