<?php
namespace App\Repository;
use App\Entity\RapportCentrale;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;
/**
* @method RapportCentrale|null find($id, $lockMode = null, $lockVersion = null)
* @method RapportCentrale|null findOneBy(array $criteria, array $orderBy = null)
* @method RapportCentrale[] findAll()
* @method RapportCentrale[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
*/
class RapportCentraleRepository extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, RapportCentrale::class);
}
public function search($isPerteProduction=false,$centrale = false,$suivi = false,$interventionObject=null,$data, $page = 0, $max = NULL, $getResult = true, $columnOrder = NULL, $dirOrder = NULL,$count=false) {
$qb = $this->createQueryBuilder('c');
$query = isset($data['query']) && $data['query'] ? $data['query'] : null;
$qb->leftJoin('c.project','project');
$qb->andWhere('project.name like :query or c.name like :query ')
->setParameter('query', "%" . $query . "%")
;
if($centrale){
$qb->andWhere('project.id in (:centrale)')
->setParameter('centrale', $centrale);
}
if($suivi === "0" or $suivi){
$qb->andWhere('c.isSuiviNecessaire = :suivi')
->setParameter('suivi', $suivi);
}
if($isPerteProduction === "0" or $isPerteProduction){
$qb->andWhere('c.isPerteProduction = :isPerteProduction')
->setParameter('isPerteProduction', $isPerteProduction);
}
if($interventionObject){
$qb->andWhere('c.objectIntervention = :interventionObject')
->setParameter('interventionObject', $interventionObject);
}
if(isset($data['centraleToken']) && $data['centraleToken'] && $data['centraleToken']!==0){
$qb->andWhere('project.token = :tokenCentrale ')
->setParameter('tokenCentrale', $data['centraleToken'])
;
}
$spvsTab = isset($data['spvsTab']) && $data['spvsTab'] ? $data['spvsTab'] : null;
$user = isset($data['user']) && $data['user'] ? $data['user'] : null;
if($user and (in_array("ROLE_AUDITEUR", $user->getRoles()) or in_array("ROLE_COMPTABLE", $user ->getRoles()))){
$qb->andWhere('c.spv in (:spvsTab)')
->setParameter('spvsTab',$spvsTab);
}
$qb->andWhere('c.isArchived = 0 or c.isArchived is null');
if($count){
$qb->select('count(DISTINCT c.id) as result');
return $qb->getQuery()->getOneOrNullResult();
}else{
$qb->select('DISTINCT c');
if ($columnOrder) {
if($columnOrder == 'name'){
$qb->orderBy("c.$columnOrder", $dirOrder);
}
if($columnOrder == 'project'){
$qb->orderBy("c.project", $dirOrder);
}
if($columnOrder == 'objectIntervention'){
$qb->orderBy("c.objectIntervention", $dirOrder);
}
if($columnOrder == 'dateIntervention'){
$qb->orderBy("c.dateIntervention", $dirOrder);
}
if($columnOrder == 'isSuiviNecessaire'){
$qb->orderBy("c.isSuiviNecessaire", $dirOrder);
}
if($columnOrder == 'createdAt'){
$qb->orderBy("c.createdAt", $dirOrder);
}
}
if ($max) {
$preparedQuery = $qb->getQuery()
->setMaxResults($max)
->setFirstResult($page * $max)
;
} else {
$preparedQuery = $qb->getQuery();
}
return $getResult ? $preparedQuery->getResult() : $preparedQuery;
}
}
public function findAllRapportsByTokens($tokens){
$qb = $this->createQueryBuilder('c');
$qb->andWhere('c.token in (:tokens)')
->setParameter('tokens',$tokens);
return $qb->getQuery()->getResult();
}
public function getRapportPreventiveByAnnee($project,$annee) {
$qb = $this->createQueryBuilder('c');
$qb->leftJoin('c.project','project');
$qb->andWhere('project.id = :idProject')
->setParameter('idProject', $project->getId());
$qb->andWhere('c.objectIntervention = :interventionObject')
->setParameter('interventionObject', RapportCentrale::INTERVENTION_PREVENTIVE);
$qb->andWhere('c.dateIntervention like :annee')
->setParameter('annee', '%'.$annee.'%');
return $qb->getQuery()->getResult();
}
}