Ejemplo n.º 1
0
 public function testDelete()
 {
     $florence_eleve = EleveQuery::create()->findOneByLogin('Florence Michu');
     $florence_eleve->updateAbsenceAgregationTable();
     AbsenceEleveSaisiePeer::enableAgregation();
     AbsenceEleveTraitementPeer::enableAgregation();
     $traitement = new AbsenceEleveTraitement();
     $traitement->setAbsenceEleveType(AbsenceEleveTypeQuery::create()->filterByNom('Infirmerie')->findOne());
     $traitement->save();
     $traitement->addAbsenceEleveSaisie($florence_eleve->getAbsenceEleveSaisiesDuJour(VENDREDI_s40j5)->getFirst());
     $traitement->save();
     $decompte = AbsenceAgregationDecompteQuery::create()->filterByEleve($florence_eleve)->filterByDateDemiJounee(VENDREDI_s40j5)->findOne();
     $this->assertFalse($decompte->getManquementObligationPresence());
     $j_traitement_saisie = $traitement->getJTraitementSaisieEleves()->getFirst();
     $j_traitement_saisie->delete();
     $decompte->reload();
     $this->assertTrue($decompte->getManquementObligationPresence());
     
             
     AbsenceEleveTraitementPeer::disableAgregation();
     AbsenceEleveSaisiePeer::disableAgregation();
 }
Ejemplo n.º 2
0
 public function testCheckAndUpdateSynchroAbsenceAgregationTable()
 {
     AbsenceAgregationDecompteQuery::create()->deleteAll();
     foreach (EleveQuery::create()->find() as $eleve) {
         $eleve->updateAbsenceAgregationTable(new DateTime(VENDREDI_s40j5.' 00:00:00'),new DateTime(DIMANCHE_s41j7.' 23:59:59'));
     }
     sleep(1);
     $florence_eleve = EleveQuery::create()->findOneByLogin('Florence Michu');
     $saisie = $florence_eleve->getAbsenceEleveSaisiesDuJour(VENDREDI_s40j5)->getFirst();
     $saisie_id = $saisie->getId();
     mysqli_query($GLOBALS["mysqli"], "UPDATE a_saisies SET fin_abs = '".VENDREDI_s40j5." 08:10:00' WHERE id = ".$saisie_id);//ça devient un retard
     $decompte = AbsenceAgregationDecompteQuery::create()->filterByEleve($florence_eleve)->filterByDateDemiJounee(VENDREDI_s40j5)->findOne();
     $this->assertTrue($decompte->getManquementObligationPresence());
     $this->assertEquals(0,$decompte->getRetards());
     $saisie->reload();
     $saisie->clearAllReferences();
     $saisie->getEleve()->clearAllReferences();
     $saisie->checkAndUpdateSynchroAbsenceAgregationTable();//ça n'est pas mis à jour car le test est true
     $decompte = AbsenceAgregationDecompteQuery::create()->filterByEleve($florence_eleve)->filterByDateDemiJounee(VENDREDI_s40j5)->findOne();
     $this->assertTrue($decompte->getManquementObligationPresence());
     $this->assertEquals(0,$decompte->getRetards());
     mysqli_query($GLOBALS["mysqli"], "UPDATE a_saisies SET updated_at = now() WHERE id = ".$saisie_id);
     $saisie->reload();
     $saisie->clearAllReferences();
     $saisie->getEleve()->clearAllReferences();
     $saisie->checkAndUpdateSynchroAbsenceAgregationTable();//c'est mis à jour car le test est false
     $decompte = AbsenceAgregationDecompteQuery::create()->filterByEleve($florence_eleve)->filterByDateDemiJounee(VENDREDI_s40j5)->findOne();
     $this->assertFalse($decompte->getManquementObligationPresence());
     $this->assertEquals(1,$decompte->getRetards());
     $saisie->setFinAbs(VENDREDI_s40j5.' 09:00:00');
     $saisie->save();
 }
