/** * Test that PropelCollection->add() prevents duplicates of objects strictly identical * */ public function testAdd() { Propel::disableInstancePooling(); $eleve1 = EleveQuery::create()->findOneByLogin('Florence Michu'); $eleve1->setNom('test_different'); $eleve_col = new PropelCollection(); $eleve_col->add($eleve1); $eleve1idem = EleveQuery::create()->findOneByLogin('Florence Michu'); $this->assertFalse($eleve_col->contains($eleve1idem)); $eleve_col->add($eleve1idem); $this->assertEquals(2, count($eleve_col)); Propel::enableInstancePooling(); $eleve1 = EleveQuery::create()->findOneByLogin('Florence Michu'); $eleve_col = new PropelCollection(); $eleve_col->add($eleve1); $eleve_col->add($eleve1); $this->assertEquals(1, count($eleve_col)); }
/** * * Renvoi une description intelligible du traitement * * @return String description * */ public function getDescription() { if (!isset($description) || $description === null) { $desc = 'n° '.$this->getId(); $desc .= ' créé le '; $desc .= strftime("%a %d/%m/%Y", $this->getUpdatedAt('U')); $eleve_col = new PropelCollection(); foreach ($this->getAbsenceEleveSaisies() as $abs_saisie) { if ($abs_saisie->getEleve() != null) { $eleve_col->add($abs_saisie->getEleve()); } } foreach ($eleve_col as $eleve) { if ($eleve_col->isFirst()) { $desc .= '; '; } $desc .= $eleve->getNom().' '.$eleve->getPrenom(); if (!$eleve_col->isLast()) { $desc .= ', '; } } if ($this->getAbsenceEleveType() != null) { $desc .= "; type : ".$this->getAbsenceEleveType()->getNom(); } if ($this->getAbsenceEleveMotif() != null) { $desc .= "; motif : ".$this->getAbsenceEleveMotif()->getNom(); } if ($this->getAbsenceEleveJustification() != null) { $desc .= "; justification : ".$this->getAbsenceEleveJustification()->getNom(); } $notif = false; foreach ($this->getAbsenceEleveNotifications() as $notification) { if ($notification->getStatutEnvoi() == AbsenceEleveNotificationPeer::STATUT_ENVOI_SUCCES || $notification->getStatutEnvoi() == AbsenceEleveNotificationPeer::STATUT_ENVOI_SUCCES_AVEC_ACCUSE_DE_RECEPTION) { $notif = true; break; } } if ($notif) { $desc .= "; Notifié"; } if ($this->getCommentaire() != null && $this->getCommentaire() != '') { $desc .= "; Commentaire : ".$this->getCommentaire(); } $description = $desc; } return $description; }
} } if ($notification->getModifiable()) { echo '<div>'; echo '<form method="post" action="enregistrement_modif_notification.php">'; echo '<input type="hidden" name="menu" value="'.$menu.'"/>'; echo '<p>'; echo '<input type="hidden" name="id_notification" value="'.$notification->getPrimaryKey().'"/>'; echo '<input type="hidden" name="modif" value="adresse"/>'; echo ("<select name=\"adr_id\" onchange='submit()'>"); $adresse_col = new PropelCollection(); if ($notification->getAbsenceEleveTraitement() != null) { foreach ($notification->getAbsenceEleveTraitement()->getResponsablesInformationsSaisies() as $responsable_information) { if ($responsable_information->getResponsableEleve() != null && $responsable_information->getResponsableEleve()->getAdresse() != null) { $adresse_col->add($responsable_information->getResponsableEleve()->getAdresse()); } } } foreach ($adresse_col as $responsable_addresse) { //$responsable_addresse = new Adresse(); echo '<option value="'.$responsable_addresse->getPrimaryKey().'"'; if ($notification->getAdresse() != null && $responsable_addresse->getPrimaryKey() == $notification->getAdresse()->getPrimaryKey()) { echo " selected='selected' "; } echo ">"; if ($responsable_addresse->getAdr1() != null && $responsable_addresse->getAdr1() != '') { echo $responsable_addresse->getAdr1(); echo ' '; }
/** * 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; }
echo '</tr>'; } echo '</table></br>'; echo '<a dojoType="dijit.form.Button" onclick="location.href=\'generer_notifications_par_lot.php?envoyer_email=true\';" href="generer_notifications_par_lot.php?envoyer_email=true">Envoyer les emails</a>'; echo '<br/><br/>'; } // //on affiche les notifications de type courrier // $notif_courrier_a_envoyer_col = new PropelCollection(); $notif_courrier_fini = new PropelCollection(); foreach($notifications_col as $notif) { if ($notif->getTypeNotification() == AbsenceEleveNotificationPeer::TYPE_NOTIFICATION_COURRIER) { if ($notif->getStatutEnvoi() == AbsenceEleveNotificationPeer::STATUT_ENVOI_ETAT_INITIAL || $notif->getStatutEnvoi() == AbsenceEleveNotificationPeer::STATUT_ENVOI_PRET_A_ENVOYER) { $notif_courrier_a_envoyer_col->add($notif); } else { $notif_courrier_fini->add($notif); } } } if (!$notif_courrier_fini->isEmpty()) {$notif = new AbsenceEleveNotification(); echo 'Courriers duplicata'; echo '<table id="table_liste_absents" style="border-spacing:0px;">'; //en tete commentaire echo '</tr>'; echo '<th>id</th>'; echo '<th></th>'; echo '<th></th>'; echo '<th>responsables</th>'; echo '<th>adresse</th>';
<?php $eleve_col = new PropelCollection(); $elevesLogin=array(); $tableNotifications=array(); foreach ($notifications_col as $notification) { if ($notification->getTypeNotification() != AbsenceEleveNotificationPeer::TYPE_NOTIFICATION_COURRIER) { continue; } if ($notification->getAbsenceEleveTraitement() != null) { foreach ($notification->getAbsenceEleveTraitement()->getAbsenceEleveSaisies() as $saisie) { $eleve_col->add ($saisie->getEleve()); if (!isset ($tableNotifications[$saisie->getEleve()->getLogin()]['notif_id_col'])) { // première fois qu'on trouve un élève $tableNotifications[$saisie->getEleve()->getLogin()]['notif_id_col'] = new PropelCollection(); $tableNotifications[$saisie->getEleve()->getLogin()]['notif_col'] = new PropelCollection(); $tableNotifications[$saisie->getEleve()->getLogin()]['notif_id']=''; $tableNotifications[$saisie->getEleve()->getLogin()]['eleve'] = new PropelCollection(); $tableNotifications[$saisie->getEleve()->getLogin()]['saisies'] = new PropelCollection(); // On récupère les infos de l'élève $tableNotifications[$saisie->getEleve()->getLogin()]['getNom'] = $saisie->getEleve()->getNom(); $tableNotifications[$saisie->getEleve()->getLogin()]['getPrenom'] = $saisie->getEleve()->getPrenom(); $tableNotifications[$saisie->getEleve()->getLogin()]['getClasseNomComplet'] = $saisie->getEleve()->getClasseNomComplet(); $tableNotifications[$saisie->getEleve()->getLogin()]['getId'] = $saisie->getEleve()->getId(); $tableNotifications[$saisie->getEleve()->getLogin()]['responsable'] = $notification->getResponsableEleves(); //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.
/** * * filtre une collection de saisie pour ne retenir que les saisies englobante * * @return AbsenceEleveLieu * */ public function filterAbsenceEleveSaisiesEnglobantes(PropelCollection $col) { $result = new PropelCollection(); foreach ($col as $saisie) { if ($saisie->getEleveId() == $this->getEleveId() && $saisie->getDebutAbs(null) <= $this->getDebutAbs(null) && $saisie->getFinAbs(null) >= $this->getFinAbs(null)) { $result->add($saisie); } } return $result; }