IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Zend Framework PHP Discussion :

Création d'un calendrier de pointage


Sujet :

Zend Framework PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 22
    Par défaut Création d'un calendrier de pointage
    Bonsoir tous le monde,

    Je suis entrain de développer une application de gestion d’absentéisme et congé.

    J'implémente la partie absences. L'action se base à importer un fichier de pointage sous format Excel ( l'importation est bonne ) : chaque ligne contient la date de pointage ( c a d que la personne s'est bien présentée) l'heur d'arrivé , le nom et prénom et la matricule. J'ai réussi à introduire ce fichier dans la base. Maintenant je dois la transformer sous la forme d'une calendrier :

    En sélectionnant une période la page doit afficher tous les dates de la période et la liste des personnes par service déjà introduit. Jusqu'au là j'arrive à lister les utilisateur par services , mais je ne sais pas comment procéder afin de vérifier si chaque utilisateur est bien pointé chaque jour.

    Voyons le code dans le Model:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    	public function listeabs_service($service,$datedebut,$datefin)
    	{
    	 $req="select num_import, impor.Matricule,date_import,nom_prenom,serv.num_serv
    	from import_abs as impor,utilisateur as util, service as serv 
    	where impor.Matricule=util.Matricule
    	and util.num_serv='".$service."'
    	and util.num_serv=serv.num_serv
    	and date_import>='".$datedebut."'
    	and date_import <= '".$datefin."' order by util.Matricule";
    	       return $this->db->fetchAll($req);       
    	}
    ==> cette fonction vérifie la liste des personnes qui sont pointé entre datedebut et datefin.

    Dans mon controller:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    if ($this->_request->isPost())
    {
    	    function getDaysInMonth($month,$year) 
    {	$dim = date( "t", mktime(0, 0, 0, $month, 1, $year)); 
    return $dim; 
    }
    	     	Zend_Loader::loadClass('Zend_Filter_StripTags');
                $filter = new Zend_Filter_StripTags();
                $liste_abs_serv= new Absences(); 
     			$service = trim($filter->filter($this->_request->getPost('service')));
     			$datedebut = trim($filter->filter($this->_request->getPost('datedebut')));
     			$datefin = trim($filter->filter($this->_request->getPost('date_fin')));
     
     
      $listeutil_serv=new Utilisateur;
      $this->view->liste_util_serv=$listeutil_serv->utilisateurbyservice($service);		
      $datedebut=dateang($datedebut);
      $datefin=dateang($datefin);
     
      $this->view->date_debut=$datedebut;
      $this->view->date_fin	=$datefin;
    function getDatesFromRange($startDate, $endDate) {
        $return = array($startDate);
        $start = $startDate;
        $i = 1;
        if (strtotime($startDate) < strtotime($endDate)) {
            while (strtotime($start) < strtotime($endDate)) {
                $start = date('Y-m-d', strtotime($startDate . '+' . $i . ' days'));
                $return[] = $start;
                $i++;
            }
        }
     
        return $return;
    }// cette fonction afficher les jours de la période sélectionnée
     
    $this->view->Tab_dates=getDatesFromRange($datedebut, $datefin);
    $this->view->listeall=$allabs->listeabs_service($service,$datedebut,$datefin); // renvoi la liste des utilisateur pointés et les jours de pointage
    ==> se code permet d'avoir la liste des utilisateurs ainsi les pointage faites entre la période désirée.

    Dans mon vue:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
     
    <tr><td> <p> Employeur</p></td> <td><p> Matricule</p></td>
     
    <?php foreach($this->Tab_dates as $date):
    $date_mois=date_mois_jour($date);
      echo "<td><p>".$date_mois."</p></td>";
      endforeach; 
    ?></tr>
     
    <?php 
     
    foreach($this->liste_util_serv as $liste) : ?>
    <td  ><?php echo $liste['nom'].' '.$liste['nom'];?></td>
    <td width=""> <?php echo $liste['Matricule'];?>&nbsp;</td>
     
    </tr>
    <?php endforeach; 
    }?>
    ça affiche uniquement les jours de la période et les utilisateurs de service sélectionné.

    Ma question est comment je peux afficher si un utilisateur est présent entre la 1er date jusqu'à la dernière . Je n'arrive pas à savoir comment faire si un utilisateur est pointé ou non et comment l'afficher sur le calendrier?

    J'espère que je me suis bien exprimer sinon veuillez voir l'imprime ecran pour comprendre l'aspect de calendrier( avec une rectif manuel de se que je veux affcher). Avez vous des idée comment je peux terminer ma page et affiché le calendrier?
    Merci d'avance
    Images attachées Images attachées  

  2. #2
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 22
    Par défaut
    Salut ,

    je pense que c'est un peu compliqué

    j'ai trouver finalement une solution partielle , ce code ci dessus affiche les jour de la période sélectionnée par la suite pour chaque utilisateur il teste si l'employeur est présent la case s'affiche en vert sinon en gris:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    <?php 
    	foreach($this->Tab_dates as $date):
    			$date_mois=date_mois_jour($date);
      			echo "<td><p>".$date_mois."</p></td>";
    			endforeach;
    			echo "</tr>";
     
    	foreach($this->listeall as $info):
    			echo"<tr><td><p>".$info['nom_prenom']."</p></td>";
    			echo"<td><p>".$info['Matricule']."</p></td>";
    			$nbr=count($this->Tab_dates);
    	  for ($i=0;$i<$nbr;$i++)
    		{
     
    			if($info['date_import']==$this->Tab_dates[$i])
     
    			{
    				echo"<td bgcolor='#00CC00'><font color='#ffffff'></td>";
     
     
    			}
    			else 
    				echo"<td bgcolor='#CCCCCC'><font color='#ffffff'></td>";
     
    		}
    		echo "</tr>";
     
     	endforeach;
     
     
    ?>
    Sauf que si un employeur existe deux fois dans la table de pointage il va être afficher autant de fois pour chaque date.

    Avez vous une idée comment je peux afficher chaque personne en une ligne avec tous les jours pointés?

  3. #3
    Membre éclairé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2004
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juillet 2004
    Messages : 51
    Par défaut
    Voilà comment je ferais.

    Tu as
    1) La période
    2) La liste des personnes étant pointé au moins une fois dans la période
    3) La liste des présences couple (date + personne) durant la période

    A partir de là tu n'as plus qu'a enchaine les boucles
    -> Pour chaque personnes
    -> Pour la période
    -> Tu vérifies l'existence de la présence


    Ton tableau de présence pour le couple personne date pourra être un simple tableau à une dimension, tu n'auras qu'a testé l'existence du couple pour cocher ou non la case.

  4. #4
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 22
    Par défaut
    Salut

    Désolé pour le retard, Oui effectivement j'ai pu me procéder de cette façon et j'ai rajouter le Group_concat dans ma requette SQL

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    $nbr=count($this->Tab_dates);
     		  $split = explode(" ",$info['result']);// exploder les date de Group_Concat
    		  sort($split);
    		  $nbrdate=count($split);
    for ($i=0;$i<$nbr;$i++)
    {
     
    if(in_array($this->Tab_dates[$i],$split))
    {			echo"<td  bordercolordark='#000000' bgcolor='#00CC00'>P<font  size='1%'color='#ffffff'></font></td>";
     
    }
    else 
    			{	echo"<td  width='' bgcolor='#CCCCCC'>A<font  size='+1'color='#ffffff'></font></td>";
    			}
     
    }
    et ça affiche correctement les absences et les pointages

    Merciii pour votre intervention

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Création d'un calendrier de type outlook
    Par borislenium dans le forum Modélisation
    Réponses: 8
    Dernier message: 13/05/2008, 10h24
  2. Création d'un calendrier
    Par cheva52 dans le forum C++Builder
    Réponses: 3
    Dernier message: 11/01/2008, 16h36
  3. Création d'un calendrier
    Par CleeM dans le forum Delphi
    Réponses: 10
    Dernier message: 05/06/2007, 16h31
  4. Un calendrier de pointage
    Par micniv dans le forum Contribuez
    Réponses: 10
    Dernier message: 19/02/2007, 16h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo