<?php
namespace App\Repository;
use App\Entity\Agence;
use App\Entity\Abonnement;
use App\Repository\AbonnementRepository;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;
/**
* @method Agence|null find($id, $lockMode = null, $lockVersion = null)
* @method Agence|null findOneBy(array $criteria, array $orderBy = null)
* @method Agence[] findAll()
* @method Agence[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
*/
class AgenceRepository extends ServiceEntityRepository
{
private $aboRepo;
public function __construct(ManagerRegistry $registry, AbonnementRepository $aboRepo)
{
$this->aboRepo = $aboRepo;
parent::__construct($registry, Agence::class);
}
public function countAll($q = '')
{
$qb = $this->createQueryBuilder('a')
->select('count(a.id)');
if(!empty($q)){
$qb->andWhere('(a.denomination like :denomination or a.denomination like :denomination2)')
->setParameter('denomination', $q.'%')
->setParameter('denomination2', '%'.$q.'%');
if(preg_match("/agence\s/i",$q)){
$numero = preg_replace('/agence\s/i','',$q);
$qb->orWhere('(a.numero like :numero or a.numero like :numero2)')
->setParameter('numero', $numero.'%')
->setParameter('numero2', '%'.$numero.'%');
}
}
return $qb->getQuery()->getSingleScalarResult();
}
public function findByQuery($q = '', $orderby = "o.ref", $order = "ASC", $page = 1, $maxItems = 20){
$offset = ($page-1) *$maxItems;
$qb = $this->createQueryBuilder('a');
if(!empty($q)){
$qb->andWhere('(a.denomination like :denomination or a.denomination like :denomination2)')
->setParameter('denomination', $q.'%')
->setParameter('denomination2', '%'.$q.'%');
if(preg_match("/agence\s/i",$q)){
$numero = preg_replace('/agence\s/i','',$q);
$qb->orWhere('(a.numero like :numero or a.numero like :numero2)')
->setParameter('numero', $numero.'%')
->setParameter('numero2', '%'.$numero.'%');
}
}
return $qb
->orderBy($orderby ,$order)
->setFirstResult($offset)
->setMaxResults($maxItems)
->getQuery()
->getResult()
;
}
public function findByPeriod(){
$qb = $this->createQueryBuilder('a');
$qb->join('a.users','u')->where($qb->expr()->in('u.id',$this->aboRepo->createQueryBuilder('ab')->select('IDENTITY(ab.user)')->getDQL()));
return $qb
->getQuery()
->getResult();
}
// /**
// * @return Agence[] Returns an array of Agence objects
// */
/*
public function findByExampleField($value)
{
return $this->createQueryBuilder('a')
->andWhere('a.exampleField = :val')
->setParameter('val', $value)
->orderBy('a.id', 'ASC')
->setMaxResults(10)
->getQuery()
->getResult()
;
}
*/
/*
public function findOneBySomeField($value): ?Agence
{
return $this->createQueryBuilder('a')
->andWhere('a.exampleField = :val')
->setParameter('val', $value)
->getQuery()
->getOneOrNullResult()
;
}
*/
}