Periode.php 2.14 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
<?php

namespace Application\Service;

use Application\Service\AbstractService;
use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\QueryBuilder;
use Application\Entity\Db\TypeIntervenant as EntityTypeIntervenant;


/**
 * Description of Periode
 *
 * @author Laurent LÉCLUSE <laurent.lecluse at unicaen.fr>
 */
class Periode extends AbstractService
{

    /**
     * Repository
     *
     * @var Repository
     */
    protected $repo;

    /**
     * Périodes par types d'intervenants
     *
     * @var array[]
     */
    protected $periodesByTypeIntervenant;





    /**
     * Retourne la liste des périodes pour un type d'intervenant donné
     *
     * @param EntityTypeIntervenant $typeIntervenant
     * @param QueryBuilder|null $queryBuilder
     * @return QueryBuilder
     */
    public function finderByTypeIntervenant( EntityTypeIntervenant $typeIntervenant, QueryBuilder $qb=null )
    {
        if (empty($qb)) $qb = $this->getRepo()->createQueryBuilder('p');

        $qb->andWhere('p.typeIntervenant = :type')->setParameter('type', $typeIntervenant);
        $qb->orderBy('p.ordre');
        return $qb;
    }


    /**
     *
     * @param EntityTypeIntervenant $typeIntervenant
     * @return type
     */
    public function getByTypeIntervenant( EntityTypeIntervenant $typeIntervenant )
    {
        if (! isset($this->periodesByTypeIntervenant[$typeIntervenant->getId()])){
            $periodes = $this->finderByTypeIntervenant( $typeIntervenant )->getQuery()->execute();
            $this->periodesByTypeIntervenant[$typeIntervenant->getId()] = array();
            foreach( $periodes as $periode ){
                $this->periodesByTypeIntervenant[$typeIntervenant->getId()][$periode->getId()] = $periode;
            }
        }
        return $this->periodesByTypeIntervenant[$typeIntervenant->getId()];
    }


    /**
     *
     * @return EntityRepository
     */
    public function getRepo()
    {
        if( empty($this->repo) ){
            $this->getEntityManager()->getFilters()->enable("historique");
            $this->repo = $this->getEntityManager()->getRepository('Application\Entity\Db\Periode');
        }
        return $this->repo;
    }
}