Производственный Календарь — это инструмент, разработанный для управления и анализа дат, рабочих дней и праздников в заданный период. Этот README содержит подробное описание функционала, инструкции по установке и примеры использования. Информация о праздничных/предпраздничных днях берется из https://www.consultant.ru
- Выгрузка всего года: Получение производственного календаря на весь год.
Объект ProductCalendar кэшируется в рамках одной сессии прораммы.
- Выгрузка за период (N календарных дней): Получение календаря с начальной даты на заданное количество календарных дней.
- Выгрузка за период (N рабочих дней): Получение календаря с начальной даты на заданное количество рабочих дней.
- Выгрузка за период (начальная дата - конечная дата): Получение календаря за указанный диапазон дат.
- Статистика за период: Получение статистики о количестве дней, рабочих дней и праздников за указанный период.
- Разбивка по кварталам: Получение календаря с разбивкой по кварталам.
- Разбивка по неделям: Получение календаря с разбивкой по неделям.
- Всего дней за период: Подсчет общего количества дней за указанный период.
- Всего рабочих часов за период: Подсчет общего количества рабочих часов за указанный период.
- Следующий рабочий день: Определение следующего рабочего дня с указанной даты.
- Получение последней даты текущего периода (в виде объекта Day)
- Получение первой даты текущего периода (в виде объекта Day)
- Расширение периода с конца
- Расширение периода с начала
Для установки Производственного Календаря выполните следующие шаги:
- Клонируйте репозиторий
https://github.com/Nekit-py/product_calendar_lib.git
- Установите Maturin https://pypi.org/project/maturin/
brew install maturin
- Соберите библиотеку
maturin build --release
Для конкретной версии python:
maturin build --release --interpreter 3.10
Более подробно на https://github.com/pyo3/maturin
- Скачать для MacOs (arm64) wheels
class Day:
day: date
weekday: str
kind: str
def as_dict(self) -> dict[str, str]:
...
def ordinal(self) -> int:
...
class Statistic:
def __init__(self, holidays: int, work_days: int, weekends: int, preholidays: int)):
...
def work_hours(self) -> int:
...
def rest_days(self) -> int:
...
def as_dict(self) -> dict[str, int]:
...
class ProductCalendar:
def __init__(self, year: int | None = None):
...
def all_days(self) -> list[Day]:
...
def period_by_number_of_days(self, date: date, days: int) -> Self:
...
def period_by_number_of_work_days(self, date: date, work_days: int) -> Self:
...
def period_slice(self, start: date, end: date) -> Self:
...
def extract_dates_in_quarter(quarter: int) -> Self:
...
def statistic(self) -> Statistic:
...
def total_days(self) -> int:
...
def next_work_day(self, cur_day: date) -> Day:
...
def by_kind(self, kind: str) -> Self:
...
def extract_dates_in_quarter(self, quarter: int) -> Self:
...
def after_nth_weeks(self, date: date, weeks: int) -> Self:
...
def last(self):
...
def first(self):
...
def extend_forward(self, days: int) -> None:
...
def extend_backward(self, days: int) -> None:
...
from product_calendar import ProductCalendar
calendar = ProductCalendar(2024)
yearly_calendar = calendar.all_days()
print(yearly_calendar)
calendar_period = calendar.period_by_number_of_days(date(2024, 5, 1), 10)
print(calendar_period)
calendar_period_working_days = calendar.period_by_number_of_work_days(date(2024, 5, 1), 10)
print(calendar_period_working_days)
calendar_period = calendar.period_slice(date(2024, 5, 1), date(2024, 5, 30))
print(calendar_period)
period_statistic = calendar.statistic()
print(period_statistic)
third_quarter = calendar.extract_days_in_quarter(3)
print(third_quarter)
desired_day = calendar.after_nth_weeks(3)
print(desired_day)
third_quarter = calendar.extract_days_in_quarter(3)
third_quarter_statistic = third_quarter.statistic()
print(third_quarter_statistic.work_hours())
desired_work_day = calendar.next_work_day(date(2024,1,1))
print(desired_day)
Я приветствую вклад в проект! Пожалуйста, выполните следующие шаги для внесения изменений:
Сделайте форк репозитория. Создайте новую ветку для вашей функции или исправления ошибки. Внесите ваши изменения. Отправьте pull request с подробным описанием ваших изменений.
Этот проект лицензирован по лицензии MIT. См. файл LICENSE для подробностей.
По вопросам или для поддержки свяжитесь со мной по адресу nekit-sns@yandex.ru