Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 65
0.00% covered (danger)
0.00%
0 / 7
CRAP
0.00% covered (danger)
0.00%
0 / 1
ModeleAnalyse
0.00% covered (danger)
0.00%
0 / 65
0.00% covered (danger)
0.00%
0 / 7
306
0.00% covered (danger)
0.00%
0 / 1
 getModelClass
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 count
0.00% covered (danger)
0.00%
0 / 3
0.00% covered (danger)
0.00%
0 / 1
2
 findPaginated
0.00% covered (danger)
0.00%
0 / 9
0.00% covered (danger)
0.00%
0 / 1
2
 addTableOrder
0.00% covered (danger)
0.00%
0 / 12
0.00% covered (danger)
0.00%
0 / 1
30
 addTableSearches
0.00% covered (danger)
0.00%
0 / 21
0.00% covered (danger)
0.00%
0 / 1
56
 findAllByCollectivity
0.00% covered (danger)
0.00%
0 / 5
0.00% covered (danger)
0.00%
0 / 1
2
 findOneById
0.00% covered (danger)
0.00%
0 / 14
0.00% covered (danger)
0.00%
0 / 1
2
1<?php
2
3declare(strict_types=1);
4
5namespace App\Infrastructure\ORM\AIPD\Repository;
6
7use App\Application\Doctrine\Repository\CRUDRepository;
8use App\Application\Traits\RepositoryUtils;
9use App\Domain\AIPD\Model;
10use App\Domain\AIPD\Repository;
11use App\Domain\User\Repository\Collectivity;
12use Doctrine\ORM\QueryBuilder;
13use Doctrine\ORM\Tools\Pagination\Paginator;
14
15class ModeleAnalyse extends CRUDRepository implements Repository\ModeleAnalyse
16{
17    use RepositoryUtils;
18
19    protected function getModelClass(): string
20    {
21        return Model\ModeleAnalyse::class;
22    }
23
24    public function count(array $criteria = [])
25    {
26        $qb = $this->createQueryBuilder();
27
28        $qb->select('COUNT(o.id)');
29
30        return $qb->getQuery()->getSingleScalarResult();
31    }
32
33    public function findPaginated($firstResult, $maxResults, $orderColumn, $orderDir, $searches, $criteria = [])
34    {
35        $qb = $this->createQueryBuilder()
36        ->addSelect('c')
37        ->leftJoin('o.authorizedCollectivities', 'c');
38
39        $this->addTableSearches($qb, $searches);
40        $this->addTableOrder($qb, $orderColumn, $orderDir);
41
42        $qb = $qb->getQuery();
43        $qb->setFirstResult($firstResult);
44        $qb->setMaxResults($maxResults);
45
46        return new Paginator($qb);
47    }
48
49    private function addTableOrder(QueryBuilder $queryBuilder, $orderColumn, $orderDir)
50    {
51        switch ($orderColumn) {
52            case 'nom':
53                $queryBuilder->addOrderBy('o.nom', $orderDir);
54                break;
55            case 'description':
56                $queryBuilder->addOrderBy('o.description', $orderDir);
57                break;
58            case 'updatedAt':
59                $queryBuilder->addOrderBy('o.updatedAt', $orderDir);
60                break;
61            case 'createdAt':
62                $queryBuilder->addOrderBy('o.createdAt', $orderDir);
63                break;
64        }
65    }
66
67    private function addTableSearches(QueryBuilder $queryBuilder, $searches)
68    {
69        foreach ($searches as $columnName => $search) {
70            switch ($columnName) {
71                case 'nom':
72                    $this->addWhereClause($queryBuilder, 'nom', '%' . $search . '%', 'LIKE');
73                    break;
74                case 'description':
75                    $this->addWhereClause($queryBuilder, 'description', '%' . $search . '%', 'LIKE');
76                    break;
77                case 'createdAt':
78                    $queryBuilder->andWhere('o.createdAt BETWEEN :created_start_date AND :created_finish_date')
79                        ->setParameter('created_start_date', date_create_from_format('d/m/y', substr($search, 0, 8))->format('Y-m-d 00:00:00'))
80                        ->setParameter('created_finish_date', date_create_from_format('d/m/y', substr($search, 11, 8))->format('Y-m-d 23:59:59'));
81                    break;
82                case 'updatedAt':
83                    $queryBuilder->andWhere('o.updatedAt BETWEEN :updated_start_date AND :updated_finish_date')
84                        ->setParameter('updated_start_date', date_create_from_format('d/m/y', substr($search, 0, 8))->format('Y-m-d 00:00:00'))
85                        ->setParameter('updated_finish_date', date_create_from_format('d/m/y', substr($search, 11, 8))->format('Y-m-d 23:59:59'));
86                    break;
87                case 'createdAt':
88                    $queryBuilder->andWhere('o.createdAt LIKE :date')
89                        ->setParameter('date', date_create_from_format('d/m/Y', $search)->format('Y-m-d') . '%');
90                    break;
91            }
92        }
93    }
94
95    public function findAllByCollectivity(Collectivity $collectivity)
96    {
97        $qb = $this->createQueryBuilder();
98        // TODO Gestion des droits
99
100        $qb = $qb->getQuery();
101        $qb->setFirstResult(0);
102        $qb->setMaxResults(100);
103
104        return new Paginator($qb);
105    }
106
107    public function findOneById(string $id)
108    {
109        return $this->createQueryBuilder()
110            ->leftJoin('o.scenarioMenaces', 's')
111            ->addSelect('s')
112            ->leftJoin('s.mesuresProtections', 'm')
113            ->addSelect('m')
114            ->leftJoin('o.criterePrincipeFondamentaux', 'c')
115            ->addSelect('c')
116            ->leftJoin('o.questionConformites', 'q')
117            ->addSelect('q')
118            ->andWhere('o.id = :id')
119            ->setParameter('id', $id)
120            ->getQuery()
121            ->getOneOrNullResult()
122        ;
123    }
124}