feat: add shared task assignments and quick win sorting

This commit is contained in:
2026-04-15 13:18:50 +02:00
parent f8f3641811
commit 4233175067
18 changed files with 414 additions and 55 deletions

View File

@@ -25,12 +25,19 @@ def refresh_task_statuses(tasks: list[TaskInstance]) -> None:
db.session.commit()
def effective_points(base_points: int, assigned_user_secondary_id: int | None) -> int:
if assigned_user_secondary_id:
return max(1, base_points // 2)
return base_points
def create_task_template_and_instance(form) -> TaskInstance:
template = TaskTemplate(
title=form.title.data.strip(),
description=(form.description.data or "").strip(),
default_points=form.default_points.data,
default_assigned_user_id=form.assigned_user_id.data,
default_assigned_user_secondary_id=form.assigned_user_secondary_id.data or None,
recurrence_interval_value=form.recurrence_interval_value.data if form.recurrence_interval_unit.data != "none" else None,
recurrence_interval_unit=form.recurrence_interval_unit.data,
active=form.active.data,
@@ -43,8 +50,9 @@ def create_task_template_and_instance(form) -> TaskInstance:
title=template.title,
description=template.description,
assigned_user_id=template.default_assigned_user_id,
assigned_user_secondary_id=template.default_assigned_user_secondary_id,
due_date=form.due_date.data,
points_awarded=template.default_points,
points_awarded=effective_points(template.default_points, template.default_assigned_user_secondary_id),
status="open",
)
refresh_task_status(task, form.due_date.data)
@@ -59,6 +67,7 @@ def update_template_and_instance(task: TaskInstance, form) -> TaskInstance:
template.description = (form.description.data or "").strip()
template.default_points = form.default_points.data
template.default_assigned_user_id = form.assigned_user_id.data
template.default_assigned_user_secondary_id = form.assigned_user_secondary_id.data or None
template.recurrence_interval_unit = form.recurrence_interval_unit.data
template.recurrence_interval_value = (
form.recurrence_interval_value.data if form.recurrence_interval_unit.data != "none" else None
@@ -68,7 +77,8 @@ def update_template_and_instance(task: TaskInstance, form) -> TaskInstance:
task.title = template.title
task.description = template.description
task.assigned_user_id = template.default_assigned_user_id
task.points_awarded = template.default_points
task.assigned_user_secondary_id = template.default_assigned_user_secondary_id
task.points_awarded = effective_points(template.default_points, template.default_assigned_user_secondary_id)
task.due_date = form.due_date.data
refresh_task_status(task, form.due_date.data)
db.session.commit()
@@ -108,8 +118,12 @@ def ensure_next_recurring_task(task: TaskInstance) -> TaskInstance | None:
title=task.task_template.title,
description=task.task_template.description,
assigned_user_id=task.task_template.default_assigned_user_id,
assigned_user_secondary_id=task.task_template.default_assigned_user_secondary_id,
due_date=next_due,
points_awarded=task.task_template.default_points,
points_awarded=effective_points(
task.task_template.default_points,
task.task_template.default_assigned_user_secondary_id,
),
status="open",
)
refresh_task_status(next_task, today_local())
@@ -149,6 +163,7 @@ def create_quick_task(title: str, effort: str, creator: User, description: str =
title=template.title,
description=description,
assigned_user_id=creator.id,
assigned_user_secondary_id=None,
due_date=today_local(),
points_awarded=template.default_points,
status="open",