Commit 008f4fed authored by Antony Le Courtes's avatar Antony Le Courtes
Browse files

Possibilité de paramétrer le mode de saisie des volumes horaires (semestriel...

Possibilité de paramétrer le mode de saisie des volumes horaires (semestriel ou calendaire) par statut
parent dccab6b6
Loading
Loading
Loading
Loading
+3 −0
Changes for data/ddl/sequence.php: 3 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -58,6 +58,9 @@ return [
    'LIEN_ID_SEQ',
    'MISE_EN_PAIEMENT_ID_SEQ',
    'MISSION_ID_SEQ',
    'MISSION_TAUX_REMU_ID_SEQ',
    'MISSION_TAUX_REMU_VALEUR_ID_SEQ',
    'MISSION_TAUX_REMU_VALEU_ID_SEQ',
    'MODIFICATION_SERVICE_DU_ID_SEQ',
    'MODULATEUR_ID_SEQ',
    'MOTIF_MODIFICATION_SERV_ID_SEQ',
+48 −0
Changes for data/ddl/table/STATUT.php: 48 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -669,6 +669,54 @@ return [
            'position'    => 1,
            'commentaire' => NULL,
        ],
        'MODE_REFERENTIEL_PREVISIONNEL'  => [
            'name'        => 'MODE_REFERENTIEL_PREVISIONNEL',
            'type'        => 'string',
            'bdd-type'    => 'VARCHAR2',
            'length'      => 50,
            'scale'       => NULL,
            'precision'   => NULL,
            'nullable'    => TRUE,
            'default'     => NULL,
            'position'    => 85,
            'commentaire' => NULL,
        ],
        'MODE_REFERENTIEL_REALISE'       => [
            'name'        => 'MODE_REFERENTIEL_REALISE',
            'type'        => 'string',
            'bdd-type'    => 'VARCHAR2',
            'length'      => 50,
            'scale'       => NULL,
            'precision'   => NULL,
            'nullable'    => TRUE,
            'default'     => NULL,
            'position'    => 86,
            'commentaire' => NULL,
        ],
        'MODE_SERVICE_PREVISIONNEL'      => [
            'name'        => 'MODE_SERVICE_PREVISIONNEL',
            'type'        => 'string',
            'bdd-type'    => 'VARCHAR2',
            'length'      => 50,
            'scale'       => NULL,
            'precision'   => NULL,
            'nullable'    => TRUE,
            'default'     => NULL,
            'position'    => 83,
            'commentaire' => NULL,
        ],
        'MODE_SERVICE_REALISE'           => [
            'name'        => 'MODE_SERVICE_REALISE',
            'type'        => 'string',
            'bdd-type'    => 'VARCHAR2',
            'length'      => 50,
            'scale'       => NULL,
            'precision'   => NULL,
            'nullable'    => TRUE,
            'default'     => NULL,
            'position'    => 84,
            'commentaire' => NULL,
        ],
        'LIBELLE'                        => [
            'name'        => 'LIBELLE',
            'type'        => 'string',
+19 −0
Changes for data/ddl_columns_pos.php: 19 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -2353,6 +2353,25 @@ return [
        'NOMBRE_HEURES',
        'NOMBRE_POSTES',
    ],
    'MISSION_TAUX_REMU'              => [
        'ID',
        'CODE',
        'LIBELLE',
        'HISTO_CREATEUR_ID',
        'HISTO_CREATION',
        'HISTO_DESTRUCTEUR_ID',
        'HISTO_DESTRUCTION',
        'HISTO_MODIFICATEUR_ID',
        'HISTO_MODIFICATION',
        'MISSION_TAUX_REMU_ID',
    ],
    'MISSION_TAUX_REMU_VALEUR'       => [
        'ID',
        'MISSION_TAUX_REMU_ID',
        'DATE_EFFET',
        'VALEUR',
    ],

];

//@formatter:on
+45 −9
Changes for module/Application/src/Service/ContextService.php: 45 added lines, 9 removed lines.
Original line number Diff line number Diff line
@@ -10,6 +10,7 @@ use Application\Entity\Db\Annee;
use Application\Entity\Db\Intervenant;
use Application\Entity\Db\Parametre;
use Application\Entity\Db\Structure;
use Application\Service\Traits\LocalContextServiceAwareTrait;
use Service\Entity\Db\TypeVolumeHoraire;
use Application\Entity\Db\Utilisateur;
use Application\Service\Traits\IntervenantServiceAwareTrait;
@@ -31,6 +32,8 @@ class ContextService extends AbstractService
    use UserContextServiceAwareTrait;
    use IntervenantServiceAwareTrait;
    use LdapConnecteurAwareTrait;
    use LocalContextServiceAwareTrait;


    protected ?Role          $selectedIdentityRole = null;

@@ -150,24 +153,40 @@ class ContextService extends AbstractService
     *
     * @return string
     */
    public function getModaliteServices($typeVolumeHoraire = TypeVolumeHoraire::CODE_PREVU): string
    public function getModaliteServices(?TypeVolumeHoraire $typeVolumeHoraire): string
    {
        //On récupère le statut de l'intervenant en cours
        $intervenant = $this->getServiceLocalContext()->getIntervenant();
        $statut      = ($intervenant) ? $intervenant->getStatut() : null;

        //On récupère le type de volume horaire
        if ($typeVolumeHoraire instanceof TypeVolumeHoraire) {
            $typeVolumeHoraire = $typeVolumeHoraire->getCode();
            $codeTypeVolumeHoraire = $typeVolumeHoraire->getCode();
        } else {
            $codeTypeVolumeHoraire = TypeVolumeHoraire::CODE_PREVU;
        }

        if ($typeVolumeHoraire == TypeVolumeHoraire::CODE_REALISE) {
        if ($codeTypeVolumeHoraire == TypeVolumeHoraire::CODE_REALISE) {
            //Si l'intervenant en cours à un statut valide on retourne le mode paramétré du statut, et si null le mode par défaut
            if (!empty($statut)) {
                return ($statut->getModeServiceRealise()) ?: $this->getServiceParametres()->get('modalite_services_real_ens');
            }
            $prevReal = 'real';
        } else {
            //Si l'intervenant en cours à un statut valide on retourne le mode paramétré du statut, et si null le mode par défaut
            if (!empty($statut)) {
                return ($statut->getModeServicePrevisionnel()) ?: $this->getServiceParametres()->get('modalite_services_prev_ens');
            }
            $prevReal = 'prev';
        }

        //Sinon on retourne le mode paramètré par défault
        return $this->getServiceParametres()->get('modalite_services_' . $prevReal . '_ens');
    }



    public function isModaliteServicesSemestriel($typeVolumeHoraire = TypeVolumeHoraire::CODE_PREVU): bool
    public function isModaliteServicesSemestriel(?TypeVolumeHoraire $typeVolumeHoraire): bool
    {
        return $this->getModaliteServices($typeVolumeHoraire) == Parametre::SERVICES_MODALITE_SEMESTRIEL;
    }
@@ -179,26 +198,43 @@ class ContextService extends AbstractService
     *
     * @return string
     */
    public function getModaliteReferentiel($typeVolumeHoraire = TypeVolumeHoraire::CODE_PREVU): string
    public function getModaliteReferentiel(?TypeVolumeHoraire $typeVolumeHoraire): string
    {
        //On récupère le statut de l'intervenant en cours
        $intervenant = $this->getServiceLocalContext()->getIntervenant();
        $statut      = ($intervenant) ? $intervenant->getStatut() : null;


        //On récupère le type de volume horaire
        if ($typeVolumeHoraire instanceof TypeVolumeHoraire) {
            $typeVolumeHoraire = $typeVolumeHoraire->getCode();
            $codeTypeVolumeHoraire = $typeVolumeHoraire->getCode();
        } else {
            $codeTypeVolumeHoraire = TypeVolumeHoraire::CODE_PREVU;
        }

        if ($typeVolumeHoraire == TypeVolumeHoraire::CODE_REALISE) {
        if ($codeTypeVolumeHoraire == TypeVolumeHoraire::CODE_REALISE) {
            //Si l'intervenant en cours à un statut valide on retourne le mode paramétré du statut, et si null le mode par défaut
            if (!empty($statut)) {
                return ($statut->getModeReferentielRealise()) ?: $this->getServiceParametres()->get('modalite_services_real_ref');
            }
            $prevReal = 'real';
        } else {
            //Si l'intervenant en cours à un statut valide on retourne le mode paramétré du statut, et si null le mode par défaut
            if (!empty($statut)) {
                return ($statut->getModeReferentielPrevisionnel()) ?: $this->getServiceParametres()->get('modalite_services_prev_ref');
            }
            $prevReal = 'prev';
        }

        //Sinon on retourne le mode paramètré par défault
        return $this->getServiceParametres()->get('modalite_services_' . $prevReal . '_ref');
    }



    public function isModaliteReferentielSemestriel($typeVolumeHoraire = TypeVolumeHoraire::CODE_PREVU): bool
    public function isModaliteReferentielSemestriel(?TypeVolumeHoraire $typeVolumeHoraire): bool
    {
        return $this->getModaliteReferentiel() == Parametre::SERVICES_MODALITE_SEMESTRIEL;
        return $this->getModaliteReferentiel($typeVolumeHoraire) == Parametre::SERVICES_MODALITE_SEMESTRIEL;
    }


+55 −4
Changes for module/Enseignement/src/Entity/VolumeHoraireListe.php: 55 added lines, 4 removed lines.
Original line number Diff line number Diff line
@@ -153,7 +153,6 @@ class VolumeHoraireListe
     */
    protected $tag = false;


    /**
     * @var Contrat|boolean
     */
@@ -189,12 +188,14 @@ class VolumeHoraireListe
    public $__debug;



    function __construct(Service $service)
    {
        $this->setService($service);
    }



    /**
     * Retourne la liste des volumes horaires du service (sans les motifs de non paiement)
     * Les clés sont les codes des types d'intervention des volumes horaires
@@ -218,12 +219,14 @@ class VolumeHoraireListe
    }



    public function getService(): Service
    {
        return $this->service;
    }



    public function setService(Service $service): VolumeHoraireListe
    {
        $this->service = $service;
@@ -232,6 +235,7 @@ class VolumeHoraireListe
    }



    /**
     * Détermine si un volume horaire répond aux critères de la liste ou non
     */
@@ -280,7 +284,7 @@ class VolumeHoraireListe
            }
        }
        //Uniquement en mode semestriel car en mode calendaire on ne doit pas être sur des mêmes horaires de début et de fin
        if (false !== $this->motifNonPaiement && $this->getServiceContext()->isModaliteServicesSemestriel($volumeHoraire->getTypeVolumeHoraire()->getCode())) {
        if (false !== $this->motifNonPaiement && $this->getServiceContext()->isModaliteServicesSemestriel($volumeHoraire->getTypeVolumeHoraire())) {
            $motifNonPaiement = $volumeHoraire->getMotifNonPaiement();
            if (true === $this->motifNonPaiement) {
                if (null === $motifNonPaiement) return false;
@@ -289,7 +293,7 @@ class VolumeHoraireListe
            }
        }
        //Uniquement en mode semestriel car en mode calendaire on ne doit pas être sur des mêmes horaires de début et de fin
        if (false !== $this->tag && $this->getServiceContext()->isModaliteServicesSemestriel($volumeHoraire->getTypeVolumeHoraire()->getCode())) {
        if (false !== $this->tag && $this->getServiceContext()->isModaliteServicesSemestriel($volumeHoraire->getTypeVolumeHoraire())) {
            $tag = $volumeHoraire->getTag();
            if (true === $this->tag) {
                if (null === $tag) return false;
@@ -345,6 +349,7 @@ class VolumeHoraireListe
    }



    private function timestamp(?\DateTime $dateTime): int
    {
        if ($dateTime instanceof \DateTime) {
@@ -355,6 +360,7 @@ class VolumeHoraireListe
    }



    /**
     * @return Source|bool
     */
@@ -364,6 +370,7 @@ class VolumeHoraireListe
    }



    /**
     * @param Source|bool $source
     *
@@ -378,12 +385,14 @@ class VolumeHoraireListe
    }



    public function getFilterByHistorique(): bool
    {
        return $this->filterByHistorique;
    }



    public function setFilterByHistorique(bool $filterByHistorique): VolumeHoraireListe
    {
        $this->filterByHistorique = $filterByHistorique;
@@ -393,12 +402,14 @@ class VolumeHoraireListe
    }



    public function getNew(): bool
    {
        return $this->new;
    }



    /**
     * @param bool $new
     *
@@ -413,6 +424,7 @@ class VolumeHoraireListe
    }



    /**
     * Détermine si, dans la liste des heures, des périodes non autorisées sont présentes
     */
@@ -430,6 +442,7 @@ class VolumeHoraireListe
    }



    /**
     * Retourne la liste des types d'intervention concernés par le service
     */
@@ -447,6 +460,7 @@ class VolumeHoraireListe
    }



    /**
     *
     * @return Periode[]
@@ -465,6 +479,7 @@ class VolumeHoraireListe
    }



    /**
     *
     * @return MotifNonPaiement[]
@@ -493,6 +508,8 @@ class VolumeHoraireListe
        return $mnps;
    }



    /**
     *
     * @return Tag[]
@@ -522,6 +539,7 @@ class VolumeHoraireListe
    }



    private function makeSousListeId(VolumeHoraire $vh, array $filtres = []): string
    {
        $id = [];
@@ -555,6 +573,7 @@ class VolumeHoraireListe
    }



    /**
     * @param array $filtres
     *
@@ -575,6 +594,7 @@ class VolumeHoraireListe
    }



    /**
     * retourne une liste fille de volumes horaires
     */
@@ -589,6 +609,7 @@ class VolumeHoraireListe
    }



    /**
     * @param VolumeHoraire $vh
     * @param array         $filtres
@@ -643,6 +664,7 @@ class VolumeHoraireListe
    }



    /**
     * @param VolumeHoraireListe $vhl
     * @param array              $filtres
@@ -695,6 +717,7 @@ class VolumeHoraireListe
    }



    public function getHeures(): float
    {
        $volumesHoraires = $this->getVolumeHoraires();
@@ -707,6 +730,7 @@ class VolumeHoraireListe
    }



    public function isVolumeHoraireModifiable(VolumeHoraire $volumeHoraire): bool
    {
        return !(
@@ -718,6 +742,7 @@ class VolumeHoraireListe
    }



    /**
     * Affecte un certain nombre d'heures à la liste
     *
@@ -918,6 +943,7 @@ class VolumeHoraireListe
    }



    /**
     * @param $heures
     * @param $ancienMotifNonPaiement
@@ -947,6 +973,7 @@ class VolumeHoraireListe
    }



    /**
     * @param bool|\DateTime|null        $horaireDebut
     * @param bool|\DateTime|null        $horaireFin
@@ -992,7 +1019,6 @@ class VolumeHoraireListe
                    if ($tag !== false) {
                        $vh->setTag($tag);
                    }

                } else {
                    $heuresAReporter += $vh->getHeures();
                    $rid             = $this->makeSousListeId($vh, $reportFilters);
@@ -1029,6 +1055,7 @@ class VolumeHoraireListe
    }



    /**
     * Détermine si la liste est vide ou non
     */
@@ -1038,6 +1065,7 @@ class VolumeHoraireListe
    }



    /**
     * Retourne le nombre de volumes horaires concernés par la liste
     */
@@ -1047,6 +1075,7 @@ class VolumeHoraireListe
    }



    /**
     *
     * @return TypeVolumeHoraire|boolean
@@ -1057,6 +1086,7 @@ class VolumeHoraireListe
    }



    /**
     *
     * @param TypeVolumeHoraire|boolean $typeVolumeHoraire
@@ -1078,6 +1108,7 @@ class VolumeHoraireListe
    }



    /**
     *
     * @return Periode|boolean
@@ -1088,6 +1119,7 @@ class VolumeHoraireListe
    }



    /**
     *
     * @param Periode|boolean $periode
@@ -1109,6 +1141,7 @@ class VolumeHoraireListe
    }



    /**
     *
     * @return TypeIntervention|boolean
@@ -1119,6 +1152,7 @@ class VolumeHoraireListe
    }



    /**
     *
     * @param TypeIntervention|boolean $typeIntervention
@@ -1140,6 +1174,7 @@ class VolumeHoraireListe
    }



    /**
     * @return bool|\DateTime
     */
