Comparaison des versions

Légende

  • Ces lignes ont été ajoutées. Ce mot a été ajouté.
  • Ces lignes ont été supprimées. Ce mot a été supprimé.
  • La mise en forme a été modifiée.
Algorithme:

On parcourt la liste des lignes de carnet de bord créées pendant la présence au centre de ressources triées par date de début afin de trouver deux lignes pour lesquelles il existe un intervalle vide entre les deux.

Dans ce cas, on crée une ligne de carnet de bord de type travail personnel qui commence avant la fin de la précédente (ou au début de la présence au centre de ressources) et au début de celle-ci, à condition que cette période dure au moins 15 minutes.

Une fois toutes les lignes de carnet de bord parcourues, on crée l'éventuelle dernière ligne de carnet de bord de type travail personnel entre la fin de la dernière ligne et la fin de la période de présence au centre de ressources, si bien sûr cette période dure au moins 15 minutes.


Code:
Info
iconfalse
// On récupère la liste des lignes de carnet de bord créées pendant la présence au centre de ressources triées par date de début
$tabCarnetBordPendantPresence = $em->getRepository('UnivLorraineplateformeLansadBundle:CarnetBord')->findBetween($dateEntree, $dateSortie, $user);
usort($tabCarnetBordPendantPresence, function ($cb1, $cb2) {
if ($cb1->getDateDebut() == $cb2->getDateDebut()) {
return 0;
}
return ($cb1->getDateDebut() < $cb2->getDateDebut()) ? -1 : 1;
});

$intervalle15min = new \DateInterval('PT15M');
$dateCurseurTraite = $dateEntree;

foreach ($tabCarnetBordPendantPresence as $carnetBordPendantPresence) {

$dateDebutCarnetBordCour = $carnetBordPendantPresence->getDateDebut();
$dateFinCarnetBordCour = $carnetBordPendantPresence->getDateFin();

if ($dateDebutCarnetBordCour < $dateCurseurTraite) {
// Si un intervalle chevauche un précédent on décale le cuserurcurseur à la fin de celui-ci
if ($dateFinCarnetBordCour > $dateCurseurTraite) {
$dateCurseurTraite = $dateFinCarnetBordCour;
} else {
// Si l'intervalle est contenu dans le précédent, on ne fait rien
}
} else {
// Si l'intervalle est entièrement supérieur au précédent, on crée une ligne de type travail personnel s'il dépasse 15 minutes
$dateDebutTravailPersonnel = $dateCurseurTraite;
$dateFinTravailPersonnel = $dateDebutCarnetBordCour;

$dateFinTravailPersonnelMoins15min = clone($dateFinTravailPersonnel);
$dateFinTravailPersonnelMoins15min->sub($intervalle15min);

if ($dateFinTravailPersonnelMoins15min > $dateDebutTravailPersonnel) {
$carnetBord = new CarnetBordTravailPersonnel();

$carnetBord->setUserCarnetBordTravailPersonnel($user);
$carnetBord->setCentreRessourceCarnetBordTravailPersonnel($centreRessources);
$carnetBord->setDateDebut($dateDebutTravailPersonnel);
$carnetBord->setDateFin($dateFinTravailPersonnel);

$anneeUniService = $this->get('ul_plateformelansad.anneeuni');
$anneeUni = $anneeUniService->getAnneeUni($dateDebutTravailPersonnel);
$carnetBord->setAnneeUni($anneeUni);

$em->persist($carnetBord);
$em->flush();
}

$dateCurseurTraite = $dateFinCarnetBordCour;
}

}

// On crée une ligne de type travail personnel s'il reste au moins 15 minutes après le dernier intervalle traité
$dateSortieMoins15min = clone($dateSortie);
$dateSortieMoins15min->sub($intervalle15min);

if ($dateSortieMoins15min > $dateCurseurTraite) {
$dateDebutTravailPersonnel = $dateCurseurTraite;
$dateFinTravailPersonnel = $dateSortie;

$carnetBord = new CarnetBordTravailPersonnel();

$carnetBord->setUserCarnetBordTravailPersonnel($user);
$carnetBord->setCentreRessourceCarnetBordTravailPersonnel($centreRessources);
$carnetBord->setDateDebut($dateDebutTravailPersonnel);
$carnetBord->setDateFin($dateFinTravailPersonnel);

$anneeUniService = $this->get('ul_plateformelansad.anneeuni');
$anneeUni = $anneeUniService->getAnneeUni($dateDebutTravailPersonnel);
$carnetBord->setAnneeUni($anneeUni);

$em->persist($carnetBord);
$em->flush();
}

...