Commit 2ad1c374 authored by Florian Joriot's avatar Florian Joriot
Browse files

calcul de la date de debut et fin de contrat

parent 0d126321
Loading
Loading
Loading
Loading
Loading
+1 −1
Changes for data/ddl/view/V_TBL_CONTRAT_VOLUME_HORAIRE.sql: 1 added line, 1 removed line.
Original line number Diff line number Diff line
@@ -173,7 +173,7 @@ SELECT
  tm.taux_remu_majore_id                                                          taux_remu_majore_id,

  m.date_fin                                                                      date_fin_mission,

  m.date_debut                                                                    date_debut_mission,
  0                                                                               cm,
  0                                                                               td,
  0                                                                               tp,
+102 −3
Changes for module/Contrat/src/Tbl/Process/ContratProcess.php: 102 added lines, 3 removed lines.
Original line number Diff line number Diff line
@@ -3,10 +3,11 @@ declare(strict_types=1);

namespace Contrat\Tbl\Process;


use Application\Entity\Db\Annee;
use Application\Entity\Db\Parametre;
use Application\Service\Traits\AnneeServiceAwareTrait;
use Application\Service\Traits\ParametresServiceAwareTrait;
use Contrat\Entity\Db\TblContrat;
use Contrat\Entity\Db\TypeContrat;
use Contrat\Service\TypeContratServiceAwareTrait;
use Contrat\Tbl\Process\Model\Contrat;
@@ -272,6 +273,7 @@ class ContratProcess implements ProcessInterface
        $vh->tauxRemuId             = (int)$data['taux_remu_id'] ?: null;
        $vh->tauxRemuMajoreId       = (int)$data['taux_remu_majore_id'] ?: null;
        $vh->dateFinMission         = $data['date_fin_mission'] ? new DateTime($data['date_fin_mission']) : null;
        $vh->dateDebutMission       = $data['date_debut_mission'] ? new DateTime($data['date_debut_mission']) : null;
        $vh->cm                     = (float)$data['cm'];
        $vh->td                     = (float)$data['td'];
        $vh->tp                     = (float)$data['tp'];
@@ -298,6 +300,9 @@ class ContratProcess implements ProcessInterface

        $this->purgerMauvaisContratsSansHeures($contrats);


        $this->calculDateContrat($contrats);

        // ajout d'avenants vides pour les missions avec des prolongations de dates
        $this->contratProlongationMission($contrats);

@@ -386,8 +391,12 @@ class ContratProcess implements ProcessInterface
        $hasEnsRef   = false;

        foreach ($contrat->volumesHoraires as $vh) {
            if ($vh->missionId) $hasMissions = true;
            if ($vh->serviceId || $vh->serviceReferentielId) $hasEnsRef = true;
            if ($vh->missionId) {
                $hasMissions = true;
            }
            if ($vh->serviceId || $vh->serviceReferentielId) {
                $hasEnsRef = true;
            }
        }

        if ($hasMissions && $hasEnsRef) {
@@ -635,6 +644,34 @@ class ContratProcess implements ProcessInterface



    /**
     * @param array|Contrat[] $contrats
     */
    public function calculDateContrat(array $contrats): void
    {
        foreach ($contrats as $contrat) {
            /** @var Contrat $contrat */
            if ($contrat->finValidite != null && $contrat->debutValidite != null) {
                continue;
            }


            if ($contrat->isMission) {
                $this->calculDateContratMission($contrat);
            } else {
                if ($contrat->debutValidite == null) {
                    $contrat->debutValidite = $contrat->annee->getDateDebut();
                }
                if ($contrat->finValidite == null) {
                    $contrat->finValidite = $contrat->annee->getDateFin();
                }
            }

        }
    }



    /**
     * @param array|Contrat[] $contrats
     */
@@ -1177,4 +1214,66 @@ class ContratProcess implements ProcessInterface
    }



    public function calculDateContratMission(Contrat $contrat): void
    {
        $dateDebut = null;
        $dateFin   = null;
        foreach ($contrat->volumesHoraires as $vh) {
            if ($contrat->debutValidite == null || $dateDebut > $vh->dateDebutMission) {
                $dateDebut = $vh->dateDebutMission;
            }

            if ($contrat->finValidite == null || $dateFin > $vh->dateFinMission) {
                $dateFin = $vh->dateFinMission;
            }
        }

        if ($contrat->parent != null) {

            // On ajoute les heures des autres avenants liés au même contrat déjà contractualisé avec un numéro d'avenant infèrieur
            foreach ($contrat->parent->avenants as $contratParser) {
                //On ne s'occupe que des avenants déjà contractualisés
                if (!$contratParser->id || !$contratParser->edite || $contratParser->numeroAvenant >= $contrat->numeroAvenant) {
                    continue;
                }

                foreach ($contratParser->volumesHoraires as $vh) {
                    if ($contrat->debutValidite == null || $dateDebut > $vh->dateDebutMission) {
                        $dateDebut = $vh->dateDebutMission;
                    }

                    if ($contrat->finValidite == null || $dateFin > $vh->dateFinMission) {
                        $dateFin = $vh->dateFinMission;
                    }
                }
            }
            //On ajoute les volumes horaires liés au contrat parent
            foreach ($contrat->parent->volumesHoraires as $vh) {
                if ($contrat->debutValidite == null || $dateDebut > $vh->dateDebutMission) {
                    $dateDebut = $vh->dateDebutMission;
                }

                if ($contrat->finValidite == null || $dateFin > $vh->dateFinMission) {
                    $dateFin = $vh->dateFinMission;
                }
            }
        }


        if ($dateDebut == null) {
            $dateDebut = $contrat->annee->getDateDebut();
        }
        if ($dateFin == null) {
            $dateFin = $contrat->annee->getDateFin();
        }
        if ($contrat->debutValidite == null) {
            $contrat->debutValidite = $dateDebut;
        }
        if ($contrat->finValidite == null) {
            $contrat->finValidite = $dateFin;
        }
    }


}
+1 −0
Changes for module/Contrat/src/Tbl/Process/Model/VolumeHoraire.php: 1 added line, 0 removed lines.
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@ class VolumeHoraire
    public ?int       $tauxRemuId             = null;
    public ?int       $tauxRemuMajoreId       = null;
    public ?\DateTime $dateFinMission         = null;
    public ?\DateTime $dateDebutMission         = null;
    public float      $cm                     = 0.0;
    public float      $td                     = 0.0;
    public float      $tp                     = 0.0;