/** * test a propel bug corrected in commit f23575d of propel github repo * */ public function testInstancePooling() { ElevePeer::clearInstancePool(); foreach (AbsenceEleveSaisieQuery::create()->useEleveQuery()->filterByLogin('Florence Michu')->endUse()->find() as $saisie) { $eleve_col[] = $saisie->getEleve(); } $this->assertTrue($eleve_col[0] === $eleve_col[1]); }
public function testModification() { $florence_eleve = EleveQuery::create()->findOneByLogin('Florence Michu'); $saisie = AbsenceEleveSaisieQuery::create()->filterByDebutAbs(DIMANCHE_s41j7.' 08:00:00')->findOne(); $traitements = AbsenceEleveTraitementQuery::create()->useAbsenceEleveTypeQuery()->filterByNom('Infirmerie')->endUse()->find(); $traitement_1 = $traitements->getFirst(); $traitement_2 = $traitements->get(1); $j_traitement_saisie = $traitement_1->getJTraitementSaisieEleves()->getFirst(); try { $j_traitement_saisie->setAbsenceEleveTraitement($traitement_2); $this->fail('Une exception doit être soulevée lors de cette modification'); } catch (Exception $e) { $this->assertTrue(true); } try { $j_traitement_saisie->setAbsenceEleveSaisie($saisie); $this->fail('Une exception doit être soulevée lors de cette modification'); } catch (Exception $e) { $this->assertTrue(true); } try { $j_traitement_saisie->setATraitementId($traitement_2->getId()); $this->fail('Une exception doit être soulevée lors de cette modification'); } catch (Exception $e) { $this->assertTrue(true); } try { $j_traitement_saisie->setASaisieId($saisie->getId()); $this->fail('Une exception doit être soulevée lors de cette modification'); } catch (Exception $e) { $this->assertTrue(true); } }
/** * Code to execute before every DELETE statement * * @param PropelPDO $con The connection object used by the query */ protected function basePreDelete(PropelPDO $con) { // soft_delete behavior if (AbsenceEleveSaisieQuery::isSoftDeleteEnabled() && $this->localSoftDelete) { return $this->softDelete($con); } else { return $this->hasWhereClause() ? $this->forceDelete($con) : $this->forceDeleteAll($con); } return $this->preDelete($con); }
/** * * Renvoi true / false selon que l'eleve est present a l'heure donnee. * On ne peut certifier la presence a 100% vu que seule les absences sont saisies (et non les presences) * La fonction va rechercher les saisies de la classe de l'eleve et verifier que l'eleve n'est pas dedans. * Les absences prisent en compte sont celles pour lesquelles l'eleve n'est pas sous la responsabilité de l'établissement et ne respecte pas son obligetion de presence * Il est possible que l'eleve n'ai pas cours a l'heure precisee, auquel cas la fonction renvoi faux (eleve non present) * Des plusieurs saisies sont contradictoire, on considere l'eleve present * * @param mixed $v string, integer (timestamp), or DateTime value. Empty string will * be treated as NULL for temporal objects. * @return Boolean * */ public function getSousResponsabiliteEtablissement($v = 'now') { // we treat '' as NULL for temporal objects because DateTime('') == DateTime('now') // -- which is unexpected, to say the least. //$dt = new DateTime(); if ($v === null || $v === '') { $dt = null; } elseif ($v instanceof DateTime) { $dt = clone $v; } else { // some string/numeric value passed; we normalize that so that we can // validate it. try { if (is_numeric($v)) { // if it's a unix timestamp $dt = new DateTime('@'.$v, new DateTimeZone('UTC')); // We have to explicitly specify and then change the time zone because of a // DateTime bug: http://bugs.php.net/bug.php?id=43003 $dt->setTimeZone(new DateTimeZone(date_default_timezone_get())); } else { $dt = new DateTime($v); } } catch (Exception $x) { throw new PropelException('Error parsing date/time value: ' . var_export($v, true), $x); } } //premierement on verifie que l'eleve n'a pas ete saisie absent a cette date $resp_etab = true; foreach ($this->getAbsenceEleveSaisiesFilterByDate($dt,$dt) as $saisie) { if ($saisie->getSousResponsabiliteEtablissement()) { return true; } else { $resp_etab = false; } } if (!$resp_etab) { //l'eleve est saisie mais absent return false; } //on recupere toute les saisies a cette heure //optimisation : utiliser la requete pour stocker ca if (isset($_REQUEST['query_AbsenceEleveSaisieQuery_getSousResponsabiliteEtablissement_'.$dt->format('U')]) && $_REQUEST['query_AbsenceEleveSaisieQuery_getSousResponsabiliteEtablissement_'.$dt->format('U')] != null) { $saisie_col = $_REQUEST['query_AbsenceEleveSaisieQuery_getSousResponsabiliteEtablissement_'.$dt->format('U')]; } else { $saisie_col = AbsenceEleveSaisieQuery::create() ->filterByPlageTemps($dt, $dt) ->find(); $_REQUEST['query_AbsenceEleveSaisieQuery_getSousResponsabiliteEtablissement_'.$dt->format('U')] = $saisie_col; } if ($saisie_col->isEmpty()) { //rien n'a ete saisie (aucun cours a cette heure), en renvoi non present par defaut return false; } $periode = $this->getPeriodeNote($dt); //on va verifier les saisie sur l'heure precisee pour les groupes de l'eleve $id_array = $this->getGroupes($periode)->getPrimaryKeys(); foreach ($saisie_col as $saisie) { if (in_array($saisie->getIdGroupe(), $id_array)) { //il y a une saisie pour la classe mais pas pour l'eleve, il est donc present return true; } } //on va verifier les saisie sur l'heure precisee pour les aid de l'eleve $id_array = $this->getAidDetailss()->toKeyValue('Id','Id'); if (count($id_array) > 0) { foreach ($saisie_col as $saisie) { if (in_array($saisie->getIdAid(), $id_array)) { //il y a une saisie pour l'aid mais pas pour l'eleve, il est donc present return true; } } } //on va verifier les saisie sur l'heure precisee pour la classe de l'eleve foreach ($saisie_col as $saisie) { if ($this->getClasse($periode) != null && $saisie->getIdClasse() == $this->getClasse($periode)->getId()) { //il y a une saisie pour la classe mais pas pour l'eleve, il est donc present return true; } } //rien n'a ete saisie (aucun cours a cette heure), en renvoi non present par defaut return false; }
} } if ($affichage != null && $affichage != '') { $eleve_query = EleveQuery::create(); if ($utilisateur->getStatut() == 'administrateur' || getSettingValue("GepiAccesAbsTouteClasseCpe") == 'yes' && $utilisateur->getStatut() == "cpe") { } else { $eleve_query->filterByUtilisateurProfessionnel($utilisateur); } if ($id_classe !== null && $id_classe != -1) { $eleve_query->useJEleveClasseQuery()->filterByIdClasse($id_classe)->endUse(); } if ($nom_eleve !== null && $nom_eleve != '') { $eleve_query->filterByNomOrPrenomLike($nom_eleve); } $eleve_col = $eleve_query->distinct()->find(); $saisie_query = AbsenceEleveSaisieQuery::create()->filterByPlageTemps($dt_date_absence_eleve_debut, $dt_date_absence_eleve_fin)->filterByEleveId($eleve_col->toKeyValue('Id', 'Id')); if ($type_saisie != "" && $type_saisie != "SANS") { $saisie_query->useJTraitementSaisieEleveQuery()->useAbsenceEleveTraitementQuery()->filterByATypeId($type_saisie)->endUse()->endUse(); } elseif ($type_extrait == '1') { $saisie_query->filterByManquementObligationPresence(true); } $saisie_query->useEleveQuery()->orderByNom()->orderByPrenom()->endUse(); $saisie_query->orderByDebutAbs(); $saisie_query->setFormatter('PropelOnDemandFormatter'); } if ($affichage == 'html') { $alt = 1; $cpt_eleve = 0; $saisie_col = $saisie_query->find(); echo '<table class="resizable sortable boireaus_alt2"> <tr>
public function testRetardEnglobante() { saveSetting('abs2_retard_critere_duree',30); $florence_eleve = EleveQuery::create()->findOneByLogin('Florence Michu'); $saisie = $florence_eleve->getAbsenceEleveSaisiesDuJour(VENDREDI_s40j5)->getFirst(); $this->assertFalse($saisie->getRetardEnglobante()); $saisie = $florence_eleve->getAbsenceEleveSaisiesDuJour(SAMEDI_s40j6)->getFirst(); $this->assertFalse($saisie->getRetardEnglobante()); $saisie = $florence_eleve->getAbsenceEleveSaisiesDuJour(DIMANCHE_s40j7)->getFirst(); $this->assertFalse($saisie->getRetardEnglobante()); $saisie = $florence_eleve->getAbsenceEleveSaisiesDuJour(LUNDI_s41j1)->getFirst(); $this->assertTrue($saisie->getRetardEnglobante()); $saisie = $florence_eleve->getAbsenceEleveSaisiesDuJour(MARDI_s41j2)->getFirst(); saveSetting('abs2_retard_critere_duree',30); $this->assertTrue($saisie->getRetardEnglobante()); $saisie->clearAllReferences(); saveSetting('abs2_retard_critere_duree',20); $this->assertFalse($saisie->getRetardEnglobante()); saveSetting('abs2_retard_critere_duree',30); $saisie = $florence_eleve->getAbsenceEleveSaisiesDuJour(MERCREDI_s41j3)->getFirst();//sur cette saisie on a plusieurs traitement, on privilégie le retard $this->assertTrue($saisie->getRetardEnglobante()); $saisie = AbsenceEleveSaisieQuery::create()->filterByFinAbs(VENDREDI_s41j5.' 08:10:00')->findOne(); $this->assertFalse($saisie->getRetardEnglobante()); $saisie = AbsenceEleveSaisieQuery::create()->filterByFinAbs(DIMANCHE_s41j7.' 08:10:00')->findOne(); $this->assertTrue($saisie->getRetardEnglobante()); $saisie = AbsenceEleveSaisieQuery::create()->filterByFinAbs(LUNDI_s42j1.' 08:10:00')->findOne(); $this->assertTrue($saisie->getRetardEnglobante()); $saisie = AbsenceEleveSaisieQuery::create()->filterByFinAbs(VENDREDI_s42j5.' 08:10:00')->findOne(); $this->assertFalse($saisie->getRetardEnglobante()); $saisies = AbsenceEleveSaisieQuery::create()->filterByFinAbs(LUNDI_s43j1.' 09:00:00')->find(); $this->assertTrue($saisies->getFirst()->getRetardEnglobante()); $this->assertTrue($saisies->getNext()->getRetardEnglobante()); $saisie = AbsenceEleveSaisieQuery::create()->filterByFinAbs(MARDI_a1_s22j2.' 09:10:00')->findOne(); $this->assertFalse($saisie->getRetardEnglobante()); $saisie = AbsenceEleveSaisieQuery::create()->filterByFinAbs(MERCREDI_a1_s22j3.' 08:10:00')->findOne(); $this->assertTrue($saisie->getRetard()); $this->assertFalse($saisie->getRetardEnglobante()); $saisie = AbsenceEleveSaisieQuery::create()->filterByFinAbs(JEUDI_a1_s23j4.' 08:10:00')->findOne(); $this->assertTrue($saisie->getRetardEnglobante()); $saisie = AbsenceEleveSaisieQuery::create()->filterByFinAbs(LUNDIa1_s24j1.' 08:10:00')->findOne(); $this->assertFalse($saisie->getRetardEnglobante()); }
} // Les saisies ont dû être supprimées. if ($cpt_eleve_col == 0) { $chaine_saisies_supprimees = ""; $sql = "SELECT a_saisie_id FROM j_traitements_saisies WHERE a_traitement_id='" . $traitement->getPrimaryKey() . "';"; $res_saisies = mysqli_query($mysqli, $sql); if (mysqli_num_rows($res_saisies) > 0) { $ligne_traitement[$cpt_traitement] .= "\n\t\t\t<span style='color:red' title=\"Saisie supprimée.\">"; $cpt_saisie_cachees = 0; while ($lig_saisie = mysqli_fetch_object($res_saisies)) { if ($cpt_saisie_cachees > 0) { $ligne_traitement[$cpt_traitement] .= " - "; $chaine_saisies_supprimees .= " - "; } $chaine_saisies_supprimees .= " <a href='visu_saisie.php?id_saisie={$lig_saisie->a_saisie_id}' title='Voir la saisie supprimée n°{$lig_saisie->a_saisie_id}' style='color:red'>{$lig_saisie->a_saisie_id}</a>"; $saisie_suppr = AbsenceEleveSaisieQuery::create()->includeDeleted()->findPk($lig_saisie->a_saisie_id); if ($saisie_suppr != null) { $ligne_traitement[$cpt_traitement] .= $saisie_suppr->getEleve()->getCivilite() . ' ' . $saisie_suppr->getEleve()->getNom() . ' ' . $saisie_suppr->getEleve()->getPrenom(); if ($utilisateur->getAccesFicheEleve($saisie_suppr->getEleve())) { $ligne_traitement[$cpt_traitement] .= "\n\t\t\t<br />\n\t\t\t<a href='../eleves/visu_eleve.php?ele_login="******"&onglet=responsables&quitter_la_page=y' target='_blank' style='color:red'> (voir fiche)</a>"; } } $cpt_saisie_cachees++; } $ligne_traitement[$cpt_traitement] .= "</span>"; } } $ligne_traitement[$cpt_traitement] .= "\n\t\t</td>"; //====================================== $tab_traitement[$cpt_traitement] = $traitement->getPrimaryKey(); //donnees saisies
$utilisation_tablekit="ok"; require_once("../lib/header.inc.php"); //**************** FIN EN-TETE ***************** include('menu_abs2.inc.php'); include('menu_bilans.inc.php'); //=========================== //afichage des eleves. $eleve_col = new PropelCollection(); //on fait une requete pour recuperer les eleves qui sont absents aujourd'hui $dt_debut = clone $dt_date_absence_eleve; $dt_debut->setTime(0,0,0); $dt_fin = clone $dt_date_absence_eleve; $dt_fin->setTime(23,59,59); //on récupere les saisies 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); //On filtre les manquement à l'obligation de présence if ($filtre_actif == "manquement") { $saisie_query->filterByManquementObligationPresence(); } else { $saisie_query->filterByIdLieu($id_lieu); } $saisie_col = $saisie_query->find(); $query = EleveQuery::create()->orderBy('Nom', Criteria::ASC)->orderBy('Prenom', Criteria::ASC) ->leftJoinWith('Eleve.EleveRegimeDoublant') ->useAbsenceEleveSaisieQuery() ->filterById($saisie_col->toKeyValue('Id', 'Id')) ->endUse(); $eleve_col = $query ->where('Eleve.DateSortie<?','0') ->orWhere('Eleve.DateSortie is NULL')
// maj : $tab_req[] = "INSERT INTO droits VALUES ( '/mod_discipline/saisie_incident.php', 'V', 'V', 'V', 'V', 'F', 'F', 'F', 'F', 'Discipline: Saisie incident', '');;"; if (!checkAccess()) { header("Location: ../logout.php?auto=1"); die(); } if(mb_strtolower(mb_substr(getSettingValue('active_mod_discipline'),0,1))!='y') { $mess=rawurlencode("Vous tentez d accéder au module Discipline qui est désactivé !"); tentative_intrusion(1, "Tentative d'accès au module Discipline qui est désactivé."); header("Location: ../accueil.php?msg=$mess"); die(); } $id_absence_eleve_saisie=isset($_POST['id_absence_eleve_saisie']) ? $_POST['id_absence_eleve_saisie'] : (isset($_GET['id_absence_eleve_saisie']) ? $_GET['id_absence_eleve_saisie'] : NULL); $saisie = AbsenceEleveSaisieQuery::create()->findPk($id_absence_eleve_saisie); if ($saisie == null) { require_once("../lib/header.inc.php"); echo "Erreur, identifiant de saisie d'absence non transmis"; require("../lib/footer.inc.php"); die(); } $msg = ""; if ($saisie->getIdSIncidents() == null || $saisie->getIdSIncidents() == -1) { check_token(); //l'incident n'est pas encore enregistré, on l'enregistre donc $sql="INSERT INTO s_incidents SET declarant='".$_SESSION['login']."', date='".$saisie->getDebutAbs('Y-m-d')."',
if ($classe_col->isOdd()) { echo '</tr>'; } else { if ($classe_col->isLast()) { echo '<td></td><td></td>'; echo '</tr>'; } } } ?> <tr> <td>Les Aid</td> <td colspan="3"> <?php //on affiche les saisies du creneau $abs_col = AbsenceEleveSaisieQuery::create()->filterByPlageTemps($dt_debut_creneau, $dt_fin_creneau)->filterByIdAid(null, Criteria::NOT_EQUAL)->useEleveQuery()->orderByNom()->endUse()->useAidDetailsQuery()->orderByNom()->endUse()->find(); if (!$abs_col->isEmpty()) { $aid_deja_sorties = array(); $current_eleve = Null; foreach ($abs_col as $absenceSaisie) { if ($absenceSaisie->getEleve() != null && $absenceSaisie->getEleve()->isEleveSorti($dt_debut_creneau)) { continue; } if ($absenceSaisie->getManquementObligationPresenceSpecifie_NON_PRECISE()) { continue; } if ($absenceSaisie->getIdAid() !== null && !in_array($absenceSaisie->getIdAid(), $aid_deja_sorties)) { echo $absenceSaisie->getCreatedAt('H:i') . ' '; echo $absenceSaisie->getAidDetails()->getNom() . ' '; echo $absenceSaisie->getUtilisateurProfessionnel()->getCivilite() . ' ' . $absenceSaisie->getUtilisateurProfessionnel()->getNom() . ' ' . strtoupper(mb_substr($absenceSaisie->getUtilisateurProfessionnel()->getPrenom(), 0, 1)) . '. '; $aid_deja_sorties[] = $absenceSaisie->getAidDetails()->getId();
/** * 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; }
$query->useAbsenceEleveSaisieQuery()->useJTraitementSaisieEleveQuery()->useAbsenceEleveTraitementQuery('b', 'left join')->filterByAMotifId(null)->endUse()->endUse()->endUse(); } else { $query->useAbsenceEleveSaisieQuery()->useJTraitementSaisieEleveQuery()->useAbsenceEleveTraitementQuery()->filterByAMotifId(getFiltreRechercheParam('filter_motif'))->endUse()->endUse()->endUse(); } } if (isFiltreRechercheParam('filter_justification')) { if (getFiltreRechercheParam('filter_justification') == 'SANS') { //on commence par filter certain élèves $query_clone = clone $query; $array_eleve_id = $query_clone->distinct()->select('Id')->find(); //on filtre les saisies pour trouver celles qui ne sont pas justifiées $absences_saisie_query1 = new AbsenceEleveSaisieQuery(); $absences_saisie_query1->where('AbsenceEleveSaisie.EleveId IN ?', $array_eleve_id)->useJTraitementSaisieEleveQuery('ab', 'left join')->useAbsenceEleveTraitementQuery('ad', 'left join')->endUse()->endUse() ->groupBy('Id')->withColumn('count(ad.a_justification_id)', 'nbJustif'); $absences_saisie_query = new AbsenceEleveSaisieQuery(); $absences_saisie_query->addSelectQuery($absences_saisie_query1, 'justif')->where('justif.nbJustif = 0')->where('justif.EleveId IN ?', $array_eleve_id); $absences_saisie_query->distinct()->select('Id'); $array_absence_id = $absences_saisie_query->find(); //on filtre la requete principale avec les saisies précédentes $query->useAbsenceEleveSaisieQuery()->where('AbsenceEleveSaisie.Id IN ?', $array_absence_id)->endUse(); } else { $query->useAbsenceEleveSaisieQuery()->useJTraitementSaisieEleveQuery()->useAbsenceEleveTraitementQuery()->filterByAJustificationId(getFiltreRechercheParam('filter_justification'))->endUse()->endUse()->endUse(); } } if (getFiltreRechercheParam('order') == "asc_id") { $query->orderBy('Id', Criteria::ASC); } else if (getFiltreRechercheParam('order') == "des_id") { $query->orderBy('Id', Criteria::DESC);
} $menu = isset($_POST["menu"]) ? $_POST["menu"] :(isset($_GET["menu"]) ? $_GET["menu"] : Null); $nb = 100; if (isset($_POST["nb_checkbox"])) { $nb = $_POST["nb_checkbox"]; } else if (isset($_POST["item_per_page"])) { $nb = $_POST["item_per_page"]; } if ( isset($_POST["creation_notification"]) && $_POST["creation_notification"] == 'yes') { $traitement = new AbsenceEleveTraitement(); $traitement->setUtilisateurProfessionnel($utilisateur); for($i=0; $i<$nb; $i++) { if (isset($_POST["select_saisie"][$i])) { $traitement->addAbsenceEleveSaisie(AbsenceEleveSaisieQuery::create()->findPk($_POST["select_saisie"][$i])); } } if ($traitement->getAbsenceEleveSaisies()->isEmpty()) { $message_erreur_traitement = ' Erreur : aucune saisie sélectionnée'; } else { $traitement->save(); $notification = new AbsenceEleveNotification(); $notification->setUtilisateurProfessionnel($utilisateur); $notification->setAbsenceEleveTraitement($traitement); //on met le type courrier par défaut $notification->setTypeNotification(AbsenceEleveNotificationPeer::TYPE_NOTIFICATION_COURRIER); $responsable_eleve1 = null; $responsable_eleve2 = null;
/** * Get the associated AbsenceEleveSaisie object * * @param PropelPDO Optional Connection object. * @return AbsenceEleveSaisie The associated AbsenceEleveSaisie object. * @throws PropelException */ public function getAbsenceEleveSaisie(PropelPDO $con = null) { if ($this->aAbsenceEleveSaisie === null && ($this->a_saisie_id !== null)) { $this->aAbsenceEleveSaisie = AbsenceEleveSaisieQuery::create()->findPk($this->a_saisie_id, $con); /* The following can be used additionally to guarantee the related object contains a reference to this object. This level of coupling may, however, be undesirable since it could result in an only partially populated collection in the referenced object. $this->aAbsenceEleveSaisie->addJTraitementSaisieEleves($this); */ } return $this->aAbsenceEleveSaisie; }
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')); }
/** * * Renvoi une collection de saisies englobant celle ci au sens large (on renvoi aussi les saisies de bornes identiques) * * @return AbsenceEleveLieu * */ public function getAbsenceEleveSaisiesEnglobantes() { if (!isset($this->saisiesEnglobantes) || $this->saisiesEnglobantes === null) { if ($this->getEleveId() == null) { $this->saisiesEnglobantes = new PropelCollection(); return $this->saisiesEnglobantes; } $query = AbsenceEleveSaisieQuery::create(); $query->filterById($this->getId(), Criteria::NOT_EQUAL); $query->filterByEleveId($this->getEleveId()); $query->filterByDebutAbs($this->getDebutAbs(), Criteria::LESS_EQUAL); $query->filterByFinAbs($this->getFinAbs(), Criteria::GREATER_EQUAL); $this->saisiesEnglobantes = $query->find(); } return $this->saisiesEnglobantes; }
} echo '</td>'; if ($classe_col->isOdd()) { echo '</tr>'; }else if ($classe_col->isLast()) { echo '<td></td><td></td>'; echo '</tr>'; } } ?> <tr> <td>Les Aid</td> <td colspan="3"> <?php //on affiche les saisies du creneau $abs_col = AbsenceEleveSaisieQuery::create()->filterByPlageTemps($dt_debut_creneau, $dt_fin_creneau) ->filterByIdAid(null, Criteria::NOT_EQUAL) ->useEleveQuery()->orderByNom()->endUse() ->useAidDetailsQuery()->orderByNom()->endUse() ->find(); if (!$abs_col->isEmpty()) { $aid_deja_sorties = Array(); $current_eleve = Null; foreach ($abs_col as $absenceSaisie) { if($absenceSaisie->getEleve()!=null && $absenceSaisie->getEleve()->isEleveSorti($dt_debut_creneau)){ continue; } if ($absenceSaisie->getManquementObligationPresenceSpecifie_NON_PRECISE()) { continue; } if ($absenceSaisie->getIdAid() !== null && !in_array($absenceSaisie->getIdAid(), $aid_deja_sorties)) {
->filterByManquementObligationPresence(true) ->count(); $eleve['non_justifiees'] = AbsenceAgregationDecompteQuery::create() ->filterByEleve($propel_eleve) ->filterByDateIntervalle($dt_date_absence_eleve_debut, $dt_date_absence_eleve_fin) ->filterByManquementObligationPresence(true) ->filterByNonJustifiee(true) ->count(); $eleve['retards'] = AbsenceAgregationDecompteQuery::create() ->filterByEleve($propel_eleve) ->filterByDateIntervalle($dt_date_absence_eleve_debut, $dt_date_absence_eleve_fin) ->countRetards(); foreach ($eleve['infos_saisies'] as $type_tab => &$value2) { foreach ($value2 as &$journee) { foreach ($journee as $key => &$value) { $abs_col = AbsenceEleveSaisieQuery::create()->filterById($value['saisies'])->orderByDebutAbs()->find(); foreach( $abs_col as $saisie){ 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; }
$url='./visu_traitement.php?id_traitement='.$traitement->getId().''; if($menu){ $url.='&menu=false'; } header("Location:".$url); die; } } else if ( isset($_POST["ajout_traitement"]) && $_POST["ajout_traitement"] == 'yes') { $id_traitement = isset($_POST["id_traitement"]) ? $_POST["id_traitement"] :(isset($_GET["id_traitement"]) ? $_GET["id_traitement"] :(isset($_SESSION["id_traitement"]) ? $_SESSION["id_traitement"] : NULL)); $traitement = AbsenceEleveTraitementQuery::create()->findPk($id_traitement); if ($traitement == null) { $message_erreur_traitement = ' Erreur : aucun traitement trouvé'; } else { for($i=0; $i<$nb; $i++) { if (isset($_POST["select_saisie"][$i])) { $saisie = AbsenceEleveSaisieQuery::create()->findPk($_POST["select_saisie"][$i]); if (!$traitement->getAbsenceEleveSaisies()->contains($saisie)) { $traitement->addAbsenceEleveSaisie($saisie); } } } if ($traitement->getAbsenceEleveSaisies()->isEmpty()) { $message_erreur_traitement = ' Erreur : aucune saisie sélectionnée'; } else { $traitement->save(); if((isset($_POST['retour_absences_du_jour']))&&($_POST['retour_absences_du_jour']=="yes")) { $url='./absences_du_jour.php'; $id_eleve=isset($_POST['id_eleve']) ? $_POST['id_eleve'] : (isset($_GET['id_eleve']) ? $_GET['id_eleve'] : NULL); if(isset($id_eleve)) { $url.="#ancre_id_eleve_$id_eleve"; }
/** * Check the soft_delete behavior for this model * @return boolean true if the soft_delete behavior is enabled */ public static function isSoftDeleteEnabled() { return AbsenceEleveSaisieQuery::isSoftDeleteEnabled(); }
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))); } }
function affiche_abs2_sur_edt2() { global $login_eleve; global $jours; global $largeur_jour; global $hauteur_jour; global $x_jour; global $premiere_heure; global $marge_secu; global $hauteur_titre; global $debug_edt; global $tabdiv_infobulle, $tabid_infobulle; global $x0, $y0, $largeur_edt, $hauteur_une_heure; global $hauteur_entete; $html = ""; if (isset($login_eleve)) { foreach ($jours['num_jour'] as $num_jour => $current_jour) { if (!isset($ts_1er_jour)) { $ts_1er_jour = mktime(0, 0, 0, $current_jour['mm'], $current_jour['jj'], $current_jour['aaaa']); $mysqldate_1er_jour = $current_jour['aaaa'] . "-" . $current_jour['mm'] . "-" . $current_jour['jj'] . " 00:00:00"; } $ts_dernier_jour = mktime(23, 59, 59, $current_jour['mm'], $current_jour['jj'], $current_jour['aaaa']); $mysqldate_dernier_jour = $current_jour['aaaa'] . "-" . $current_jour['mm'] . "-" . $current_jour['jj'] . " 23:59:59"; } $tab_abs = array(); $sql = "SELECT * FROM a_saisies a, eleves e \n\t\t\t\t\tWHERE e.id_eleve=a.eleve_id AND \n\t\t\t\t\t\te.login='******' AND \n\t\t\t\t\t\t((a.debut_abs>='" . $mysqldate_1er_jour . "' AND a.debut_abs<='" . $mysqldate_dernier_jour . "') OR \n\t\t\t\t\t\t(a.fin_abs>='" . $mysqldate_1er_jour . "' AND a.fin_abs<='" . $mysqldate_dernier_jour . "') OR \n\t\t\t\t\t\t(a.debut_abs<='" . $mysqldate_1er_jour . "' AND a.fin_abs>='" . $mysqldate_dernier_jour . "'));"; //$html.="$sql<br />"; $res = mysqli_query($GLOBALS["mysqli"], $sql); if (mysqli_num_rows($res) == 0) { $html .= "<p style='color:red'>Aucune saisie d'absence trouvée.</p>"; } else { $cpt = 0; while ($lig = mysqli_fetch_assoc($res)) { // ******************************************************* // ******************************************************* // A FAIRE : Il faudrait récupérer l'info englobée ou non. // ******************************************************* // ******************************************************* $tab_abs[$cpt] = $lig; $id_saisie = $lig['id']; $tab_abs[$cpt]['englobee'] = "n"; $saisie = AbsenceEleveSaisieQuery::create()->includeDeleted()->findPk($id_saisie); if ($saisie == null) { $tab_abs[$cpt]['trouvee'] = "n"; } else { $tab_abs[$cpt]['trouvee'] = "y"; $saisies_englobante_col = $saisie->getAbsenceEleveSaisiesEnglobantes(); if (!$saisies_englobante_col->isEmpty()) { $tab_abs[$cpt]['englobee'] = "y"; } } $cpt++; } } /* echo "tab_abs<pre>"; print_r($tab_abs); echo "</pre>"; */ // Afficher ou non les saisies englobées. $afficher_englobee = "y"; //$y_div_conteneur=$y1; $y_div_conteneur = $y0; //$y_div_conteneur=$y_decalage_2_js; //$html.="\$y_div_conteneur=$y_div_conteneur<br />"; $cpt_abs = 0; foreach ($tab_abs as $cpt => $current_abs) { $ts_debut_abs = mysql_date_to_unix_timestamp($current_abs['debut_abs']); $ts_fin_abs = mysql_date_to_unix_timestamp($current_abs['fin_abs']); //$aaaammjj_debut_abs=strftime("%Y%m%d", $ts_debut_abs); // Il faut boucler sur les jours inclus dans l'absence // ERREUR : Si l'absence dure plus d'une semaine... SAUF QU'ON N'AFFICHE QU'UNE SEMAINE A LA FOIS SUR L'EDT foreach ($jours['num_jour'] as $num_jour => $current_jour) { if ($ts_fin_abs > $current_jour['timestamp'] && $ts_debut_abs <= $current_jour['timestamp'] + 3600 * 24 - 1) { //$x=$x1+$x0+($num_jour-1)*$largeur_jour+$marge_secu/2; $x = $x0 + ($num_jour - 1) * $largeur_jour + $marge_secu / 2; //$ts_debut_1er_jour_absence=mktime(0,0,0,strftime("%m", $ts_debut_abs),strftime("%d", $ts_debut_abs),strftime("%Y", $ts_debut_abs)); $ts_debut_jour = mktime(0, 0, 0, strftime("%m", $current_jour['timestamp']), strftime("%d", $current_jour['timestamp']), strftime("%Y", $current_jour['timestamp'])); if ($ts_debut_abs < $current_jour['timestamp']) { // L'absence débute avant ce jour // On va prendre l'heure de début de journée //$y=$y_div_conteneur+$hauteur_entete+$hauteur_titre; $y = $y_div_conteneur + $hauteur_entete; } elseif ($ts_debut_abs < $current_jour['timestamp'] + 3600 * 24 - 1) { // L'absence débute dans la journée $delta = ($ts_debut_abs - $ts_debut_jour - 3600 * $premiere_heure) / 3600; //$y=$y_div_conteneur+$hauteur_entete+$hauteur_titre+$delta*$hauteur_une_heure; $y = $y_div_conteneur + $hauteur_entete + $delta * $hauteur_une_heure; } // Fin du div if ($ts_fin_abs > $current_jour['timestamp'] + 3600 * 24 - 1) { //$y_fin=$y_div_conteneur+$hauteur_entete+$hauteur_titre+$hauteur_jour; $y_fin = $y_div_conteneur + $hauteur_entete + $hauteur_jour; if (isset($tab_jour[$num_jour - 1]) && isset($tab_horaire_jour[$tab_jour[$num_jour - 1]])) { $tmp_tab = explode(":", $tab_horaire_jour[$tab_jour[$num_jour - 1]]['fermeture_horaire_etablissement']); $heure = $tmp_tab[0]; $minute = $tmp_tab[1]; $seconde = $tmp_tab[2]; $ts_fin_journee_cours = mktime($heure, $minute, $seconde, strftime("%m", $ts_debut_jour), strftime("%d", $ts_debut_jour), strftime("%Y", $ts_debut_jour)); $delta = ($ts_fin_journee_cours - $ts_debut_jour - 3600 * $premiere_heure) / 3600; //$y_fin=$y_div_conteneur+$hauteur_entete+$hauteur_titre+$delta*$hauteur_une_heure; $y_fin = $y_div_conteneur + $hauteur_entete + $delta * $hauteur_une_heure; } } else { // L'absence finit dans la journée $delta = ($ts_fin_abs - $ts_debut_jour - 3600 * $premiere_heure) / 3600; //$y_fin=$y_div_conteneur+$hauteur_entete+$hauteur_titre+$delta*$hauteur_une_heure; $y_fin = $y_div_conteneur + $hauteur_entete + $delta * $hauteur_une_heure; } // Pour éviter des collisions d'affichage lors du debug $decalage_x = 0; $chaine_debug = ""; //$decalage_x=$largeur_jour/2; //$chaine_debug="<span style='font-size:xx-small; color:red'>".ceil($y)."</span>"; // Pour les saisies englobées, il faudrait juste afficher un texte avec un lien/action ouvrant la saisie. if ($current_abs['englobee'] == 'n') { $bgcolor = "background-color:red; "; // Défaut: pour une absence courant sur plusieurs jours, on n'entoure que le div de la journée de début de la saisie englobante $chaine_mise_en_exergue = ""; $chaine_mise_en_exergue = "onmouseover=\"document.getElementById('div_fond_abs_" . $cpt_abs . "').style.border='2px solid lime'\" onmouseout=\"document.getElementById('div_fond_abs_" . $cpt_abs . "').style.border='0px solid red'\" "; // Fond : Opacité 50 $html .= "<div id='div_fond_abs_" . $cpt_abs . "' style='position:absolute; top:" . ceil($y) . "px; left:" . ceil($x) . "px; width:" . ($largeur_jour - $marge_secu) . "px; height:" . floor($y_fin - $y) . "px; opacity:0.5; " . $bgcolor . " border:1px solid red; z-index:3000;' " . $chaine_mise_en_exergue . " title=\"Saisie n°" . $current_abs['id'] . "\n\tDu " . formate_date($current_abs['debut_abs'], "y", "court") . " au " . formate_date($current_abs['fin_abs'], "y", "court") . "\"></div>"; //<a href='../mod_abs2/visu_saisie.php?id_saisie=".$current_abs['id']."' target='_blank'>".$current_abs['id']."</a> // Texte $html .= "<div id='div_saisie_abs_" . $cpt_abs . "' style='position:absolute; top:" . ceil($y) . "px; left:" . ceil($x + $decalage_x) . "px; width:16px; height:16px; z-index:3001;'><a href='../mod_abs2/visu_saisie.php?id_saisie=" . $current_abs['id'] . "' onclick=\"visu_saisie_abs_en_infobulle(" . $current_abs['id'] . ");return false;\" target='_blank' title=\"Voir la saisie n°" . $current_abs['id'] . "\n\tDu " . formate_date($current_abs['debut_abs'], "y", "court") . " au " . formate_date($current_abs['fin_abs'], "y", "court") . "\"><img src='../images/icons/saisie_1.png' class='icone16' alt='Saisie' /></a>" . $chaine_debug . "</div>"; } else { $bgcolor = ""; if ($afficher_englobee == "y") { // Texte $html .= "<div id='div_saisie_abs_" . $cpt_abs . "' style='position:absolute; top:" . ceil($y) . "px; left:" . ceil($x + $decalage_x) . "px; width:" . ($largeur_jour - $marge_secu) . "px; height:" . floor($y_fin - $y) . "px; " . $bgcolor . "z-index:3001;'><a href='../mod_abs2/visu_saisie.php?id_saisie=" . $current_abs['id'] . "' onclick=\"visu_saisie_abs_en_infobulle(" . $current_abs['id'] . ");return false;\" target='_blank' title=\"Voir la saisie (englobée) n°" . $current_abs['id'] . "\n\tDu " . formate_date($current_abs['debut_abs'], "y", "court") . " au " . formate_date($current_abs['fin_abs'], "y", "court") . "\"><img src='../images/icons/saisie.png' class='icone16' alt='Saisie' /></a>" . $chaine_debug . "</div>"; } } $cpt_abs++; } } } /* echo "<div style='clear:both;'></div>"; echo "<pre>"; print_r($jours); echo "</pre>"; */ $titre_infobulle = "Saisie Absence"; $texte_infobulle = "<div id='div_visu_saisie_abs'></div>"; $tabdiv_infobulle[] = creer_div_infobulle('infobulle_visu_saisie_abs', $titre_infobulle, "", $texte_infobulle, "", 40, 0, 'y', 'y', 'n', 'n', 4000); $html .= "<script type='text/javascript'>\n\t\tfunction visu_saisie_abs_en_infobulle(id_saisie) {\n\t\t\t//alert('plop');\n\t\t\tnew Ajax.Updater(\$('div_visu_saisie_abs'),'../lib/ajax_action.php?mode=visu_abs&id_saisie='+id_saisie,{method: 'get'});\n\t\t\tafficher_div('infobulle_visu_saisie_abs', 'y', 10,10);\n\t\t}\n\n\t\tfunction permuter_display_div_abs(mode) {\n\t\t\tif(mode=='') {\n\t\t\t\tif(document.getElementById('lien_permuter_display_abs_visible')) {\n\t\t\t\t\tdocument.getElementById('lien_permuter_display_abs_visible').style.display='none';\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tdocument.getElementById('lien_permuter_display_abs_visible').style.display='';\n\t\t\t\t}\n\n\t\t\t\tif(document.getElementById('lien_permuter_display_abs_invisible')) {\n\t\t\t\t\tdocument.getElementById('lien_permuter_display_abs_invisible').style.display='';\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tdocument.getElementById('lien_permuter_display_abs_invisible').style.display='none';\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif(document.getElementById('lien_permuter_display_abs_visible')) {\n\t\t\t\t\tdocument.getElementById('lien_permuter_display_abs_visible').style.display='';\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tdocument.getElementById('lien_permuter_display_abs_visible').style.display='none';\n\t\t\t\t}\n\n\t\t\t\tif(document.getElementById('lien_permuter_display_abs_invisible')) {\n\t\t\t\t\tdocument.getElementById('lien_permuter_display_abs_invisible').style.display='none';\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tdocument.getElementById('lien_permuter_display_abs_invisible').style.display='';\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor(i=0;i<{$cpt_abs};i++) {\n\t\t\t\tif(document.getElementById('div_fond_abs_'+i)) {\n\t\t\t\t\tdocument.getElementById('div_fond_abs_'+i).style.display=mode;\n\t\t\t\t}\n\t\t\t\tif(document.getElementById('div_saisie_abs_'+i)) {\n\t\t\t\t\tdocument.getElementById('div_saisie_abs_'+i).style.display=mode;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tpermuter_display_div_abs('');\n\t</script>"; } return $html; }
/** * Gets the number of AbsenceEleveSaisie objects related by a many-to-many relationship * to the current object by way of the j_traitements_saisies cross-reference table. * * @param Criteria $criteria Optional query object to filter the query * @param boolean $distinct Set to true to force count distinct * @param PropelPDO $con Optional connection object * * @return int the number of related AbsenceEleveSaisie objects */ public function countAbsenceEleveSaisies($criteria = null, $distinct = false, PropelPDO $con = null) { if(null === $this->collAbsenceEleveSaisies || null !== $criteria) { if ($this->isNew() && null === $this->collAbsenceEleveSaisies) { return 0; } else { $query = AbsenceEleveSaisieQuery::create(null, $criteria); if($distinct) { $query->distinct(); } return $query ->filterByAbsenceEleveTraitement($this) ->count($con); } } else { return count($this->collAbsenceEleveSaisies); } }
if ($abs2_rattachement_auto_saisies_englobees == "y") { //$acces_visu_traitement=acces("/mod_abs2/visu_traitement.php", $_SESSION['statut']); $acces_visu_traitement = false; if (acces("/mod_abs2/visu_traitement.php", $_SESSION['statut']) && in_array($_SESSION['statut'], array('cpe', 'scolarite', 'administrateur'))) { $acces_visu_traitement = true; } $debut_saisie = strftime("%Y-%m-%d %H:%M:%S", $saisie->getDebutAbs('U')); $fin_saisie = strftime("%Y-%m-%d %H:%M:%S", $saisie->getFinAbs('U')); // Recherche d'une saisie/traitement englobant la saisie courante $sql = "SELECT a_s.*, at.id AS id_traitement FROM a_saisies a_s, \n\t\t\t\t\tj_traitements_saisies jts, \n\t\t\t\t\ta_traitements at \n\t\t\t\tWHERE a_s.eleve_id='" . $saisie->getEleve()->getId() . "' AND \n\t\t\t\t\ta_s.deleted_at IS NULL AND \n\t\t\t\t\tat.deleted_at IS NULL AND \n\t\t\t\t\ta_s.id=jts.a_saisie_id AND \n\t\t\t\t\tat.id=jts.a_traitement_id AND \n\t\t\t\t\t((a_s.debut_abs<='" . $debut_saisie . "' AND a_s.fin_abs>'" . $fin_saisie . "') OR (a_s.debut_abs<'" . $debut_saisie . "' AND a_s.fin_abs>='" . $fin_saisie . "')) AND \n\t\t\t\t\ta_s.id!='" . $saisie->getPrimaryKey() . "';"; //$message_enregistrement .= "Test de rattachement pour ".$saisie->getEleve()->getLogin().":<br />$sql<br/>"; $res = mysqli_query($mysqli, $sql); if (mysqli_num_rows($res) == 1) { $lig_saisie_conteneur = mysqli_fetch_object($res); // Pour afficher des infos: $saisie_conteneur = AbsenceEleveSaisieQuery::create()->includeDeleted()->findPk($lig_saisie_conteneur->id); $message_enregistrement .= " (<em><a href='visu_saisie.php?id_saisie=" . $lig_saisie_conteneur->id . "' target='_blank' title=\"Saisie englobée par la saisie n°" . $lig_saisie_conteneur->id . " (du " . $saisie_conteneur->getDebutAbs('d/m/y H:i') . " au " . $saisie_conteneur->getFinAbs('d/m/y H:i') . ")\">saisie englobée</a>"; $sql = "SELECT 1=1 FROM j_traitements_saisies WHERE a_saisie_id='" . $saisie->getPrimaryKey() . "' AND a_traitement_id='" . $lig_saisie_conteneur->id_traitement . "';"; $res = mysqli_query($mysqli, $sql); if (mysqli_num_rows($res) == 0) { $sql = "INSERT INTO j_traitements_saisies SET a_saisie_id='" . $saisie->getPrimaryKey() . "', a_traitement_id='" . $lig_saisie_conteneur->id_traitement . "';"; //$message_enregistrement .= "$sql<br/>"; $insert = mysqli_query($mysqli, $sql); if ($insert) { if ($acces_visu_traitement) { $message_enregistrement .= " (<a href='visu_traitement.php?id_traitement=" . $lig_saisie_conteneur->id_traitement . "' title=\"Saisie rattachée au traitement n°" . $lig_saisie_conteneur->id_traitement . "\" target='_blank'>saisie rattachée</a>)"; } else { $message_enregistrement .= " (<span title=\"Saisie rattachée au traitement n°" . $lig_saisie_conteneur->id_traitement . "\" target='_blank'>saisie rattachée</span>)"; } } else { $message_enregistrement .= " <span style='color:red'>(erreur lors du rattachement de la saisie)</span>";
$query->filterByIdGroupe($current_groupe->getId()); } if ($current_classe != null) { $query->filterByIdClasse($current_classe->getId()); } $query->filterByUtilisateurProfessionnel($utilisateur); $dt = clone $dt_date_absence_eleve; $dt->setTime($current_cours->getHeureDebut('H'), $current_cours->getHeureDebut('i')); $dt_end = clone $dt; $dt_end->setTime($current_cours->getHeureFin('H'), $current_cours->getHeureFin('i')); $query->filterByPlageTemps($dt, $dt_end); if ($query->count() > 0) { $deja_saisie = true; } } elseif ($current_creneau != null) { $query = AbsenceEleveSaisieQuery::create(); if ($current_aid != null) { $query->filterByIdAid($current_aid->getId()); } if ($current_groupe != null) { $query->filterByIdGroupe($current_groupe->getId()); } if ($current_classe != null) { $query->filterByIdClasse($current_classe->getId()); } $query->filterByUtilisateurProfessionnel($utilisateur); $dt = clone $dt_date_absence_eleve; $dt->setTime($current_creneau->getHeuredebutDefiniePeriode('H'), $current_creneau->getHeuredebutDefiniePeriode('i')); $dt_end = clone $dt; $dt_end->setTime($current_creneau->getHeurefinDefiniePeriode('H'), $current_creneau->getHeurefinDefiniePeriode('i')); $query->filterByPlageTemps($dt, $dt_end);
/** * * Retourne la collection des absences saisies pour ce creneau. Si null, on prend le creneau actuel * * @param mixed $v string, integer (timestamp), or DateTime value. Empty string will * be treated as NULL for temporal objects. * @return PropelObjectCollection AbsenceEleveSaisie */ public function getEdtCreneauAbsenceSaisie($edtcreneau = null, $v = 'now'){ if ($edtcreneau == null) { $edtcreneau = EdtCreneauPeer::retrieveEdtCreneauActuel($v); } if (!($edtcreneau instanceof EdtCreneau)) { $edtcreneau = EdtCreneauQuery::create()->findPk($edtcreneau); if ($edtcreneau == null) { return new PropelObjectCollection(); } } // we treat '' and NULL as 'now' for temporal if ($v === null || $v === '') { $dt = new DateTime('now'); } elseif ($v instanceof DateTime) { $dt = clone $v; } else { // some string/numeric value passed; we normalize that so that we can // validate it. try { if (is_numeric($v)) { // if it's a unix timestamp $dt = new DateTime('@'.$v, new DateTimeZone('UTC')); // We have to explicitly specify and then change the time zone because of a // DateTime bug: http://bugs.php.net/bug.php?id=43003 $dt->setTimeZone(new DateTimeZone(date_default_timezone_get())); } else { $dt = new DateTime($v); } } catch (Exception $x) { throw new PropelException('Error parsing date/time value: ' . var_export($v, true), $x); } } $query = AbsenceEleveSaisieQuery::create(); $query->filterByUtilisateurProfessionnel($this); $dt->setTime($edtcreneau->getHeuredebutDefiniePeriode('H'), $edtcreneau->getHeuredebutDefiniePeriode('i')); $dt_end = clone $dt; $dt_end->setTime($edtcreneau->getHeurefinDefiniePeriode('H'), $edtcreneau->getHeurefinDefiniePeriode('i')); $query->filterByPlageTemps($dt, $dt_end); $col = $query->find(); return $col; }
try { $heure_debut = new DateTime($_POST['heure_debut']); $date_debut->setTime($heure_debut->format('H'), $heure_debut->format('i')); } catch (Exception $x) { $message_enregistrement .= "<span style='color:red'>Mauvais format d'heure.</span><br/>"; } // Heure de fin transmise au format HH:MM try { $heure_fin = new DateTime($_POST['heure_fin']); $date_fin->setTime($heure_fin->format('H'), $heure_fin->format('i')); } catch (Exception $x) { $message_enregistrement .= "<span style='color:red'>Mauvais format d'heure.</span><br/>"; } if ($message_enregistrement == "") { for ($loop = 0; $loop < count($id_saisie); $loop++) { $saisie = AbsenceEleveSaisieQuery::create()->includeDeleted()->findPk($id_saisie[$loop]); if ($saisie != null) { $saisie->setDebutAbs($date_debut); $saisie->setFinAbs($date_fin); $saisie->save(); } } } include "visu_traitement.php"; die; } if (!$traitement->isModified()) { if (isset($count_delete) && $count_delete > 0) { $message_enregistrement .= '<span style="color:red">Saisie supprimée</span>'; } else { $message_enregistrement .= '<span style="color:red">Pas de modifications</span>';
/** * 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(AbsenceEleveSaisiePeer::DATABASE_NAME, Propel::CONNECTION_WRITE); } $con->beginTransaction(); try { $deleteQuery = AbsenceEleveSaisieQuery::create() ->filterByPrimaryKey($this->getPrimaryKey()); $ret = $this->preDelete($con); // soft_delete behavior if (!empty($ret) && AbsenceEleveSaisieQuery::isSoftDeleteEnabled()) { $this->keepUpdateDateUnchanged(); $this->setDeletedAt(time()); $this->save($con); $this->postDelete($con); $con->commit(); AbsenceEleveSaisiePeer::removeInstanceFromPool($this); return; } if ($ret) { $deleteQuery->delete($con); $this->postDelete($con); // versionable behavior // emulate delete cascade AbsenceEleveSaisieVersionQuery::create() ->filterByAbsenceEleveSaisie($this) ->delete($con); $con->commit(); $this->setDeleted(true); } else { $con->commit(); } } catch (Exception $e) { $con->rollBack(); throw $e; } }
/** * If this collection has already been initialized with * an identical criteria, it returns the collection. * Otherwise if this AidDetails is new, it will return * an empty collection; or if this AidDetails has previously * been saved, it will retrieve related AbsenceEleveSaisies from storage. * * This method is protected by default in order to keep the public * api reasonable. You can provide public methods for those you * actually need in AidDetails. * * @param Criteria $criteria optional Criteria object to narrow the query * @param PropelPDO $con optional connection object * @param string $join_behavior optional join type to use (defaults to Criteria::LEFT_JOIN) * @return PropelCollection|array AbsenceEleveSaisie[] List of AbsenceEleveSaisie objects */ public function getAbsenceEleveSaisiesJoinAbsenceEleveLieu($criteria = null, $con = null, $join_behavior = Criteria::LEFT_JOIN) { $query = AbsenceEleveSaisieQuery::create(null, $criteria); $query->joinWith('AbsenceEleveLieu', $join_behavior); return $this->getAbsenceEleveSaisies($query, $con); }
$date2 = clone $dt_date_absence_eleve_fin; $dt_date_absence_eleve_fin = $dt_date_absence_eleve_debut; $dt_date_absence_eleve_debut = $date2; $inverse_date = true; $_SESSION['date_absence_eleve_debut'] = $dt_date_absence_eleve_debut->format('d/m/Y'); $_SESSION['date_absence_eleve_fin'] = $dt_date_absence_eleve_fin->format('d/m/Y'); } /***** Fin gestion des dates *****/ $eleve_id = $eleve->getId(); //on initialise les donnees pour l'élève $donnees[$eleve_id]['nom'] = $eleve->getNom(); $donnees[$eleve_id]['prenom'] = $eleve->getPrenom(); $donnees[$eleve_id]['classe'] = $eleve->getClasseNom(); $donnees[$eleve_id]['nbre_lignes_total'] = 0; // on récupère les saisies de l'élève $saisie_query = AbsenceEleveSaisieQuery::create()->filterByPlageTemps($dt_date_absence_eleve_debut, $dt_date_absence_eleve_fin)->filterByEleveId($eleve->getId()); if ($type_extrait == '1') { $saisie_query->filterByManquementObligationPresence(true); } $saisie_query->orderByDebutAbs(); $saisie_col = $saisie_query->find(); // on traite les saisies et on stocke les informations dans un tableau foreach ($saisie_col as $saisie) { if ($type_extrait == '1' && !$saisie->getManquementObligationPresence()) { continue; } //$afficher_strictement_englobee="y"; if ($afficher_strictement_englobee != "y") { $strictement_englobee = false; foreach ($saisie->getAbsenceEleveSaisiesEnglobantes() as $saisie_englobante) { if ($saisie_englobante->getManquementObligationPresenceSpecifie_NON_PRECISE()) {