Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 50
0.00% covered (danger)
0.00%
0 / 6
CRAP
0.00% covered (danger)
0.00%
0 / 1
Conformite
0.00% covered (danger)
0.00%
0 / 50
0.00% covered (danger)
0.00%
0 / 6
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
 createQueryBuilder
0.00% covered (danger)
0.00%
0 / 5
0.00% covered (danger)
0.00%
0 / 1
2
 count
0.00% covered (danger)
0.00%
0 / 14
0.00% covered (danger)
0.00%
0 / 1
20
 findPaginated
0.00% covered (danger)
0.00%
0 / 14
0.00% covered (danger)
0.00%
0 / 1
20
 addTableOrder
0.00% covered (danger)
0.00%
0 / 6
0.00% covered (danger)
0.00%
0 / 1
12
 addTableWhere
0.00% covered (danger)
0.00%
0 / 10
0.00% covered (danger)
0.00%
0 / 1
20
1<?php
2
3namespace App\Infrastructure\ORM\Registry\Repository\ConformiteOrganisation;
4
5use App\Application\Doctrine\Repository\CRUDRepository;
6use App\Application\Traits\RepositoryUtils;
7use App\Domain\Registry\Model\ConformiteOrganisation as Model;
8use App\Domain\Registry\Repository\ConformiteOrganisation as Repository;
9use Doctrine\Common\Collections\Collection;
10use Doctrine\ORM\QueryBuilder;
11use Doctrine\ORM\Tools\Pagination\Paginator;
12
13class 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}