<?php
namespace App\Repository;
use App\Entity\Clients;
use App\Service\Securizer;
use Doctrine\ORM\ORMException;
use Doctrine\ORM\QueryBuilder;
use Doctrine\ORM\OptimisticLockException;
use Doctrine\Persistence\ManagerRegistry;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
/**
* @method Clients|null find($id, $lockMode = null, $lockVersion = null)
* @method Clients|null findOneBy(array $criteria, array $orderBy = null)
* @method Clients[] findAll()
* @method Clients[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
*/
class ClientsRepository extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, Clients::class);
}
/**
* @throws ORMException
* @throws OptimisticLockException
*/
public function add(Clients $entity, bool $flush = true): void
{
$this->_em->persist($entity);
if ($flush) {
$this->_em->flush();
}
}
/**
* @throws ORMException
* @throws OptimisticLockException
*/
public function remove(Clients $entity, bool $flush = true): void
{
$this->_em->remove($entity);
if ($flush) {
$this->_em->flush();
}
}
protected function genericRequestOrder(QueryBuilder $queryBuilder)
{
$response = $queryBuilder->select('c')
->getQuery()
->getResult();
return $response;
}
public function findClientTous($user, Securizer $securizer): array
{
if ($securizer->isGranted($user, "ROLE_TECH"))
$clients = $this->findAll();
else
$clients = $this->findby(['id' => $user->getIdClient()->getId()]);
return $clients;
}
//récupère la liste des client accessible a l'utilisateur et Actif
public function findClientActif($user, Securizer $securizer): array
{
if ($securizer->isGranted($user, "ROLE_TECH"))
$clients = $this->findby(['archiver' => false]);
else
$clients = $this->findby(['id' => $user->getIdClient()->getId()]);
return $clients;
}
//récupère la liste des client accessible a l'utilisateur et Archiver
public function findClientArchiver($user, Securizer $securizer): array
{
if ($securizer->isGranted($user, "ROLE_TECH"))
$clients = $this->findby(['archiver' => true]);
else
$clients = $this->findby(['id' => $user->getIdClient()->getId()]);
return $clients;
}
public function globalSearch(String $search, $user, Securizer $securizer): array
{
if ($securizer->isGranted($user, "ROLE_TECH")) {
$queryBuilder = ($this->createQueryBuilder('c')
->where('c.nom LIKE :search')
->andWhere('c.archiver = false')
->setParameter('search', '%' . $search . '%')
);
}
return $this->genericRequestOrder($queryBuilder);
}
}