"""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")), }