@@ -1149,6 +1184,7 @@ class VolumeHoraireListe
    }



    /**
     * @param bool|\DateTime $horaireDebut
     *
@@ -1169,6 +1205,7 @@ class VolumeHoraireListe
    }



    /**
     * @return bool|\DateTime
     */
@@ -1178,6 +1215,7 @@ class VolumeHoraireListe
    }



    /**
     * @param bool|\DateTime $horaireFin
     *
@@ -1198,6 +1236,7 @@ class VolumeHoraireListe
    }



    /**
     *
     * @return EtatVolumeHoraire|boolean
@@ -1208,6 +1247,7 @@ class VolumeHoraireListe
    }



    /**
     *
     * @param EtatVolumeHoraire|boolean $etatVolumeHoraire
@@ -1229,6 +1269,7 @@ class VolumeHoraireListe
    }



    /**
     *
     * @return MotifNonPaiement|boolean
@@ -1239,6 +1280,7 @@ class VolumeHoraireListe
    }



    /**
     *
     * @param MotifNonPaiement|boolean $motifNonPaiement
@@ -1259,6 +1301,8 @@ class VolumeHoraireListe
        return $this;
    }



    /**
     *
     * @return Tag|boolean
@@ -1268,6 +1312,8 @@ class VolumeHoraireListe
        return $this->tag;
    }



    /**
     *
     * @param Tag|boolean $tag
@@ -1287,6 +1333,8 @@ class VolumeHoraireListe
        return $this;
    }



    /**
     *
     * @return Contrat|boolean
@@ -1297,6 +1345,7 @@ class VolumeHoraireListe
    }



    /**
     *
     * @param Contrat|boolean $contrat
@@ -1318,6 +1367,7 @@ class VolumeHoraireListe
    }



    /**
     *
     * @return Validation|boolean
@@ -1328,6 +1378,7 @@ class VolumeHoraireListe
    }



    /**
     *
     * @param Validation|boolean $validation
Loading