Closed astronik00 closed 1 year ago
@slavakyrlan В этой ветке нет ресуров, что содержат иконки для кнопок. Добавь их пожалуйста
@astronik00 Эта задача прям больша. В частности добавление и редактирование. Предлагаю разделить эту задачу на две, во второй будет добавление и редактирование. @aleksandra-shchegoleva А у тебя будет возможность подключиться к этой задаче (та что вторая половинка)?
@Lailes Да, думаю. что с четверга-пятницы будет возможность подключиться к задаче
@slavakyrlan Скинь пожалуйста ресурсы, ты не закоммитил и я не могу работать без них
Они находятся в папке QmlWindows/Resources 67 ветка Как ты написал сразу выложил туда
Developing Task
Требования: программист
Краткое описание
Создать класс Python, функции которого обрабатывали бы сигналы, приходящие с окна "Список задач" QML
Функциональные требования или документация
Пример создания классов-репозиториев:
Пример создания сервиса caldav для сервера s, который является текущим элементом в ComboBox:
Пример кода для выполнения задания
Сигналы главного окна:
Смена элемента ComboBox
ComboBox необходимо наполнить списком серверов, в котором отображались бы лишь названия: ```python server_list = server_repo.get_all() # возвращает list[Server] ``` 1. Получить текущий сервер s из ComboBox 2. Считать все задачи, которые соответствуют этому серверу: ```python tasks_list = task_repo.get_all_by_server_id(s.server_id) # возвращает list[Task] на сервере s # или tasks_list = server_repo.get_tasks(s.server_id) # возвращает list[Task] на сервере s ``` 3. Загрузить новый список задач в отображение
Нажать кнопку "Плюс" сверху
![Image](https://user-images.githubusercontent.com/61901459/241247605-288578b4-a497-4a3c-a2d1-ad8dafb50af3.png) 1. Открытие пустой формы добавления задачи, у которой нет родителя, передать на форму текущий сервер s из Combobox серверов на панели сверху 2. Загрузить в combobox-ы "Статус", "Размер", "Тип", "Приоритет" данные из БД ```python priorities_list = server_repo.get_priorities(s.id) # возвращает list[Priority] status_list = server_repo.get_statuses(s.id) # возвращает list[Status] types_list = server_repo.get_types(s.id) # возвращает list[Type] sizes_list = server_repo.get_sizes(s.id) # возвращает list[Size] ``` 4. По кнопке "добавить" считать поля с формы 5. Создать объект task с полем task.parent=None 6. Добавить задачу в БД ```python task_repo.add(task) ``` 5. Обновить список задач в отображении
Нажать кнопку "Добавить" в троеточии
![Image](https://user-images.githubusercontent.com/61901459/241247987-dae867aa-e509-420b-97e4-e13a37aedc47.png) ![Image](https://user-images.githubusercontent.com/61901459/241248369-903f7297-3451-4cc1-9034-8d695928b75f.png) 1. Открытие пустой формы добавления задачи task, где была передана родительская задача parent_task, в строке которой была нажата кнопка добавления 2. По кнопке "добавить" считать поля с формы 3. Создать объект task с полем task.parent=parent_task 4. Добавить задачу в БД ```python task_repo.add(task) ``` 5. Обновить список задач в отображении
Нажать кнопку "Редактировать" в троеточии
Нажать кнопку "Удалить" в троеточии
![Image](https://user-images.githubusercontent.com/61901459/241247987-dae867aa-e509-420b-97e4-e13a37aedc47.png) ![Image](https://user-images.githubusercontent.com/61901459/241248772-7461e6bc-1c3b-4f91-95b5-5c363ddc1070.png) 1. Получить удаляемую задачу task. 2. Проверить, если у нее подзадачи ```python if len(task_repo.get_task_children_by_id(task.id)) != 0: # вызвать окно предупреждения # перейти в класс-обработчик сигналов с окна предупреждения # если нажать Продолжить, то удалить задачу, закрыть окно # если отмена, то ничего не делать, закрыть окно ``` Удаление задачи: ```python task_repo.delete(task) # или task_repo.delete_by_id(task.id) ```
Нажать кнопку "Синхронизация"
![Image](https://user-images.githubusercontent.com/61901459/241252392-e77da35c-3ec3-4c76-a775-3f3b3c1d0f8a.png) 1. Получить из отображения список задач task_list 2. В цикле попытаться отправить каждую задачу на сервер ```python conflicted_tasks = [] for task in task_list: conflicted_tasks.append(caldav_service.publish(task)) ``` 4. Сформировать список конфликтных задач conflicted_tasks 5. Пока len(conflicted_tasks) >0, для каждой задачи вызвать окно "Решения конфликтов", на которое передать этот список 6. Перейти в класс-обработчик Решения конфликтов 7. Решить конфликты
ВАЖНО
При изменении серверов из окна "Настройки", необходимо, чтобы обновлялся ComboBox на главном экране. Либо прямо из класса-обработчика окна "Настройки" как-то вызывать изменение содержимого ComboBox с "Списка задач", либо придумать какую-то функцию обновления содержимого, если БД изменилась. Например, при открытии главного окна каждый раз читались бы заново данные, ведь изменения могут происходить только при переходу между "Настройки" <-> "Список задач"
Обобщенное решение
Выходной результат
Класс-обработчик сигналов .py