src/Repository/FluxoRepository.php line 49

  1. <?php
  2. namespace App\Repository;
  3. use App\Entity\Fluxo;
  4. use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
  5. use Doctrine\Persistence\ManagerRegistry;
  6. /**
  7.  * @extends ServiceEntityRepository<Fluxo>
  8.  *
  9.  * @method Fluxo|null find($id, $lockMode = null, $lockVersion = null)
  10.  * @method Fluxo|null findOneBy(array $criteria, array $orderBy = null)
  11.  * @method Fluxo[]    findAll()
  12.  * @method Fluxo[]    findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
  13.  */
  14. class FluxoRepository extends ServiceEntityRepository
  15. {
  16.     public function __construct(ManagerRegistry $registry)
  17.     {
  18.         parent::__construct($registryFluxo::class);
  19.     }
  20.     
  21.     // Método para buscar o Fluxo com todas as relações
  22.     public function findWithAllRelations(int $id)
  23.     {
  24.         return $this->createQueryBuilder('f')
  25.             ->leftJoin('f.user''u')
  26.             ->leftJoin('f.cliente''c')
  27.             ->leftJoin('f.etapas''e')
  28.             ->leftJoin('f.caixas''ca')
  29.             ->addSelect('u''c''e''ca'// Seleciona as relações
  30.             ->where('f.id = :id')
  31.             ->setParameter('id'$id)
  32.             ->getQuery()
  33.             ->getOneOrNullResult(); // Retorna um único resultado ou null
  34.     }
  35.     public function fluxosAbertosComMaiorPrazo(): array
  36.     {
  37.         return $this->createQueryBuilder('f')
  38.             ->select('f, MAX(e.prazo) AS prazo')
  39.             ->join('f.etapas''e')
  40.             ->join('f.cliente''c')
  41.             ->where('e.updatedAt IS NULL')
  42.             ->groupBy('f.id')
  43.             ->orderBy('prazo''ASC')       // 1️⃣ ordena pela data
  44.             ->addOrderBy('c.nome''ASC')   // 2️⃣ se a data for igual, ordena pelo cliente
  45.             ->getQuery()
  46.             ->getResult();
  47.     }
  48.     
  49.     
  50.     
  51.     public function findMes()
  52.     {
  53.         $inicioMes = new \DateTime('first day of this month 00:00:00');
  54.         $fimMes    = new \DateTime('last day of this month 23:59:59');
  55.         return $this->createQueryBuilder('f')
  56.             ->leftJoin('f.user''u')
  57.             ->leftJoin('f.cliente''c')
  58.             ->leftJoin('f.etapas''e')
  59.             ->leftJoin('f.caixas''ca')
  60.             ->addSelect('u''c''e''ca')
  61.             ->andWhere('f.createdAt BETWEEN :inicioMes AND :fimMes')
  62.             ->setParameter('inicioMes'$inicioMes)
  63.             ->setParameter('fimMes'$fimMes)
  64.             ->getQuery()
  65.             ->getResult();
  66.     }
  67. //    /**
  68. //     * @return Fluxo[] Returns an array of Fluxo objects
  69. //     */
  70. //    public function findByExampleField($value): array
  71. //    {
  72. //        return $this->createQueryBuilder('f')
  73. //            ->andWhere('f.exampleField = :val')
  74. //            ->setParameter('val', $value)
  75. //            ->orderBy('f.id', 'ASC')
  76. //            ->setMaxResults(10)
  77. //            ->getQuery()
  78. //            ->getResult()
  79. //        ;
  80. //    }
  81. //    public function findOneBySomeField($value): ?Fluxo
  82. //    {
  83. //        return $this->createQueryBuilder('f')
  84. //            ->andWhere('f.exampleField = :val')
  85. //            ->setParameter('val', $value)
  86. //            ->getQuery()
  87. //            ->getOneOrNullResult()
  88. //        ;
  89. //    }
  90. }