52 lines
1.7 KiB
Python
52 lines
1.7 KiB
Python
from datetime import date, datetime, timedelta
|
|
from model.DataStore import DataStore
|
|
from model.TimeSlot import TimeSlot
|
|
|
|
|
|
class TimeSlotContainer:
|
|
|
|
def __init__(self, ds: DataStore):
|
|
self._ds = ds
|
|
|
|
def get_open_time_slots(self) -> list[TimeSlot]:
|
|
return [ts for ts in self._ds.get_all_time_slots() if ts.end is None]
|
|
|
|
def get_all_time_slots(self) -> list[TimeSlot]:
|
|
return self._ds.get_all_time_slots()
|
|
|
|
def get_time_slots_by_date(self, start: datetime, end: datetime = datetime.now()):
|
|
# The selection will be oriented at the start date
|
|
return [ts for ts in self._ds.get_all_time_slots()
|
|
if ts.start >= start and ts.start <= end]
|
|
|
|
def open_time_slot(self, name: str, start_dt: datetime = datetime.now()):
|
|
if len(self.get_open_time_slots()) > 0:
|
|
raise Exception("Ein event ist bereits aktiv.")
|
|
ts = TimeSlot(name)
|
|
ts.start = start_dt
|
|
self._ds.add_time_slot(ts)
|
|
self._ds.write_update()
|
|
|
|
def close_time_slot(self, end_dt: datetime = datetime.now()):
|
|
ts = self.get_open_time_slots()[0]
|
|
self._ds.remove_time_slot(ts)
|
|
ts.end = end_dt
|
|
self._ds.add_time_slot(ts)
|
|
self._ds.write_update()
|
|
|
|
def add_time_slot(self, name: str, start_dt: datetime, end_dt: datetime):
|
|
self.open_time_slot(name, start_dt)
|
|
self.close_time_slot(end_dt)
|
|
|
|
def update_time_slot(self, old: TimeSlot, new: TimeSlot):
|
|
raise NotImplementedError
|
|
|
|
def delete_time_slot(self, ts: TimeSlot):
|
|
raise NotImplementedError
|
|
|
|
|
|
try:
|
|
time_slot_container = TimeSlotContainer(DataStore("data.json"))
|
|
except FileNotFoundError:
|
|
time_slot_container = TimeSlotContainer(DataStore("data.json", create=True))
|