Add authors to tasks
This commit is contained in:
@@ -174,6 +174,53 @@ def _service_label(service: str) -> str:
|
||||
return labels.get(key, key.title() if key else "Unknown")
|
||||
|
||||
|
||||
def _creator_label_for_message(user, service: str, message) -> str:
|
||||
msg = message
|
||||
if msg is None:
|
||||
return "Unknown"
|
||||
author_raw = str(getattr(msg, "custom_author", "") or "").strip()
|
||||
author_key = author_raw.upper()
|
||||
sender_identifier = str(getattr(msg, "sender_uuid", "") or "").strip()
|
||||
|
||||
if author_key == "USER":
|
||||
return "You"
|
||||
if author_key == "BOT":
|
||||
return "System Bot"
|
||||
|
||||
if sender_identifier:
|
||||
variants = _person_identifier_scope_variants(service, sender_identifier)
|
||||
person_identifier = (
|
||||
PersonIdentifier.objects.filter(
|
||||
user=user,
|
||||
service=str(service or "").strip().lower(),
|
||||
identifier__in=variants or [sender_identifier],
|
||||
)
|
||||
.select_related("person")
|
||||
.first()
|
||||
)
|
||||
if person_identifier is not None:
|
||||
person_name = str(getattr(person_identifier.person, "name", "") or "").strip()
|
||||
if person_name:
|
||||
return person_name
|
||||
return sender_identifier
|
||||
|
||||
if author_raw:
|
||||
if author_key == "OTHER":
|
||||
return "Other Participant"
|
||||
return author_raw
|
||||
return "Unknown"
|
||||
|
||||
|
||||
def _apply_task_creator_labels(user, task_rows):
|
||||
rows = list(task_rows or [])
|
||||
for row in rows:
|
||||
origin = getattr(row, "origin_message", None)
|
||||
service_key = str(getattr(row, "source_service", "") or "").strip().lower()
|
||||
row.creator_label = _creator_label_for_message(user, service_key, origin)
|
||||
row.creator_identifier = str(getattr(origin, "sender_uuid", "") or "").strip()
|
||||
return rows
|
||||
|
||||
|
||||
def _provider_row_map(user):
|
||||
return {
|
||||
str(row.provider or "").strip().lower(): row
|
||||
@@ -410,9 +457,10 @@ class TasksHub(LoginRequiredMixin, View):
|
||||
)
|
||||
tasks = (
|
||||
DerivedTask.objects.filter(user=request.user)
|
||||
.select_related("project", "epic")
|
||||
.select_related("project", "epic", "origin_message")
|
||||
.order_by("-created_at")[:200]
|
||||
)
|
||||
tasks = _apply_task_creator_labels(request.user, tasks)
|
||||
selected_project = None
|
||||
if scope["selected_project_id"]:
|
||||
selected_project = TaskProject.objects.filter(
|
||||
@@ -547,9 +595,10 @@ class TaskProjectDetail(LoginRequiredMixin, View):
|
||||
def _context(self, request, project):
|
||||
tasks = (
|
||||
DerivedTask.objects.filter(user=request.user, project=project)
|
||||
.select_related("epic")
|
||||
.select_related("epic", "origin_message")
|
||||
.order_by("-created_at")
|
||||
)
|
||||
tasks = _apply_task_creator_labels(request.user, tasks)
|
||||
epics = (
|
||||
TaskEpic.objects.filter(project=project)
|
||||
.annotate(task_count=Count("derived_tasks"))
|
||||
@@ -613,9 +662,10 @@ class TaskEpicDetail(LoginRequiredMixin, View):
|
||||
epic = get_object_or_404(TaskEpic, id=epic_id, project__user=request.user)
|
||||
tasks = (
|
||||
DerivedTask.objects.filter(user=request.user, epic=epic)
|
||||
.select_related("project")
|
||||
.select_related("project", "origin_message")
|
||||
.order_by("-created_at")
|
||||
)
|
||||
tasks = _apply_task_creator_labels(request.user, tasks)
|
||||
return render(request, self.template_name, {"epic": epic, "tasks": tasks})
|
||||
|
||||
|
||||
@@ -639,9 +689,10 @@ class TaskGroupDetail(LoginRequiredMixin, View):
|
||||
source_service__in=service_keys,
|
||||
source_channel__in=variants,
|
||||
)
|
||||
.select_related("project", "epic")
|
||||
.select_related("project", "epic", "origin_message")
|
||||
.order_by("-created_at")
|
||||
)
|
||||
tasks = _apply_task_creator_labels(request.user, tasks)
|
||||
return render(
|
||||
request,
|
||||
self.template_name,
|
||||
@@ -717,11 +768,28 @@ class TaskDetail(LoginRequiredMixin, View):
|
||||
|
||||
def get(self, request, task_id):
|
||||
task = get_object_or_404(
|
||||
DerivedTask.objects.select_related("project", "epic"),
|
||||
DerivedTask.objects.select_related("project", "epic", "origin_message"),
|
||||
id=task_id,
|
||||
user=request.user,
|
||||
)
|
||||
events = task.events.select_related("source_message").order_by("-created_at")
|
||||
for row in events:
|
||||
service_hint = str(getattr(task, "source_service", "") or "").strip().lower()
|
||||
event_source_message = getattr(row, "source_message", None)
|
||||
row.actor_display = _creator_label_for_message(
|
||||
request.user,
|
||||
service_hint,
|
||||
event_source_message,
|
||||
)
|
||||
if row.actor_display == "Unknown":
|
||||
raw_actor = str(getattr(row, "actor_identifier", "") or "").strip()
|
||||
if raw_actor:
|
||||
row.actor_display = raw_actor
|
||||
task.creator_label = _creator_label_for_message(
|
||||
request.user,
|
||||
str(getattr(task, "source_service", "") or "").strip().lower(),
|
||||
getattr(task, "origin_message", None),
|
||||
)
|
||||
sync_events = task.external_sync_events.order_by("-created_at")
|
||||
return render(
|
||||
request,
|
||||
|
||||
Reference in New Issue
Block a user