From a5d58fa78df1db9f7fef8dea8cfbe98fcdfda64d Mon Sep 17 00:00:00 2001 From: Manuel Aranda Date: Wed, 5 Mar 2025 09:05:49 +0100 Subject: [PATCH] Changed repoClient funcionality. New filters added --- src/Repository/ClientRepository.php | 37 +++++++++++++++++++---------- 1 file changed, 25 insertions(+), 12 deletions(-) diff --git a/src/Repository/ClientRepository.php b/src/Repository/ClientRepository.php index 72f8b17..c6f77f2 100644 --- a/src/Repository/ClientRepository.php +++ b/src/Repository/ClientRepository.php @@ -20,7 +20,6 @@ class ClientRepository extends AbstractRepository { $entityManager = $this->getEntityManager(); - // Obtener el path de la unidad organizativa raíz $query = $entityManager->createQuery( 'SELECT o.path FROM App\Entity\OrganizationalUnit o @@ -34,7 +33,6 @@ class ClientRepository extends AbstractRepository $path = $result['path'] . '/%'; - // Obtener las unidades organizativas descendientes $query = $entityManager->createQuery( 'SELECT o.id FROM App\Entity\OrganizationalUnit o @@ -45,17 +43,15 @@ class ClientRepository extends AbstractRepository $unitIds = array_column($query->getArrayResult(), 'id'); - // Construcción de la consulta con filtros dinámicos $qb = $entityManager->createQueryBuilder(); $qb->select('c') ->from('App\Entity\Client', 'c') ->where('c.organizationalUnit IN (:unitIds)') ->setParameter('unitIds', $unitIds); - // Aplicar dinámicamente los filtros recibidos foreach ($filters as $key => $value) { if ($key === 'order' || $key === 'page' || $key === 'itemsPerPage' || $key === 'organizationalUnit.id') { - continue; // No son filtros de búsqueda + continue; } if ($key === 'exists') { @@ -66,13 +62,25 @@ class ClientRepository extends AbstractRepository $qb->andWhere("c.$field IS NULL"); } } + } elseif ($key === 'name') { + // Aplicar búsqueda con LIKE para el campo "name" + $qb->andWhere("c.name LIKE :name") + ->setParameter('name', "%$value%"); + } elseif ($key === 'query') { + // Búsqueda en múltiples campos (name, ip, mac) + $qb->andWhere($qb->expr()->orX( + $qb->expr()->like('c.name', ':searchQuery'), + $qb->expr()->like('c.ip', ':searchQuery'), + $qb->expr()->like('c.mac', ':searchQuery') + ))->setParameter('searchQuery', "%$value%"); } else { - // Si es un campo normal, añadirlo como filtro + // Búsqueda exacta para otros campos $qb->andWhere("c.$key = :$key")->setParameter($key, $value); } } - // Aplicar ordenación si existe + + if (isset($filters['order']) && is_array($filters['order'])) { foreach ($filters['order'] as $field => $direction) { if (in_array(strtolower($direction), ['asc', 'desc'])) { @@ -81,7 +89,6 @@ class ClientRepository extends AbstractRepository } } - // Aplicar paginación if (isset($filters['page']) && isset($filters['itemsPerPage'])) { $page = max(1, (int) $filters['page']); $itemsPerPage = max(1, (int) $filters['itemsPerPage']); @@ -108,7 +115,6 @@ class ClientRepository extends AbstractRepository $path = $result['path'] . '/%'; - // Obtener las unidades organizativas descendientes $query = $entityManager->createQuery( 'SELECT o.id FROM App\Entity\OrganizationalUnit o WHERE o.id = :id OR o.path LIKE :path' ) @@ -117,17 +123,15 @@ class ClientRepository extends AbstractRepository $unitIds = array_column($query->getArrayResult(), 'id'); - // Contar clientes sin paginación $qb = $entityManager->createQueryBuilder(); $qb->select('COUNT(c.id)') ->from('App\Entity\Client', 'c') ->where('c.organizationalUnit IN (:unitIds)') ->setParameter('unitIds', $unitIds); - // Aplicar los mismos filtros que en `findClientsByOrganizationalUnitAndDescendants` foreach ($filters as $key => $value) { if ($key === 'order' || $key === 'page' || $key === 'itemsPerPage' || $key === 'organizationalUnit.id') { - continue; // No son filtros de búsqueda + continue; } if ($key === 'exists') { @@ -138,6 +142,15 @@ class ClientRepository extends AbstractRepository $qb->andWhere("c.$field IS NULL"); } } + } elseif ($key === 'name') { + $qb->andWhere("c.name LIKE :name") + ->setParameter('name', "%$value%"); + } elseif ($key === 'query') { + $qb->andWhere($qb->expr()->orX( + $qb->expr()->like('c.name', ':searchQuery'), + $qb->expr()->like('c.ip', ':searchQuery'), + $qb->expr()->like('c.mac', ':searchQuery') + ))->setParameter('searchQuery', "%$value%"); } else { $qb->andWhere("c.$key = :$key")->setParameter($key, $value); }