/**
	 * Disables versioning
	 */
	public static function disableVersioning()
	{
		self::$isVersioningEnabled = false;
	}
	/**
	 * Validates all modified columns of given AbsenceEleveTraitement object.
	 * If parameter $columns is either a single column name or an array of column names
	 * than only those columns are validated.
	 *
	 * NOTICE: This does not apply to primary or foreign keys for now.
	 *
	 * @param      AbsenceEleveTraitement $obj The object to validate.
	 * @param      mixed $cols Column name or array of column names.
	 *
	 * @return     mixed TRUE if all columns are valid or the error message of the first invalid column.
	 */
	public static function doValidate($obj, $cols = null)
	{
	    $failureMap = array();
	    if (($retval = parent::doValidate($obj, $cols)) !== true) {
		    $failureMap = array_merge($failureMap, $retval);
	    }


	    //validation maison
	    //on exclus mutuellement un id_classe, et id_groupe et un id_aid
	    $id_relation = 0;
	    if ($obj->getAidDetails() !== null) {
		$id_relation = $id_relation + 1;
	    }
	    if ($obj->getClasse() !== null) {
		$id_relation = $id_relation + 1;
	    }
	    if ($obj->getGroupe() !== null) {
		$id_relation = $id_relation + 1;
	    }
	    if ($id_relation > 1) {
		$failureMap[AbsenceEleveSaisiePeer::ID] = new ValidationFailed(AbsenceEleveSaisiePeer::ID,"Il ne peut y avoir un groupe, une classe et une aid simultanéments pécisé.<br/>");
	    }

	    if ($obj->getEleveId() !== null) {
		if ($obj->getEleve() == null) {
		    $failureMap[AbsenceEleveSaisiePeer::ELEVE_ID] = new ValidationFailed(AbsenceEleveSaisiePeer::ELEVE_ID,"L'id de l'élève est incorrect.");
		}
	    }

	    if ($obj->getEdtEmplacementCours() !== null) {
		//si on saisie un cours, alors le creneau et la classe doive etre
		if ($obj->getIdClasse() !== null) {
		    $failureMap[AbsenceEleveSaisiePeer::ID] = new ValidationFailed(AbsenceEleveSaisiePeer::ID,"Si un cours est renseigné la classe doit etre nul.");
		}
		if ($obj->getIdEdtCreneau() !== null && $obj->getEdtEmplacementCours()->getIdDefiniePeriode() != $obj->getIdEdtCreneau()) {
		    $failureMap[AbsenceEleveSaisiePeer::ID] = new ValidationFailed(AbsenceEleveSaisiePeer::ID,"Si un cours est renseigné le creneau doit lui correspondre.");
		}
		if ($obj->getIdGroupe() === null && $obj->getIdAid() === null) {
		    $failureMap[AbsenceEleveSaisiePeer::ID] = new ValidationFailed(AbsenceEleveSaisiePeer::ID,"Si un cours est renseigné alors le groupe ou l'aid doivent être saisies.");
		}
		if ($obj->getIdGroupe() != null && $obj->getEdtEmplacementCours()->getIdGroupe() != $obj->getIdGroupe()) {
		    $failureMap[AbsenceEleveSaisiePeer::ID] = new ValidationFailed(AbsenceEleveSaisiePeer::ID,"Si un cours est renseigné alors le groupe doit être celui du cours.");
		}
		if ($obj->getIdAid() != null && $obj->getEdtEmplacementCours()->getIdAid() != $obj->getIdAid()) {
		    $failureMap[AbsenceEleveSaisiePeer::ID] = new ValidationFailed(AbsenceEleveSaisiePeer::ID,"Si un cours est renseigné alors l'aid doit être celle du cours.");
		}
	    }

	    //si il y a un eleve, on verifie qu'il appartient bien au groupe, à la classe ou à l'aid précisé
	    if ($obj->getAidDetails() != null && $obj->getEleve() != null) {
		$criteria = new Criteria();
		$criteria->add(JAidElevesPeer::LOGIN, $obj->getEleve()->getLogin());
		if ($obj->getAidDetails()->countJAidElevess($criteria) == 0) {
		    $failureMap[AbsenceEleveSaisiePeer::ELEVE_ID] = new ValidationFailed(AbsenceEleveSaisiePeer::ELEVE_ID,"L'élève n'appartient pas à l'aid selectionné : ".$obj->getAidDetails()->getNom());
		}
	    }

	    //si il y a un eleve, on verifie qu'il appartient bien au groupe, à la classe ou à l'aid précisé
	    if ($obj->getGroupe() != null && $obj->getEleve() != null) {
		$criteria = new Criteria();
		$criteria->add(JEleveGroupePeer::LOGIN, $obj->getEleve()->getLogin());
		if ($obj->getGroupe()->countJEleveGroupes($criteria) == 0) {
		    $failureMap[AbsenceEleveSaisiePeer::ELEVE_ID] = new ValidationFailed(AbsenceEleveSaisiePeer::ELEVE_ID,"L'élève n'appartient pas au groupe selectionné.");
		}
	    }

	    //si il y a un eleve, on verifie qu'il appartient bien au groupe, à la classe ou à l'aid précisé
	    if ($obj->getClasse() != null && $obj->getEleve() != null) {
		$criteria = new Criteria();
		$criteria->add(JEleveClassePeer::LOGIN, $obj->getEleve()->getLogin());
		if ($obj->getClasse()->countJEleveClasses($criteria) == 0) {
		    $failureMap[AbsenceEleveSaisiePeer::ELEVE_ID] = new ValidationFailed(AbsenceEleveSaisiePeer::ELEVE_ID,"L'élève n'appartient pas à la classe selectionnée.");
		}
	    }

	    if ($obj->getUtilisateurId() === null) {
		$failureMap[AbsenceEleveSaisiePeer::UTILISATEUR_ID] = new ValidationFailed(AbsenceEleveSaisiePeer::UTILISATEUR_ID,"Il faut préciser l'utilisateur qui rentre la saisie.");
	    }

	    if ($obj->getDebutAbs() == null) {
		$failureMap[AbsenceEleveSaisiePeer::DEBUT_ABS] = new ValidationFailed(AbsenceEleveSaisiePeer::DEBUT_ABS,"La date de début d'absence ne doit pas être nulle.");
	    }

	    if ($obj->getFinAbs() == null) {
		 $failureMap[AbsenceEleveSaisiePeer::FIN_ABS] = new ValidationFailed(AbsenceEleveSaisiePeer::FIN_ABS,"La date de fin d'absence ne doit pas être nulle.");
	    }

	    if ($obj->getDebutAbs('U') >= $obj->getFinAbs('U')) {
		$failureMap[AbsenceEleveSaisiePeer::FIN_ABS] = new ValidationFailed(AbsenceEleveSaisiePeer::FIN_ABS,"La date de début d'absence doit être strictement antérieure à la date de fin.");
	    }

	    return (!empty($failureMap) ? $failureMap : true);

	}