Subversion Repositories Applications.gtt

Compare Revisions

No changes between revisions

Ignore whitespace Rev 1 → Rev 2

/trunk/classes_metier/gtt_absence.class.php
New file
0,0 → 1,604
<?php
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This library is free software; you can redistribute it and/or |
// | modify it under the terms of the GNU Lesser General Public |
// | License as published by the Free Software Foundation; either |
// | version 2.1 of the License, or (at your option) any later version. |
// | |
// | This library is distributed in the hope that it will be useful, |
// | but WITHOUT ANY WARRANTY; without even the implied warranty of |
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
// | Lesser General Public License for more details. |
// | |
// | You should have received a copy of the GNU Lesser General Public |
// | License along with this library; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
 
// |@author ABDOOL RAHEEM shaheen shaheenar50@hotmail.com |
// |@version 3 |
 
include_once CHEMIN_CLASSES."BOG_debogage.inc.php";
include_once "DB.php";
/**
* class Absence
*
*/
 
class Absence
{
/**Attributes: */
var $_date_debut_absence=null;
var $_date_fin_absence=null;
var $_date_envoi_lettre=null;
var $_utilisateur=null;//identifiant d'un utilisateur
var $_motif=null;//identifiant d'un motif d'absence
/*
*constructeur
*@param u : identifiant de l'utilisateur
*@param m: motif
*@param dd: date de debut d'absence
*/
function Absence($u, $m, $dd)
{
$this->_utilisateur=$u;
$this->_motif=$m;
$this->_date_debut_absence =$dd;
}
/*
*construit une absence a partir d'un tableau
*/
function construireAbsence($tableau)
{
$this->_date_debut_absence =$tableau[GEST_CHAMPS_DATE_DEBUT_ABSENCE];
$this->_date_fin_absence =$tableau[GEST_CHAMPS_DATE_FIN_ABSENCE];
$this->_date_envoi_lettre =$tableau[GEST_CHAMPS_DATE_ENVOI_LETTRE];
$this->_utilisateur =$tableau[GEST_CHAMPS_ID_UTILISATEUR];
$this->_motif =$tableau[GEST_CHAMPS_ID_MOTIF];
}
/*
*enregistre une absence dansla base de donnees
*renvoie 1 si ok, 0 si aucun enregistrement effectue, -1 sinon
*/
function enregistrerNewAbsence()
{
$table = GEST_ABSENCE;
$champs =array(GEST_CHAMPS_DATE_DEBUT_ABSENCE => "$this->_date_debut_absence",
GEST_CHAMPS_DATE_FIN_ABSENCE => "$this->_date_fin_absence",
GEST_CHAMPS_DATE_ENVOI_LETTRE=> "$this->_date_envoi_lettre",
GEST_CHAMPS_ID_UTILISATEUR => $this->_utilisateur,
GEST_CHAMPS_ID_MOTIF => $this->_motif);
$resultat =$GLOBALS['db']->autoExecute($table,$champs,DB_AUTOQUERY_INSERT);
if (DB::isError($resultat)) {
die($resultat->getMessage());
}
$j=$GLOBALS['db']->affectedRows();
if ($j==1)
{
return 1;
}elseif($j==0){
return 0;
}else{
return -1;
}
}
/**
*fonction qui met a jour une absence
*dasn la base de donnees
*@return 1 si modification effectuee
*@return -1 si erreur
*/
function mettreAJourAbsence()
{
$requete= "UPDATE ".GEST_ABSENCE.
" SET ".GEST_CHAMPS_ID_MOTIF." = $this->_motif ,".
GEST_CHAMPS_DATE_DEBUT_ABSENCE." = \"$this->_date_debut_absence\" ,".
GEST_CHAMPS_DATE_FIN_ABSENCE." =\"$this->_date_fin_absence\" ,".
GEST_CHAMPS_DATE_ENVOI_LETTRE."= \" $this->_date_envoi_lettre\" ".
" WHERE ".GEST_CHAMPS_ID_UTILISATEUR." = $this->_utilisateur ".
" AND ".GEST_CHAMPS_ID_MOTIF." = $this->_motif ".
" AND ".GEST_CHAMPS_DATE_DEBUT_ABSENCE."= \"$this->_date_debut_absence\" ";
$resultat=$GLOBALS['db']->query($requete);
$j=$GLOBALS['db']->affectedRows();
if ($j==1)
{
return 1;
}else return -1;
}
/**
*enregistre la date d'envoie de la lettre
*met a jour le champs date d'envoi de l'instance
*/
function enregistrerDateEnvoi($d)
{
$this->_date_envoi_lettre=$d;
$requete="UPDATE ".GEST_ABSENCE.
" SET ".GEST_CHAMPS_DATE_ENVOI_LETTRE." ='$d '"
." WHERE ".GEST_CHAMPS_ID_UTILISATEUR." =$this->_utilisateur AND "
.GEST_CHAMPS_ID_MOTIF." = $this->_motif AND "
.GEST_CHAMPS_DATE_DEBUT_ABSENCE." = '$this->_date_debut_absence' ";
$resultat=$GLOBALS['db']->query($requete);
(DB::isError($resultat)) ?
die (BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '' ;
$j=$GLOBALS['db']->affectedRows();
switch ($j)
{
case 1: return 1;
case 0: return 0;
default: return -1;
}
}
/**
*fonction recuperant lalist des absences de la semaine pour un utilisateur
*@param :$user identifiant de l'utilisateur
*@param : $date deb de la semaine
*@param :$date fin de la semaine
*les dates sont sosu le format mysql Y-m-d
*/
function recupAbsence($user,$dateDeb,$dateFin)
{
$requete="SELECT ".GEST_CHAMPS_ID_MOTIF." ,".GEST_CHAMPS_DATE_DEBUT_ABSENCE." ,".
GEST_CHAMPS_DATE_FIN_ABSENCE.
" FROM ".GEST_ABSENCE.
" WHERE ".GEST_CHAMPS_ID_UTILISATEUR." = $user ".
" AND ((".GEST_CHAMPS_DATE_DEBUT_ABSENCE." <= \"$dateDeb\" ".
" AND ".GEST_CHAMPS_DATE_FIN_ABSENCE." >= \"$dateDeb\" )".
" OR (".GEST_CHAMPS_DATE_DEBUT_ABSENCE."> \"$dateDeb\" ".
" AND ".GEST_CHAMPS_DATE_DEBUT_ABSENCE." <= \"$dateFin\") )".
" ORDER BY ".GEST_CHAMPS_DATE_DEBUT_ABSENCE."";
$resultat=$GLOBALS['db']->query($requete);
(DB::isError($resultat)) ?
die (BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '' ;
$j=$resultat->numRows();
$tab=array();
if ($j>0)
{
while($ligne=$resultat->fetchRow(DB_FETCHMODE_ASSOC))
{
$case=array(GEST_CHAMPS_ID_MOTIF => $ligne[GEST_CHAMPS_ID_MOTIF],
GEST_CHAMPS_DATE_DEBUT_ABSENCE => $ligne[GEST_CHAMPS_DATE_DEBUT_ABSENCE],
GEST_CHAMPS_DATE_FIN_ABSENCE => $ligne[GEST_CHAMPS_DATE_FIN_ABSENCE]);
array_push($tab,$case);
}
}
return $tab;
}
/**
*fonction qui renvoie la liste des absences qui chevauchent
*la periode d'absence
*/
function existeAbsence()
{
$requete="SELECT * ".
" FROM ".GEST_ABSENCE.
" WHERE ".GEST_CHAMPS_ID_UTILISATEUR." = $this->_utilisateur ".
" AND ((".GEST_CHAMPS_DATE_DEBUT_ABSENCE." <= \"$this->_date_debut_absence\" ".
" AND ".GEST_CHAMPS_DATE_FIN_ABSENCE." >= \"$this->_date_debut_absence\" )".
" OR (".GEST_CHAMPS_DATE_DEBUT_ABSENCE."> \"$this->_date_debut_absence\" ".
" AND ".GEST_CHAMPS_DATE_DEBUT_ABSENCE." < \"$this->_date_fin_absence\" ))".
" ORDER BY ".GEST_CHAMPS_DATE_DEBUT_ABSENCE."";
$resultat=$GLOBALS['db']->query($requete);
(DB::isError($resultat)) ?
die (BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '' ;
$j=$resultat->numRows();
$tab=array();
if ($j>0)
{
while($ligne=$resultat->fetchRow(DB_FETCHMODE_ASSOC))
{
$case=array(GEST_CHAMPS_ID_MOTIF => $ligne[GEST_CHAMPS_ID_MOTIF],
GEST_CHAMPS_DATE_DEBUT_ABSENCE => $ligne[GEST_CHAMPS_DATE_DEBUT_ABSENCE],
GEST_CHAMPS_DATE_FIN_ABSENCE => $ligne[GEST_CHAMPS_DATE_FIN_ABSENCE],
GEST_CHAMPS_ID_UTILISATEUR =>$ligne[GEST_CHAMPS_ID_UTILISATEUR],
GEST_CHAMPS_DATE_ENVOI_LETTRE => $ligne[GEST_CHAMPS_DATE_ENVOI_LETTRE]);
array_push($tab,$case);
}
}
return $tab;
}
/**
*fonction qui erifie s'il existe des absences qui chevauchent
*et si au moins une de ces absences a etet validee
*@return true si au moins uen absence a ete validee
*@return false si on peut donc modifier
*/
function existeAbsenceValidee()
{
$tableau=$this->existeAbsence();
$validee=false;
if (count($tableau)>0)
{
for($p=0;$p<count($tableau);$p++)
{
$h=$tableau[$p];
//test si au moins une lettre a ete envoyee
if ($h[GEST_CHAMPS_DATE_ENVOI_LETTRE]!='0000-00-00')
{
$validee=true;
}
}
}
return $validee;
}
/**
* renvoie un booleen true si la lettre a ete envoyee et faux sinon
*/
function isEnvoi( )
{
$requete="SELECT ".GEST_CHAMPS_DATE_ENVOI_LETTRE.
" FROM ".GEST_ABSENCE.
" WHERE ".GEST_CHAMPS_ID_ABSENCE. " =$this->_id_absence";
$resultat=$GLOBALS['db']->query($requete);
(DB::isError($resultat)) ?
die (BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '' ;
$j=$resultat->numRows();
if ($j==1)
{
return true;
}else {
return false;
}
}
/**
*fonction renvoyany l'identifiant d'un utilisateur
*/
function getIdUserAbsence()
{
return $this->_utilisateur;
}
/**
*fonction renvoyant la date de debut d'absence
*/
function getDateDebAbsence()
{
return $this->_date_debut_absence;
}
/**
*fonction renvoyant la date de fin d'absence
*/
function getDateFinAbsence()
{
return $this->_date_fin_absence;
}
/**
*fonction renvoyant le motif d'absence
*/
function getIdMotif()
{
return $this->_motif;
}
/**
*fonction qui renvoit la duree d'une absence
*/
function getDureeAbsence()
{
if(($this->_date_fin_absence=='0000-00-00') or($this->_date_debut_absence==$this->_date_fin_absence))
{
$duree=1;
}else{
$deb=explode('-',$this->getDateDebAbsence());
$fin=explode('-',$this->getDateFinAbsence());
$dateDeb=mktime(0,0,0,$deb[1],$deb[2],$deb[0]);
$dateFin=mktime(0,0,0,$fin[1],$fin[2],$fin[0]);
$duree=(intval((($dateFin-$dateDeb)/3600)/24)+1);
}
return $duree;
}
/**
*fonction renvoyant la date d'envoi de la lettre d'absence
*/
function getDateEnvoi()
{
return $this->_date_envoi_lettre;
}
/**
*fonction qui recupere la liste d'absence contigues
*a une absence donnee t qui ont le meme motif
*pour un utilisateur donne
*renvoie l'objet absence precedent
*renvoie -1 s'il n'existe pas
*/
function getAbsencesPrec()
{
//recuperation de l'absence juste avant
//recuperation par maximum date de debut
//recuperation des absences non encore validees
$requete="SELECT MAX(".GEST_CHAMPS_DATE_FIN_ABSENCE.") ".
" FROM ".GEST_ABSENCE.
" WHERE ".GEST_CHAMPS_ID_UTILISATEUR." = $this->_utilisateur ".
" AND ".GEST_CHAMPS_ID_MOTIF." = $this->_motif ".
" AND ".GEST_CHAMPS_DATE_ENVOI_LETTRE."= \"0000-00-00\"".
" AND ".GEST_CHAMPS_DATE_FIN_ABSENCE. "< \"$this->_date_debut_absence\"".
" AND ".GEST_CHAMPS_DATE_DEBUT_ABSENCE. " <\"$this->_date_debut_absence\"";
$resultat=$GLOBALS['db']->query($requete);
(DB::isError($resultat)) ?
die (BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '' ;
$ligne=$resultat->fetchRow(DB_FETCHMODE_ORDERED);
if($ligne[0]!=null)
{
//recuperation de l'objet absence precedente
$absence=&Absence::recupererAbsenceDateFin($this->_utilisateur,$this->_motif,$ligne[0]);
return $absence;
}else return -1;
}
/**
*fonnction qui recuprer l'absence du meme motif situe juste apres
*cette absence
*renvoi l'absence
*renvoie -1 si vide ou erreur
*/
function getAbsencesSuiv()
{
$requete= " SELECT MIN(".GEST_CHAMPS_DATE_DEBUT_ABSENCE.")".
" FROM ".GEST_ABSENCE.
" WHERE ".GEST_CHAMPS_ID_MOTIF." = $this->_motif ".
" AND ".GEST_CHAMPS_ID_UTILISATEUR." = $this->_utilisateur ".
" AND ".GEST_CHAMPS_DATE_DEBUT_ABSENCE." > \"$this->_date_debut_absence\" ".
" AND ".GEST_CHAMPS_DATE_ENVOI_LETTRE. " = \"0000-00-00\"";
$resultat=$GLOBALS['db']->query($requete);
(DB::isError($resultat)) ?
die (BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '' ;
$ligne =$resultat->fetchRow(DB_FETCHMODE_ORDERED);
if($ligne[0]!=null)
{
//recuperation de l'objet absence precedente
$absence=&Absence::recupererAbsenceDateFin($this->_utilisateur,$this->_motif,$ligne[0]);
return $absence;
} else return -1;
}
/**
*fonction recuperant une absence a partir de
*@param id : identifiant utiliateur
*@param : motif
*@param : datedebut de l'absence
*@return absence
*-1 si erreur ou rien
*/
function recupererAbsenceDateDeb($id,$motif,$dateDeb)
{
$requete=" SELECT * FROM ".GEST_ABSENCE.
" WHERE ".GEST_CHAMPS_ID_UTILISATEUR." =$id ".
" AND ".GEST_CHAMPS_ID_MOTIF." = $motif ".
" AND ".GEST_CHAMPS_DATE_DEBUT." =\"$dateDeb\"";
$resultat=$GLOBALS['db']->query($requete);
$ligne=$resultat->fetchRow(DB_FETCHMODE_ASSOC);
$k=$resultat->numRows();
(DB::isError($resultat)) ?
die (BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '' ;
if($k==1)
{
$absence=new Absence($ligne[GEST_CHAMPS_ID_UTILISATEUR],$ligne[GEST_CHAMPS_ID_MOTIF],$ligne[GEST_CHAMPS_DATE_DEBUT_ABSENCE]);
$absence->setDateFin($ligne[GEST_CHAMPS_DATE_FIN_ABSENCE]);
$absence->setDateEnvoi($ligne[GEST_CHAMPS_DATE_ENVOI_LETTRE]);
return $absence;
}else return -1;
}
/**fonction qui recupere une absence de la base de donnees
*@param : $id : identifiant de l'utilisateur
*@param: $motif : identifiant du motif d'absence
*@param : $date: date de fin de l'absence
*@return -1 si erreur
*@return objet absence
*/
function recupererAbsenceDateFin($id,$motif,$dateFin)
{
$requete=" SELECT * FROM ".GEST_ABSENCE.
" WHERE ".GEST_CHAMPS_ID_UTILISATEUR." =$id ".
" AND ".GEST_CHAMPS_ID_MOTIF." = $motif ".
" AND ".GEST_CHAMPS_DATE_FIN_ABSENCE." =\"$dateFin\"";
$resultat=$GLOBALS['db']->query($requete);
$ligne=$resultat->fetchRow(DB_FETCHMODE_ASSOC);
$k=$resultat->numRows();
(DB::isError($resultat)) ?
die (BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '' ;
if($k==1)
{
$absence=new Absence($ligne[GEST_CHAMPS_ID_UTILISATEUR],$ligne[GEST_CHAMPS_ID_MOTIF],$ligne[GEST_CHAMPS_DATE_DEBUT_ABSENCE]);
$absence->setDateFin($ligne[GEST_CHAMPS_DATE_FIN_ABSENCE]);
$absence->setDateEnvoi($ligne[GEST_CHAMPS_DATE_ENVOI_LETTRE]);
return $absence;
}else return -1;
}
/**
*met a jour la det de debut
*
*/
function setDateDeb( $dateDeb )
{
$this->_date_debut_absence =$dateDeb;
}
/**
*met a jour la date de fin
* verification si date de fin superieur ou egale a date debut
*renvoi 1 si modification effectuee
*-1 si erreur
*/
function setDateFin($dateFin )
{
$deb=$this->_date_debut_absence;
if ($deb<=$dateFin )
{
$this->_date_fin_absence=$dateFin;
return 1;
}else{
return -1;
}
}
/**
*met a jour la date d'envoi
*
*/
function setDateEnvoi( $dateEnvoi )
{
$this->_date_envoi_lettre=$dateEnvoi;
}
/*
*supprime une absence
*@param : $user : identifiant de l'utilisateur
*@date : date de l'absence : debut d'absence au format Y-m-d
*/
function supprimerAbsence($user,$dateDeb)
{
$requete="DELETE FROM ".GEST_ABSENCE.
" WHERE ".GEST_CHAMPS_ID_UTILISATEUR." = $user "
." AND ".GEST_CHAMPS_DATE_DEBUT_ABSENCE." = \"$dateDeb\" ";
$resultat=$GLOBALS['db']->query($requete);
(DB::isError($resultat)) ?
die (BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '' ;
$j=$GLOBALS['db']->affectedRows();
return $j;
}
/**
*recuperer absence pour un utilisateur
*@param id : identifiant utilisateur
*/
function recupererTableauAbsence($id)
{
$table =array();
$requete=" SELECT ".GEST_CHAMPS_DATE_DEBUT_ABSENCE." , ".GEST_CHAMPS_DATE_FIN_ABSENCE.
" , ".GEST_CHAMPS_DATE_ENVOI_LETTRE." , ".GEST_CHAMPS_LIBELLE_MOTIF.
" FROM ".GEST_ABSENCE." a, ".GEST_MOTIF_ABSENCE." m WHERE "
.GEST_CHAMPS_ID_UTILISATEUR." =$id AND "
."a.".GEST_CHAMPS_ID_MOTIF." = m.".GEST_CHAMPS_ID_MOTIF." ";
$resultat =$GLOBALS['db']->query($requete) ;
(DB::isError($resultat)) ? die (BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '' ;
while($ligne=$resultat->fetchRow(DB_FETCHMODE_ASSOC))
{
$case =array(
GEST_CHAMPS_DATE_DEBUT_ABSENCE =>$ligne[GEST_CHAMPS_DATE_DEBUT_ABSENCE],
GEST_CHAMPS_DATE_FIN_ABSENCE =>$ligne[GEST_CHAMPS_DATE_FIN_ABSENCE],
GEST_CHAMPS_DATE_ENVOI_LETTRE =>$ligne[GEST_CHAMPS_DATE_ENVOI_LETTRE],
GEST_CHAMPS_LIBELLE_MOTIF =>$ligne[GEST_CHAMPS_LIBELLE_MOTIF]);
array_push($table,$case);
}
return $table;
}
/*
*affichage des absences
*/
function afficherAbsence()
{
echo "absence : ";
$t=array(
$this->_utilisateur,$this->_motif,$this->_date_debut_absence,
$this->_date_fin_absence,$this->_date_envoi_lettre);
foreach ($t as $p)
{
if (isset($p)){
echo "$p <br />";}
}
}
}
?>
Property changes:
Added: svn:executable