src/Repository/UserRepository.php line 36

Open in your IDE?
  1. <?php
  2. namespace App\Repository;
  3. use App\Entity\User;
  4. use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
  5. use Doctrine\ORM\EntityManagerInterface;
  6. use Doctrine\Persistence\ManagerRegistry;
  7. /**
  8.  * @method User|null find($id, $lockMode = null, $lockVersion = null)
  9.  * @method User|null findOneBy(array $criteria, array $orderBy = null)
  10.  * @method User[]    findAll()
  11.  * @method User[]    findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
  12.  */
  13. class UserRepository extends ServiceEntityRepository
  14. {
  15.     private $entityManager;
  16.     public function __construct(ManagerRegistry $registryEntityManagerInterface $entityManager)
  17.     {
  18.         parent::__construct($registryUser::class);
  19.         $this->entityManager $entityManager;
  20.     }
  21.     public function saveUser($user):User
  22.     {
  23.         $this->entityManager->persist($user);
  24.         $this->entityManager->flush();
  25.         return $user;
  26.     }
  27.     public function findOneByUsernameOrEmail($value): ?User
  28.     {
  29.         return $this->createQueryBuilder('u')
  30.             ->andWhere('u.email = :val or u.username = :val')
  31.             ->setParameter('val'$value)
  32.             ->getQuery()
  33.             ->getOneOrNullResult();
  34.     }
  35.    
  36.     public function changeValidite(User $user){
  37.         if ($user->isValid())
  38.         {
  39.             $user->setValid(false);
  40.         }
  41.         else
  42.         {
  43.             if((!$user->getFechaExpiracionClave()) or 
  44.                 ($user->getFechaExpiracionClave() > (new \DateTime('now'))))
  45.             {
  46.                 $user->setValid(true);
  47.             }
  48.         }
  49.         $this->entityManager->persist($user);
  50.         $this->entityManager->flush();
  51.         return $user;
  52.     }
  53.     public function delete(User $user){
  54.         $user->setDeleted(true);
  55.         $this->entityManager->persist($user);
  56.         $this->entityManager->flush();
  57.         return $user;
  58.     }
  59.     public function findClavesExpiradas()
  60.     {
  61.         $fecha = (new \DateTime('today'));
  62.         return $this->createQueryBuilder("q")
  63.             ->andWhere("q.valid = 1")
  64.             ->andWhere("q.fechaExpiracionClave IS NOT NULL")
  65.             ->andWhere("q.fechaExpiracionClave <= :fecha")
  66.             ->setParameter('fecha'$fecha)
  67.             ->getQuery()
  68.             ->getResult()
  69.         ;
  70.     }
  71.     public function buscarEjecutivaPorCliente($clienteId): ?User
  72. {
  73.     // Crear una conexión directa a la base de datos
  74.     $conn $this->getEntityManager()->getConnection();
  75.     // Consulta SQL para buscar la ejecutiva en la tabla `ejecutiva_cliente`
  76.     $sql '
  77.         SELECT u.*
  78.         FROM user u
  79.         INNER JOIN ejecutiva_cliente ec ON u.id = ec.ejecutiva_id
  80.         WHERE ec.cliente_id = :clienteId
  81.         AND u.es_ejecutiva = 1
  82.         LIMIT 1
  83.     ';
  84.     // Preparar y ejecutar la consulta
  85.     $stmt $conn->prepare($sql);
  86.     $result $stmt->executeQuery(['clienteId' => $clienteId])->fetchAssociative();
  87.     // Si se encuentra un resultado, retornar el objeto User
  88.     if ($result) {
  89.         return $this->getEntityManager()->getRepository(User::class)->find($result['id']);
  90.     }
  91.     // Retornar null si no se encuentra una ejecutiva
  92.     return null;
  93. }
  94.     public function getClientesPorEjecutiva(User $ejecutiva): array
  95. {
  96.     $qb $this->createQueryBuilder('u')
  97.         ->select('c.id')
  98.         ->innerJoin('u.clientes''c'// Relación entre User y Cliente
  99.         ->where('u.id = :ejecutivaId')
  100.         ->setParameter('ejecutivaId'$ejecutiva->getId());
  101.     return $qb->getQuery()->getArrayResult();
  102. }
  103.     public function findClavesPorExpirar($dias)
  104.     {
  105.         $interval = new \DateInterval('P'.$dias.'D');
  106.         $fecha_desde = (new \DateTime('today'));
  107.         $fecha_hasta = (new \DateTime('today'))->add($interval);
  108.         $interval2 = new \DateInterval('P1D');
  109.         $interval2->invert 1;
  110.         $fecha_notificacion = (new \DateTime('today'))->add($interval2);
  111.         return $this->createQueryBuilder("q")
  112.             ->andWhere("q.valid = 1")
  113.             ->andWhere("q.fechaExpiracionClave IS NOT NULL")
  114.             ->andWhere("q.fechaExpiracionClave >= :fecha_desde")
  115.             ->andWhere("q.fechaExpiracionClave <= :fecha_hasta")
  116.             ->andWhere("q.fechaNotificacionExpiracionClave IS NULL OR q.fechaNotificacionExpiracionClave < :fecha_notificacion")
  117.             ->setParameter('fecha_desde'$fecha_desde)
  118.             ->setParameter('fecha_hasta'$fecha_hasta)
  119.             ->setParameter('fecha_notificacion'$fecha_notificacion)
  120.             ->getQuery()
  121.             ->getResult()
  122.         ;
  123.     }
  124. }