import logging from argparse import Namespace from aiogram import Bot from colorama import Fore # noqa: E402 from bot.factory import bot from config import arg_parser, clock, config, db, red # noqa: E402 from utils import check_envs, db_update, format_date, get_start_end_dates # noqa: E402 async def end_workday( args: Namespace = None, bot: Bot = None, user_id: int = None ): args = args or arg_parser.parse_args() if is_debug := args.debug: config.MODE = "debug" logging.getLogger().setLevel(logging.DEBUG) logger = logging.getLogger(__name__) start, end = get_start_end_dates(args) if not check_envs(): return user = clock.get_user() clock_user = { "clockify_user_id": user["id"], "clockify_email": user["email"], "clockify_username": user["username"], } user = red.get_user() red_user = { "redmine_user_id": user["id"], "redmine_email": user["email"], "first_name": user["first_name"], "last_name": user["last_name"], "redmine_username": user["username"] } db.insert_user(**clock_user, **red_user) if args.init_db: await db_update(bot) activities = sorted(clock.get_activities( **{ "start": format_date(start), "end": format_date(end), "page-size": args.page_size, }, ), key=lambda x: x.date_start) if not activities: logger.info(Fore.YELLOW + "Нет задач для занесения трудочасов" + Fore.RESET) if bot: await bot.send_message(user_id, "Нет задач для занесения трудочасов") return db.insert_activities(activities) try: tracked_activities = red.track_activities(activities) if bot: await bot.send_message(user_id, f"Трудочасы занесены: {len(tracked_activities)}/{len(activities)}.") clock.mark_tracked(tracked_activities) if not is_debug: db.insert_time_entries(tracked_activities) db.insert_activities(tracked_activities) except Exception as e: if bot: await bot.send_message(user_id, f"Ошибка при трекинге трудочасов: {e}") logger.error(e)