Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
16.03% |
21 / 131 |
|
28.57% |
2 / 7 |
CRAP | |
0.00% |
0 / 1 |
AnalyseImpact | |
16.03% |
21 / 131 |
|
28.57% |
2 / 7 |
458.61 | |
0.00% |
0 / 1 |
getModelClass | |
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
1 | |||
count | |
0.00% |
0 / 3 |
|
0.00% |
0 / 1 |
2 | |||
findPaginated | |
0.00% |
0 / 39 |
|
0.00% |
0 / 1 |
30 | |||
findOneById | |
100.00% |
20 / 20 |
|
100.00% |
1 / 1 |
1 | |||
findOneByIdWithoutInvisibleScenarios | |
0.00% |
0 / 12 |
|
0.00% |
0 / 1 |
2 | |||
addTableSearches | |
0.00% |
0 / 24 |
|
0.00% |
0 / 1 |
56 | |||
addTableOrder | |
0.00% |
0 / 32 |
|
0.00% |
0 / 1 |
132 |
1 | <?php |
2 | |
3 | declare(strict_types=1); |
4 | |
5 | namespace App\Infrastructure\ORM\AIPD\Repository; |
6 | |
7 | use App\Application\Doctrine\Repository\CRUDRepository; |
8 | use App\Application\Traits\RepositoryUtils; |
9 | use App\Domain\AIPD\Model; |
10 | use Doctrine\Common\Collections\Collection; |
11 | use Doctrine\ORM\QueryBuilder; |
12 | use Doctrine\ORM\Tools\Pagination\Paginator; |
13 | |
14 | class AnalyseImpact extends CRUDRepository implements \App\Domain\AIPD\Repository\AnalyseImpact |
15 | { |
16 | use RepositoryUtils; |
17 | |
18 | protected function getModelClass(): string |
19 | { |
20 | return Model\AnalyseImpact::class; |
21 | } |
22 | |
23 | public function count(array $criteria = []) |
24 | { |
25 | $qb = $this->createQueryBuilder(); |
26 | |
27 | $qb->select('COUNT(o.id)'); |
28 | |
29 | return $qb->getQuery()->getSingleScalarResult(); |
30 | } |
31 | |
32 | public function findPaginated($firstResult, $maxResults, $orderColumn, $orderDir, $searches, $criteria = []) |
33 | { |
34 | $qb = $this->createQueryBuilder(); |
35 | |
36 | $qb |
37 | ->leftJoin('o.conformiteTraitement', 'conformiteTraitement') |
38 | ->addSelect('conformiteTraitement') |
39 | ->leftJoin('conformiteTraitement.traitement', 'traitement') |
40 | ->addSelect('traitement') |
41 | ->leftJoin('traitement.collectivity', 'collectivity') |
42 | ->addSelect('collectivity') |
43 | ->leftJoin('o.avisReferent', 'avisReferent') |
44 | ->addSelect('avisReferent') |
45 | ->leftJoin('o.avisDpd', 'avisDpd') |
46 | ->addSelect('avisDpd') |
47 | ->leftJoin('o.avisRepresentant', 'avisRepresentant') |
48 | ->addSelect('avisRepresentant') |
49 | ->leftJoin('o.avisResponsable', 'avisResponsable') |
50 | ->addSelect('avisResponsable') |
51 | ->andWhere('collectivity.hasModuleConformiteTraitement=1') |
52 | ; |
53 | if (\array_key_exists('collectivity', $criteria) && $criteria['collectivity'] instanceof Collection) { |
54 | $qb->andWhere( |
55 | $qb->expr()->in('traitement.collectivity', ':collectivities') |
56 | ) |
57 | ->setParameter('collectivities', $criteria['collectivity']) |
58 | ; |
59 | unset($criteria['collectivity']); |
60 | } |
61 | |
62 | if (\array_key_exists('collectivity', $criteria)) { |
63 | $qb |
64 | ->andWhere('traitement.collectivity = :collectivity') |
65 | ->setParameter('collectivity', $criteria['collectivity']) |
66 | ; |
67 | unset($criteria['collectivity']); |
68 | } |
69 | |
70 | foreach ($criteria as $key => $value) { |
71 | $this->addWhereClause($qb, $key, $value); |
72 | } |
73 | |
74 | $this->addTableOrder($qb, $orderColumn, $orderDir); |
75 | $this->addTableSearches($qb, $searches); |
76 | |
77 | $qb = $qb->getQuery(); |
78 | $qb->setFirstResult($firstResult); |
79 | $qb->setMaxResults($maxResults); |
80 | |
81 | return new Paginator($qb); |
82 | } |
83 | |
84 | public function findOneById(string $id) |
85 | { |
86 | return $this->createQueryBuilder() |
87 | ->leftJoin('o.criterePrincipeFondamentaux', 'c') |
88 | ->addSelect('c') |
89 | ->leftJoin('o.questionConformites', 'q') |
90 | ->addSelect('q') |
91 | ->leftJoin('o.scenarioMenaces', 's') |
92 | ->addSelect('s') |
93 | ->leftJoin('o.avisReferent', 'avisReferent') |
94 | ->addSelect('avisReferent') |
95 | ->leftJoin('o.avisDpd', 'avisDpd') |
96 | ->addSelect('avisDpd') |
97 | ->leftJoin('o.avisRepresentant', 'avisRepresentant') |
98 | ->addSelect('avisRepresentant') |
99 | ->leftJoin('o.avisResponsable', 'avisResponsable') |
100 | ->addSelect('avisResponsable') |
101 | ->andWhere('o.id = :id') |
102 | ->setParameter('id', $id) |
103 | ->getQuery() |
104 | ->getOneOrNullResult() |
105 | ; |
106 | |
107 | return $qb; |
108 | } |
109 | |
110 | public function findOneByIdWithoutInvisibleScenarios(string $id) |
111 | { |
112 | return $this->createQueryBuilder() |
113 | ->leftJoin('o.criterePrincipeFondamentaux', 'c', 'WITH', 'c.isVisible = 1') |
114 | ->addSelect('c') |
115 | ->leftJoin('o.questionConformites', 'q') |
116 | ->addSelect('q') |
117 | ->leftJoin('o.scenarioMenaces', 's', 'WITH', 's.isVisible = 1') |
118 | ->addSelect('s') |
119 | ->andWhere('o.id = :id') |
120 | ->setParameter('id', $id) |
121 | ->getQuery() |
122 | ->getOneOrNullResult() |
123 | ; |
124 | } |
125 | |
126 | private function addTableSearches(QueryBuilder $queryBuilder, $searches) |
127 | { |
128 | foreach ($searches as $columnName => $search) { |
129 | switch ($columnName) { |
130 | case 'traitement': |
131 | $queryBuilder->andWhere('traitement.name LIKE :traitement_name') |
132 | ->setParameter('traitement_name', '%' . $search . '%'); |
133 | break; |
134 | case 'service': |
135 | $queryBuilder |
136 | ->leftJoin('traitement.service', 'service') |
137 | ->andWhere('service.name LIKE :service_name') |
138 | ->setParameter('service_name', '%' . $search . '%'); |
139 | break; |
140 | case 'dateDeCreation': |
141 | $queryBuilder->andWhere('o.createdAt BETWEEN :created_start_date AND :created_finish_date') |
142 | ->setParameter('created_start_date', date_create_from_format('d/m/y', substr($search, 0, 8))->format('Y-m-d 00:00:00')) |
143 | ->setParameter('created_finish_date', date_create_from_format('d/m/y', substr($search, 11, 8))->format('Y-m-d 23:59:59')); |
144 | break; |
145 | case 'dateDeValidation': |
146 | $queryBuilder->andWhere('o.dateValidation BETWEEN :validation_start_date AND :validation_finish_date') |
147 | ->setParameter('validation_start_date', date_create_from_format('d/m/y', substr($search, 0, 8))->format('Y-m-d 00:00:00')) |
148 | ->setParameter('validation_finish_date', date_create_from_format('d/m/y', substr($search, 11, 8))->format('Y-m-d 23:59:59')); |
149 | break; |
150 | case 'modele': |
151 | $this->addWhereClause($queryBuilder, 'modeleAnalyse', '%' . $search . '%', 'LIKE'); |
152 | break; |
153 | } |
154 | } |
155 | } |
156 | |
157 | private function addTableOrder(QueryBuilder $queryBuilder, $orderColumn, $orderDir) |
158 | { |
159 | switch ($orderColumn) { |
160 | case 'traitement': |
161 | $queryBuilder->addOrderBy('traitement.name', $orderDir); |
162 | break; |
163 | case 'service': |
164 | $queryBuilder |
165 | ->leftJoin('traitement.service', 'serviceorder') |
166 | ->addOrderBy('serviceorder.name', $orderDir); |
167 | break; |
168 | case 'dateDeCreation': |
169 | $queryBuilder->addOrderBy('o.createdAt', $orderDir); |
170 | break; |
171 | case 'dateDeValidation': |
172 | $queryBuilder->addOrderBy('o.dateValidation', $orderDir); |
173 | break; |
174 | case 'modele': |
175 | $queryBuilder->addOrderBy('o.modeleAnalyse', $orderDir); |
176 | break; |
177 | case 'collectivite': |
178 | $queryBuilder->addOrderBy('collectivity.name', $orderDir); |
179 | break; |
180 | case 'avisReferent': |
181 | $queryBuilder->addOrderBy('avisReferent.reponse', $orderDir); |
182 | break; |
183 | case 'avisDpd': |
184 | $queryBuilder->addOrderBy('avisDpd.reponse', $orderDir); |
185 | break; |
186 | case 'avisRepresentant': |
187 | $queryBuilder->addOrderBy('avisRepresentant.reponse', $orderDir); |
188 | break; |
189 | case 'avisResponsable': |
190 | $queryBuilder->addOrderBy('avisResponsable.reponse', $orderDir); |
191 | break; |
192 | } |
193 | } |
194 | } |