Files
customerTicket/apps/tickets/dispatch_presentation.py
T

36 lines
1.2 KiB
Python

"""Read-only option metadata for the staff dispatch composer."""
from django.db.models import Count, Q
from .models import GroupDispatch, TicketCategory
from .policies import DispatchPolicy
def dispatch_form_options(user, units, groups):
"""Expose only permitted units; recipient counts follow the sending service."""
units = list(units)
eligible = (
Q(contacts__user__is_active=True, contacts__user__mobile__isnull=False)
& ~Q(contacts__user__mobile="")
)
return {
"units": [
{
"id": unit.pk,
"name": unit.name,
"operations": [
kind for kind in GroupDispatch.OperationType.values
if DispatchPolicy.can_create(user, unit, kind)
],
}
for unit in units
],
"groups": list(groups.annotate(recipient_count=Count("contacts", filter=eligible)).values(
"id", "name", "unit_id", "recipient_count",
)),
"categories": list(TicketCategory.objects.filter(
Q(unit_id__in=[unit.pk for unit in units]) | Q(unit__isnull=True),
is_active=True,
).order_by("title").values("id", "title", "unit_id")),
}