|
|
@@ -1,6 +1,6 @@
|
|
|
from __future__ import annotations
|
|
|
|
|
|
-from datetime import timedelta
|
|
|
+from datetime import datetime, timedelta
|
|
|
|
|
|
from homeassistant.components.button import ButtonEntity
|
|
|
from homeassistant.config_entries import ConfigEntry
|
|
|
@@ -12,7 +12,7 @@ from homeassistant.util import dt as dt_util
|
|
|
|
|
|
from .const import CONF_ROOM_NAME, DOMAIN, STORE_NEXT
|
|
|
from .coordinator import RoomCalCoordinator
|
|
|
-from .models import OverrideData
|
|
|
+from .models import OverrideData, ReservationData
|
|
|
|
|
|
|
|
|
async def async_setup_entry(
|
|
|
@@ -27,6 +27,7 @@ async def async_setup_entry(
|
|
|
PromoteFromNextButton(coordinator, entry, device_name),
|
|
|
ClearCurrentButton(coordinator, entry, device_name),
|
|
|
TestNextGuestButton(coordinator, entry, device_name),
|
|
|
+ OverrideEmptyButton(coordinator, entry, device_name),
|
|
|
GuestArrivedButton(coordinator, entry, device_name),
|
|
|
GuestDepartedButton(coordinator, entry, device_name),
|
|
|
])
|
|
|
@@ -126,6 +127,32 @@ class TestNextGuestButton(CoordinatorEntity[RoomCalCoordinator], ButtonEntity):
|
|
|
await self.coordinator.async_start_override(OverrideData(current=override_current))
|
|
|
|
|
|
|
|
|
+class OverrideEmptyButton(CoordinatorEntity[RoomCalCoordinator], ButtonEntity):
|
|
|
+ _attr_has_entity_name = True
|
|
|
+ _attr_name = "Override Empty"
|
|
|
+ _attr_icon = "mdi:calendar-remove"
|
|
|
+
|
|
|
+ def __init__(
|
|
|
+ self,
|
|
|
+ coordinator: RoomCalCoordinator,
|
|
|
+ entry: ConfigEntry,
|
|
|
+ device_name: str,
|
|
|
+ ) -> None:
|
|
|
+ super().__init__(coordinator)
|
|
|
+ self._attr_unique_id = f"{entry.entry_id}_override_empty"
|
|
|
+ self._attr_device_info = DeviceInfo(
|
|
|
+ identifiers={(DOMAIN, f"{entry.entry_id}_room_state")},
|
|
|
+ name=device_name,
|
|
|
+ )
|
|
|
+
|
|
|
+ async def async_press(self) -> None:
|
|
|
+ outgoing = self.coordinator.data.current if self.coordinator.data else None
|
|
|
+ end_at: datetime | None = None
|
|
|
+ if outgoing is not None and outgoing.check_out_date is not None and outgoing.check_out_time is not None:
|
|
|
+ end_at = datetime.combine(outgoing.check_out_date, outgoing.check_out_time)
|
|
|
+ await self.coordinator.async_start_override(OverrideData(current=ReservationData()), end_at=end_at)
|
|
|
+
|
|
|
+
|
|
|
class GuestArrivedButton(ButtonEntity):
|
|
|
_attr_has_entity_name = True
|
|
|
_attr_name = "Guest Arrived"
|