Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
0.00% |
0 / 50 |
|
0.00% |
0 / 6 |
CRAP | |
0.00% |
0 / 1 |
Conformite | |
0.00% |
0 / 50 |
|
0.00% |
0 / 6 |
306 | |
0.00% |
0 / 1 |
getModelClass | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 | |||
createQueryBuilder | |
0.00% |
0 / 5 |
|
0.00% |
0 / 1 |
2 | |||
count | |
0.00% |
0 / 14 |
|
0.00% |
0 / 1 |
20 | |||
findPaginated | |
0.00% |
0 / 14 |
|
0.00% |
0 / 1 |
20 | |||
addTableOrder | |
0.00% |
0 / 6 |
|
0.00% |
0 / 1 |
12 | |||
addTableWhere | |
0.00% |
0 / 10 |
|
0.00% |
0 / 1 |
20 |
1 | <?php |
2 | |
3 | namespace App\Infrastructure\ORM\Registry\Repository\ConformiteOrganisation; |
4 | |
5 | use App\Application\Doctrine\Repository\CRUDRepository; |
6 | use App\Application\Traits\RepositoryUtils; |
7 | use App\Domain\Registry\Model\ConformiteOrganisation as Model; |
8 | use App\Domain\Registry\Repository\ConformiteOrganisation as Repository; |
9 | use Doctrine\Common\Collections\Collection; |
10 | use Doctrine\ORM\QueryBuilder; |
11 | use Doctrine\ORM\Tools\Pagination\Paginator; |
12 | |
13 | class Conformite extends CRUDRepository implements Repository\Conformite |
14 | { |
15 | use RepositoryUtils; |
16 | |
17 | protected function getModelClass(): string |
18 | { |
19 | return Model\Conformite::class; |
20 | } |
21 | |
22 | /** |
23 | * Create the base of QueryBuilder to use for repository calls. |
24 | * |
25 | * @throws \Exception |
26 | */ |
27 | protected function createQueryBuilder(): QueryBuilder |
28 | { |
29 | return $this->getManager() |
30 | ->createQueryBuilder() |
31 | ->select('o') |
32 | ->from($this->getModelClass(), 'o') |
33 | ; |
34 | } |
35 | |
36 | public function count(array $criteria = []) |
37 | { |
38 | $qb = $this |
39 | ->createQueryBuilder() |
40 | ->select('count(o.id)') |
41 | ; |
42 | |
43 | if (isset($criteria['collectivity']) && $criteria['collectivity'] instanceof Collection) { |
44 | $qb->leftJoin('o.collectivity', 'collectivite'); |
45 | $this->addInClauseCollectivities($qb, $criteria['collectivity']->toArray()); |
46 | unset($criteria['collectivity']); |
47 | } |
48 | |
49 | foreach ($criteria as $key => $value) { |
50 | $this->addWhereClause($qb, $key, $value); |
51 | } |
52 | |
53 | return $qb |
54 | ->getQuery() |
55 | ->getSingleScalarResult() |
56 | ; |
57 | } |
58 | |
59 | public function findPaginated($firstResult, $maxResults, $orderColumn, $orderDir, $searches, $criteria = []) |
60 | { |
61 | $qb = $this->createQueryBuilder(); |
62 | |
63 | $qb->leftJoin('o.collectivity', 'collectivite') |
64 | ->addSelect('collectivite'); |
65 | |
66 | if (isset($criteria['collectivity']) && $criteria['collectivity'] instanceof Collection) { |
67 | $this->addInClauseCollectivities($qb, $criteria['collectivity']->toArray()); |
68 | unset($criteria['collectivity']); |
69 | } |
70 | |
71 | foreach ($criteria as $key => $value) { |
72 | $this->addWhereClause($qb, $key, $value); |
73 | } |
74 | |
75 | $this->addTableOrder($qb, $orderColumn, $orderDir); |
76 | $this->addTableWhere($qb, $searches); |
77 | |
78 | $query = $qb->getQuery(); |
79 | $query->setFirstResult($firstResult); |
80 | $query->setMaxResults($maxResults); |
81 | |
82 | return new Paginator($query); |
83 | } |
84 | |
85 | private function addTableOrder(QueryBuilder $queryBuilder, $orderColumn, $orderDir) |
86 | { |
87 | switch ($orderColumn) { |
88 | case 'collectivite': |
89 | $queryBuilder->addOrderBy('collectivite.name', $orderDir); |
90 | break; |
91 | case 'date': |
92 | $queryBuilder->addOrderBy('o.date', $orderDir); |
93 | break; |
94 | } |
95 | } |
96 | |
97 | private function addTableWhere(QueryBuilder $queryBuilder, $searches) |
98 | { |
99 | foreach ($searches as $columnName => $search) { |
100 | switch ($columnName) { |
101 | case 'collectivite': |
102 | $queryBuilder->andWhere('collectivite.name LIKE :nom') |
103 | ->setParameter('nom', '%' . $search . '%'); |
104 | break; |
105 | case 'date': |
106 | $queryBuilder->andWhere('o.date BETWEEN :date_start_date AND :date_finish_date') |
107 | ->setParameter('date_start_date', date_create_from_format('d/m/y', substr($search, 0, 8))->format('Y-m-d 00:00:00')) |
108 | ->setParameter('date_finish_date', date_create_from_format('d/m/y', substr($search, 11, 8))->format('Y-m-d 23:59:59')); |
109 | break; |
110 | } |
111 | } |
112 | } |
113 | } |