Repository URL to install this package:
|
Version:
0.4.184 ▾
|
lib-py-b2b
/
calendar.py
|
|---|
from datetime import datetime, timedelta
import logging
from lib_b2b.holidays import Holidays
import calendar
logger = logging.getLogger(__name__)
class OperatingCalendar:
three_year_range = [datetime.now().year - 1, datetime.now().year, datetime.now().year + 1]
standard_holidays = Holidays.get('BarnhardtHolidayCalendar', years=three_year_range)
def __init__(self, work_days: [int], holidays: Holidays):
self.holidays = holidays
self.work_days = work_days
def next_available_day(self, after: datetime):
_date = after
while _date in self.holidays or _date.weekday() not in self.work_days:
_date = _date + timedelta(days=1)
return _date
def describe(self):
_str = "Operating Calendar:\n"
_str += f"\toperate on: {', '.join(list(map(lambda d: list(calendar.day_abbr)[d], self.work_days)))}\n"
_str += f"\tholidays: {self.holidays.describe()}\n"
return _str
class CustomerOperatingCalendars:
three_year_range = [datetime.now().year - 1, datetime.now().year, datetime.now().year + 1]
standard_holidays = Holidays.get('BarnhardtHolidayCalendar', years=three_year_range)
@classmethod
def get(cls, customer: str):
if customer == '4021001305':
return CustomerOperatingCalendars(
customer_service=OperatingCalendar(work_days=list(range(0, 5)),
holidays=cls.standard_holidays),
fulfillment=OperatingCalendar(work_days=list(range(0, 5)),
holidays=cls.standard_holidays)
)
elif customer == '402100200186':
return CustomerOperatingCalendars(
customer_service=OperatingCalendar(work_days=list(range(0, 5)),
holidays=cls.standard_holidays),
fulfillment=OperatingCalendar(work_days=list(range(0, 5)),
holidays=cls.standard_holidays)
)
elif customer == '402100100554':
return CustomerOperatingCalendars(
customer_service=OperatingCalendar(work_days=list(range(0, 5)),
holidays=cls.standard_holidays),
fulfillment=OperatingCalendar(work_days=list(range(1, 5)),
holidays=cls.standard_holidays)
)
elif customer == '402100200002':
return CustomerOperatingCalendars(
customer_service=OperatingCalendar(work_days=list(range(0, 5)),
holidays=cls.standard_holidays),
fulfillment=OperatingCalendar(work_days=list(range(1, 5)),
holidays=cls.standard_holidays)
)
elif customer == '705700100991':
return CustomerOperatingCalendars(
customer_service=OperatingCalendar(work_days=list(range(0, 5)),
holidays=cls.standard_holidays),
fulfillment=OperatingCalendar(work_days=list(range(0, 5)),
holidays=cls.standard_holidays)
)
else:
raise ValueError(f"Operating calendars not found for {customer}")
def __init__(self, customer_service: OperatingCalendar, fulfillment: OperatingCalendar):
self.fulfillment = fulfillment
self.customer_service = customer_service