Creation d'un calendrier simple de congés avec Mysql...dernier soucis

Signaler
Messages postés
8
Date d'inscription
lundi 5 avril 2004
Statut
Membre
Dernière intervention
3 mai 2006
-
Messages postés
20
Date d'inscription
samedi 20 septembre 2003
Statut
Membre
Dernière intervention
14 août 2008
-
Bonjour,

Je concois actuellement un calendrier hebdomadaire simple de congé pour ma boite.

Une simple base Mysql alimente le tableau
table planning : id, employé, date_debut_conge, date_fin_conge

Le script ci-dessous fonctionne trés bien seulement : si un employé a 2 jours de congés dans la semaine, la requete et le script renvoie 2 lignes pour ce même employé, ce qui fait pas pro.
Et là franchement ça fait 2 jours que je cherche car je ne suis pas un codeur professionel, et je commence à fatiguer sur le problème. Il doit y avoir une boucle à faire quelque part...mais ou ?

PS : le script est sans aucun doute trés mal codé...soyez indulgent merci

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Document sans nom</title>
</head>

<?php

include (\"include/connect.inc.php\");

function PendantPeriode($debut, $fin, $joura) {

$tDebut = explode(\"/\", $debut);
$tFin = explode(\"/\", $fin);

return( $joura >= mktime(0, 0, 0, $tDebut[1], $tDebut[0], $tDebut[2]) &&
$joura < mktime(0, 0, 0, $tFin[1], $tFin[0]+1, $tFin[2]) );

}

$joursem = array('dimanche ','lundi ', 'mardi ', 'mercredi ', 'jeudi ', 'vendredi ','samedi ');

$annee=date('Y');
$jour=date('d');
$mois = date('m');

$numSemaine =date('W',mktime(0,0,0,$mois,$jour-6,$annee));

echo '----
, ';

echo 'Semaine : '.$numSemaine.' Année :'.$annee.'
';
$premierJanvier = mktime(1,0,0,1,1,$annee);
$jourPremierJanvier = date('w',$premierJanvier);
$timestamp1 = $premierJanvier+$numSemaine*7*24*3660;
$jour = date('w',$timestamp1);

for ($i=1;$i<=5;$i++) {
$timestamp = $timestamp1+($i-$jour)*24*3600;
$jour1 = date('w',$timestamp);
echo ''.$joursem[$jour1].'';
echo date('d/m/y',$timestamp).', ';};
echo '';

$query1=\"SELECT * FROM plan ORDER BY employe\";
$res1=mysql_query($query1);
while ($requet1=mysql_fetch_object($res1))
{

echo '----
'.$requet1->employe.', '; //affichage du nom dans la première colonne

$timestamp = $timestamp1+(1-$jour)*24*3600;
$jour1 = date('d/m/y',$timestamp);

$timestamp2 = $timestamp1+(2-$jour)*24*3600;
$jour2 = date('d/m/y',$timestamp2);

$timestamp3 = $timestamp1+(3-$jour)*24*3600;
$jour3 = date('d/m/y',$timestamp3);

$timestamp4 = $timestamp1+(4-$jour)*24*3600;
$jour4 = date('d/m/y',$timestamp4);

$timestamp5 = $timestamp1+(5-$jour)*24*3600;
$jour5 = date('d/m/y',$timestamp5);

$query2=\"SELECT employe,date_debut_conge,date_fin_conge FROM plan WHERE employe='$requet1->employe' GROUP BY employe,date_debut \";
$res2=mysql_query($query2);
while ($requet2=mysql_fetch_object($res2));
{

echo PendantPeriode($requet1->date_debut_conge, $requet1->date_fin, $timestamp)? 'congé, ' : ', ';
echo PendantPeriode($requet1->date_debut_conge, $requet1->date_fin, $timestamp2)? 'congé, ' : ', ';
echo PendantPeriode($requet1->date_debut_conge, $requet1->date_fin, $timestamp3)? 'congé, ' : ', ';
echo PendantPeriode($requet1->date_debut_conge, $requet1->date_fin, $timestamp4)? 'congé, ' : ', ';
echo PendantPeriode($requet1->date_debut, $requet1->date_fin, $timestamp5)? 'congé, ' : ', ';
}

echo ''; //fin de la ligne de l'utilisateur
}

?>
</td>

</html>
A voir également:

5 réponses

Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
24
Hello,

ben c'est normal? A toi de parser si tu as pmlusieurs congés ? Que voudrais-tu faire au juste ?
Messages postés
8
Date d'inscription
lundi 5 avril 2004
Statut
Membre
Dernière intervention
3 mai 2006

Eh bien, je voudrais qu'au lieu d'afficher 2 lignes de congés pour un utilisateur, ça ne m'affiche qu'une seule ligne. Je m'explique :

par exemple j'ai 2 entrées dans ma base




Entrée 1


Utilisateur : utilisateurA


Date_debut_conge : 06/02/06


Date_fin_conge : 06/02/06





Entrée 2


Utilisateur : utilisateurA


Date_debut_conge : 08/02/06


Date_fin_conge : 09/02/06

Dans mon cas, le script affiche :

<COLGROUP>
<COL span=6 width=80>

----


,
Lundi6
,
Mardi 7
,
Mercredi 8
,
Jeudi 9
,
Vendredi 10
,
----

utilisateurA
,
congé
,

,

,

,

,
----

utilisateurA
,

,

,
congé
,
congé
,


Et je voudrais qu'il m'affiche :

<COLGROUP>
<COL span=6 width=80>

----


,
Lundi6
,
Mardi 7
,
Mercredi 8
,
Jeudi 9
,
Vendredi 10
,
----

utilisateurA
,
congé
,

,
congé
,
congé
,


C'est ceci que je n'arrive pas à faire...
Messages postés
20
Date d'inscription
samedi 20 septembre 2003
Statut
Membre
Dernière intervention
14 août 2008

Bonsoir, en fait ce code est super, mais j'essaie de l'adapter pour un planning de cours et en reprenant ton code, mes employés Maurice et Robert ne sont jamais en congés ! J'ai corrigé les petits oublis : $requet1->date_debut_conge, $requet1->date_fin_conge, $timestamp5... il manquait parfois _ conge dans les conditions et la requete.
En tout cas, si tu as depuis, résolu ton probleme, j'avoue que je serai très interessé par ton code, si ça ne t'ennuie pas trop.
Merci

Be Good...
Messages postés
8
Date d'inscription
lundi 5 avril 2004
Statut
Membre
Dernière intervention
3 mai 2006

Bonjour,
En fait j'ai laissé tombé ce code faute d'autres projet plus important.

Mais je sais qu'un jour ou l'autre je vais en avoir besoin donc j'y replongerai sans doute. J'ai observé vos modifs mais n'en ai pas vérifié les effets...voit-on toujours apparaitre dans le cas mentionné au début du post ?
Messages postés
20
Date d'inscription
samedi 20 septembre 2003
Statut
Membre
Dernière intervention
14 août 2008

Bonjour, merci pour votre réponse. En fait, je vais paraitre idiot, mais chez moi, rien ne s'affiche. Je suppose que ça vient de la table.. J'ai mis un champ DATE au format Y:d:m essayé toutes les permutations pour que les date_debut_conge et date_fin_conge correspondent au format de votre fonction mais sans succès.
C'est un détail mais si à l'occasion vous pouviez me dire sous quelle forme est votre champ date dans la BDD :-), je pense que ça vient de là.
Pour le fait de n'afficher qu'un seul row par employé, on m'a conseillé, sur d'autres forums, d'éviter les boucles dans les boucles et de bosser plutot la requete (la rendre plus complete et donc, plus complexe), alors que pour une tableau multidimensionnel, on a pas trop le choix. Personne n'a vraiment pu m'aider et je n'ai trouvé aucun planning hebdomadaire existant digne de ce nom.
Du coup (je raconte ma vie), j'ai opté pour un masque de saisie par heure de la journée, comprenant un champ par jour de la semaine. Je peux afficher mes cours (ou conges) dans les bonnes cases en bouclant sur $heure (8h, 9h, 10h...) et en triant par $jour, mais c'est évidemment bien moins puissant que votre code, puisqu'on est obligé de renseigner chaque jour de la semaine (7 fois le meme masque de saisie et on boucle par groupe de 7 pour changer d'heure la ligne en dessous).
En tout cas, vu que personne ne semble avoir déjà cpdé qque chose d'approchant, je pense que vous tenez un truc là !
Je regrette de n'avoir pas le niveau pour optimiser votre fonction, que je me suis permis de montrer à des amis plus doués, et personne n'a pu me donner la soluce...
J'y ai passé 3 jours et je suis sur que c'est la bonne piste (la votre), il manque un détail qui m'échappe encore mais si jamais vous trouvez (ou moi), on se tient au courant parce qu'il est vraiment énorme votre tableau !

Be Good...