Cet espace a été migré sur le nouveau wiki le 24/06/2024 : https://wiki.univ-lorraine.fr/bin/view/publique/dn/am/edolang
Les modifications apportées ici depuis cette date ne seront pas reportées.
Si vous ne disposez pas des droits de visualisation sur le nouvel espace, veuillez contactez son(ses) gestionnaire(s).

Vous regardez une version antérieure (v. /pages/viewpage.action?pageId=290819465) de cette page.

afficher les différences afficher l'historique de la page

« Afficher la version précédente Vous regardez la version actuelle de cette page. (v. 2) afficher la version suivante »

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:
// 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 curseur à 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();
}
  • Aucune étiquette