feat(departments): add AI agent count to department cards

В состав отдела (card meta) вернул AI-агентов, как в исходной sales-карточке:
«N сотрудник(ов) · M операторов · K AI-агент(ов)».

- Backend: _department_payload отдаёт agentCount — реальное число AIAgent на
  каналах отдела (channel.department, ADR-HUB-0019).
- Frontend: тип Department.agentCount; обе карточки (sales + support).
This commit is contained in:
Andrey committed 2026-07-09 15:05:37 +03:00
1 parent 9602379a9b
commit 94e2d1a19c
3 files changed
+8 -2

No files matched your search

@@ -3,6 +3,7 @@ from rest_framework.request import Request
from rest_framework.response import Response
from rest_framework.views import APIView
from hub_platform.ai.models import AIAgent
from hub_platform.identity.models import Department, EmployeeRole
@@ -10,6 +11,9 @@ def _department_payload(department: Department) -> dict[str, object]:
employees = list(department.employees.select_related("user").all())
operators = [employee for employee in employees if employee.role == EmployeeRole.OPERATOR]
products = [link.product for link in department.product_links.select_related("product").order_by("product__name")]
# AI-агенты отдела: AIAgent живёт на канале обработки (ADR-HUB-0019),
# канал принадлежит отделу. Считаем активных агентов каналов этого отдела.
agent_count = AIAgent.objects.filter(channel__department=department).count()
return {
"id": department.id,
"code": department.code,
@@ -20,6 +24,7 @@ def _department_payload(department: Department) -> dict[str, object]:
"activeOperatorCount": len(
[employee for employee in operators if employee.user.is_active and not employee.is_blocked]
),
"agentCount": agent_count,
"products": [{"code": product.code, "name": product.name} for product in products],
}
@@ -42,7 +42,7 @@ export function DepartmentsPage({ data, setRoute }: { data: AppData; setRoute: (
</div>
<div>
<span>Состав</span>
<strong>{sales.memberCount} сотрудник(ов) · {sales.operatorCount} операторов</strong>
<strong>{sales.memberCount} сотрудник(ов) · {sales.operatorCount} операторов · {sales.agentCount} AI-агент(ов)</strong>
</div>
<div>
<span>Связанные продукты</span>
@@ -82,7 +82,7 @@ export function DepartmentsPage({ data, setRoute }: { data: AppData; setRoute: (
</div>
<div>
<span>Состав</span>
<strong>{support.memberCount} сотрудник(ов) · {support.operatorCount} операторов</strong>
<strong>{support.memberCount} сотрудник(ов) · {support.operatorCount} операторов · {support.agentCount} AI-агент(ов)</strong>
</div>
<div>
<span>Связанные продукты</span>
+1
View File
@@ -48,6 +48,7 @@ export type Department = {
memberCount: number;
operatorCount: number;
activeOperatorCount: number;
agentCount: number;
products: Array<{ code: string; name: string }>;
};