Загрузка данных



import operations


def show_menu():
    print("\n========== ТРЕКЕР ЗАДАЧ ==========")
    print("1. Создать участника")
    print("2. Создать задачу")
    print("3. Показать участников")
    print("4. Показать задачи")
    print("5. Назначить исполнителя")
    print("6. Назначить проверяющего")
    print("7. Начать работу")
    print("8. Отправить на проверку")
    print("9. Вернуть на доработку")
    print("10. Принять задачу")
    print("11. Отменить задачу")
    print("12. Удалить задачу")
    print("13. Добавить зависимость")
    print("14. Удалить зависимость")
    print("15. Найти задачи по названию")
    print("16. Найти задачи по статусу")
    print("17. Найти задачи по типу")
    print("18. Статистика статусов")
    print("19. Рейтинг участников")
    print("20. Оставшиеся часы")
    print("21. Статистика типов задач")
    print("22. Количество завершённых задач")
    print("0. Выход")


def show_users():
    if not operations.users:
        print("Участников пока нет")
        return

    for user in operations.users:
        print(
            user.id,
            user.name,
            user.email,
            user.grade,
            user.points
        )


def show_tasks(task_list):
    if not task_list:
        print("Задач нет")
        return

    for task in task_list:
        print(
            "ID:", task.id,
            "| Название:", task.title,
            "| Статус:", task.status,
            "| Приоритет:", task.priority
        )


def main():
    while True:
        show_menu()
        choice = input("Выберите действие: ").strip()

        if choice == "0":
            print("Программа завершена")
            break

        try:
            if choice == "1":
                name = input("Имя: ").strip()
                email = input("Email: ").strip()

                user = operations.create_user(name, email)
                print("Создан участник с ID:", user.id)

            elif choice == "2":
                task_type = input(
                    "Тип (feature/bug/passive): "
                ).strip().lower()

                title = input("Название задачи: ").strip()
                priority = int(input("Приоритет (1-5): "))

                if task_type == "feature":
                    hours = int(input("Количество часов: "))
                    task = operations.create_task(
                        task_type, title, priority, hours=hours
                    )

                elif task_type == "bug":
                    error = int(input("Серьёзность ошибки: "))
                    task = operations.create_task(
                        task_type, title, priority, error=error
                    )

                elif task_type == "passive":
                    task = operations.create_task(
                        task_type, title, priority
                    )

                else:
                    print("Неизвестный тип задачи")
                    continue

                print("Создана задача с ID:", task.id)

            elif choice == "3":
                show_users()

            elif choice == "4":
                show_tasks(operations.tasks)

            elif choice == "5":
                task_id = int(input("ID задачи: "))
                user_id = int(input("ID исполнителя: "))

                task = operations.get_task(task_id)
                user = operations.get_user(user_id)
                task.work_user(user)

                print("Исполнитель назначен")

            elif choice == "6":
                task_id = int(input("ID задачи: "))
                user_id = int(input("ID проверяющего: "))

                task = operations.get_task(task_id)
                user = operations.get_user(user_id)
                task.reviewer_user(user)

                print("Проверяющий назначен")

            elif choice == "7":
                task_id = int(input("ID задачи: "))
                user_id = int(input("ID исполнителя: "))

                task = operations.get_task(task_id)
                user = operations.get_user(user_id)

                operations.pick_up_task(
                    task, user, operations.tasks
                )

                print("Задача взята в работу")

            elif choice == "8":
                task_id = int(input("ID задачи: "))
                operations.send_to_review_byid(task_id)
                print("Задача отправлена на проверку")

            elif choice == "9":
                task_id = int(input("ID задачи: "))
                operations.return_to_work_byid(task_id)
                print("Задача возвращена на доработку")

            elif choice == "10":
                task_id = int(input("ID задачи: "))
                operations.accept_task_byid(task_id)
                print("Задача принята")

            elif choice == "11":
                task_id = int(input("ID задачи: "))
                operations.canel_task_byid(task_id)
                print("Задача отменена")

            elif choice == "12":
                task_id = int(input("ID задачи: "))
                task = operations.get_task(task_id)
                operations.delete_task(task)
                print("Задача удалена")

            elif choice == "13":
                task_id = int(input("ID задачи: "))
                need_id = int(input("ID необходимой задачи: "))

                task = operations.get_task(task_id)
                need_task = operations.get_task(need_id)

                task.set_need_task(need_task)
                print("Зависимость установлена")

            elif choice == "14":
                task_id = int(input("ID задачи: "))
                task = operations.get_task(task_id)

                task.remove_need_task()
                print("Зависимость удалена")

            elif choice == "15":
                text = input("Введите часть названия: ")
                result = operations.search_tast_by_title(text)
                show_tasks(result)

            elif choice == "16":
                status = input("Введите статус: ").strip()
                result = operations.search_tast_by_status(status)
                show_tasks(result)

            elif choice == "17":
                task_type = input(
                    "Тип (feature/bug/passive): "
                ).strip()

                result = operations.search_tast_by_type(task_type)
                show_tasks(result)

            elif choice == "18":
                stats = operations.get_task_status()
                for status, count in stats.items():
                    print(status, ":", count)

            elif choice == "19":
                rating = operations.get_user_rating()

                for user in rating:
                    print(
                        user.name,
                        "| Баллы:", user.points,
                        "| Уровень:", user.grade
                    )

            elif choice == "20":
                print(
                    "Осталось часов:",
                    operations.get_remaining_hours()
                )

            elif choice == "21":
                stats = operations.get_task_types_stats()

                for task_type, count in stats.items():
                    print(task_type, ":", count)

            elif choice == "22":
                user_id = int(input("ID участника: "))
                count = operations.count_complited_tasks(user_id)
                print("Завершённых задач:", count)

            else:
                print("Неизвестная команда")

        except ValueError as error:
            print("Ошибка данных:", error)

        except TypeError as error:
            print("Ошибка типа данных:", error)

        except LookupError as error:
            print("Объект не найден:", error)


if __name__ == "__main__":
    main()