Ejemplo n.º 3
0
                    if($date_debut_col_clone->format('U')<$date_debut_col->format('U')){
                        $date_debut_col=$date_debut_col_clone;
                        
                    }
                    if($date_fin_col_clone->format('U')>$date_fin_col->format('U')){
                        $date_fin_col=$date_fin_col_clone;
                        
                    }
                }                
            } 
            $value['demi_journees'] = AbsenceAgregationDecompteQuery::create()
                ->filterByEleve($propel_eleve)
                ->filterByDateIntervalle($date_debut_col, $date_fin_col)
                ->filterByManquementObligationPresence(true)
                ->count();            
            $value['demi_journees_non_justifiees'] = AbsenceAgregationDecompteQuery::create()
                ->filterByEleve($propel_eleve)
                ->filterByDateIntervalle($date_debut_col, $date_fin_col)
                ->filterByManquementObligationPresence(true)
                ->filterByNonJustifiee(true)
                ->count();
            $value['demi_journees_justifiees'] = $value['demi_journees'] - $value['demi_journees_non_justifiees'];            
            }
        }
    }
}
//on met toutes les donnees en session
$_SESSION['donnees_bilan']=serialize($donnees);

}
// fin de la mise en session des données extraites
Ejemplo n.º 4
0
         $nb_demijournees = $nb_demijournees + $eleve->getDemiJourneesAbsencePreRempli();
         $eleve->setVirtualColumn('TauxDemiJourneesAbsence',getTauxAbsenteisme($eleve->getDemiJourneesAbsencePreRempli(), $nbre_demi_journees_calcul));
 
         $eleve->setVirtualColumn('DemiJourneesNonJustifieesPreRempli', AbsenceAgregationDecompteQuery::create()
                         ->filterByEleve($eleve)
                         ->filterByDateIntervalle($dt_date_absence_eleve_debut, $dt_date_absence_eleve_fin)
                         ->filterByManquementObligationPresence(true)
                         ->filterByNonJustifiee(true)
                         ->count());
         $nb_nonjustifiees = $nb_nonjustifiees + $eleve->getDemiJourneesNonJustifieesPreRempli();
         $nb_justifiees = $nb_justifiees + $eleve->getDemiJourneesAbsencePreRempli() - $eleve->getDemiJourneesNonJustifieesPreRempli();
         $eleve->setVirtualColumn('TauxDemiJourneesNonJustifiees',getTauxAbsenteisme($eleve->getDemiJourneesNonJustifieesPreRempli(), $nbre_demi_journees_calcul));
         $eleve->setVirtualColumn('TauxDemiJourneesJustifiees',getTauxAbsenteisme(($eleve->getDemiJourneesAbsencePreRempli()-$eleve->getDemiJourneesNonJustifieesPreRempli()), $nbre_demi_journees_calcul));            
         if ($affichage_motifs) { 
             foreach ($motifs_col as $motif) {
                 $total_motif_eleve=AbsenceAgregationDecompteQuery::create()
                                 ->filterByEleve($eleve)
                                 ->filterByMotifsAbsence($motif->getId())
                                 ->filterByDateIntervalle($dt_date_absence_eleve_debut, $dt_date_absence_eleve_fin)
                                 ->filterByManquementObligationPresence(true)
                                 ->count();
                 $eleve->setVirtualColumn('DemiJourneesAbsencePreRempliMotif' . $motif->getId(), $total_motif_eleve);
                 $eleve->setVirtualColumn('TauxDemiJourneesAbsenceMotif' . $motif->getId(), getTauxAbsenteisme($total_motif_eleve, $nbre_demi_journees_calcul));
                 $nom_variable = 'nb_demijourneesMotif' . $motif->getId();
                 $$nom_variable = $$nom_variable + $total_motif_eleve;
             }
         }
         $compteur++;
     }
 }
 if ($affichage != 'ods') {
Ejemplo n.º 5
0
                        if ($abs_col->isFirst()) {
                            $date_debut_col = new DateTime($saisie->getDebutAbs());
                            $date_fin_col = new DateTime($saisie->getFinAbs());
                        } else {
                            $date_debut_col_clone = new DateTime($saisie->getDebutAbs());
                            $date_fin_col_clone = new DateTime($saisie->getFinAbs());
                            if ($date_debut_col_clone->format('U') < $date_debut_col->format('U')) {
                                $date_debut_col = $date_debut_col_clone;
                            }
                            if ($date_fin_col_clone->format('U') > $date_fin_col->format('U')) {
                                $date_fin_col = $date_fin_col_clone;
                            }
                        }
                    }
                    $value['demi_journees'] = AbsenceAgregationDecompteQuery::create()->filterByEleve($propel_eleve)->filterByDateIntervalle($date_debut_col, $date_fin_col)->filterByManquementObligationPresence(true)->count();
                    $value['demi_journees_non_justifiees'] = AbsenceAgregationDecompteQuery::create()->filterByEleve($propel_eleve)->filterByDateIntervalle($date_debut_col, $date_fin_col)->filterByManquementObligationPresence(true)->filterByNonJustifiee(true)->count();
                    $value['demi_journees_justifiees'] = $value['demi_journees'] - $value['demi_journees_non_justifiees'];
                }
            }
        }
    }
    //on met toutes les donnees en session
    $_SESSION['donnees_bilan'] = serialize($donnees);
}
// fin de la mise en session des données extraites
// On fais une copie des données en session pour affichage
if ($affichage != "odt" && $affichage != "ods") {
    if (isset($_SESSION['donnees_bilan'])) {
        $_SESSION['donnees_bilan_affichage'] = $_SESSION['donnees_bilan'];
    }
}
Ejemplo n.º 6
0
	/**
	 * Returns the number of related AbsenceAgregationDecompte objects.
	 *
	 * @param      Criteria $criteria
	 * @param      boolean $distinct
	 * @param      PropelPDO $con
	 * @return     int Count of related AbsenceAgregationDecompte objects.
	 * @throws     PropelException
	 */
	public function countAbsenceAgregationDecomptes(Criteria $criteria = null, $distinct = false, PropelPDO $con = null)
	{
		if(null === $this->collAbsenceAgregationDecomptes || null !== $criteria) {
			if ($this->isNew() && null === $this->collAbsenceAgregationDecomptes) {
				return 0;
			} else {
				$query = AbsenceAgregationDecompteQuery::create(null, $criteria);
				if($distinct) {
					$query->distinct();
				}
				return $query
					->filterByEleve($this)
					->count($con);
			}
		} else {
			return count($this->collAbsenceAgregationDecomptes);
		}
	}
