/**
     * Filtre la requete sur les dates de début et de fin. En cas de date nulle, 
     * le premier jour ou le dernier de l'année scolaire est utilisé
     * Pour la date de fin, la comparaison est stricte. Si la date de fin est 2010-10-04 00:00:00, on aura les décompte du 03 mais pas du 04 
     * Pour la demi journée, on se base sur 12h et sur les préférences de l'application gepi
     * 
     * @param  DateTime $date_debut, $date_fin Dates de début et de fin de l'extraction des demi journées
     * @return    AbsenceAgregationDecompteQuery The current query, for fluid interface
     */
    public function filterByDateIntervalle(DateTime $date_debut=Null, DateTime $date_fin=Null) {
        
        if (is_null($date_debut) || is_null($date_fin)) {
            require_once("helpers/EdtHelper.php");
            if (is_null($date_debut)) {
                $date_debut = EdtHelper::getPremierJourAnneeScolaire();
            }
            if (is_null($date_fin)) {
                $date_fin = EdtHelper::getDernierJourAnneeScolaire();
            }
        }

        $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) {
                
            }
        }
        if (!isset($dt_demi_journee) || $dt_demi_journee == null) {
            $dt_demi_journee = new DateTime($heure_demi_journee.':'.$minute_demi_journee);
        }
        $date_debut_clone=clone $date_debut;
        if ($date_debut_clone->format('Hi') < $heure_demi_journee . $minute_demi_journee) {
            $date_debut_clone->setTime(0, 0, 0);
        } else {
            $date_debut_clone->setTime(12, 0, 0);
        }
        $dt_demi_journee->modify("+1 hour");
        $dt_demi_journee->modify("+35 minutes");
        $heure_demi_journee = $dt_demi_journee->format('H');
        $minute_demi_journee = $dt_demi_journee->format('i'); 
        $date_fin_clone=clone $date_fin;
        if ($date_fin_clone->format('Hi') < $heure_demi_journee . $minute_demi_journee && $date_fin_clone->format('H:i')!="00:00" && $date_debut_clone->format('H:i')=="00:00" ) {
            $date_fin_clone->setTime(11, 59, 0);
        }         
        $this->filterByDateDemiJounee($date_debut_clone, Criteria::GREATER_EQUAL)
                ->filterByDateDemiJounee($date_fin_clone, Criteria::LESS_THAN);
        return $this;
    }
Example #2
0
		die();
	}
}

//initialisation des variables 
$action= isset($_POST['action'])?$_POST['action']:Null;
$page= isset($_POST['page'])?$_POST['page']:1;
$maxPerPage=5;

if ($action == "vidage" || $action=="regeneration") {
    check_token(); 
}
//gestion des dates
require_once("../../orm/helpers/EdtHelper.php");
$date_debut =  EdtHelper::getPremierJourAnneeScolaire();
$date_fin = EdtHelper::getDernierJourAnneeScolaire();
$date_fin->setTime(23,59,59);

// header
$titre_page = "Gestion de la table d'agrégation des demi-journées d'absence";
$javascript_specifique[] = "mod_abs2/lib/include";
require_once("../../lib/header.inc.php");

echo "<p class=bold>";
if($_SESSION['statut']=='administrateur') {
	echo "<a href=\"index.php\">";
}
else {
	echo "<a href=\"../index.php\">";
}
echo "<img src='../../images/icons/back.png' alt='Retour' class='back_link'/> Retour</a>";
Example #3
0
 /**
  * Renvoi le nombre de demi-journées ouvertes entre deux dates de debut ou de fin (ou premier et dernier jour de l'année scolaire si les dates ne sont pas spécifiées
  *
  * @param      DateTime $date_debut 
  * @param      DateTime $date_fin
  * @return     Int      $nbre_demi_journees_etab_ouvert
  */
 public static function getNbreDemiJourneesEtabOuvert($date_debut = Null, $date_fin = Null)
 {
     //clonage des da&tes de debut et de fin pour ne pas modifier les objets date directement
     if ($date_debut == Null) {
         $date_debut_clone = EdtHelper::getPremierJourAnneeScolaire();
     } else {
         $date_debut_clone = clone $date_debut;
     }
     $date_debut_clone->setTime(0, 0, 0);
     if ($date_fin == Null) {
         $date_fin_clone = EdtHelper::getDernierJourAnneeScolaire();
     } else {
         $date_fin_clone = clone $date_fin;
     }
     $date_fin_clone->setTime(23, 59, 59);
     // on va tester demi journée par demi journée si l'étab est ouvert
     $nbre_demi_journees_etab_ouvert = 0;
     while ($date_debut_clone->format('U') < $date_fin_clone->format('U')) {
         $date_clone = clone $date_debut_clone;
         if ($date_debut_clone->format('H:i') == "00:00") {
             $date_clone->setTime(9, 0, 0);
             //on met 9 heures au cas ou un étab commence à 8h30 par exemple
         } elseif ($date_debut_clone->format('H:i') == "12:00") {
             $date_clone->setTime(15, 0, 0);
             //on met 15 heures pour être dans la demi journée de l'après-midi
         } else {
             echo 'Il y a un problème sur les heures';
             die;
         }
         if (EdtHelper::isEtablissementOuvert($date_clone)) {
             $nbre_demi_journees_etab_ouvert++;
         }
         $date_debut_clone->modify("+12 hours");
     }
     return $nbre_demi_journees_etab_ouvert;
 }
