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

stevethx27 Messages postés 8 Date d'inscription lundi 5 avril 2004 Statut Membre Dernière intervention 3 mai 2006 - 10 févr. 2006 à 11:59
cs_krma Messages postés 20 Date d'inscription samedi 20 septembre 2003 Statut Membre Dernière intervention 14 août 2008 - 18 juil. 2008 à 11:29
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>

5 réponses

malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
10 févr. 2006 à 15:53
Hello,

ben c'est normal? A toi de parser si tu as pmlusieurs congés ? Que voudrais-tu faire au juste ?
0
stevethx27 Messages postés 8 Date d'inscription lundi 5 avril 2004 Statut Membre Dernière intervention 3 mai 2006
10 févr. 2006 à 17:05
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...
0
cs_krma Messages postés 20 Date d'inscription samedi 20 septembre 2003 Statut Membre Dernière intervention 14 août 2008
15 juil. 2008 à 19:53
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...
0
stevethx27 Messages postés 8 Date d'inscription lundi 5 avril 2004 Statut Membre Dernière intervention 3 mai 2006
18 juil. 2008 à 08:18
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 ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_krma Messages postés 20 Date d'inscription samedi 20 septembre 2003 Statut Membre Dernière intervention 14 août 2008
18 juil. 2008 à 11:29
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...
0
Rejoignez-nous