Commit 4fcc1afd authored by Laurent Lecluse's avatar Laurent Lecluse
Browse files

La constatation d'heures réalisées à partir du prévisionnel tient maintenant...

La constatation d'heures réalisées à partir du prévisionnel tient maintenant compte des horaires et des motifs de non paiements (#39202)
parent 099fcbbf
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -40,6 +40,7 @@ Objectif : Plafonds personnalisables
* Correction sur la complétude des données personnelles lorsque la case 'INSEE provisoire' est cochée (#41141).
* Les modifications de motifs de non paiement fonctionnement de nouveau en mode calendaire (#40037)
* L'autovalidation fonctionne maintenant pour le référentiel (#41149)
* La constatation d'heures réalisées à partir du prévisionnel tient maintenant compte des horaires et des motifs de non paiements (#39202)

## Notes de mise à jour

+50 −0
Original line number Diff line number Diff line
@@ -654,6 +654,56 @@ class VolumeHoraireListe



    /**
     * @param VolumeHoraireListe $vhl
     * @param array              $filtres
     *
     * @return VolumeHoraireListe
     */
    public function filterByVolumeHoraireListe(VolumeHoraireListe $vhl, array $filtres = []): VolumeHoraireListe
    {
        if (in_array(self::FILTRE_CONTRAT, $filtres)) {
            $this->setContrat($vhl->getContrat());
        }
        if (in_array(self::FILTRE_ETAT_VOLUME_HORAIRE, $filtres)) {
            $this->setEtatVolumeHoraire($vhl->getEtatVolumeHoraire());
        }
        if (in_array(self::FILTRE_HISTORIQUE, $filtres)) {
            $this->setFilterByHistorique($vhl->getFilterByHistorique());
        }
        if (in_array(self::FILTRE_NEW, $filtres)) {
            $this->setNew($vhl->getNew());
        }
        if (in_array(self::FILTRE_HORAIRE_DEBUT, $filtres)) {
            $this->setHoraireDebut($vhl->getHoraireDebut());
        }
        if (in_array(self::FILTRE_HORAIRE_FIN, $filtres)) {
            $this->setHoraireFin($vhl->getHoraireFin());
        }
        if (in_array(self::FILTRE_MOTIF_NON_PAIEMENT, $filtres)) {
            $this->setMotifNonPaiement($vhl->getMotifNonPaiement());
        }
        if (in_array(self::FILTRE_PERIODE, $filtres)) {
            $this->setPeriode($vhl->getPeriode());
        }
        if (in_array(self::FILTRE_SOURCE, $filtres)) {
            $this->setSource($vhl->getSource());
        }
        if (in_array(self::FILTRE_TYPE_INTERVENTION, $filtres)) {
            $this->setTypeIntervention($vhl->getTypeIntervention());
        }
        if (in_array(self::FILTRE_TYPE_VOLUME_HORAIRE, $filtres)) {
            $this->setTypeVolumeHoraire($vhl->getTypeVolumeHoraire());
        }
        if (in_array(self::FILTRE_VALIDATION, $filtres)) {
            $this->setValidation($vhl->getValidation());
        }

        return $this;
    }



    /**
     *
     * @return type
+29 −9
Original line number Diff line number Diff line
@@ -14,6 +14,7 @@ use Application\Entity\Db\TypeIntervenant;
use Application\Entity\Db\TypeVolumeHoraire;
use Application\Entity\NiveauEtape;
use Application\Entity\Service\Recherche;
use Application\Entity\VolumeHoraireListe;
use Application\Form\Service\RechercheHydrator;
use Application\Hydrator\Service\Traits\RechercheHydratorAwareTrait;
use Application\Provider\Privilege\Privileges;
@@ -762,19 +763,38 @@ class ServiceService extends AbstractEntityService
            ->setTypeVolumeHoraire($this->getServiceTypeVolumeHoraire()->getRealise())
            ->setEtatVolumeHoraire($this->getServiceEtatVolumeHoraire()->getSaisi());

        $typesIntervention = $prevus->getTypesIntervention() + $realises->getTypesIntervention();
        $periodes          = $prevus->getPeriodes() + $realises->getPeriodes();
        $filtres = [
            VolumeHoraireListe::FILTRE_PERIODE,
            VolumeHoraireListe::FILTRE_TYPE_INTERVENTION,
            VolumeHoraireListe::FILTRE_MOTIF_NON_PAIEMENT,
            VolumeHoraireListe::FILTRE_HORAIRE_DEBUT,
            VolumeHoraireListe::FILTRE_HORAIRE_FIN,
        ];

        foreach ($periodes as $periode) {
            $prevus->setPeriode($periode);
            $realises->setPeriode($periode);
            foreach ($typesIntervention as $typeIntervention) {
                $prevus->setTypeIntervention($typeIntervention);
                $realises->setTypeIntervention($typeIntervention);
        $listes     = [];
        $prevListes = $prevus->getSousListes($filtres);
        foreach ($prevListes as $id => $prevListe) {
            $listes[$id]['prev'] = $prevListe;
        }
        $realListes = $realises->getSousListes($filtres);
        foreach ($realListes as $id => $realListe) {
            $listes[$id]['real'] = $realListe;
        }

                $realises->setHeures($prevus->getHeures());
        foreach ($listes as $liste) {
            if (isset($liste['prev'])) {
                $heures = $liste['prev']->getHeures();
            } else {
                $heures = 0;
            }

            if (!isset($liste['real'])) {
                $liste['real'] = $realises->createChild()->filterByVolumeHoraireListe($liste['prev']);
            }

            $liste['real']->setHeures($heures);
        }

        $this->save($service);
    }