<?php
namespace App\Repository;
use App\Entity\PrmEnedis;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;
/**
* @method PrmEnedis|null find($id, $lockMode = null, $lockVersion = null)
* @method PrmEnedis|null findOneBy(array $criteria, array $orderBy = null)
* @method PrmEnedis[] findAll()
* @method PrmEnedis[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
*/
class PrmEnedisRepository extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, PrmEnedis::class);
}
public function getByPrmAndDate($numeroCardiPrm,$prm,$dateStr) {
$qb = $this->createQueryBuilder('c');
$qb->andWhere('c.numeroCardiPrm = :numeroCardiPrm')
->setParameter('numeroCardiPrm', $numeroCardiPrm->getId());
$qb->andWhere('c.prm = :prm')
->setParameter('prm', $prm);
$qb->andWhere('c.dateValue like :dateValue')
->setParameter('dateValue','%'.$dateStr.'%');
return $qb->getQuery()->getResult();
}
public function search($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;
$dateStartEnedis = isset($data['dateStartEnedis']) && $data['dateStartEnedis'] ? new \DateTime($data['dateStartEnedis']) : null;
$dateEndEnedis = isset($data['dateEndEnedis']) && $data['dateEndEnedis'] ? new \DateTime($data['dateEndEnedis']) : null;
$statusEnedis = isset($data['statusEnedis']) && $data['statusEnedis'] ? $data['statusEnedis'] : null;
$qb->leftJoin('c.project','project');
$qb->andWhere('project.name like :query or c.prm like :query ')
->setParameter('query', "%" . $query . "%");
if($dateStartEnedis && $dateEndEnedis){
$qb->andWhere('c.dateValue >= :dateStartEnedis')
->setParameter('dateStartEnedis', $dateStartEnedis->format('Y-m-d').' 00:00:00');
$qb->andWhere('c.dateValue <= :dateEndEnedis')
->setParameter('dateEndEnedis', $dateEndEnedis->format('Y-m-d').' 23:59:59');
}else{
$dateNow = new \DateTime();
$dateNow->modify('-1 Day');
$qb->andWhere('c.dateValue like :dateStartEnedis')
->setParameter('dateStartEnedis', '%'.$dateNow->format('Y-m-d').'%');
}
if($statusEnedis == 1){
$qb->having('sumValue = 0');
}elseif ($statusEnedis == 2){
$qb->having('sumValue > 0');
}
$qb->groupBy('c.prm','project.id');
if($count){
$qb->select('c.prm ,sum(c.valeurEnedis) as sumValue');
return $qb->getQuery()->getResult();
}else{
$qb->select('c.prm, project.id as projectId, project.name as projectName ,sum(c.valeurEnedis) as sumValue');
if ($columnOrder) {
if($columnOrder == 'name'){
$qb->orderBy("c.$columnOrder", $dirOrder);
}
}
if ($max) {
$preparedQuery = $qb->getQuery()
->setMaxResults($max)
->setFirstResult($page * $max)
;
} else {
$preparedQuery = $qb->getQuery();
}
return $getResult ? $preparedQuery->getResult() : $preparedQuery;
}
}
public function getByPrmAndProject($request,$projectId,$prm) {
$dateStartEnedisStr = $request->get('dateStartEnedis');
$dateFinEnedisStr = $request->get('dateFinEnedis');
$dateStartEnedis = $dateStartEnedisStr ? new \DateTime($dateStartEnedisStr) : null;
$dateFinEnedis = $dateFinEnedisStr ? new \DateTime($dateFinEnedisStr) : null;
$qb = $this->createQueryBuilder('c');
$qb->andWhere('c.project = :projectId')
->setParameter('projectId', $projectId);
$qb->andWhere('c.prm = :prm')
->setParameter('prm', $prm);
if($dateStartEnedis && $dateFinEnedis){
$qb->andWhere('c.dateValue >= :dateStartEnedis')
->setParameter('dateStartEnedis', $dateStartEnedis->format('Y-m-d').' 00:00:00');
$qb->andWhere('c.dateValue <= :dateEndEnedis')
->setParameter('dateEndEnedis', $dateFinEnedis->format('Y-m-d').' 23:59:59');
}else{
$dateNow = new \DateTime();
$dateNow->modify('-1 Day');
$qb->andWhere('c.dateValue like :dateStartEnedis')
->setParameter('dateStartEnedis', '%'.$dateNow->format('Y-m-d').'%');
}
$qb->orderBy('c.dateValue','asc');
return $qb->getQuery()->getResult();
}
public function getByPrmAndDateSelect($dateStartEnedisStr,$dateFinEnedisStr,$prmsTab) {
$dateStartEnedis = $dateStartEnedisStr ? new \DateTime($dateStartEnedisStr) : null;
$dateFinEnedis = $dateFinEnedisStr ? new \DateTime($dateFinEnedisStr) : null;
$qb = $this->createQueryBuilder('c');
$qb->select('c.prm, project.id as projectId, project.name as projectName ,sum(c.valeurEnedis) as sumValue');
$qb->leftJoin('c.project','project');
$qb->andWhere('c.prm in (:prm)')
->setParameter('prm', $prmsTab);
if($dateStartEnedis && $dateFinEnedis){
$qb->andWhere('c.dateValue >= :dateStartEnedis')
->setParameter('dateStartEnedis', $dateStartEnedis->format('Y-m-d').' 00:00:00');
$qb->andWhere('c.dateValue <= :dateEndEnedis')
->setParameter('dateEndEnedis', $dateFinEnedis->format('Y-m-d').' 23:59:59');
}else{
$dateNow = new \DateTime();
$dateNow->modify('-1 Day');
$qb->andWhere('c.dateValue like :dateStartEnedis')
->setParameter('dateStartEnedis', '%'.$dateNow->format('Y-m-d').'%');
}
$qb->groupBy('c.prm','project.id');
// $qb->orderBy('c.dateValue','asc');
return $qb->getQuery()->getResult();
}
public function getByProjectAndDateSelect($dateStartEnedisStr=null,$dateFinEnedisStr=null,$project) {
$dateStartEnedis = $dateStartEnedisStr ? new \DateTime($dateStartEnedisStr) : null;
$dateFinEnedis = $dateFinEnedisStr ? new \DateTime($dateFinEnedisStr) : null;
$qb = $this->createQueryBuilder('c');
$qb->select('project.id as projectId, project.name as projectName ,sum(c.valeurEnedis) as sumValue');
$qb->leftJoin('c.project','project');
$qb->andWhere('project.id = :projectId')
->setParameter('projectId', $project->getId());
if($dateStartEnedis && $dateFinEnedis){
$qb->andWhere('c.dateValue >= :dateStartEnedis')
->setParameter('dateStartEnedis', $dateStartEnedis->format('Y-m-d').' 00:00:00');
$qb->andWhere('c.dateValue <= :dateEndEnedis')
->setParameter('dateEndEnedis', $dateFinEnedis->format('Y-m-d').' 23:59:59');
}else{
$dateNow = new \DateTime();
$dateNow->modify('-1 Day');
$qb->andWhere('c.dateValue like :dateStartEnedis')
->setParameter('dateStartEnedis', '%'.$dateNow->format('Y-m-d').'%');
}
$qb->groupBy('project.id');
return $qb->getQuery()->getResult();
}
}