/** * @param $oRole */ public function setRoles($oRole) { $oUserRoles = new UserRole(); $oUserRoles->setRole($oRole); $oUserRoles->setUser($this); $aCollection = new \PropelCollection(); $aCollection->append($oUserRoles); $this->setUserRoles($aCollection); }
/** * Compte les demi-journees saisies. Les saisies doivent ètre triées par ordre de début. * Cette méthode ne travaille que sur les dates, et prend en compte les fermeture de l'établissement * * @param PropelObjectCollection $abs_saisie_col collection d'objets AbsenceEleveSaisie * * @return PropelCollection une collection de date time par demi journee comptee (un datetime pour le matin et un datetime pour l'apres midi */ public static function compte_demi_journee($abs_saisie_col, $date_debut_iteration = null, $date_fin_iteration = null) { if ($abs_saisie_col->isEmpty()) { return new PropelCollection(); } $abs_saisie_col->uasort(array("AbsencesEleveSaisieHelper", "compare_debut_absence")); //on récupère l'heure de demi-journée $heure_demi_journee = 11;//11:50 par défaut si rien n'est précisé dans les settings $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 va regarder la date du début pour notre algorithme if ($date_debut_iteration == null) { $date_debut_iteration = $abs_saisie_col->getFirst()->getDebutAbs(null); } if ($date_debut_iteration->format('Hi') < $heure_demi_journee.$minute_demi_journee) { $date_debut_iteration->setTime(0, 0, 0); } else { $date_debut_iteration->setTime(12, 0, 0); } //on va regarder la date du fin pour notre algorithme if ($date_fin_iteration == null) { foreach ($abs_saisie_col as $saisie) { if ($date_fin_iteration == null || $saisie->getFinAbs('U') > $date_fin_iteration->format('U')) { $date_fin_iteration = $saisie->getFinAbs(null); } } } if ($date_fin_iteration->format('Hi') < $heure_demi_journee.$minute_demi_journee) { $date_fin_iteration->setTime(12, 0, 0); } else { $date_fin_iteration->setTime(23, 59, 59); $date_fin_iteration->modify("+1 second"); } $date_fin_iteration->modify("+2 hours");//on ajout deux heures pour prendre en compte un décalage dans la date de compteur (+1h35) dans l'algorithme plus bas $result = new PropelCollection(); $date_compteur = clone $date_debut_iteration; $horaire_tab = EdtHorairesEtablissementPeer::retrieveAllEdtHorairesEtablissementArrayCopy(); require_once(dirname(__FILE__)."/EdtHelper.php"); foreach($abs_saisie_col as $saisie) { if ($date_compteur->format('U') < $saisie->getDebutAbs('U')) { $date_compteur = clone $saisie->getDebutAbs(null); } if ($date_compteur >= $date_fin_iteration) { break; } while ($date_compteur <= $saisie->getFinAbs(null) && $date_compteur < $date_fin_iteration) { //est-ce un jour de la semaine ouvert ? if (!EdtHelper::isJourneeOuverte($date_compteur)) { //etab fermé on va passer au lendemain $date_compteur->setTime(23, 59, 59); $date_compteur->modify("+2 hours"); continue; } elseif (!EdtHelper::isHoraireOuvert($date_compteur)) { $horaire = $horaire_tab[EdtHelper::$semaine_declaration[$date_compteur->format("w")]]; if ($date_compteur->format('Hi') < $horaire->getOuvertureHoraireEtablissement('Hi')) { //c'est le matin, on règle sur l'heure d'ouverture $date_compteur->setTime($horaire->getOuvertureHoraireEtablissement('H'), $horaire->getOuvertureHoraireEtablissement('i')); } else { //on est apres la fermeture, on va passer au lendemain $date_compteur->setTime(23, 59, 59); $date_compteur->modify("+2 hours"); } continue; } elseif ($date_compteur < $saisie->getDebutAbs(null) && !EdtHelper::isHoraireOuvert($saisie->getDebutAbs(null))) { $date_compteur->modify("+19 minutes"); continue; } if ($date_compteur->format('Hi') < $heure_demi_journee.$minute_demi_journee) { $date_compteur->setTime(0, 0, 0); } else { $date_compteur->setTime(12, 0, 0); } $date_compteur_suivante = clone $date_compteur; $date_compteur_suivante->modify("+15 hours");//en ajoutant 15 heure on est sur de passer a la demi-journee suivante if ($date_compteur_suivante->format('H') < 12) { $date_compteur_suivante->setTime(0, 0, 0); } else { $date_compteur_suivante->setTime($heure_demi_journee, $minute_demi_journee, 0); } if ($saisie->getDebutAbs(null) < $date_compteur_suivante && $saisie->getFinAbs(null) > $date_compteur) { $result->append(clone $date_compteur); //on ajoute 1h35 //pour eviter le cas ou on a une saisie par exemple sur 11h45 -> 13h et de la compter comme deux demi-journees $date_compteur_suivante->modify("+1 hour"); $date_compteur_suivante->modify("+45 minutes"); } $date_compteur = $date_compteur_suivante; $saisie->clearAllReferences(); } } return $result; }
} } } if (getSettingValue("abs2_saisie_prof_decale")=='y' || $utilisateur->getStatut() != "professeur") { $col = EdtSemaineQuery::create()->find(); $semaineAff = new PropelCollection(); //on va commencer la liste à la semaine 31 (milieu des vacances d'ete) for ($i = 0; $i < $col->count(); $i++) { $pos = ($i + 30) % $col->count(); $semaine = $col[$pos]; $semaineAff->append($col[$pos]); } } else { $semaineAff = new PropelCollection(); $semaineAff->append($current_semaine); } if ($current_cours != null && $current_cours->getTypeSemaine() != '' && $current_cours->getTypeSemaine() != '0' && $current_semaine != null && $current_cours->getTypeSemaine() != $current_semaine->getTypeEdtSemaine()) { $erreurSemaine=TRUE; $current_cours = null; $current_groupe = null; $current_classe = null; $current_aid = null; } } } //**************** CLASSES ***************** if (getSettingValue("GepiAccesAbsTouteClasseCpe")=='yes' && $utilisateur->getStatut() == "cpe") { $classe_col = ClasseQuery::create()->orderByNom()->orderByNomComplet()->find();
} //afichage des eleves $eleve_col = new PropelCollection(); if ($type_selection == 'id_eleve') { $query = EleveQuery::create(); if ($utilisateur->getStatut() != "cpe" || getSettingValue("GepiAccesAbsTouteClasseCpe")!='yes') { $query->filterByUtilisateurProfessionnel($utilisateur); } $eleve = $query->filterById($id_eleve) ->where('Eleve.DateSortie<?','0') ->orWhere('Eleve.DateSortie is NULL') ->orWhere('Eleve.DateSortie>?', $dt_date_absence_eleve_debut_saisir_eleve->format('U')) ->findOne(); if ($eleve != null) { $eleve_col->append($eleve); } } else if ($type_selection == 'nom_eleve') { $query = EleveQuery::create(); if ($utilisateur->getStatut() != "cpe" || getSettingValue("GepiAccesAbsTouteClasseCpe")!='yes') { $query->filterByUtilisateurProfessionnel($utilisateur); } $eleve_col = $query->filterByNomOrPrenomLike($nom_eleve) ->where('Eleve.DateSortie<?','0') ->orWhere('Eleve.DateSortie is NULL') ->orWhere('Eleve.DateSortie>?', $dt_date_absence_eleve_debut_saisir_eleve->format('U')) ->limit(20)->find(); } elseif (isset($current_groupe) && $current_groupe != null) { $query = EleveQuery::create(); $eleve_col = $query->useJEleveGroupeQuery() ->filterByIdGroupe($current_groupe->getId())
public function testAddClassmatesWithPropelCollection() { $john = new DBStudent(); $john->setName('john'); $jean = new DBStudent(); $jean->setName('jean'); $phil = new DBStudent(); $phil->setName('phil'); $john->setClassmates(array($jean, $phil)); $john->save(); $this->assertEquals(3, DBStudentQuery::create()->count()); $this->assertTrue($john->hasClassmate($jean)); $this->assertTrue($john->hasClassmate($phil)); $this->assertTrue($phil->hasClassmate($john)); $this->assertTrue($jean->hasClassmate($john)); $this->assertEquals(2, count($john->getClassmates())); $henri = new DBStudent(); $henri->setName('henri'); $marco = new DBStudent(); $marco->setName('marco'); $coll = new PropelCollection(); $coll->append($henri); $coll->append($marco); $john->addClassmates($coll); $john->save(); $this->assertEquals(5, DBStudentQuery::create()->count()); $this->assertTrue($john->hasClassmate($henri)); $this->assertTrue($john->hasClassmate($marco)); $this->assertTrue($marco->hasClassmate($john)); $this->assertTrue($henri->hasClassmate($john)); $this->assertEquals(4, count($john->getClassmates())); }
public function testPeerUpdateAgregationTable() { //on va modifier à la main une saisie 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(SAMEDI_s40j6)->getFirst(); $saisie_id = $saisie->getId(); mysqli_query($GLOBALS["mysqli"], "update a_saisies set updated_at = now() where id = ".$saisie_id); $this->assertFalse(AbsenceAgregationDecomptePeer::checkSynchroAbsenceAgregationTable(null, null, 0)); $col = new PropelCollection(); $col->append($saisie); AbsenceAgregationDecomptePeer::updateAgregationTable($col); $this->assertTrue(AbsenceAgregationDecomptePeer::checkSynchroAbsenceAgregationTable(new DateTime(VENDREDI_s40j5.' 00:00:00'),new DateTime(DIMANCHE_s41j7.' 23:59:59'),0)); $this->assertTrue(AbsenceAgregationDecomptePeer::checkSynchroAbsenceAgregationTable(null, null, 0)); 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->getEleve()->clearAllReferences(); $saisie->clearAllReferences(); $saisie->reload(); $col = new PropelCollection(); $col->append($saisie); AbsenceAgregationDecomptePeer::updateAgregationTable($col); $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(); AbsenceAgregationDecompteQuery::create()->deleteAll(); AbsenceAgregationDecomptePeer::updateAgregationTable(AbsenceEleveSaisieQuery::create()->filterByPlageTemps(new DateTime(VENDREDI_s40j5), new DateTime(DIMANCHE_s41j7))->find()); $eleve_col = EleveQuery::create()->useAbsenceEleveSaisieQuery()->filterByPlageTemps(new DateTime(VENDREDI_s40j5), new DateTime(DIMANCHE_s41j7))->endUse()->find(); foreach($eleve_col as $eleve) { $this->assertTrue($eleve->checkSynchroAbsenceAgregationTable(new DateTime(SAMEDI_s40j6.' 00:00:00'),new DateTime(MARDI_s41j2))); } }
$clone->setDateEnvoi(null); $clone->setErreurMessageEnvoi(null); $clone->save(); $_POST["id_notification"] = $clone->getId(); $message_enregistrement .= '<span style="color:green">Nouvelle notification</span>'; include "visu_notification.php"; die; } elseif ($modif == 'duplication_par_responsable') { $responsablesToAdd = new PropelCollection(); $responsables_informations = $notification->getAbsenceEleveTraitement()->getResponsablesInformationsSaisies(); foreach ($responsables_informations as $responsable_information) { $responsable = $responsable_information->getResponsableEleve(); if ($responsable == null || $notification->getResponsableEleves()->contains($responsable) || $responsable_information->getNiveauResponsabilite() == '0') { continue; } $responsablesToAdd->append($responsable); } foreach ($responsablesToAdd as $responsableToAdd) { $clone = $notification->copy(); //no deep copy $clone->save(); $id = $clone->getId(); //this is done to avoid a bug in deepcopy $notification->copyInto($clone, true); // deep copy $clone->setId($id); $clone->setNew(false); $clone->setEmail($responsableToAdd->getMel()); $clone->setTelephone($responsableToAdd->getTelPort()); $clone->setAdresseId($responsableToAdd->getAdresseId()); $clone->save();
$recap = $notif->getId().', '; foreach ($notif->getResponsableEleves() as $responsable) { $recap .= $responsable->getCivilite().' '.strtoupper($responsable->getNom()).' '.$responsable->getPrenom(); if (!$notif->getResponsableEleves()->isLast()) { $recap .= ' '; } } $courrier_recap_col->append($recap); //on met un code d'erreur au cas ou la generation se fait mal if ($notif->getStatutEnvoi() == AbsenceEleveNotificationPeer::STATUT_ENVOI_ETAT_INITIAL || $notif->getStatutEnvoi() == AbsenceEleveNotificationPeer::STATUT_ENVOI_PRET_A_ENVOYER) { $notif->setStatutEnvoi(AbsenceEleveNotificationPeer::STATUT_ENVOI_ECHEC); $notif->setErreurMessageEnvoi('Echec de l\'impression par lot'); $notif->save(); $courrier_nouvellement_envoyés_col->append($notif); } else { $notif->setUpdatedAt('now'); $notif->save(); } } //on imprime le global $TBS->MergeBlock('notifications',$tableNotifications); $TBS->MergeField('nb_impressions',count($tableNotifications)); $TBS->MergeBlock('courrier_recap_col',$courrier_recap_col); // Output as a download file (some automatic fields are merged here) //on change le statut des notifications foreach($courrier_nouvellement_envoyés_col as $notif) { $notif->setDateEnvoi('now');
/** * 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; }
$dt_debut->setTime(0, 0, 0); $dt_fin = clone $dt_date_absence_eleve; $dt_fin->setTime(23, 59, 59); //on récupere les saisies car avant puis on va filtrer avec les ids car filterManquementObligationPresence bug un peu avec les requetes imbriquées $saisie_query = AbsenceEleveSaisieQuery::create()->filterByPlageTemps($dt_debut, $dt_fin)->setFormatter(ModelCriteria::FORMAT_ARRAY); if (!isFiltreRechercheParam('filter_manqement_obligation') || getFiltreRechercheParam('filter_manqement_obligation') != 'n') { //par défaut on filtre les manquement à l'obligation de présence $saisie_query->filterByManquementObligationPresence(); } $saisie_col = $saisie_query->find(); $query = EleveQuery::create()->orderBy('Nom', Criteria::ASC)->orderBy('Prenom', Criteria::ASC)->useAbsenceEleveSaisieQuery()->filterById($saisie_col->toKeyValue('Id', 'Id'))->endUse(); if ($utilisateur->getStatut() != "cpe" || getSettingValue("GepiAccesAbsTouteClasseCpe") != 'yes') { $query->filterByUtilisateurProfessionnel($utilisateur); } if ($type_selection == 'id_eleve') { $eleve_col->append($query->findPk($id_eleve)); } else { if ($type_selection == 'nom_eleve') { $query->filterByNomOrPrenomLike($nom_eleve); } elseif ($current_groupe != null) { $query->useJEleveGroupeQuery()->filterByIdGroupe($current_groupe->getId())->enduse(); } elseif ($current_aid != null) { $query->useJAidElevesQuery()->filterByIdAid($current_aid->getId())->enduse(); } elseif ($current_classe != null) { $query->useJEleveClasseQuery()->filterByIdClasse($current_classe->getId())->enduse(); } else { //rien à faire } } if ($type_selection != 'id_eleve' && $type_selection != 'nom_eleve') { //on filtre
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); } $notification['demi_j_string'] = $demi_journee_string_col; } //on imprime le global
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')); }
/** * * Retourne une collection contenant des saisies comptée comme retard pour le décompte officiel * * @param mixed $periode numeric or PeriodeNote value. * * @return PropelCollection AbsenceEleveSaisie[] */ public function getRetards($date_debut=null, $date_fin = null) { if (($date_fin != null) && ($this->getDateSortie() != null && $this->getDateSortie('U') < $date_fin->format('U'))) { $date_fin = $this->getDateSortie(null); } $abs_saisie_col = $this->getAbsenceEleveSaisiesParDate($date_debut, $date_fin); if ($abs_saisie_col->isEmpty()) { return new PropelCollection(); } $result = new PropelCollection(); $abs_saisie_englobante = clone $abs_saisie_col; //on va faire le décompte officiel des retard foreach ($abs_saisie_col as $saisie) { if ($saisie->getEleveId() != $this->getId()) { continue; } if (!$saisie->getRetard() || !$saisie->getRetardEnglobante() || !$saisie->getManquementObligationPresence() || !$saisie->getManquementObligationPresenceEnglobante()) { //on retire la saisie contrée de la liste de test des saisise possiblement englobante pour optimiser $abs_saisie_englobante->remove($abs_saisie_englobante->search($saisie)); continue; } //on va regarder si il y a un retard plus global, pour n'en compter qu'un seul en non pas deux $contra = false; foreach ($abs_saisie_englobante as $saisie_contra) { if ($saisie_contra->getEleveId() != $this->getId()) { continue; } if ($saisie_contra->getId() != $saisie->getId() && $saisie->getDebutAbs('U') >= $saisie_contra->getDebutAbs('U') && $saisie->getFinAbs('U') <= $saisie_contra->getFinAbs('U') && !$saisie_contra->getManquementObligationPresenceSpecifie_NON_PRECISE()) { //on a une saisie plus large $contra = true; break; } } if (!$contra) { $result->append($saisie); } else { //on retire la saisie contrée de la liste de test des saisise possiblement englobante pour optimiser $abs_saisie_englobante->remove($abs_saisie_englobante->search($saisie)); } } //on va enlever les retards qui sont sur des périodes non ouvertes de l'établissement require_once(dirname(__FILE__)."/../../../helpers/EdtHelper.php"); $result_final = new PropelCollection(); foreach ($result as $saisie) { if (EdtHelper::isJourneeOuverte($saisie->getDebutAbs(null)) && EdtHelper::isHoraireOuvert($saisie->getDebutAbs(null))) { $result_final->append($saisie); } } return $result_final; }
foreach ($edt_cours_col as $edt_cours) { if ($edt_cours->getEdtCreneau() == NULL) { //on affiche pas le cours si il n'est associé avec aucun creneau continue; } if (getSettingValue("abs2_saisie_prof_decale") != 'y' && $utilisateur->getStatut() == "professeur") { if ($edt_cours->getJourSemaineNumeric() != date('w')) { //on affiche pas ce cours car il n'est pas aujourd'hui continue; } if ($edt_cours->getTypeSemaine() != '' && $edt_cours->getTypeSemaine() != '0' && $edt_cours->getTypeSemaine() != $current_semaine->getTypeEdtSemaine()) { //on affiche pas ce cours car il n'est pas aujourd'hui continue; } } $edt_cours_aff->append($edt_cours); } foreach ($edt_cours_col as $edt_cours) { if ($edt_cours->getEdtCreneau() == NULL) { //on affiche pas le cours si il n'est associé avec aucun creneau continue; } if (getSettingValue("abs2_saisie_prof_decale") != 'y' && $utilisateur->getStatut() == "professeur") { if ($edt_cours->getJourSemaineNumeric() != date('w')) { //on affiche pas ce cours car il n'est pas aujourd'hui continue; } if ($edt_cours->getTypeSemaine() != '' && $edt_cours->getTypeSemaine() != '0' && $edt_cours->getTypeSemaine() != $current_semaine->getTypeEdtSemaine()) { //on affiche pas ce cours car il n'est pas aujourd'hui continue; }