hotfix: Advanced filtering system v1.4.1.1
This commit is contained in:
@@ -217,12 +217,18 @@ async def get_all_tickets_admin(
|
||||
status_filter: Optional[str] = None,
|
||||
priority_filter: Optional[str] = None,
|
||||
tenant_id_filter: Optional[str] = None,
|
||||
category_filter: Optional[str] = None,
|
||||
assigned_to_filter: Optional[str] = None,
|
||||
search: Optional[str] = None,
|
||||
date_from: Optional[str] = None,
|
||||
date_to: Optional[str] = None,
|
||||
db: AsyncSession = Depends(get_db),
|
||||
current_user: User = Depends(get_current_user)
|
||||
):
|
||||
"""
|
||||
Obtener todos los tickets de todos los tenants (solo para administradores)
|
||||
Incluye información del tenant y usuario que creó el ticket
|
||||
Filtros: estado, prioridad, tenant, categoría, asignado a, búsqueda de texto y fechas
|
||||
"""
|
||||
# Verificar que el usuario sea administrador
|
||||
if current_user.role not in ["ADMIN", "SUPPORT_MANAGER"]:
|
||||
@@ -269,6 +275,57 @@ async def get_all_tickets_admin(
|
||||
detail="Invalid tenant ID format"
|
||||
)
|
||||
|
||||
if category_filter:
|
||||
try:
|
||||
category_uuid = uuid.UUID(category_filter)
|
||||
query = query.where(Ticket.category_id == category_uuid)
|
||||
except ValueError:
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_400_BAD_REQUEST,
|
||||
detail="Invalid category ID format"
|
||||
)
|
||||
|
||||
if assigned_to_filter:
|
||||
try:
|
||||
assigned_uuid = uuid.UUID(assigned_to_filter)
|
||||
query = query.where(Ticket.assigned_to == assigned_uuid)
|
||||
except ValueError:
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_400_BAD_REQUEST,
|
||||
detail="Invalid assigned user ID format"
|
||||
)
|
||||
|
||||
if search:
|
||||
# Búsqueda de texto en subject y description
|
||||
search_pattern = f"%{search}%"
|
||||
query = query.where(
|
||||
(Ticket.subject.ilike(search_pattern)) |
|
||||
(Ticket.description.ilike(search_pattern))
|
||||
)
|
||||
|
||||
if date_from:
|
||||
try:
|
||||
from datetime import datetime
|
||||
date_from_parsed = datetime.fromisoformat(date_from)
|
||||
query = query.where(Ticket.created_at >= date_from_parsed)
|
||||
except ValueError:
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_400_BAD_REQUEST,
|
||||
detail="Invalid date_from format. Use YYYY-MM-DD"
|
||||
)
|
||||
|
||||
if date_to:
|
||||
try:
|
||||
from datetime import datetime, timedelta
|
||||
# Agregar 1 día para incluir todo el día final
|
||||
date_to_parsed = datetime.fromisoformat(date_to) + timedelta(days=1)
|
||||
query = query.where(Ticket.created_at < date_to_parsed)
|
||||
except ValueError:
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_400_BAD_REQUEST,
|
||||
detail="Invalid date_to format. Use YYYY-MM-DD"
|
||||
)
|
||||
|
||||
query = query.order_by(Ticket.created_at.desc()).offset(skip).limit(limit)
|
||||
|
||||
result = await db.execute(query)
|
||||
|
||||
Reference in New Issue
Block a user