Ejemplo n.º 7
0
    public function testDelete()
    {
        $florence_eleve = EleveQuery::create()->findOneByLogin('Florence Michu');

        $traitement = AbsenceEleveTraitementQuery::create()->useJTraitementSaisieEleveQuery()
        ->useAbsenceEleveSaisieQuery()->filterByDebutAbs(JEUDI_s42j4.' 08:00:00')
        ->endUse()->endUse()->findOne();
        //on va vérifier que le delete change bien le update_ad
        $old_updated_at = $traitement->getUpdatedAt('U');
        $traitement->delete();
        $traitement = AbsenceEleveTraitementQuery::create()->useJTraitementSaisieEleveQuery()
        ->useAbsenceEleveSaisieQuery()->filterByDebutAbs(JEUDI_s42j4.' 08:00:00')
        ->endUse()->endUse()->findOne();
        $this->assertNull($traitement);
        $traitement = AbsenceEleveTraitementQuery::create()->includeDeleted()->useJTraitementSaisieEleveQuery()
        ->useAbsenceEleveSaisieQuery()->filterByDebutAbs(JEUDI_s42j4.' 08:00:00')
        ->endUse()->endUse()->findOne();
        $this->assertNotNull($traitement);
        $traitement->unDelete();

        AbsenceEleveTraitementPeer::enableAgregation();
        $traitement->setAbsenceEleveType(AbsenceEleveTypeQuery::create()->filterByNom('Infirmerie')->findOne());
        $traitement->save();
        $decompte = AbsenceAgregationDecompteQuery::create()->filterByEleve($florence_eleve)->filterByDateDemiJounee(JEUDI_s42j4)->findOne();
        $this->assertFalse($decompte->getManquementObligationPresence());
        $traitement->delete();
        $decompte->reload();
        $this->assertTrue($decompte->getManquementObligationPresence());
        AbsenceEleveTraitementPeer::disableAgregation();
    }
