73 lines
2.3 KiB
Python
73 lines
2.3 KiB
Python
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)
|