src/Repository/OffreEmploiRepository.php line 157

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. /*
  4.  * Copyright (C) Office National de Publication et de Communication - All Rights Reserved
  5.  *
  6.  * Unauthorized copying of this file, via any medium is strictly prohibited by law
  7.  * This file is proprietary and confidential
  8.  */
  9. namespace App\Repository;
  10. use DateTime;
  11. use App\Entity\OffreEmploi;
  12. use App\Common\LieuInterface;
  13. use App\Entity\Etablissement;
  14. use Doctrine\ORM\QueryBuilder;
  15. use Doctrine\Persistence\ManagerRegistry;
  16. use App\Repository\Helper\LieuFilterTrait;
  17. use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
  18. /**
  19.  * @method null|OffreEmploi find($id, $lockMode = null, $lockVersion = null)
  20.  * @method null|OffreEmploi findOneBy(array $criteria, array $orderBy = null)
  21.  * @method OffreEmploi[]    findAll()
  22.  * @method OffreEmploi[]    findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
  23.  */
  24. final class OffreEmploiRepository extends ServiceEntityRepository
  25. {
  26.     use LieuFilterTrait;
  27.     
  28.     public function __construct(ManagerRegistry $registry)
  29.     {
  30.         parent::__construct($registryOffreEmploi::class);
  31.     }
  32.     public function createQueryBuilderClientsOnly($alias$indexBy null): QueryBuilder
  33.     {
  34.         $builder $this->createQueryBuilder($alias$indexBy);
  35.         return $builder
  36.             ->innerJoin("${alias}.etablissement"'etablissement')
  37.             ->andWhere(
  38.                 $builder->expr()->orX(
  39.                     $builder->expr()->eq('etablissement.droitPageWeb'true),
  40.                     $builder->expr()->eq('etablissement.droitForfaitGX'true)
  41.                 )
  42.             )
  43.             ->orderBy("${alias}.dateCreation"'DESC');
  44.     }
  45.     public function countDepuis(DateTime $depuis, array $idsSauf = []): int
  46.     {
  47.         $builder $this->createQueryBuilderClientsOnly('o');
  48.         $builder
  49.             ->select($builder->expr()->count('o'))
  50.             ->where('o.dateCreation >= :depuis')
  51.             ->setParameter('depuis'$depuis);
  52.         if ($idsSauf) {
  53.             $builder->andWhere($builder->expr()->notIn('o.id'$idsSauf));
  54.         }
  55.         return (int) $builder
  56.             ->getQuery()
  57.             ->getSingleScalarResult();
  58.     }
  59.     public function findMisEnEvidence(): ?OffreEmploi
  60.     {
  61.         return $this->findOneBy([], ['dateCreation' => 'DESC']);
  62.     }
  63.     public function findDistante(string $idDistantEtablissement $etablissement): ?OffreEmploi
  64.     {
  65.         return $this
  66.             ->findOneBy([
  67.                 'idDistant' => $idDistant,
  68.                 'etablissement' => $etablissement,
  69.             ]);
  70.     }
  71.     public function getLibelles(): array
  72.     {
  73.         $query $this->createQueryBuilder('oe');
  74.         $this->filterQueryWithValidOnly('oe'$query);
  75.         $result $query
  76.             ->select('oe.libelle')
  77.             ->groupBy('oe.libelle')
  78.             ->andWhere($query->expr()->isNotNull('oe.libelle'))
  79.             ->getQuery()
  80.             ->getScalarResult();
  81.         return array_column($result'libelle');
  82.     }
  83.     public function filterQueryWithValidOnly(string $aliasQueryBuilder $queryBuilder): void
  84.     {
  85.         $queryBuilder
  86.             ->andWhere(
  87.                 $queryBuilder->expr()->orX(
  88.                     $queryBuilder->expr()->andX(
  89.                         $queryBuilder->expr()->isNull("${alias}.dateValidite"),
  90.                         $queryBuilder->expr()->gte("${alias}.dateActualisation"':min_actualisation')
  91.                     ),
  92.                     $queryBuilder->expr()->gte("${alias}.dateValidite"':now')
  93.                 )
  94.             )
  95.             ->setParameter(':now', new DateTime())
  96.             ->setParameter(':min_actualisation', (new DateTime())->modify('-3 months'));
  97.     }
  98.     /**
  99.      * @return OffreEmploi[] Returns an array of OffreEmploi objects
  100.      */
  101.     public function getLast($limit 3)
  102.     {
  103.         $builder $this->createQueryBuilder('oe');
  104.         $builder
  105.             ->innerJoin('oe.etablissement''etablissement')
  106.             ->andWhere('oe.etablissement IS NOT NULL')
  107.             ->leftJoin('oe.etablissement''e')
  108.             ->addSelect('e')
  109.             ->leftJoin('e.gestionnaire''g')
  110.             ->addSelect('g')
  111.             ->leftJoin("g.texteReferencement"'gtexteReferencement')
  112.             ->addSelect('gtexteReferencement')
  113.             
  114.             ->leftJoin("e.ville"'ville')
  115.             ->addSelect('ville')
  116.             ->leftJoin('ville.coordonnees''villeCoordonnees')
  117.             ->addSelect('villeCoordonnees')
  118.             ->leftJoin('ville.departement''departement')
  119.             ->addSelect('departement')
  120.             ->leftJoin('departement.coordonnees''departementCoordonnees')
  121.             ->addSelect('departementCoordonnees')
  122.             ->leftJoin('departement.ancienneRegion''ancienneRegion')
  123.             ->addSelect('ancienneRegion')
  124.             ->leftJoin('ancienneRegion.region''region')
  125.             ->addSelect('region')
  126.             ->leftJoin('region.pays''pays')
  127.             ->addSelect('pays')
  128.             ->leftJoin("e.categoriePrimaire"'categoriePrimaire')
  129.             ->addSelect('categoriePrimaire')
  130.             ->leftJoin("e.texteReferencement"'texteReferencement')
  131.             ->addSelect('texteReferencement')
  132.             ->setMaxResults($limit)
  133.             ->orderBy('oe.dateCreation''DESC')
  134.         ;
  135.         return $builder
  136.             ->getQuery()
  137.             ->getResult();   
  138.         
  139.         
  140.         return $this->createQueryBuilder('oe')
  141.             ->andWhere('oe.etablissement IS NOT NULL')
  142.             ->orderBy('oe.dateCreation''DESC')
  143.             ->setMaxResults(3)
  144.             ->getQuery()
  145.             ->getResult()
  146.         ;
  147.     }
  148.     public function findByLieu(LieuInterface $lieuint $limit 2, array $filter null$types null): array
  149.     {
  150.         $builder $this->createQueryBuilder('oe');
  151.         $builder
  152.             ->innerJoin('oe.etablissement''etablissement')
  153.             ->innerJoin('etablissement.ville''ville')
  154.             ->innerJoin('ville.departement''departement')
  155.             ->innerJoin('departement.ancienneRegion''ancienneRegion')
  156.             ->innerJoin('ancienneRegion.region''region')
  157.             ->innerJoin('oe.profil''offreEmploiProfil')
  158.             ->addSelect('offreEmploiProfil')
  159.             ->orderBy('oe.dateActualisation''DESC');
  160.         if ($limit 0)
  161.             $builder->setMaxResults($limit);
  162.         
  163.         if ($lieu->getSlug() !="default") {
  164.             $this->addWhereLieuToQuery($builder$lieu);
  165.         }
  166.         if ($filter) {
  167.             $builder->andWhere($builder->expr()->in('oe.etablissement'$filter));
  168.         }
  169.         if ($types) {
  170.             $builder->andWhere($builder->expr()->in('etablissement.type'$types));
  171.         }
  172.         return $builder
  173.             ->getQuery()
  174.             ->getResult();
  175.     }
  176. }