pb affichage planning absences

pb affichage planning absences - PHP - Programmation

Marsh Posté le 21-11-2008 à 10:42:43    

Bonjour a tous
Je suis débutant en php et j'esssaie de faire un planning d'absences mais je galère. le problème est dans la présentation : j'ai un tableau d'absences ($abs) qui contient l'id de la personne, la date de début et la date de fin d'absence. 1 personne peut avoir plusieurs absences donc je rajoute un élément dans le tableau a chaque fois. Le code fonctionne s'il y a une absence par personne , mais s'il y en a plus rien ne va je n'arrive pas à afficher sur une meme ligne les différentes absences.
Voici le code, oui il est pourri c'est pour cela que je vous sollicite :-)
 
//parcours des salaries présents et absents
  foreach($salarie as $cle => $leSalarie){
  $multiAbs=false;
    //parcours des absences
     foreach($abs as $cle => $labsence){
       for($a=sprintf('%02d',8);$a<=sprintf('%02d',8);$a++){
            for($m=date('m');$m<=date('m');$m++){  
                for($j=1;$j<32;$j++){
                   if(checkdate($m, $j, $a)==true){
                  $timestamp=mktime(0,0,0,$m,$j,$a);
               //division des dates
             list($an, $mois, $jour)=split('-',$labsence[1]);
             list($an2, $mois2, $jour2)=split('-',$labsence[2]);
             $debutAbs=mktime(0,0,0,$mois, $jour, $an);
             $finAbs=mktime(0,0,0,$mois2, $jour2, $an2);
           
 
                if($leSalarie[0]==$abs[$cle+1][0] && $leSalarie[0]!=$abs[$cle+2][0]){  
                                   $multiAbs=true;
             
           //Ecriture de la 1ere colonne : noms
           if($j==1){
                                 echo '</tr><tr><th>'.$leSalarie[1].'</th>';
             }
           if($timestamp>=$debutAbs && $timestamp<=$finAbs){
                                                echo '<td class="rouge">X</td>';
           }
             
                             }elseif($leSalarie[0]==$abs[$cle][0]){  
 
           //Ecriture de la 1ere colonne : noms
           if($j==1  && $multiAbs==false){
                                      echo '</tr><tr><th>'.$leSalarie[1].'</th>';
            }
           //Si absence...
             
           if($timestamp>=$debutAbs && $timestamp<=$finAbs){
                   echo '<td class="rouge">X</td>';
           }elseif($timestamp<$debutAbs){
                   echo '<td>'.strftime('%d',$timestamp).'</td>';
           }
 
           //Le salarié fini, on le supprime
           if(checkdate($m, $j+1, $a)==false) echo '</tr><tr>';
                 }        
 
                }
                 }
                }
     
             }
       
     }

Reply

Marsh Posté le 21-11-2008 à 10:42:43   

Reply

Marsh Posté le 21-11-2008 à 13:01:15    

Code :
  1. foreach ($salarie as $cle => $leSalarie)
  2. {
  3.     $multiAbs = false;
  4.     //parcours des absences
  5.     foreach ($abs as $cle => $labsence)
  6.     {
  7.         for($a = sprintf('%02d', 8); $a <= sprintf('%02d', 8); $a ++)
  8.         {
  9.         }
  10.         for($m = date('m'); $m <= date('m'); $m ++)
  11.         {
  12.             for($j = 1; $j < 32; $j ++)
  13.             {
  14.                 if (checkdate($m, $j, $a) == true)
  15.                 {
  16.                     $timestamp = mktime(0, 0, 0, $m, $j, $a);
  17.                     //division des dates
  18.                     list ($an, $mois, $jour) = split('-', $labsence [1]);
  19.                     list ($an2, $mois2, $jour2) = split('-', $labsence [2]);
  20.                     $debutAbs = mktime(0, 0, 0, $mois, $jour, $an);
  21.                     $finAbs = mktime(0, 0, 0, $mois2, $jour2, $an2);
  22.                     if ($leSalarie [0] == $abs [$cle + 1] [0] && $leSalarie [0] != $abs [$cle + 2] [0])
  23.                     {
  24.                         $multiAbs = true;
  25.                         
  26.                         //Ecriture de la 1ere colonne : noms
  27.                         if ($j == 1)
  28.                         {
  29.                             echo '</tr><tr><th>' . $leSalarie [1] . '</th>';
  30.                         }
  31.                         if ($timestamp >= $debutAbs && $timestamp <= $finAbs)
  32.                         {
  33.                             echo '<td class="rouge">X</td>';
  34.                         }
  35.                     
  36.                     } elseif ($leSalarie [0] == $abs [$cle] [0])
  37.                     {
  38.                         
  39.                         //Ecriture de la 1ere colonne : noms
  40.                         if ($j == 1 && $multiAbs == false)
  41.                         {
  42.                             echo '</tr><tr><th>' . $leSalarie [1] . '</th>';
  43.                         }
  44.                         //Si absence...                        
  45.                         
  46.  
  47.                         if ($timestamp >= $debutAbs && $timestamp <= $finAbs)
  48.                         {
  49.                             echo '<td class="rouge">X</td>';
  50.                         } elseif ($timestamp < $debutAbs)
  51.                         {
  52.                             echo '<td>' . strftime('%d', $timestamp) . '</td>';
  53.                         }
  54.                         //Le salarié fini, on le supprime
  55.                         if (checkdate($m, $j + 1, $a) == false)
  56.                             echo '</tr><tr>';
  57.                     }
  58.                 }
  59.             }
  60.         }
  61.     }
  62. }


Code indenté et entre balises  :o


Message édité par Alisteroid le 21-11-2008 à 13:01:45
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed