mirror of
https://github.com/dartdavros/chatballs.git
synced 2026-10-05 09:14:58 +03:00
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:
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>
|
||||
|
||||
@@ -48,6 +48,7 @@ export type Department = {
|
||||
memberCount: number;
|
||||
operatorCount: number;
|
||||
activeOperatorCount: number;
|
||||
agentCount: number;
|
||||
products: Array<{ code: string; name: string }>;
|
||||
};
|
||||
|
||||
|
||||
Reference in new issue
Block a user