Ejemplo n.º 8
0
	public function testSortieEleve() {		
		# Absence 21 du LUNDI_a1_s22j1 Sortir l'élève du collège et vérifier qu'aucune absence n'est retournée
	    $florence_eleve = EleveQuery::create()->findOneByLogin('Florence Michu');
		# table d'agrégation
	    AbsenceAgregationDecompteQuery::create()->filterByEleve($florence_eleve)->delete();
	    $florence_eleve->thinCheckAndUpdateSynchroAbsenceAgregationTable();
		
		$saisie_col = $florence_eleve->getAbsenceEleveSaisiesParDate(new DateTime(LUNDI_a1_s22j1.' 00:00:00'),new DateTime(LUNDI_a1_s22j1.' 23:59:59'));
		$this->assertEquals(1,$saisie_col->count());
		$this->assertTrue($saisie_col->getFirst()->getManquementObligationPresence());
		$demi_j_col = $florence_eleve->getDemiJourneesAbsence(new DateTime(LUNDI_a1_s22j1.' 00:00:00'),new DateTime(LUNDI_a1_s22j1.' 23:59:59'));
		$this->assertEquals(2,$demi_j_col->count());	# L'élève est inscrit -> 2 absences
		# table d'agrégation
		$nbAbs = AbsenceAgregationDecompteQuery::create()->filterByEleve($florence_eleve)
				->filterByDateIntervalle(new DateTime(LUNDI_a1_s22j1.' 00:00:00'),new DateTime(LUNDI_a1_s22j1.' 23:59:59'))
				->filterByManquementObligationPresence(true);	
	    $this->assertEquals(2,$nbAbs->count());
		
	    $florence_eleve->setDateSortie(strtotime(LUNDI_time_a1_s22j1.' 00:00:00'));	# On sort l'élève
		
		$demi_j_col = $florence_eleve->getDemiJourneesAbsence(new DateTime(LUNDI_a1_s22j1.' 00:00:00'),new DateTime(LUNDI_a1_s22j1.' 23:59:59'));
		$this->assertEquals(0,$demi_j_col->count());	# L'élève n'est plus dans l'établissement -> 0 absence
		$this->assertEquals(0,$florence_eleve->getDemiJourneesAbsenceParPeriode(3)->count());
		$demi_j_col = $florence_eleve->getDemiJourneesNonJustifieesAbsence(new DateTime(LUNDI_a1_s22j1.' 00:00:00'),new DateTime(LUNDI_a1_s22j1.' 23:59:59'));
		$this->assertEquals(0,$demi_j_col->count());
		# table d'agrégation
		$nbAbs = AbsenceAgregationDecompteQuery::create()->filterByEleve($florence_eleve)
				->filterByDateIntervalle(new DateTime(LUNDI_a1_s22j1.' 00:00:00'),new DateTime(LUNDI_a1_s22j1.' 23:59:59'))
				->filterByManquementObligationPresence(true);	
	    $this->assertEquals(0,$nbAbs->count());
		
	}
