DayRepository   A
last analyzed

Complexity

Total Complexity 6

Size/Duplication

Total Lines 60
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 4

Importance

Changes 4
Bugs 1 Features 0
Metric Value
wmc 6
lcom 1
cbo 4
dl 0
loc 60
c 4
b 1
f 0
rs 10

3 Methods

Rating   Name   Duplication   Size   Complexity  
A getQueryBuilderForFilterForm() 0 16 3
A getInRange() 0 6 1
A getInRangeQueryBuilder() 0 16 2
1
<?php
2
3
namespace Dominikzogg\EnergyCalculator\Repository;
4
5
use Doctrine\ORM\QueryBuilder;
6
use Dominikzogg\EnergyCalculator\Entity\Day;
7
use Dominikzogg\EnergyCalculator\Entity\User;
8
9
class DayRepository extends AbstractRepository
10
{
11
    /**
12
     * @param  array        $filterData
13
     * @return QueryBuilder
14
     */
15
    public function getQueryBuilderForFilterForm(array $filterData = null)
16
    {
17
        $qb = $this->createQueryBuilder('d');
18
19
        if (isset($filterData['date'])) {
20
            $this->addEqualFilter($qb, 'd', 'date', $filterData['date']);
21
        }
22
23
        if (isset($filterData['user'])) {
24
            $this->addEqualFilter($qb, 'd', 'user', $filterData['user']);
25
        }
26
27
        $qb->addOrderBy('d.date', 'DESC');
28
29
        return $qb;
30
    }
31
32
    /**
33
     * @param  \DateTime $from
34
     * @param  \DateTime $to
35
     * @param  User      $user
36
     * @return Day[]
37
     */
38
    public function getInRange(\DateTime $from, \DateTime $to, User $user = null)
39
    {
40
        $qb = $this->getInRangeQueryBuilder($from, $to, $user);
41
42
        return $qb->getQuery()->getResult();
43
    }
44
45
    /**
46
     * @param  \DateTime                  $from
47
     * @param  \DateTime                  $to
48
     * @param  User                       $user
49
     * @param  string                     $alias
50
     * @return \Doctrine\ORM\QueryBuilder
51
     */
52
    public function getInRangeQueryBuilder(\DateTime $from, \DateTime $to, User $user = null, $alias = 'd')
53
    {
54
        $qb = $this->createQueryBuilder($alias);
55
        $qb->andWhere($alias.'.date >= :from');
56
        $qb->andWhere($alias.'.date <= :to');
57
        $qb->setParameter('from', $from);
58
        $qb->setParameter('to', $to);
59
        $qb->orderBy($alias.'.date', 'ASC');
60
61
        if (null !== $user) {
62
            $qb->andWhere($alias.'.user = :user');
63
            $qb->setParameter('user', $user->getId());
64
        }
65
66
        return $qb;
67
    }
68
}
69