SUAI-TaskPlanner-Contest / TaskPlanner

Client application for working with todos and syncing with CalDAV servers
MIT License
3 stars 2 forks source link

Сверстать табличный вывод задач #64

Closed astronik00 closed 1 year ago

astronik00 commented 1 year ago

Design

Требования: программист

Краткое описание

Необходимо создать QML "Главное окно"

Функциональные требования или иные документы

Необходимо сверстать таблицу, вид который определен на следующем изображении: Image

Лейблы можно не выводить справа от задачи, а либо вывести под ней, либо сделать самый простой вариант - оставить их для вывода на окно "Просмотр/редактирование задачи".

Задачи в таблице представляются в виде list[Task]. Класс Task имеет следующие поля:

class Task:
    # PK
    task_id: int
    # FKs
    server_id: int
    parent_id: int
    size_id: int
    type_id: int
    priority_id: int
    status_id: int
    # fields
    summary: str
    description: str
    dtstamp: datetime
    dtstart: datetime
    due: datetime
    last-mod: datetime
    tech_status: int
    # ORM relashionship
    server: Server,
    label: Label,
    children: list[Task]

Важно

  1. Следующие поля отобразить обязательно: summary: str - название задачи description: str - описание задачи, может быть длинным, вывести можно в окно "Просмотр/Редактирование задачи" dtstart: datetime - время начала выполнения задачи due: datetime - время завершения выполнения задачи label - лейблы задачи, в таблице рисовать сложно, можно вынести в окно "Просмотр/Редактирование задачи", в таблице вывести же один лейбл Status, как у Дениса

  2. Необходимо, чтобы кнопка "Многоточие" версталась также в качестве элемента строки таблицы. При ее нажатии раскрывались бы следующие элементы:

Image

В случае, если это невозможно, попробовать сверстать кнопки "редактировать", "создать подзадачу" и "изменить" в строке таблицы.


Пример кода, как создать репозитории:


from Code.entities.db_entities import Session
from Code.repositories.task_repo import TaskRepository, ServerRepository

session = Session()

task_repo = TaskRepository[Task](session)
server_repo = ServerRepository[Server](session)

Пример кода, как создать сервер:

from Code.entities.db_entities import Server

s = Server(user_email, user_password, server_name, calendar_name, server_uri)
server_repo.add(s)

Пример кода, как создать корневую задачу на сервере s:

from Code.entities.db_entities import Task

t1 = Task(s, summary, description, dtstamp, dtstart, due, last_mod, tech_status, parent=None)
t1.label = Label(t1, priority, size, type, status)
task_repo.add(t1)

Пример кода, как создать подзадачу у задачи t1 на сервере s:

from Code.entities.db_entities import Task

t2 = Task(s, summary, description, dtstamp, dtstart, due, last_mod, tech_status, parent=t1)
t2.label = Label(t2, priority, size, type, status)
task_repo.add(t2)

Пример кода, как получить все задачи на сервере s:

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

Пример кода, как получить все лейблы "Приоритет":

server_priorities_list = server_repo.get_priorities(server_id) # возвращает list[Priority]

Обобщенное решение

Выходной результат

Файл окна QML. В MR загрузить скриншот работы.

astronik00 commented 1 year ago

@ISAchainSAW

обновила код

ISAchainSAW commented 1 year ago

Developing Task

Требования: программист

Краткое описание

Функциональные требования или документация

Обобщенное решение

Выходной результат

Image

ISAchainSAW commented 1 year ago

@astronik00 Кнопка работает, задачи добавляются, пока не работает нормальное отображение, как-то странно делится сетка Если добавить задач сверх того, что на картинке будет возможность проскролить вниз

astronik00 commented 1 year ago

@astronik00 Кнопка работает, задачи добавляются, пока не работает нормальное отображение, как-то странно делится сетка Если добавить задач сверх того, что на картинке будет возможность проскролить вниз

Отлично. Теперь сделать элемент под поля задачи нужно и посмотреть, как сверстать вывод кнопки внутрь каждой строки.