heroweb/poc/webcomponents0/tasks/model.py

68 lines
2.3 KiB
Python

from typing import List
from pydantic import BaseModel, Field
from webcomponents.models.tasks import TaskList,TaskCategory,TaskStatus
class TaskHtml(BaseModel):
name: str
category: str
icon_color: str
background_color: str
is_highlighted: bool = False
icon_svg: str = Field(default='svg/rocket_black.svg')
action_svg: str = Field(default='svg/clip_black.svg')
class TaskListHtml(BaseModel):
tasks: List[TaskHtml] = []
def convert_task_list_to_html(task_list: TaskList) -> TaskListHtml:
task_list_html = TaskListHtml()
# Define color schemes for different categories
category_colors = {
TaskCategory.BUG: ("#E74C3C", "#FDEDEC"), # Red
TaskCategory.QUESTION: ("#3498DB", "#EBF5FB"), # Blue
TaskCategory.STORY: ("#9B59B6", "#F4ECF7"), # Purple
TaskCategory.TASK: ("#2ECC71", "#E8F8F5"), # Green
TaskCategory.VARIA: ("#F1C40F", "#FEF9E7"), # Yellow
TaskCategory.FEATURE: ("#E67E22", "#FDF2E9"), # Orange
}
# Define icons for different categories
category_icons = {
TaskCategory.BUG: "svg/gauge_black.svg",
TaskCategory.QUESTION: "svg/question_black.svg",
TaskCategory.STORY: "svg/book_black.svg",
TaskCategory.TASK: "svg/gauge_black.svg",
TaskCategory.VARIA: "svg/gauge_black.svg",
TaskCategory.FEATURE: "svg/gauge_black.svg",
}
for task in task_list.get_tasks():
# Get colors for the task category
icon_color, background_color = category_colors[task.category]
# Get icon for the task category
icon_svg = category_icons[task.category]
# Determine if the task should be highlighted (high priority, overdue, or blocked)
is_highlighted = (
task.priority >= 4 or
task.is_overdue() or
task.status == TaskStatus.BLOCKED
)
# Create TaskHtml object
task_html = TaskHtml(
name=task.name,
category=task.category.value,
icon_color=icon_color,
background_color=background_color,
is_highlighted=is_highlighted,
icon_svg=icon_svg,
action_svg='svg/clip_black.svg' if task.remarks else 'svg/world_black.svg'
)
task_list_html.tasks.append(task_html)
return task_list_html