"""Сервис переноса трудочасов из Clockify в Redmine.""" import logging from colorama import Fore from utils import format_date logger = logging.getLogger(__name__) class TrackingService: """Координирует загрузку, сохранение и перенос активностей в Redmine.""" def __init__(self, clock, red, db, is_debug: bool): self.clock = clock self.red = red self.db = db self.is_debug = is_debug def track_period(self, start, end, page_size: int | None): """Переносит активности за период и возвращает список найденных активностей.""" self._save_current_user() activities = sorted( self.clock.get_activities( **{ "start": format_date(start), "end": format_date(end), "page-size": page_size, }, ), key=lambda x: x.date_start, ) if not activities: logger.info(Fore.YELLOW + "Нет задач для занесения трудочасов" + Fore.RESET) return [] self.db.insert_activities(activities) self.red.track_activities( activities, on_success=None if self.is_debug else self._save_tracked_activity, ) return activities def _save_current_user(self): """Сохраняет связку текущих пользователей Clockify и Redmine.""" user = self.clock.get_user() clock_user = { "clockify_user_id": user["id"], "clockify_email": user["email"], "clockify_username": user["username"], } user = self.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"], } self.db.insert_user(**clock_user, **red_user) def _save_tracked_activity(self, activity): """Сохраняет активность как успешно перенесенную в Redmine.""" self.db.insert_activities([activity]) self.db.insert_time_entries([activity])