Ejemplo n.º 9
0
                if ($action == "vidage") {
                    $del = AbsenceAgregationDecompteQuery::create()->deleteAll();
                    $nb = AbsenceAgregationDecompteQuery::create()->count();
                    if ($nb === 0) {
                        echo"<p>La Table est maintenant vide.</p>";
                        echo "<p>Revenir à l'<a href='".$_SERVER['PHP_SELF']."'>Agrégation des absences</a></p>";
                        die();
                    } else {
                        echo"<p>Un problème est survenu.</p>";
                        die();
                    }
                } elseif ($action == "regeneration") {
                    $eleve_col = EleveQuery::create()->paginate($page, $maxPerPage);
					if (1 == $page) {
						$del = AbsenceAgregationDecompteQuery::create()->deleteAll();
						$nb = AbsenceAgregationDecompteQuery::create()->count();
						if ($nb === 0) {
							echo"<p>La Table est vide.</p>";
						} else {
							echo"<p>Un problème est survenu.</p>";
							die();
						}
					}
                    echo'<div id="contain_div" class="css-panes">
                        <p> Traitement de la tranche d\'élève ' . $page . '/' . $eleve_col->getLastPage() . ' en cours... <br />
                            Attention cette opération peut être longue.</p>
                         </div>';
                    if(ob_get_contents()){
                       ob_flush(); 
                    }                   
                    flush();
	/**
	 * Returns a new AbsenceAgregationDecompteQuery object.
	 *
	 * @param     string $modelAlias The alias of a model in the query
	 * @param     Criteria $criteria Optional Criteria to build the query from
	 *
	 * @return    AbsenceAgregationDecompteQuery
	 */
	public static function create($modelAlias = null, $criteria = null)
	{
		if ($criteria instanceof AbsenceAgregationDecompteQuery) {
			return $criteria;
		}
		$query = new AbsenceAgregationDecompteQuery();
		if (null !== $modelAlias) {
			$query->setModelAlias($modelAlias);
		}
		if ($criteria instanceof Criteria) {
			$query->mergeWith($criteria);
		}
		return $query;
	}
Ejemplo n.º 11
0
	public function testQueryCountRetards()
	{
	    AbsenceAgregationDecompteQuery::create()->deleteAll();
	    foreach (EleveQuery::create()->find() as $eleve) {
            $eleve->updateAbsenceAgregationTable();
	    }
	    $this->assertEquals(6,AbsenceAgregationDecompteQuery::create()->filterByDateIntervalle(new DateTime(VENDREDI_s40j5.' 00:00:00'),new DateTime(LUNDI_a1_s23j1.' 23:59:59'))->countRetards());
	    $florence_eleve = EleveQuery::create()->findOneByLogin('Florence Michu');
	    $this->assertEquals(6,AbsenceAgregationDecompteQuery::create()->filterByDateIntervalle(new DateTime(VENDREDI_s40j5.' 00:00:00'),new DateTime(LUNDI_a1_s23j1.' 23:59:59'))->filterByEleve($florence_eleve)->countRetards());
	}
Ejemplo n.º 12
0
	/**
	 * Removes this object from datastore and sets delete attribute.
	 *
	 * @param      PropelPDO $con
	 * @return     void
	 * @throws     PropelException
	 * @see        BaseObject::setDeleted()
	 * @see        BaseObject::isDeleted()
	 */
	public function delete(PropelPDO $con = null)
	{
		if ($this->isDeleted()) {
			throw new PropelException("This object has already been deleted.");
		}

		if ($con === null) {
			$con = Propel::getConnection(AbsenceAgregationDecomptePeer::DATABASE_NAME, Propel::CONNECTION_WRITE);
		}

		$con->beginTransaction();
		try {
			$deleteQuery = AbsenceAgregationDecompteQuery::create()
				->filterByPrimaryKey($this->getPrimaryKey());
			$ret = $this->preDelete($con);
			if ($ret) {
				$deleteQuery->delete($con);
				$this->postDelete($con);
				$con->commit();
				$this->setDeleted(true);
			} else {
				$con->commit();
			}
		} catch (Exception $e) {
			$con->rollBack();
			throw $e;
		}
	}
Ejemplo n.º 13
0
	/**
	 *
	 * Mets à jour la table d'agrégation des absences pour cet élève
	 * Pour éviter des calculs trop long par erreurs, l'algorithme est limité à 3 ans dans le passé et le futur
	 * de la date courante
	 *
	 * @param      DateTime $dateDebut date de début pour la prise en compte de la mise à jours
	 * @param      DateTime $dateFin date de fin pour la prise en compte de la mise à jours
	 *
	 */
	public function updateAbsenceAgregationTable(DateTime $dateDebut = null, DateTime $dateFin = null) {
                $now = new DateTime();
		$dateDebutClone = null;
		$dateFinClone = null;
        
		if ($dateDebut != null && $dateFin != null && $dateDebut->format('U') > $dateFin->format('U')) {
			throw new PropelException('Erreur: la date de debut ne peut être postérieure à la date de fin');
		}
		
		if ($dateDebut != null) {
		    if (abs($dateDebut->format('U') - $now->format('U')) > 3600*24*365*3) {
			    throw new PropelException('Erreur: la date de debut ne doit pas être éloignées de plus de 3 ans de la date courante');
		    }
		}
		if ($dateFin != null) {
		    if (abs($dateFin->format('U') - $now->format('U')) > 3600*24*365*3) {
			    throw new PropelException('Erreur: la date de fin ne doit pas être éloignées de plus de 3 ans de la date courante');
		    }
		}
		
		//on initialise les date clone qui seront manipulés dans l'algoritme, c'est nécessaire pour ne pas modifier les date passée en paramêtre.
		if ($dateDebut != null) {
			$dateDebutClone = clone $dateDebut;
			$dateDebutClone->setTime(0,0);
		}
		if ($dateFin != null) {
			$dateFinClone = clone $dateFin;
			$dateFinClone->setTime(23,59);
		}
		
		
		//on commence par supprimer les anciennes entrée
		$queryDelete = AbsenceAgregationDecompteQuery::create()->filterByEleve($this);
		if ($dateDebutClone != null) {
			$queryDelete->filterByDateDemiJounee($dateDebutClone, Criteria::GREATER_EQUAL);
		}
		if ($dateFinClone != null) {
			$queryDelete->filterByDateDemiJounee($dateFinClone, Criteria::LESS_EQUAL);
		}
		$queryDelete->delete();
		
                //on supprime le marqueur qui certifie que le calcul pour cet eleve a été terminé correctement
		AbsenceAgregationDecompteQuery::create()->filterByEleve($this)->filterByMarqueurFinMiseAJour()->delete();
		
                $DMabsenceNonJustifiesCol = $this->getDemiJourneesNonJustifieesAbsence($dateDebutClone,$dateFinClone);
		$DMabsencesCol			= $this->getDemiJourneesAbsence($dateDebutClone,$dateFinClone);
		$retards				= $this->getRetards($dateDebutClone,$dateFinClone);
		$saisiesCol				= clone $this->getAbsenceEleveSaisiesParDate($dateDebutClone, $dateFinClone);//cette collection de saisie va nous permettre de récupérer les notifications et les motifs
				
		// préférence admin pour la demi journée
	    $heure_demi_journee = 11;
	    $minute_demi_journee = 50;
	    if (getSettingValue("abs2_heure_demi_journee") != null) {
    	    try {
    			$dt_demi_journee = new DateTime(getSettingValue("abs2_heure_demi_journee"));
    			$heure_demi_journee = $dt_demi_journee->format('H');
    			$minute_demi_journee = $dt_demi_journee->format('i');
    	    } catch (Exception $x) {
    	    }
	    }
	    
	    //on initialise le début de l'itération pour creer les entrées si aucune date n'est précisée
		if ($dateDebutClone == null) {
			if (!$DMabsencesCol->isEmpty()) {
				$dateDebutClone= clone $DMabsencesCol->getFirst(null);
				$dateDebutClone->setTime(0,0);
			}
			if (!$retards->isEmpty()) {
				if ($dateDebutClone == null || $dateDebutClone->format('U') > $retards->getFirst()->getDebutAbs('U')) {
					$dateDebutClone= clone $retards->getFirst()->getDebutAbs(null);
					$dateDebutClone->setTime(0,0);
				}
			}
                        if ($dateDebutClone != null && abs($dateDebutClone->format('U') - $now->format('U')) > 3600*24*365*3) {
                                $dateDebutClone = new DateTime('@'.($now->format('U') - 3600*24*365*3));//on limite la mise à jour à 4 ans en arrière
                        }
		}
		if ($dateDebutClone == null) {
			//rien à remplir
			//on va quand même mettre une entrée pour dire qu'on est passé par la pour une vérification ultérieures
			$newAgregation = new AbsenceAgregationDecompte();
			$newAgregation->setEleve($this);
			if ($dateFinClone != null) {
				$dateFinClone->setTime(12,0);
			} else {
				//on a aucune date ni aucune saisie, on va mettre la date du jour
				$dateFinClone = new DateTime('now');
				$dateFinClone->setTime(0,0);
			}
			$newAgregation->setDateDemiJounee($dateFinClone);
			$newAgregation->save();
		} else {
			$dateDemiJourneeIteration = clone $dateDebutClone;
			$DMabsencesCol_start_compute = false;//obligatoire pour tester la fin de la collection car le pointeur retourne au début
			$retards_start_compute = false;
			//on va creer une collections d'entrées dans la table d'agrégation
			//dans la boucle while on utilise les tests isFirst pour vérifier qu'on a pas fini les collections et qu'on est pas retourné au début
			do {
				$newAgregation = new AbsenceAgregationDecompte();
				$newAgregation->setEleve($this);
				$newAgregation->setDateDemiJounee($dateDemiJourneeIteration);
				if (($DMabsencesCol->getCurrent() != null) && $dateDemiJourneeIteration->format('d/m/Y H') == $DMabsencesCol->getCurrent()->format('d/m/Y H')) {
					$DMabsencesCol_start_compute = true;
					$newAgregation->setManquementObligationPresence(true);
					$newAgregation->setNonJustifiee(false);
					$DMabsencesCol->getNext();
					//on regarde si l'absence est non justifiée
					if (($DMabsenceNonJustifiesCol->getCurrent() != null) && $dateDemiJourneeIteration->format('d/m/Y H') == $DMabsenceNonJustifiesCol->getCurrent()->format('d/m/Y H')) {
						$newAgregation->setNonJustifiee(true);
						$DMabsenceNonJustifiesCol->getNext();
					}
					
					//on va voir si il y a eu des motifs et des notifications
					$date_debut_cherche_motif = clone $dateDemiJourneeIteration;
					$date_fin_cherche_motif = clone $dateDemiJourneeIteration;
					if ($dateDemiJourneeIteration->format('H') == 0) {
						$date_debut_cherche_motif->setTime(0,0);
						$date_fin_cherche_motif->setTime($heure_demi_journee,$minute_demi_journee);
					} else {
						$date_debut_cherche_motif->setTime($heure_demi_journee,$minute_demi_journee);
						$date_fin_cherche_motif->setTime(23,59);
					}
					foreach ($saisiesCol as $saisie) {
						if ($saisie->getDebutAbs('U') <= $date_fin_cherche_motif->format('U')
						    && $saisie->getFinAbs('U') >= $date_debut_cherche_motif->format('U')
						    && $saisie->getManquementObligationPresence()) {
						    	
					    	if (!$newAgregation->getNotifiee() && $saisie->getNotifiee()) {
					    		$newAgregation->setNotifiee(true);
					    	}
					    	if ($saisie->getMotif() != null) {
					            foreach ($saisie->getAbsenceEleveTraitements() as $traitement) {
					                if ($traitement->getAbsenceEleveMotif() != null) {
					                	$newAgregation->addMotifsAbsence($traitement->getAMotifId());
					                }
					            }
					    	}
					    }
					}
				}
				
				
				//on regarde si il y a des retards pendant cette demijournée
				$date_fin_decompte_retard = clone $dateDemiJourneeIteration;
				if ($date_fin_decompte_retard->format('H') == 0) {
					$date_fin_decompte_retard->setTime($heure_demi_journee,$minute_demi_journee);
				} else {
					$date_fin_decompte_retard->setTime(23,59);
				}
				while ($retards->getCurrent() != null && $retards->getCurrent()->getDebutAbs('U')<$date_fin_decompte_retard->format('U')) {
					$retards_start_compute = true;
					$newAgregation->setRetards($newAgregation->getRetards() + 1);
					if (!$retards->getCurrent()->getJustifiee()) {
						$newAgregation->setRetardsNonJustifies($newAgregation->getRetardsNonJustifies() + 1);
					}
			    	if ($retards->getCurrent()->getMotif() != null) {
			    		foreach ($retards->getCurrent()->getAbsenceEleveTraitements() as $traitement) {
			                if ($traitement->getAbsenceEleveMotif() != null) {
			                	$newAgregation->addMotifsRetard($traitement->getAMotifId());
			                }
			            }
			    	}
					$retards->getNext();
				}
				$newAgregation->save();
				
				$dateDemiJourneeIteration->modify("+12 hours");
				
			} while (       ($dateDemiJourneeIteration->format('U') - $now->format('U') < 3600*24*365*3) //on continue si on est pas trop éloigné dans le futur
					&& (($dateFinClone != null && $dateDemiJourneeIteration <= $dateFinClone)//on continue si on a pas dépassé la date de fin
					   || ($dateFinClone == null && ((!$DMabsencesCol->isFirst() || !$DMabsencesCol_start_compute) || (!$retards->isFirst() || !$retards_start_compute)) ))//ou continue si la date de fin n'est pas précisé et qu'on a pas encore épuisé toutes les absences et retards
				);
		}
		
		
		//on enregistre le marqueur qui certifie que le calcul pour cet eleve a été terminé correctement
		$newAgregation = new AbsenceAgregationDecompte();
		$newAgregation->setEleve($this);
		$newAgregation->setDateDemiJounee('0001-01-01 00:00:00');
		$newAgregation->save();
	}