|
|
@ -0,0 +1,55 @@ |
|
|
|
|
|
import datetime |
|
|
|
|
|
|
|
|
|
|
|
from gapi.apis.calendar_api import Calendar, calendar_api, Event |
|
|
|
|
|
|
|
|
|
|
|
from .models import PaneraWeek, Workday |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class WorkdayCreator: |
|
|
|
|
|
def __init__(self): |
|
|
|
|
|
self.created_workdays = {} |
|
|
|
|
|
|
|
|
|
|
|
def create( |
|
|
|
|
|
self, start_time: datetime.datetime, end_time: datetime.datetime, location |
|
|
|
|
|
): |
|
|
|
|
|
try: |
|
|
|
|
|
return self.created_workdays[(start_time, end_time, location)] |
|
|
|
|
|
except KeyError: |
|
|
|
|
|
workday = Workday(start_time, end_time, location) |
|
|
|
|
|
self.created_workdays[(start_time, end_time, location)] = workday |
|
|
|
|
|
return workday |
|
|
|
|
|
|
|
|
|
|
|
def add(self, workday: Workday): |
|
|
|
|
|
self.created_workdays[ |
|
|
|
|
|
(workday.start_time, workday.end_time, workday.location) |
|
|
|
|
|
] = workday |
|
|
|
|
|
|
|
|
|
|
|
def from_event(self, event: Event): |
|
|
|
|
|
return self.create(event.start, event.end, event.location) |
|
|
|
|
|
|
|
|
|
|
|
def grab_workdays_from_calendar( |
|
|
|
|
|
self, calendar: Calendar, start: datetime.date, end: datetime.date |
|
|
|
|
|
): |
|
|
|
|
|
workday: Workday |
|
|
|
|
|
return sorted( |
|
|
|
|
|
map(self.from_event, calendar.get_events(start, end)), |
|
|
|
|
|
key=lambda workday: workday.start_time, |
|
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
def is_present(self, workday: Workday): |
|
|
|
|
|
return ( |
|
|
|
|
|
workday.start_time, |
|
|
|
|
|
workday.end_time, |
|
|
|
|
|
workday.location, |
|
|
|
|
|
) in self.created_workdays.keys() |
|
|
|
|
|
|
|
|
|
|
|
def upload_workweek(self, calendar: Calendar, week: PaneraWeek): |
|
|
|
|
|
grab_workdays_from_calendar( |
|
|
|
|
|
datetime.datetime.combine(week.start, datetime.time(0, 0, 0)), |
|
|
|
|
|
datetime.datetime.combine(week.get_week_end(), datetime.time(23, 59, 59)), |
|
|
|
|
|
calendar, |
|
|
|
|
|
) |
|
|
|
|
|
workday: Workday |
|
|
|
|
|
for workday in week.workdays: |
|
|
|
|
|
if not self.is_present(workday): |
|
|
|
|
|
calendar.update_or_add_event(workday.convert_to_Event()) |