/** * Récupère les données d'un élève à afficher * @param objet $eleve Un élève issu de getEleves() * @param date $date_debut * @param date $date_fin * @param objet $justifie_col Collection Propel avec les justifications * @param bool $donneeBrut * @return array Une ligne du tableau à afficher * @see getEleves() */ function traiteEleve($eleve,$date_debut, $date_fin, $justifie_col, $donneeBrut, $erreur=FALSE) { $eleve_id = $eleve->getId(); $donnees= array(); $donnees[$eleve_id] = array(); $propel_eleve = EleveQuery::create()->filterById($eleve_id)->findOne(); $eleveNbAbs['demi_journees'] = $propel_eleve->getDemiJourneesAbsence($date_debut, $date_fin)->count(); $eleveNbAbs['retards'] = $propel_eleve->getRetards($date_debut, $date_fin)->count(); if ($eleveNbAbs['demi_journees'] > 0 || $eleveNbAbs['retards'] > 0 ) { $eleveNbAbs['non_justifiees'] = $propel_eleve->getDemiJourneesNonJustifieesAbsence($date_debut, $date_fin)->count(); $eleveNbAbs['justifiees'] = $eleveNbAbs['demi_journees'] - $eleveNbAbs['non_justifiees']; $donnees[$eleve_id]['nom'] = $eleve->getNom(); $donnees[$eleve_id]['prenom'] = $eleve->getPrenom(); $donnees[$eleve_id]['classe'] = $eleve->getClasse(); $donnees[$eleve_id]['classe'] = $eleve->getClasseNom(); $donnees[$eleve_id]['nbre_lignes_total'] = 0; $donnees[$eleve_id]['demi_journees'] = $eleveNbAbs['demi_journees']; $donnees[$eleve_id]['justifiees'] = $eleveNbAbs['justifiees']; $donnees[$eleve_id]['non_justifiees'] = $eleveNbAbs['non_justifiees']; $donnees[$eleve_id]['retards'] = $eleveNbAbs['retards']; //Récupérer le décompte des traitements pour chaque élève $totalDemi=0; foreach ($justifie_col as $justifie) { // Décompte en données brutes if ($donneeBrut == TRUE) { $propel_traitEleve = AbsenceEleveTraitementQuery::create()->filterByAJustificationId($justifie->getid()) ->useJTraitementSaisieEleveQuery() ->useAbsenceEleveSaisieQuery() ->filterByEleveId($eleve_id) ->filterByPlageTemps($date_debut,$date_fin ) ->endUse() ->endUse() ; $traiteEleve_col = $propel_traitEleve; $donnees[$eleve_id]['traitement'][] = $traiteEleve_col->distinct()->count(); } else { // Décompte en 1/2 journées $abs_saisie_col_filtrees = $eleve->getAbsenceEleveSaisiesDecompteDemiJournees($date_debut, $date_fin); $justif_collection = new PropelCollection(); foreach ($abs_saisie_col_filtrees as $saisie) { foreach ($saisie->getAbsenceEleveTraitements() as $traitement) { if ($traitement->getAJustificationId() == $justifie->getid()) { $justif_collection->add($saisie); } } } require_once(dirname(__FILE__)."/../orm//helpers/AbsencesEleveSaisieHelper.php"); $dm = AbsencesEleveSaisieHelper::compte_demi_journee($justif_collection, $date_debut, $date_fin); $donnees[$eleve_id]['traitement'][] = $dm->count(); $totalDemi += $dm->count(); } } $donnees[$eleve_id]['totalDemi']=$totalDemi; } unset ($eleveNbAbs, $traiteEleve_col, $propel_eleve, $propel_traitEleveDemi, $traiteEleveDemi, $traiteEleveDemi_col, $propel_traitEleve); if ($erreur && isset ($donnees[$eleve_id]['justifiees']) && ($donnees[$eleve_id]['justifiees']==$donnees[$eleve_id]['totalDemi'])) { $donnees[$eleve_id] = array(); } return $donnees; }
/** * Merge une notification avec son modele * * @param AbsenceEleveNotification $notification * @param String $modele chemin du modele tbs * @return clsTinyButStrong $TBS deroulante des types d'absences */ public static function MergeNotification($notification, $modele){ //on charge le modele et on merge les données de l'établissement $TBS=self::MergeInfosEtab($modele); $TBS->MergeField('notif_id',$notification->getId()); //on récupère la liste des noms d'eleves $eleve_col = new PropelCollection(); if ($notification->getAbsenceEleveTraitement() != null) { foreach ($notification->getAbsenceEleveTraitement()->getAbsenceEleveSaisies() as $saisie) { $eleve_col->add($saisie->getEleve()); } } //merge des saisies pour modèles du type 1.5.3 $TBS->MergeBlock('el_col',$eleve_col); foreach ($eleve_col as $eleve) { $saisies_string_col = new PropelCollection(); $saisies_col = AbsenceEleveSaisieQuery::create()->filterByEleveId($eleve->getId()) ->useJTraitementSaisieEleveQuery() ->filterByATraitementId($notification->getAbsenceEleveTraitement()->getId())->endUse() ->orderBy("DebutAbs", Criteria::ASC) ->find(); foreach ($saisies_col as $saisie) { $str = $saisie->getDateDescription(); if($saisie->getGroupeNameAvecClasses()!=''){ $str.= ', cours de '.$saisie->getGroupeNameAvecClasses(); } $saisies_string_col->append($str); } $TBS->MergeBlock('saisies_string_eleve_id_'.$eleve->getId(), $saisies_string_col); } $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) { } } $temps_demi_journee = $heure_demi_journee.$minute_demi_journee; foreach($eleve_col as $eleve) { $demi_journee_string_col = new PropelCollection();array (); $abs_col = AbsenceEleveSaisieQuery::create()->filterByEleve($eleve) ->useJTraitementSaisieEleveQuery() ->filterByATraitementId($notification->getAbsenceEleveTraitement()->getId())->endUse() ->orderBy("DebutAbs", Criteria::ASC) ->find(); require_once("helpers/AbsencesEleveSaisieHelper.php"); $demi_j = AbsencesEleveSaisieHelper::compte_demi_journee($abs_col); foreach($demi_j as $date) { $str = 'Le '; $str .= (strftime("%a %d/%m/%Y", $date->format('U'))); if ($date->format('H') < 12) { $next_date = $demi_j->getNext(); if ($next_date != null && $next_date->format('Y-m-d') == $date->format('Y-m-d')) { $str .= ' la journée'; } else { $str .= ' le matin'; //on recule le pointeur car on l'a avancé avec $demi_j->getNext() $demi_j->getPrevious(); } } else { $str .= ' l\'après midi'; } $demi_journee_string_col->append($str); } //var_dump($demi_journee_string_col);die; //if (count($demi_journee_string_col) == 0) die; $TBS->MergeBlock('demi_j_string_eleve_id_'.$eleve->getId(), $demi_journee_string_col); } if ($notification->getTypeNotification() == AbsenceEleveNotificationPeer::TYPE_NOTIFICATION_COURRIER) { //on va mettre les champs dans des variables simple //on fait un petit traitement pour bien formatter ça si on a un ou deux responsables, avec le même nom de famille ou pas. if ($notification->getAdresse() != null && $notification->getResponsableEleves()->count() == 1) { $responsable = $notification->getResponsableEleves()->getFirst(); $destinataire = $responsable->getCivilite().' '.strtoupper($responsable->getNom()).' '.strtoupper($responsable->getPrenom()); } elseif ($notification->getAdresse() != null&& $notification->getResponsableEleves()->count() == 2) { $responsable1 = $notification->getResponsableEleves()->getFirst(); $responsable2 = $notification->getResponsableEleves()->getNext(); if (strtoupper($responsable1->getNom()) == strtoupper($responsable2->getNom())) { $destinataire = $responsable1->getCivilite().' et '.$responsable2->getCivilite().' '.strtoupper($responsable1->getNom()); } else { $destinataire = $responsable1->getCivilite().' '.strtoupper($responsable1->getNom()); $destinataire .= ' et '.$responsable2->getCivilite().' '.strtoupper($responsable2->getNom()); } } else { $destinataire = ''; } $TBS->MergeField('destinataire',$destinataire); $adr = $notification->getAdresse(); if ($adr == null) { $adr = new Adresse(); } $TBS->MergeField('adr',$adr); } else if ($notification->getTypeNotification() == AbsenceEleveNotificationPeer::TYPE_NOTIFICATION_EMAIL) { $destinataire = ''; foreach ($notification->getResponsableEleves() as $responsable) { $destinataire .= $responsable->getCivilite().' '.strtoupper($responsable->getNom()).' '.strtoupper($responsable->getPrenom()).' '; } $TBS->MergeField('destinataire',$destinataire); } else if ($notification->getTypeNotification() == AbsenceEleveNotificationPeer::TYPE_NOTIFICATION_SMS) { $destinataire = ''; foreach ($notification->getResponsableEleves() as $responsable) { $destinataire .= $responsable->getCivilite().' '.strtoupper($responsable->getNom()).' '.strtoupper($responsable->getPrenom()).' '; } $TBS->MergeField('destinataire',$destinataire); } // $TBS->Show(TBS_NOTHING); return $TBS; }
public function testCompte_demi_journee() { $florence_eleve = EleveQuery::create()->findOneByLogin('Florence Michu'); $saisie_col = AbsenceEleveSaisieQuery::create()->orderByDebutAbs(Criteria::DESC); try { AbsencesEleveSaisieHelper::compte_demi_journee($saisie_col); $this->fail('Une exception doit être soulevée lors de cette sauvegarde'); } catch (Exception $e) { $this->assertTrue(true); } $this->assertTrue(AbsencesEleveSaisieHelper::compte_demi_journee(new PropelCollection())->isEmpty()); $saisie_col = new PropelCollection(); $saisie = new AbsenceEleveSaisie(); $saisie->setDebutAbs('2010-11-01 08:00:00'); $saisie->setFinAbs('2010-11-01 13:00:00'); $saisie_col->append($saisie); saveSetting('abs2_heure_demi_journee','11:50'); $this->assertEquals(1,AbsencesEleveSaisieHelper::compte_demi_journee($saisie_col)->count()); saveSetting('abs2_heure_demi_journee','11:10'); $this->assertEquals(2,AbsencesEleveSaisieHelper::compte_demi_journee($saisie_col)->count()); saveSetting('abs2_heure_demi_journee','11:50'); $saisie = new AbsenceEleveSaisie(); $saisie->setDebutAbs('2010-11-01 09:00:00'); $saisie->setFinAbs('2010-11-01 17:00:00'); $saisie_col->append($saisie); $this->assertEquals(2,AbsencesEleveSaisieHelper::compte_demi_journee($saisie_col)->count()); $saisie = new AbsenceEleveSaisie(); $saisie->setDebutAbs('2010-11-01 09:00:00'); $saisie->setFinAbs('2010-11-01 17:00:00'); $saisie_col->append($saisie); $this->assertEquals(2,AbsencesEleveSaisieHelper::compte_demi_journee($saisie_col)->count()); $saisie = new AbsenceEleveSaisie(); $saisie->setDebutAbs('2010-11-02 10:00:00'); $saisie->setFinAbs('2010-11-02 10:50:00'); $saisie_col->append($saisie); $this->assertEquals(3,AbsencesEleveSaisieHelper::compte_demi_journee($saisie_col)->count()); $saisie = new AbsenceEleveSaisie(); $saisie->setDebutAbs('2010-11-02 11:00:00'); $saisie->setFinAbs('2010-11-02 13:30:00'); $saisie_col->append($saisie); $this->assertEquals(3,AbsencesEleveSaisieHelper::compte_demi_journee($saisie_col)->count()); $saisie = new AbsenceEleveSaisie(); $saisie->setDebutAbs('2010-11-02 11:00:00'); $saisie->setFinAbs('2010-11-02 17:30:00'); $saisie_col->append($saisie); $this->assertEquals(4,AbsencesEleveSaisieHelper::compte_demi_journee($saisie_col)->count()); $saisie = new AbsenceEleveSaisie(); $saisie->setDebutAbs('2010-11-02 11:00:00'); $saisie->setFinAbs('2010-11-03 10:30:00'); $saisie_col->append($saisie); $this->assertEquals(5,AbsencesEleveSaisieHelper::compte_demi_journee($saisie_col)->count()); $saisie = new AbsenceEleveSaisie(); $saisie->setDebutAbs('2010-11-02 11:00:00'); $saisie->setFinAbs('2010-11-03 17:30:00');//c'est un mercredi am donc on le compte pas, le total resta à 5 $saisie_col->append($saisie); $this->assertEquals(5,AbsencesEleveSaisieHelper::compte_demi_journee($saisie_col)->count()); $saisie = new AbsenceEleveSaisie(); $saisie->setDebutAbs('2010-11-03 16:00:00'); $saisie->setFinAbs('2010-11-03 17:30:00'); $saisie_col->append($saisie); $this->assertEquals(5,AbsencesEleveSaisieHelper::compte_demi_journee($saisie_col)->count()); $saisie = new AbsenceEleveSaisie(); $saisie->setDebutAbs('2010-11-03 16:00:00'); $saisie->setFinAbs('2010-11-04 02:00:00'); $saisie_col->append($saisie); $this->assertEquals(5,AbsencesEleveSaisieHelper::compte_demi_journee($saisie_col)->count()); $saisie = new AbsenceEleveSaisie(); $saisie->setDebutAbs('2010-11-03 16:00:00'); $saisie->setFinAbs('2010-11-04 09:00:00'); $saisie_col->append($saisie); $this->assertEquals(6,AbsencesEleveSaisieHelper::compte_demi_journee($saisie_col)->count()); $saisie = new AbsenceEleveSaisie(); $saisie->setDebutAbs('2010-11-04 15:00:00'); $saisie->setFinAbs('2010-11-04 16:00:00'); $saisie_col->append($saisie); $this->assertEquals(7,AbsencesEleveSaisieHelper::compte_demi_journee($saisie_col)->count()); $saisie_col = new PropelCollection(); $saisie = new AbsenceEleveSaisie(); $saisie->setDebutAbs('2010-11-05 14:00:00'); $saisie->setFinAbs('2010-11-05 15:00:00'); $saisie_col->append($saisie); saveSetting('abs2_heure_demi_journee','12:50'); $this->assertEquals('12:00',AbsencesEleveSaisieHelper::compte_demi_journee($saisie_col)->getFirst()->format('H:i')); saveSetting('abs2_heure_demi_journee','11:50'); $florence_eleve = EleveQuery::create()->findOneByLogin('Florence Michu'); $lebesgue_prof = UtilisateurProfessionnelQuery::create()->findOneByLogin('Lebesgue'); $saisie = new AbsenceEleveSaisie(); $saisie->setDebutAbs('2010-10-19 08:00:00'); $saisie->setFinAbs('2010-10-19 16:30:00'); $saisie->setEleve($florence_eleve); $saisie->setUtilisateurProfessionnel($lebesgue_prof); $saisie->save(); $saisie_col = new PropelCollection(); $saisie_col->append($saisie); $this->assertEquals(2,AbsencesEleveSaisieHelper::compte_demi_journee($saisie_col)->count()); //on va tester les effets de borne d'intervalle pour la bascule de midi saveSetting('abs2_heure_demi_journee','11:55'); $saisie_col = new PropelCollection(); $saisie = new AbsenceEleveSaisie(); $saisie->setDebutAbs('2010-11-05 11:55:00');//cette saisie va compter pour une après midi $saisie->setFinAbs('2010-11-05 12:25:00'); $saisie_col->append($saisie); $this->assertEquals('12:00',AbsencesEleveSaisieHelper::compte_demi_journee($saisie_col)->getFirst()->format('H:i')); $saisie_col = new PropelCollection(); $saisie = new AbsenceEleveSaisie(); $saisie->setDebutAbs('2010-11-05 11:50:00'); $saisie->setFinAbs('2010-11-05 12:25:00'); $saisie_col->append($saisie); $this->assertEquals('00:00',AbsencesEleveSaisieHelper::compte_demi_journee($saisie_col)->getFirst()->format('H:i')); }
foreach ($toutesSaisies as $saisie) { $str = $saisie->getDateDescription(); if($saisie->getGroupeNameAvecClasses()!=''){ $str.= ', cours de '.$saisie->getGroupeNameAvecClasses(); } $tableSaisie[] = $str; $notification['saisies']->add($saisie); } $notification['saisies_eleve'] = $tableSaisie; $demi_journee_string_col = new PropelCollection();array (); $abs_col = $notification['saisies']; require_once("helpers/AbsencesEleveSaisieHelper.php"); $demi_j = AbsencesEleveSaisieHelper::compte_demi_journee($abs_col); foreach($demi_j as $date) { $str = 'Le '; $str .= (strftime("%a %d/%m/%Y", $date->format('U'))); if ($date->format('H') < 12) { $next_date = $demi_j->getNext(); if ($next_date != null && $next_date->format('Y-m-d') == $date->format('Y-m-d')) { $str .= ' la journée'; } else { $str .= ' le matin'; //on recule le pointeur car on l'a avancé avec $demi_j->getNext() $demi_j->getPrevious(); } } else { $str .= ' l\'après midi';
/** * * Retourne une collection contenant sous forme de DateTime les demi journees d'absence non justifiees * Un DateTime le 23/05/2010 à 00:00 signifie que l'eleve a ete saisie absent le 23/05/2010 au matin * Pour l'apres midi la date est 23/05/2010 à 12:30 * * @param DateTime $date_debut * @param DateTime $date_fin * * @return PropelCollection DateTime[] */ public function getDemiJourneesNonJustifieesAbsence($date_debut = null, $date_fin = null) { $abs_saisie_col_filtrees = $this->getAbsenceEleveSaisiesDecompteDemiJournees($date_debut, $date_fin, true); if ($date_fin != null) { $date_fin_iteration = clone $date_fin; } else { $date_fin_iteration = new DateTime('now'); $date_fin_iteration->setTime(23,59); } if ($this->getDateSortie() != null && $this->getDateSortie('U') < $date_fin_iteration->format('U')) { $date_fin_iteration = $this->getDateSortie(null); $date_fin_iteration->modify('-1 minute'); } require_once(dirname(__FILE__)."/../../../helpers/AbsencesEleveSaisieHelper.php"); return AbsencesEleveSaisieHelper::compte_demi_journee($abs_saisie_col_filtrees, $date_debut, $date_fin_iteration); }