Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
7.14% |
5 / 70 |
|
14.29% |
1 / 7 |
CRAP | |
0.00% |
0 / 1 |
ConformiteTraitement | |
7.14% |
5 / 70 |
|
14.29% |
1 / 7 |
308.04 | |
0.00% |
0 / 1 |
getModelClass | |
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
1 | |||
findAllByCollectivity | |
0.00% |
0 / 11 |
|
0.00% |
0 / 1 |
2 | |||
findActiveByCollectivity | |
0.00% |
0 / 13 |
|
0.00% |
0 / 1 |
2 | |||
count | |
80.00% |
4 / 5 |
|
0.00% |
0 / 1 |
2.03 | |||
findPaginated | |
0.00% |
0 / 9 |
|
0.00% |
0 / 1 |
6 | |||
addTableOrder | |
0.00% |
0 / 13 |
|
0.00% |
0 / 1 |
30 | |||
addTableSearches | |
0.00% |
0 / 18 |
|
0.00% |
0 / 1 |
56 |
1 | <?php |
2 | |
3 | /** |
4 | * This file is part of the MADIS - RGPD Management application. |
5 | * |
6 | * @copyright Copyright (c) 2018-2019 Soluris - Solutions Numériques Territoriales Innovantes |
7 | * |
8 | * This program is free software: you can redistribute it and/or modify |
9 | * it under the terms of the GNU Affero General Public License as published by |
10 | * the Free Software Foundation, either version 3 of the License, or |
11 | * (at your option) any later version. |
12 | * |
13 | * This program is distributed in the hope that it will be useful, |
14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
16 | * GNU Affero General Public License for more details. |
17 | * |
18 | * You should have received a copy of the GNU Affero General Public License |
19 | * along with this program. If not, see <https://www.gnu.org/licenses/>. |
20 | */ |
21 | |
22 | declare(strict_types=1); |
23 | |
24 | namespace App\Infrastructure\ORM\Registry\Repository\ConformiteTraitement; |
25 | |
26 | use App\Application\Doctrine\Repository\CRUDRepository; |
27 | use App\Application\Traits\RepositoryUtils; |
28 | use App\Domain\Registry\Model; |
29 | use App\Domain\Registry\Repository; |
30 | use App\Domain\User\Model\Collectivity; |
31 | use Doctrine\ORM\QueryBuilder; |
32 | use Doctrine\ORM\Tools\Pagination\Paginator; |
33 | |
34 | class ConformiteTraitement extends CRUDRepository implements Repository\ConformiteTraitement\ConformiteTraitement |
35 | { |
36 | use RepositoryUtils; |
37 | |
38 | protected function getModelClass(): string |
39 | { |
40 | return Model\ConformiteTraitement\ConformiteTraitement::class; |
41 | } |
42 | |
43 | public function findAllByCollectivity(Collectivity $collectivity) |
44 | { |
45 | $qb = $this->createQueryBuilder(); |
46 | |
47 | $qb |
48 | ->leftJoin('o.traitement', 't') |
49 | ->andWhere($qb->expr()->eq('t.collectivity', ':collectivity')) |
50 | ->setParameter('collectivity', $collectivity) |
51 | ->orderBy('t.name') |
52 | ; |
53 | |
54 | return $qb |
55 | ->getQuery() |
56 | ->getResult() |
57 | ; |
58 | } |
59 | |
60 | public function findActiveByCollectivity(Collectivity $collectivity) |
61 | { |
62 | $qb = $this->createQueryBuilder(); |
63 | |
64 | $qb |
65 | ->leftJoin('o.traitement', 't') |
66 | ->andWhere($qb->expr()->eq('t.collectivity', ':collectivity')) |
67 | ->andWhere($qb->expr()->eq('t.active', ':active')) |
68 | ->setParameter('collectivity', $collectivity) |
69 | ->setParameter('active', true) |
70 | ->orderBy('t.name') |
71 | ; |
72 | |
73 | return $qb |
74 | ->getQuery() |
75 | ->getResult() |
76 | ; |
77 | } |
78 | |
79 | public function count(array $criteria = []) |
80 | { |
81 | $qb = $this->createQueryBuilder(); |
82 | |
83 | $qb->select('COUNT(o.id)'); |
84 | |
85 | foreach ($criteria as $key => $value) { |
86 | $this->addWhereClause($qb, $key, $value); |
87 | } |
88 | |
89 | return $qb->getQuery()->getSingleScalarResult(); |
90 | } |
91 | |
92 | public function findPaginated($firstResult, $maxResults, $orderColumn, $orderDir, $searches, $criteria = []) |
93 | { |
94 | $qb = $this->createQueryBuilder(); |
95 | |
96 | foreach ($criteria as $key => $value) { |
97 | $this->addWhereClause($qb, $key, $value); |
98 | } |
99 | |
100 | $this->addTableOrder($qb, $orderColumn, $orderDir); |
101 | $this->addTableSearches($qb, $searches); |
102 | |
103 | $qb = $qb->getQuery(); |
104 | $qb->setFirstResult($firstResult); |
105 | $qb->setMaxResults($maxResults); |
106 | |
107 | return new Paginator($qb); |
108 | } |
109 | |
110 | private function addTableOrder(QueryBuilder $queryBuilder, $orderColumn, $orderDir) |
111 | { |
112 | switch ($orderColumn) { |
113 | case 'name': |
114 | $queryBuilder->leftJoin('o.traitement', 't'); |
115 | $queryBuilder->addOrderBy('t.name', $orderDir); |
116 | break; |
117 | case 'collectivite': |
118 | $queryBuilder->addOrderBy('collectivite.name', $orderDir); |
119 | break; |
120 | case 'gestionnaire': |
121 | $queryBuilder->addOrderBy('o.manager', $orderDir); |
122 | break; |
123 | case 'createdAt': |
124 | $queryBuilder->addOrderBy('o.createdAt', $orderDir); |
125 | break; |
126 | } |
127 | } |
128 | |
129 | private function addTableSearches(QueryBuilder $queryBuilder, $searches) |
130 | { |
131 | foreach ($searches as $columnName => $search) { |
132 | switch ($columnName) { |
133 | case 'nom': |
134 | $queryBuilder->andWhere('t.name LIKE :nom') |
135 | ->setParameter('nom', '%' . $search . '%'); |
136 | break; |
137 | case 'collectivite': |
138 | $queryBuilder->andWhere('collectivite.name LIKE :collectivite') |
139 | ->setParameter('collectivite', '%' . $search . '%'); |
140 | break; |
141 | case 'gestionnaire': |
142 | $this->addWhereClause($queryBuilder, 'manager', '%' . $search . '%', 'LIKE'); |
143 | break; |
144 | case 'createdAt': |
145 | if (is_string($search)) { |
146 | $queryBuilder->andWhere('o.createdAt BETWEEN :created_start_date AND :created_finish_date') |
147 | ->setParameter('created_start_date', date_create_from_format('d/m/y', substr($search, 0, 8))->format('Y-m-d 00:00:00')) |
148 | ->setParameter('created_finish_date', date_create_from_format('d/m/y', substr($search, 11, 8))->format('Y-m-d 23:59:59')); |
149 | } |
150 | break; |
151 | } |
152 | } |
153 | } |
154 | } |