} 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_query->where('Eleve.DateSortie<?','0')
                ->orWhere('Eleve.DateSortie is NULL')
                ->orWhere('Eleve.DateSortie>?', $dt_date_absence_eleve_debut->format('U'));
    
    $eleve_col = $eleve_query->find();
    $table_synchro_ok = AbsenceAgregationDecomptePeer::checkSynchroAbsenceAgregationTable($dt_date_absence_eleve_debut,$dt_date_absence_eleve_fin);
    if (!$table_synchro_ok) {//la table n'est pas synchronisée. On va vérifier individuellement les élèves qui se sont pas synchronisés
		if ($eleve_col->count()>150) {
			echo 'Il semble que vous demandez des statistiques sur trop d\'élèves et votre table de statistiques n\'est pas synchronisée.<br />Veuillez faire une demande pour moins d\'élèves ou';
			if(getSettingAOui('AccesCpeAgregationAbs2')) {
				echo ' <a href="./admin/admin_table_agregation.php" title="ATTENTION : Cette opération est lourde.
                     Elle peut enliser le serveur, perturber les 
                     saisies le temps qu\'elle s\'achève.">remplir la table d\'agrégation</a>.';
			}
			else {
				echo ' demander à votre administrateur de remplir la table d\'agrégation.';
			}
			if (ob_get_contents()) {
				ob_flush();
			}
			flush();
	/**
	 *
	 * Vérifie que l'ensemble de la table d'agrégation est à jours, pour tous les élèves.
	 * Corrige automatiquement la table pour un certain nombres d'élèves (précisé par $reparation_nbr),
	 * si plus d'élève que ce nombre sont en échec on renvoie faux
	 *
	 * @param      DateTime $dateDebut date de début pour la prise en compte du test
	 * @param      DateTime $dateFin date de fin pour la prise en compte du test
	 * @param      int $reparation_nbr nomble d'elve qu'on va mettre à jour avant de renvoyer faux
	 * @return		Boolean
	 *
	 */
	public static function checkSynchroAbsenceAgregationTable(DateTime $dateDebut = null, DateTime $dateFin = null, $reparation_nbr = 50) {
		global $mysqli;

		$debug = false;
		if ($debug) {
			print_r('AbsenceAgregationDecomptePeer::checkSynchroAbsenceAgregationTable() called<br/>');
		}
		
		//on initialise les date clone qui seront manipulés dans l'algoritme, c'est nécessaire pour ne pas modifier les dates passées en paramêtre.
		$dateDebutClone = null;
		$dateFinClone = null;
		
		if ($dateDebut != null) {
			if ($debug) {
				print_r('Date début '.$dateDebut->format('Y-m-d').'<br/>');
			}
			$dateDebutClone = clone $dateDebut;
			$dateDebutClone->setTime(0,0);
		}
		if ($dateFin != null) {
			if ($debug) {
				print_r('Date fin '.$dateFin->format('Y-m-d').'<br/>');
			}
			$dateFinClone = clone $dateFin;
			$dateFinClone->setTime(23,59);
		}
		
		//on va vérifier que tout les marqueurs de fin des calculs de mise à jour sont bien présents pour tout les élèves
		$query = '
			SELECT distinct eleves.ID_ELEVE
			FROM `eleves` 
			LEFT JOIN (
				SELECT distinct ELEVE_ID
				FROM `a_agregation_decompte`
				WHERE date_demi_jounee = \'0001-01-01 00:00:00\') as a_agregation_decompte_selection
			ON (eleves.ID_ELEVE=a_agregation_decompte_selection.ELEVE_ID)
			WHERE a_agregation_decompte_selection.ELEVE_ID IS NULL';
		$result = mysqli_query($mysqli, $query);
		$num_rows = mysqli_num_rows($result);
		if ($num_rows>0 && $num_rows < $reparation_nbr) {
			if ($debug) {
				print_r('Il manque des marqueurs de fin de calcul<br/>');
			}
			//on va corriger la table pour ces élèves là
			while ($row = mysqli_fetch_array($result, MYSQL_NUM)) {
				$eleve = EleveQuery::create()->findOneById($row[0]);
				if ($debug) {
					print_r('recalcul pour l eleve '.$eleve->getId().'<br/>');
				}
				$eleve->checkAndUpdateSynchroAbsenceAgregationTable($dateDebutClone,$dateFinClone);
			}
			//après avoir corrigé on relance le test
			return(AbsenceAgregationDecomptePeer::checkSynchroAbsenceAgregationTable($dateDebutClone, $dateFinClone));
		} elseif ($num_rows>0) {
			if ($debug) {
				print_r('retourne faux : Il manque trop de marqueurs de fin de calcul<br/>');
			}
			return false;
		}
		
		//conditions sql sur les dates
		$date_saisies_selection = ' 1=1 ';
		$date_saisies_version_selection = ' 1=1 ';
		$date_agregation_selection = ' 1=1 ';
		if ($dateDebutClone != null) {
			$date_saisies_selection .= ' and a_saisies.fin_abs >= "'.$dateDebutClone->format('Y-m-d H:i:s').'" ';
			$date_saisies_version_selection .= ' and a_saisies_version.fin_abs >= "'.$dateDebutClone->format('Y-m-d H:i:s').'" ';
			$date_agregation_selection .= ' and a_agregation_decompte.DATE_DEMI_JOUNEE >= "'.$dateDebutClone->format('Y-m-d H:i:s').'" ';
		}
		if ($dateFinClone != null) {
			$date_saisies_selection .= ' and a_saisies.debut_abs <= "'.$dateFinClone->format('Y-m-d H:i:s').'" ';
			$date_saisies_version_selection .= ' and a_saisies_version.debut_abs <= "'.$dateFinClone->format('Y-m-d H:i:s').'" ';
			$date_agregation_selection .= ' and a_agregation_decompte.DATE_DEMI_JOUNEE <= "'.$dateFinClone->format('Y-m-d H:i:s').'" ';
		}
				
		//on va vérifier que tout les élèves ont bien le bon nombres entrées dans la table d'agrégation pour cette période
		if ($dateFinClone != null && $dateDebutClone != null) {
    		$query = '
    			SELECT eleves.ID_ELEVE, count(eleves.ID_ELEVE) as count_entrees
    			FROM `eleves` 
    			LEFT JOIN (
    				SELECT ELEVE_ID
    				FROM `a_agregation_decompte`
    				WHERE '.$date_agregation_selection.') as a_agregation_decompte_selection
    			ON (eleves.ID_ELEVE=a_agregation_decompte_selection.ELEVE_ID)
    			group by eleves.ID_ELEVE';
    		$result = mysqli_query($mysqli, $query);
    		$wrong_eleve = array();
    		$nbre_demi_journees=(int)(($dateFinClone->format('U')+3700-$dateDebutClone->format('U'))/(3600*12));
    		while($row = mysqli_fetch_array($result)){
    			if ($row[1]!=$nbre_demi_journees) {
    				if ($debug) {
    					print_r('Il manque des entrees pour l eleve '.$row[0].'<br/>');
    				}
    				$wrong_eleve[]=$row[0];
    			}
    		}
    		if (count($wrong_eleve) > 0 && count($wrong_eleve) < $reparation_nbr) {
    			//on va corriger la table pour ces élèves là
    			foreach($wrong_eleve as $idEleve) {
    				$eleve = EleveQuery::create()->findOneById($idEleve);
    				if ($debug) {
    					print_r('recalcul pour l eleve '.$eleve->getId().'<br/>');
    				}
    				$eleve->checkAndUpdateSynchroAbsenceAgregationTable($dateDebutClone,$dateFinClone);
    			}
    			//après avoir corrigé on relance le test
    			return(AbsenceAgregationDecomptePeer::checkSynchroAbsenceAgregationTable($dateDebutClone, $dateFinClone));
    		} elseif (!empty($wrong_eleve) > 0) {
    			if ($debug) {
    				print_r('retourne faux : Il manque des saisies sur '.count($wrong_eleve).' eleves<br/>');
    			}
    			return false;
    		}
		}
		
		
		// est-ce que la date updated_at de mise à jour de la table est bien postérieure aux date de modification des saisies et autres entrées
		$query = 'select union_date, updated_at, now() as now
		
		FROM
			(SELECT max(updated_at) as updated_at
			FROM a_agregation_decompte WHERE '.$date_agregation_selection.'	
			) as updated_at_select

		LEFT JOIN (
			(SELECT union_date from 
				(	SELECT GREATEST(IFNULL(max(updated_at),CAST(0 as DATETIME)),IFNULL(max(deleted_at),CAST(0 as DATETIME))) as union_date FROM a_saisies WHERE eleve_id is not null and '.$date_saisies_selection.'
				UNION ALL
					SELECT GREATEST(IFNULL(max(a_saisies_version.updated_at),CAST(0 as DATETIME)),IFNULL(max(a_saisies_version.deleted_at),CAST(0 as DATETIME))) as union_date FROM a_saisies_version WHERE a_saisies_version.eleve_id is not null and '.$date_saisies_version_selection.'
				UNION ALL
					SELECT GREATEST(IFNULL(max(a_traitements.updated_at),CAST(0 as DATETIME)),IFNULL(max(a_traitements.deleted_at),CAST(0 as DATETIME))) as union_date FROM a_traitements join j_traitements_saisies on a_traitements.id = j_traitements_saisies.a_traitement_id join a_saisies on a_saisies.id = j_traitements_saisies.a_saisie_id WHERE a_saisies.eleve_id is not null and '.$date_saisies_selection.'
				
				ORDER BY union_date DESC LIMIT 1
				) AS union_date_union_all_select
			) AS union_date_select
		) ON 1=1;';
			
		$result_query = mysqli_query($mysqli, $query);
		if ($result_query === false) {
			if ($debug) {
				echo $query;
			}
			echo 'Erreur sur la requete : '.mysqli_error($mysqli).'<br/>';
			return false;
		}
		$row = mysqli_fetch_array($result_query);
		mysqli_free_result($result_query);
		if ($debug) {
		    print_r($row);
		}
		if ($row['updated_at'] && $row['updated_at']  > $row['now']) {
			if ($debug) {
				print_r('faux : Date de mise a jour des agregation ne peut pas etre dans le futur<br/>');
			}
			return false;
		} else if ($row['union_date'] && $row['union_date']  > $row['now']) {
			if ($debug) {
				print_r('faux : Date de mise a jour des saisie ou traitements ne peut pas etre dans le futur<br/>');
			}
			return false;
		} else if ($row['union_date'] && (!$row['updated_at'] || $row['union_date'] > $row['updated_at'])){//si on a pas de updated_at dans la table d'agrégation, ou si la date de mise à jour des saisies est postérieure à updated_at ou 
			if ($debug) {
				print_r('retourne faux : Les date de mise a jour de la table sont trop anciennes<br/>');
			}
			return false;
		} else {
			if ($debug) {
				print_r('retourne vrai<br/>');
			}
			return true;//on ne vérifie pas le nombre d'entrée car les dates ne sont pas précisée
		}
	}
Example #3
0
	/**
	 * This is a method for emulating ON DELETE CASCADE for DBs that don't support this
	 * feature (like MySQL or SQLite).
	 *
	 * This method is not very speedy because it must perform a query first to get
	 * the implicated records and then perform the deletes by calling those Peer classes.
	 *
	 * This method should be used within a transaction if possible.
	 *
	 * @param      Criteria $criteria
	 * @param      PropelPDO $con
	 * @return     int The number of affected rows (if supported by underlying database driver).
	 */
	protected static function doOnDeleteCascade(Criteria $criteria, PropelPDO $con)
	{
		// initialize var to track total num of affected rows
		$affectedRows = 0;

		// first find the objects that are implicated by the $criteria
		$objects = ElevePeer::doSelect($criteria, $con);
		foreach ($objects as $obj) {


			// delete related JEleveClasse objects
			$criteria = new Criteria(JEleveClassePeer::DATABASE_NAME);
			
			$criteria->add(JEleveClassePeer::LOGIN, $obj->getLogin());
			$affectedRows += JEleveClassePeer::doDelete($criteria, $con);

			// delete related JEleveCpe objects
			$criteria = new Criteria(JEleveCpePeer::DATABASE_NAME);
			
			$criteria->add(JEleveCpePeer::E_LOGIN, $obj->getLogin());
			$affectedRows += JEleveCpePeer::doDelete($criteria, $con);

			// delete related JEleveGroupe objects
			$criteria = new Criteria(JEleveGroupePeer::DATABASE_NAME);
			
			$criteria->add(JEleveGroupePeer::LOGIN, $obj->getLogin());
			$affectedRows += JEleveGroupePeer::doDelete($criteria, $con);

			// delete related JEleveProfesseurPrincipal objects
			$criteria = new Criteria(JEleveProfesseurPrincipalPeer::DATABASE_NAME);
			
			$criteria->add(JEleveProfesseurPrincipalPeer::LOGIN, $obj->getLogin());
			$affectedRows += JEleveProfesseurPrincipalPeer::doDelete($criteria, $con);

			// delete related EleveRegimeDoublant objects
			$criteria = new Criteria(EleveRegimeDoublantPeer::DATABASE_NAME);
			
			$criteria->add(EleveRegimeDoublantPeer::LOGIN, $obj->getLogin());
			$affectedRows += EleveRegimeDoublantPeer::doDelete($criteria, $con);

			// delete related ResponsableInformation objects
			$criteria = new Criteria(ResponsableInformationPeer::DATABASE_NAME);
			
			$criteria->add(ResponsableInformationPeer::ELE_ID, $obj->getEleId());
			$affectedRows += ResponsableInformationPeer::doDelete($criteria, $con);

			// delete related JEleveAncienEtablissement objects
			$criteria = new Criteria(JEleveAncienEtablissementPeer::DATABASE_NAME);
			
			$criteria->add(JEleveAncienEtablissementPeer::ID_ELEVE, $obj->getId());
			$affectedRows += JEleveAncienEtablissementPeer::doDelete($criteria, $con);

			// delete related JAidEleves objects
			$criteria = new Criteria(JAidElevesPeer::DATABASE_NAME);
			
			$criteria->add(JAidElevesPeer::LOGIN, $obj->getLogin());
			$affectedRows += JAidElevesPeer::doDelete($criteria, $con);

			// delete related AbsenceEleveSaisie objects
			$criteria = new Criteria(AbsenceEleveSaisiePeer::DATABASE_NAME);
			
			$criteria->add(AbsenceEleveSaisiePeer::ELEVE_ID, $obj->getId());
			$affectedRows += AbsenceEleveSaisiePeer::doDelete($criteria, $con);

			// delete related AbsenceAgregationDecompte objects
			$criteria = new Criteria(AbsenceAgregationDecomptePeer::DATABASE_NAME);
			
			$criteria->add(AbsenceAgregationDecomptePeer::ELEVE_ID, $obj->getId());
			$affectedRows += AbsenceAgregationDecomptePeer::doDelete($criteria, $con);

			// delete related CreditEcts objects
			$criteria = new Criteria(CreditEctsPeer::DATABASE_NAME);
			
			$criteria->add(CreditEctsPeer::ID_ELEVE, $obj->getId());
			$affectedRows += CreditEctsPeer::doDelete($criteria, $con);

			// delete related CreditEctsGlobal objects
			$criteria = new Criteria(CreditEctsGlobalPeer::DATABASE_NAME);
			
			$criteria->add(CreditEctsGlobalPeer::ID_ELEVE, $obj->getId());
			$affectedRows += CreditEctsGlobalPeer::doDelete($criteria, $con);

			// delete related ArchiveEcts objects
			$criteria = new Criteria(ArchiveEctsPeer::DATABASE_NAME);
			
			$criteria->add(ArchiveEctsPeer::INE, $obj->getNoGep());
			$affectedRows += ArchiveEctsPeer::doDelete($criteria, $con);
		}
		return $affectedRows;
	}
	/**
	 * Find object by primary key using raw SQL to go fast.
	 * Bypass doSelect() and the object formatter by using generated code.
	 *
	 * @param     mixed $key Primary key to use for the query
	 * @param     PropelPDO $con A connection object
	 *
	 * @return    AbsenceAgregationDecompte A model object, or null if the key is not found
	 */
	protected function findPkSimple($key, $con)
	{
		$sql = 'SELECT ELEVE_ID, DATE_DEMI_JOUNEE, MANQUEMENT_OBLIGATION_PRESENCE, NON_JUSTIFIEE, NOTIFIEE, RETARDS, RETARDS_NON_JUSTIFIES, MOTIFS_ABSENCES, MOTIFS_RETARDS, CREATED_AT, UPDATED_AT FROM a_agregation_decompte WHERE ELEVE_ID = :p0 AND DATE_DEMI_JOUNEE = :p1';
		try {
			$stmt = $con->prepare($sql);
			$stmt->bindValue(':p0', $key[0], PDO::PARAM_INT);
			$stmt->bindValue(':p1', $key[1], PDO::PARAM_STR);
			$stmt->execute();
		} catch (Exception $e) {
			Propel::log($e->getMessage(), Propel::LOG_ERR);
			throw new PropelException(sprintf('Unable to execute SELECT statement [%s]', $sql), $e);
		}
		$obj = null;
		if ($row = $stmt->fetch(PDO::FETCH_NUM)) {
			$obj = new AbsenceAgregationDecompte();
			$obj->hydrate($row);
			AbsenceAgregationDecomptePeer::addInstanceToPool($obj, serialize(array((string) $key[0], (string) $key[1])));
		}
		$stmt->closeCursor();

		return $obj;
	}
	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)));
        }
	}
	/**
	 * Populates the object using an array.
	 *
	 * This is particularly useful when populating an object from one of the
	 * request arrays (e.g. $_POST).  This method goes through the column
	 * names, checking to see whether a matching key exists in populated
	 * array. If so the setByName() method is called for that column.
	 *
	 * You can specify the key type of the array by additionally passing one
	 * of the class type constants BasePeer::TYPE_PHPNAME, BasePeer::TYPE_STUDLYPHPNAME,
	 * BasePeer::TYPE_COLNAME, BasePeer::TYPE_FIELDNAME, BasePeer::TYPE_NUM.
	 * The default key type is the column's phpname (e.g. 'AuthorId')
	 *
	 * @param      array  $arr     An array to populate the object from.
	 * @param      string $keyType The type of keys the array uses.
	 * @return     void
	 */
	public function fromArray($arr, $keyType = BasePeer::TYPE_PHPNAME)
	{
		$keys = AbsenceAgregationDecomptePeer::getFieldNames($keyType);

		if (array_key_exists($keys[0], $arr)) $this->setEleveId($arr[$keys[0]]);
		if (array_key_exists($keys[1], $arr)) $this->setDateDemiJounee($arr[$keys[1]]);
		if (array_key_exists($keys[2], $arr)) $this->setManquementObligationPresence($arr[$keys[2]]);
		if (array_key_exists($keys[3], $arr)) $this->setNonJustifiee($arr[$keys[3]]);
		if (array_key_exists($keys[4], $arr)) $this->setNotifiee($arr[$keys[4]]);
		if (array_key_exists($keys[5], $arr)) $this->setRetards($arr[$keys[5]]);
		if (array_key_exists($keys[6], $arr)) $this->setRetardsNonJustifies($arr[$keys[6]]);
		if (array_key_exists($keys[7], $arr)) $this->setMotifsAbsences($arr[$keys[7]]);
		if (array_key_exists($keys[8], $arr)) $this->setMotifsRetards($arr[$keys[8]]);
		if (array_key_exists($keys[9], $arr)) $this->setCreatedAt($arr[$keys[9]]);
		if (array_key_exists($keys[10], $arr)) $this->setUpdatedAt($arr[$keys[10]]);
	}
	/**
	 * Retrieve object using using composite pkey values.
	 * @param      int $eleve_id
	 * @param      string $date_demi_jounee
	 * @param      PropelPDO $con
	 * @return     AbsenceAgregationDecompte
	 */
	public static function retrieveByPK($eleve_id, $date_demi_jounee, PropelPDO $con = null) {
		$_instancePoolKey = serialize(array((string) $eleve_id, (string) $date_demi_jounee));
 		if (null !== ($obj = AbsenceAgregationDecomptePeer::getInstanceFromPool($_instancePoolKey))) {
 			return $obj;
		}

		if ($con === null) {
			$con = Propel::getConnection(AbsenceAgregationDecomptePeer::DATABASE_NAME, Propel::CONNECTION_READ);
		}
		$criteria = new Criteria(AbsenceAgregationDecomptePeer::DATABASE_NAME);
		$criteria->add(AbsenceAgregationDecomptePeer::ELEVE_ID, $eleve_id);
		$criteria->add(AbsenceAgregationDecomptePeer::DATE_DEMI_JOUNEE, $date_demi_jounee);
		$v = AbsenceAgregationDecomptePeer::doSelect($criteria, $con);

		return !empty($v) ? $v[0] : null;
	}
Example #8
0
	/**
	 * Met à jour la table d'agrégation pour toutes les saisies de ce traitement
	 *
	 * @return     void
	 */
	public function updateAgregationTable() {
		AbsenceAgregationDecomptePeer::updateAgregationTable($this->getAbsenceEleveSaisies());
	}