Example #4
0
	/**
	 *
	 * Vérifie et mets à jour l'ensemble de la table d'agrégation des absences pour cet élève, sur l'ensemble des années scolaires incluant $dateDebut et $dateFin,
	 * et aussi avant et après les années scolaires si des saisies sont présentes.
	 * Cela permet de remplir la table obligatoirement pour l'année en cours (avec un mois de débordement sur les autres années), et de la remplir avant et après l'année en cours si des saisies le nécessite
	 * 
	 * @TODO		implement the method
	 *
	 * @param      DateTime $dateDebut date de début pour la prise en compte de la mise à jours
	 * @param      DateTime $dateFin date de fin pour la prise en compte de la mise à jours
	 * @return		Boolean
	 *
	 */
	public function checkAndUpdateSynchroAbsenceAgregationTable(DateTime $dateDebut = null, DateTime $dateFin = null) {
		//on va vérifier que avant et après les dates précisées, la table est bien synchronisée sur l'année en cours
		require_once(dirname(__FILE__)."/../../../helpers/EdtHelper.php");
		assert('$dateDebut == null || $dateFin == null || $dateDebut <= $dateFin');
		
		//on va vérifier antérieurement à la date de début
		if ($dateDebut != null) {
			$dateDebutClone = clone $dateDebut;
			$dateDebutClone->modify("-1 day");
			$premier_jour_annee_scolaire_large = EdtHelper::getPremierJourAnneeScolaire($dateDebutClone);
			$premier_jour_annee_scolaire_large->modify("-1 month");//on enleve 1 mois pour etre large
			if ($premier_jour_annee_scolaire_large < $dateDebutClone) {//si l'année débute avant la date précisée, on va faire deux mise à jour, comme ça on est sur que à partir du début de l'année la table sera remplie
				$premier_jour_annee_scolaire_large->modify("-1 day");//on évite aux dates de se chevaucher sur une même journée
				$this->thinCheckAndUpdateSynchroAbsenceAgregationTable(null, $premier_jour_annee_scolaire_large);
				$premier_jour_annee_scolaire_large->modify("+1 day");
				$this->thinCheckAndUpdateSynchroAbsenceAgregationTable($premier_jour_annee_scolaire_large, $dateDebutClone);
			} else {
				$this->thinCheckAndUpdateSynchroAbsenceAgregationTable(null, $dateDebutClone);
			}
		} else {//si la date de début est nulle, on prend le début de l'année en cours
			$dateDebutClone = EdtHelper::getPremierJourAnneeScolaire($dateFin);
			$dateDebutClone->modify("-1 month");
			$dateDebutClone->modify("-1 day");
			$this->thinCheckAndUpdateSynchroAbsenceAgregationTable(null, $dateDebutClone);
		}
		
		//on va vérifier postérieurement à la date de fin
		if ($dateFin != null) {
			$dateFinClone = clone $dateFin;
			$dateFinClone->modify("+1 day");
			$dernier_jour_annee_scolaire_large = EdtHelper::getDernierJourAnneeScolaire($dateFinClone);
			$dernier_jour_annee_scolaire_large->modify("+1 month");
			if ($dernier_jour_annee_scolaire_large > $dateFinClone) {
				$this->thinCheckAndUpdateSynchroAbsenceAgregationTable($dateFinClone, $dernier_jour_annee_scolaire_large);
				$dernier_jour_annee_scolaire_large->modify("+1 day");
				$this->thinCheckAndUpdateSynchroAbsenceAgregationTable($dernier_jour_annee_scolaire_large, null);
			} else {
				$this->thinCheckAndUpdateSynchroAbsenceAgregationTable($dateFinClone, null);
			}
		} else {//si la date de fin est nulle, on va prendre comme date de fin la fin de l'année
			$dateFinClone = EdtHelper::getDernierJourAnneeScolaire($dateDebut);
			$dateFinClone->modify("+1 month");
			$dateFinClone->modify("+1 day");
			$this->thinCheckAndUpdateSynchroAbsenceAgregationTable($dateFinClone, null);
		}
		
		//on regarde sur les dates de début et de fin choisies
		//les dates ont été décalé pour les vérification antérieures et postérieures, donc on rétabli les bonnes dates
		$dateDebutClone->modify("+1 day");
		$dateFinClone->modify("-1 day");
		$this->thinCheckAndUpdateSynchroAbsenceAgregationTable($dateDebutClone, $dateFinClone);
	}