52 lines
1.4 KiB
Python
52 lines
1.4 KiB
Python
import copy
|
|
from datetime import date, timedelta, time
|
|
|
|
from django.shortcuts import get_object_or_404
|
|
|
|
from web.models.event import Event
|
|
|
|
|
|
DIVISION_MAP = {
|
|
1: [time(i).strftime('%I %p') for i in range(24)],
|
|
2: ["Morning", "Afternoon", "Night"]
|
|
}
|
|
|
|
|
|
class AvailabilityContractGenerator:
|
|
def __init__(self, event_id):
|
|
self.event_id = event_id
|
|
self.event = get_object_or_404(Event, pk=event_id)
|
|
|
|
self.availability_contract = {
|
|
'unavailable': False,
|
|
'dates': {}
|
|
}
|
|
|
|
def main(self):
|
|
dates = self.generate_date_list()
|
|
self.generate_availability_contract(dates)
|
|
return self.availability_contract
|
|
|
|
def generate_date_list(self):
|
|
start_date = copy.deepcopy(self.event.start_date)
|
|
delta = timedelta(days=1)
|
|
|
|
dates = []
|
|
|
|
while start_date <= self.event.end_date:
|
|
dates.append(start_date.isoformat())
|
|
start_date += delta
|
|
|
|
return dates
|
|
|
|
def generate_availability_contract(self, dates):
|
|
for event_date in dates:
|
|
self.availability_contract['dates'][event_date] = {'divisions': []}
|
|
for division in DIVISION_MAP.get(self.event.division.id):
|
|
self.availability_contract['dates'][event_date]['divisions'].append(
|
|
{
|
|
"name": division,
|
|
"status": None
|
|
}
|
|
)
|