All checks were successful
Build and Push Docker Image / build (push) Successful in 2m41s
Fixed 3 gaps in the QI Projects module: Gap 1 (critical): team members couldn't manage their own tasks — the toggle checkbox/edit/delete were gated behind admin-only can_edit. Now: - _can_manage_task() helper: admins OR the task assignee OR project team members - task_toggle_status + htmx_task_toggle_status use the new helper - task_row.html shows the toggle for assignees (task.assigned_to.user_id check) Gap 2: no "My QI Tasks" view — added /projects/my-tasks/ showing tasks assigned to the current user across all projects, with toggle links + stats. Sidebar link. Gap 3: no notification on task assignment — added apps/projects/signals.py (post_save on QIProjectTask → create_in_app_notification). apps.py ready() wired. Tested (headed, 11 PASS / 1 FAIL): - Cross-department team members (Contact Center + different dept) can VIEW the project AND toggle their assigned tasks (both PASS) - My Tasks view loads for team members - Excel export returns 500 (real bug, reported) - Project close via edit form needs correct hospital UUID (test harness issue) Also bundles accumulated in-progress work across complaints, observations, organizations, templates, and other modules. Harness: seed_e2e_project + get_e2e_project_state CLI + qi-projects-workflow.spec.ts
39 lines
1.1 KiB
Python
39 lines
1.1 KiB
Python
"""
|
|
Signals for QI Projects — sends a notification when a task is assigned.
|
|
"""
|
|
|
|
import logging
|
|
|
|
from django.db.models.signals import post_save
|
|
from django.dispatch import receiver
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
@receiver(post_save, sender="projects.QIProjectTask")
|
|
def notify_task_assignment(sender, instance, created, **kwargs):
|
|
"""Send an in-app notification when a QI task is assigned to a staff member."""
|
|
if not instance.assigned_to:
|
|
return
|
|
|
|
# Only notify on new assignments (creation with an assignee)
|
|
if not created:
|
|
return
|
|
|
|
user = getattr(instance.assigned_to, "user", None)
|
|
if not user:
|
|
return
|
|
|
|
try:
|
|
from apps.notifications.services import create_in_app_notification
|
|
|
|
create_in_app_notification(
|
|
user=user,
|
|
title=f"New QI Task: {instance.title}",
|
|
message=f"You have been assigned a task in project '{instance.project.name}'.",
|
|
notification_type="qi_task_assigned",
|
|
action_url=f"/projects/{instance.project.id}/",
|
|
)
|
|
except Exception as e:
|
|
logger.warning(f"Failed to send QI task notification: {e}")
|