Periode.php 4.05 KB
Newer Older
1
2
3
4
<?php

namespace Application\Service;

lecluse's avatar
lecluse committed
5
6
use Application\Entity\Db\Structure as StructureEntity;

7
8
9
10
11
12
13
14
use Doctrine\ORM\QueryBuilder;


/**
 * Description of Periode
 *
 * @author Laurent LÉCLUSE <laurent.lecluse at unicaen.fr>
 */
15
class Periode extends AbstractEntityService
16
{
17
18
19
20
21
22
23
24
25
    /**
     * Périodes d'enseignement
     *
     * @var \Application\Entity\Db\Periode[]
     */
    protected $enseignement;



26
27

    /**
28
     * retourne la classe des entités
29
     *
30
31
     * @return string
     * @throws RuntimeException
32
     */
33
34
35
36
    public function getEntityClass()
    {
        return 'Application\Entity\Db\Periode';
    }
37
38

    /**
39
     * Retourne l'alias d'entité courante
40
     *
41
     * @return string
42
     */
43
44
    public function getAlias(){
        return 'per';
45
46
    }

lecluse's avatar
lecluse committed
47
48
49
50
51
    /**
     *
     * @param \DateTime $date
     * @return PeriodeEntity
     */
52
    public function getPeriodePaiement( \DateTime $date=null )
lecluse's avatar
lecluse committed
53
    {
54
55
56
57
        $anneeDateDebut = $this->getServiceContext()->getAnnee()->getDateDebut();
        $aY = (int)$anneeDateDebut->format('Y');
        $aM = (int)$anneeDateDebut->format('n');

lecluse's avatar
lecluse committed
58
        if (empty($date)) $date = new \DateTime;
59
60
61
62
63
64
        $dY = (int)$date->format('Y');
        $dM = (int)$date->format('n');

        $ecartMoisPaiement = ($dY-$aY)*12 + $dM - $aM;

        return $this->getRepo()->findOneBy(['paiement' => true, 'ecartMoisPaiement' => $ecartMoisPaiement]);
lecluse's avatar
lecluse committed
65
66
    }

67
68
69
70
71
72
    /**
     * Retourne la liste des périodes d'enseignement
     *
     * @param QueryBuilder|null $queryBuilder
     * @return QueryBuilder
     */
73
    public function finderByEnseignement( QueryBuilder $qb=null, $alias=null )
74
    {
75
76
        list($qb,$alias) = $this->initQuery($qb, $alias);
        $qb->andWhere("$alias.enseignement = 1");
77
78
        return $qb;
    }
79

lecluse's avatar
lecluse committed
80
81
82
83
84
85
86
87
    public function finderByMiseEnPaiement(StructureEntity $structure=null, QueryBuilder $qb=null, $alias=null)
    {
        $serviceMIS = $this->getServiceLocator()->get('applicationMiseEnPaiementIntervenantStructure');
        /* @var $serviceMIS MiseEnPaiementIntervenantStructure */

        $serviceMiseEnPaiement = $this->getServiceLocator()->get('applicationMiseEnPaiement');
        /* @var $serviceMiseEnPaiement MiseEnPaiement */

88
89
        $serviceIntervenant = $this->getServiceLocator()->get('applicationIntervenant');
        /* @var $serviceIntervenant Intervenant */
lecluse's avatar
lecluse committed
90
91
92
93
94

        list($qb,$alias) = $this->initQuery($qb, $alias);

        $this               ->join( $serviceMIS             , $qb, 'miseEnPaiementIntervenantStructure', false, $alias );
        $serviceMIS         ->join( $serviceMiseEnPaiement  , $qb, 'miseEnPaiement'                                    );
95
        $serviceMIS         ->join( $serviceIntervenant     , $qb, 'intervenant', false );
lecluse's avatar
lecluse committed
96
97
98
99
100

        if ($structure){
            $serviceMIS->finderByStructure( $structure, $qb );
        }

101
102
        $serviceIntervenant->finderByAnnee( $this->getServiceContext()->getAnnee(), $qb );

lecluse's avatar
lecluse committed
103
104
105
        return $qb;
    }

106
    /**
107
     * Retourne la liste des périodes
108
     *
109
110
     * @param QueryBuilder|null $queryBuilder
     * @return Application\Entity\Db\Periode[]
111
     */
112
    public function getList( QueryBuilder $qb=null, $alias=null )
113
    {
114
115
116
        list($qb,$alias) = $this->initQuery($qb, $alias);
        $qb->orderBy("$alias.ordre");
        return parent::getList($qb, $alias);
117
    }
lecluse's avatar
lecluse committed
118

119
120
121
122
123
124
125
126
127
128
129
130
131
    /**
     * Retourne la liste dezs périodes d'enseignement
     *
     * @return \Application\Entity\Db\Periode[]
     */
    public function getEnseignement()
    {
        if (! $this->enseignement){
            $this->enseignement = $this->getList( $this->finderByEnseignement() );
        }
        return $this->enseignement;
    }

lecluse's avatar
lecluse committed
132
133
134
135
136
137
138
    /**
     * Retourne le semestre 1
     *
     * @return \Application\Entity\Db\Periode
     */
    public function getSemestre1()
    {
139
        return $this->getRepo()->findOneBy(['code' => PeriodeEntity::SEMESTRE_1]);
lecluse's avatar
lecluse committed
140
141
142
143
144
145
146
147
148
    }

    /**
     * Retourne le semestre 2
     *
     * @return \Application\Entity\Db\Periode
     */
    public function getSemestre2()
    {
149
        return $this->getRepo()->findOneBy(['code' => PeriodeEntity::SEMESTRE_2]);
lecluse's avatar
lecluse committed
150
    }
151
}