/
Hetvild
/
Bitrix24-Report-Bot
Обзор
Документация
Войти
/
Hetvild
/
Bitrix24-Report-Bot
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/main.py
111 строк
4 KB
bil
init
28 янв 2026, 08:08
28 янв 2026, 08:08
b32e627
Код
Авторство
О чём код?
import asyncio from apscheduler.schedulers.asyncio import AsyncIOScheduler from apscheduler.triggers.cron import CronTrigger from bitrix24.external_api import get_list_tasks_api, disk_folder_uploadfile from config.config import get_logger from utils.data_processor import build_final_json from utils.filter_data import ( filter_responsible, get_open_tasks_with_deadline, get_open_tasks_without_deadline, get_closed_tasks, ) from utils.report_pdf_generator import generate_pdf from utils.utils_date import get_week_dates, get_month_dates, get_year_dates logger = get_logger() async def main(): # Асинхронно получаем даты начала и конца текущего года, месяца и недели res_current_year, res_current_week, res_current_month = await asyncio.gather( get_year_dates(), get_week_dates(), get_month_dates() ) # Получаем полный список задач за текущий год, в работе и завершенные res_list_tasks = await get_list_tasks_api( res_current_year["start_date"], res_current_year["end_date"] ) logger.debug( f"Полный список задач за текущий год в количестве: {len(res_list_tasks)}" ) # Фильтруем данные по ответственному за весь год res_filtered_tasks_responsible = await filter_responsible(res_list_tasks) # Получаем список открытых задач по-ответственному за неделю, месяц и год ( res_open_tasks_with_deadline_week, res_open_tasks_with_deadline_month, res_open_tasks_with_deadline_year, res_open_tasks_without_deadline, ) = await asyncio.gather( get_open_tasks_with_deadline( res_filtered_tasks_responsible, res_current_week["start_date"], res_current_week["end_date"], ), get_open_tasks_with_deadline( res_filtered_tasks_responsible, res_current_week["end_date"], res_current_month["end_date"], ), get_open_tasks_with_deadline( res_filtered_tasks_responsible, res_current_month["end_date"], res_current_year["end_date"], ), get_open_tasks_without_deadline(res_filtered_tasks_responsible), ) res_closed_tasks_week, res_closed_tasks_month = await asyncio.gather( get_closed_tasks( res_filtered_tasks_responsible, res_current_week["start_date"], res_current_week["end_date"], ), get_closed_tasks( res_filtered_tasks_responsible, res_current_month["start_date"], res_current_month["end_date"], ), ) # Формируем JSON для передачи в отчет PDF result = await build_final_json( res_open_tasks_with_deadline_week, res_open_tasks_with_deadline_month, res_open_tasks_with_deadline_year, res_open_tasks_without_deadline, ) # Отправляем окончательный JSON в PDF для формирования отчета res_pdf_bytes = generate_pdf(result) logger.debug("Отчет успешно сформирован.") # Отправляем готовый отчет в битрикс24 await disk_folder_uploadfile(res_pdf_bytes) def start_scheduler(): scheduler = AsyncIOScheduler() scheduler.add_job( main, CronTrigger(day_of_week="mon", hour=8, minute=0, timezone="Asia/Yekaterinburg"), ) scheduler.start() async def async_main(): start_scheduler() while True: await asyncio.sleep(3600) if __name__ == "__main__": logger.debug("Скрипт начал работу.") asyncio.run(async_main()) logger.debug("Скрипт завершил работу.")