Subversion Repositories Applications.gtt

Rev

Go to most recent revision | Blame | Last modification | View Log | RSS feed

<?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 />";}
        }
        
        
    }
    
}
?>