Pour le boulot, je dois développer une petite application de gestion d'absence sous la forme d'un calendrier, afin de remplacer la feuille Excel utilisée.
La calendrier est bien affiché (youhou) mais j ai un soucis dans le cas ou une personne à deux absence dans le mois (pour l'instant l'application est uniquement pour le moins de juin, je ferai les modifs de mois apres).
Pour ce, j ai 3 tables :
cal_user : avec id_user, nom, prenom
cal_motif : code, libelle (num de type d absence, type d'absence)
cal_absence : id_row, id_user, date_debut, date_fin, motif, commentaire (motif correspond au numero de type d'absence).
Le code :
Je fais une première boucle foreach qui liste les différents utilisateurs, dans cette boucle, j ai un for qui permet d afficher les jours du mois, le calendrier étant sur une ligne).
Pour chaque numéro de motif, une couleur est attribué. A coté de ça, j ai une classe qui récupère les infos dans les tables.
La page : (je ne poste que la partie du code concernant les lignes des utilisateurs)
require_once('calendrier.class.php');
$oUser = new Calendrier();
[...]
/********** Boucle "verticale" pour afficher les données des utilisateurs ***************/
foreach($oUser->m_aListeLogin as $calendarByUser){
echo '<tr width="10">';
echo '<td>';
$idUser = $calendarByUser['id']; //recuperation de l'ID d'un utilisateur
echo '<p>'.$calendarByUser['nom'].' '.$calendarByUser['prenom'].'</p></td>';
/** Boucle "horizontale" pour afficher le calendrier **/
for($jour = 1,$n = $nomJourPremier; $jour <= $nombreJoursMois; $jour++, $n++){
$nomJour = date("D", mktime(0,0,0,$moisActuel,$jour,$anActuel)); //donne nom du jour en fonction du num du jour passé en parametre
$nomJourFr = $nomJoursFr[$nomJour];//affichage en FR des nom
$weekEnd = array("S","D"); //Stockage des jours fériers
$date = date("$jour/$moisActuel/$anActuel"); //echo $date;
//$oUser->_infoUser($idUser); //recuperation des infos
$oUser->_recupDate($idUser,$jour);
//tableau declaration des couleurs
$couleur = array( 1 => "#ea1f29", 2 => "#0000FF", 3 => "#00FF00", 4 => "#FF00FF", 5 => "#FFFF00", 6 => "#f48425" );
//recuperation des dates
//$dateDeb = date("d",strtotime($oUser->m_aListeDate["date_debut"]));
//$dateFin = date("d",strtotime($oUser->m_aListeDate["date_fin"]));
echo '<td align="center" ';
//Pour les WE, on affiche les cases en gris
if(in_array($nomJourFr,$weekEnd)){
echo ' bgcolor="#e3e3e3"';
}
//if(($jour >= $dateDeb) && ($jour <= $dateFin)){
echo ' bgcolor="'.$couleur[$oUser->m_aListeDate['motif']].'" >'.$numAbs['motif'].'</td>';
//}//fin if
//else { echo ' bgcolor="#FFFFFF">'; }
echo '</td>';
}//fin for
echo '</tr>';
}//fin foreach
Et ma classe :
require_once('connexionBD.php');
require_once('absence.class.php');
class Calendrier extends Absence{
function calendrier() {
$this->m_nAccesBD = new connexionBD();
$this->m_aListeLogin = $this->_GenereListeLogin('cal_user');
//$this->m_aListeLogin = $this->_InfoByLogin('cal_absence');
$this->m_aListeMotif = $this->_GenereListeMotif('cal_motif');
$oldlocale = setlocale(LC_TIME, NULL);
setlocale(LC_TIME, 'fr_FR');
}
function _recupDate($idUser,$date){
$sRequete = 'SELECT * FROM cal_absence WHERE id_user = '.$idUser;
//$sRequete .= ' AND date_debut >to_date(\''.$date.'\',\'dd/mm/yyyy\') AND date_fin <to_date(\''.$date.'\',\'dd/mm/yyyy\')';
$this->m_nAccesBD->connexion();
$rResultatDate = $this->m_nAccesBD->requete($sRequete);
$this->m_nAccesBD->deconnexion();
$m_aListeDate = array();
return $this->m_aListeDate = pg_fetch_array($rResultatDate);
//while($aResultatDate = pg_fetch_assoc($rResultatDate)){
//return $this->m_aListeDate[$aResultatDate['id_row']] = $aResultatDate;
//}//fin while
}
//Fonction qui retourne le motif en fonction du numero de motif de la personne
function _motifCouleur($num_motif){
$sRequete = "SELECT code,libelle FROM cal_motif WHERE code = '".$num_motif."'";
if($m_bRequeteValide == true){
$this->m_nAccesBD->connexion();
//Récupération de la liste des code ainsi que les libellé associé
$rResultatMotif = $this->m_nAccesBD->requete($sRequete);
$this->m_nAccesBD->deconnexion();
}
while ($aResultatMotif = pg_fetch_array($ResultatMotif)) {
return $this->aResultatMotif = $aResultatMotif['code'];
}//fin while
}
}//fin classe
Comme je disais, lorsque l'user n'a qu'une seule absence dans le mois, l' affichage est bon, mais des que ça dépasse ou égale 2 absences, je n affiche pas à récupérer les données.Je penses que ceci est du à ma fonction qui récupère les données.
Et n'étant pas encore vmt familier avec l'objet, il se peut que je récupère mal aussi les données.
Merci d'avance