Création d'un planning de RDV pour la semaine

alphacrash Messages postés 55 Date d'inscription jeudi 7 novembre 2002 Statut Membre Dernière intervention 17 août 2012 - 15 juil. 2010 à 19:15
Seraphino Messages postés 29 Date d'inscription jeudi 14 avril 2005 Statut Membre Dernière intervention 5 octobre 2010 - 5 oct. 2010 à 03:25
Salut à tous !

Je butte depuis 3 jours sur un problème, qui je suis sur sera assez vite résolu, du moins je l'espère.
Je souhaite faire un planning pour gérer des rendez-vous dans la semaine.

Les données seront stockées en base mysql mais pour le moment je simule avec des tableaux.
Le code ci-dessous à pour but de simuler le fonctionnement.
Le problème est que j'ai du mal à sortir les plages horaires pour lesquelles il n'y a pas de rendez-vous, en fait, mon code ne m'en sorte qu'une, par exemple:
08:00:00-->08:40:00 non
08:40:00-->09:20:00 oui
09:20:00-->10:00:00 oui
10:00:00-->10:40:00 oui
10:40:00-->11:20:00 oui
11:20:00-->12:00:00 oui
Alors qu'il devrait me sortir:
08:00:00-->08:40:00 non
08:40:00-->09:20:00 oui
09:20:00-->10:00:00 non
10:00:00-->10:40:00 oui
10:40:00-->11:20:00 oui
11:20:00-->12:00:00 oui

J'ai vraiment du mal à m'en sortir donc si quelqu'un a l'envie de m'aider, voici le code:
<?php
@require_once("../config.inc.php");
$date=date('Y-m-d');

$idProduit=0;
if(isset($_REQUEST['idProduit'])){
$idProduit=$_REQUEST['idProduit'];
}

echo $idProduit;

?>
<script src="../scripts/jquery.js" type="text/javascript" charset="utf-8"></script>
<?php
function getFournisseurInfosServices($idFournisseur){
$queryFournisseurInfosServices=mysql_query("SELECT * FROM infosfournisseurservice WHERE idFournisseur=".$idFournisseur."") or die(mysql_error());
$fournisseurInfosServices=mysql_fetch_assoc($queryFournisseurInfosServices);

return $fournisseurInfosServices;

}


$fournisseurService=getFournisseurInfosServices(1);


$totalWidth=500;//Taille du div
$debutJournee=$fournisseurService['heureDebut'];
$finJournee=$fournisseurService['heureFin'];

list($heure, $minutes) =  preg_split("/:/", $debutJournee);
list($heureFinJournee, $minutesFinJournee) =  preg_split("/:/", $finJournee);

$totalHours=$heureFinJournee-$heure;//Heures pour la journée







function calculRDVWidth($duree,$totalWidth,$totalHours){

$width=(($duree)*$totalWidth)/($totalHours*60);

return $width;

}




function calculPositionRDV($debutJournee,$finJournee,$dureeMinutes,$totalHours,$heureRdv,$totalWidth){
$initLeftPx=0;//=DebutJournee 9h

$uneHeureLeftPx=$totalWidth/(($totalHours));//px
$uneMinuteLeftPx=$totalWidth/(($totalHours)*60);//px


 list($heure, $minutes) =  preg_split("/:/", $heureRdv);
  list($heureDebutJournee, $minutesDebutJournee) =  preg_split("/:/", $debutJournee);
  
  $nbHeuresParRapportDebut=$heure-$heureDebutJournee;
  $nbMinutesParRapportDebut=$minutes-$minutesDebutJournee;

$leftPosition=($nbHeuresParRapportDebut*$uneHeureLeftPx)+( $nbMinutesParRapportDebut*$uneMinuteLeftPx);
 
return $leftPosition;
}



?>



<?php

$queryGetRDVServices=mysql_query("SELECT * FROM salariesRDVServices S,tempsproduit T WHERE date=CURDATE() AND S.idProduit=T.idProduit") or die(mysql_error());
while($rdv=mysql_fetch_array($queryGetRDVServices)){

?>

px;width:<?php echo round(calculRDVWidth($rdv['temps'],$totalWidth,$totalHours)); ?>px;height:60px;background:gray;text-align:center;">
<?php
echo "left:".round(calculPositionRDV($debutJournee,$finJournee,$rdv['temps'],$totalHours,$rdv['heure'],$totalWidth))."
";
 echo "width:".round(calculRDVWidth($rdv['heure'],$totalWidth,$totalHours))."
";


?>



<?php
}
?>






<?php echo $debutJournee; ?>


<?php echo $finJournee; ?>




<form method="POST" action="">
<select id="produit" name="idProduit">
<?php
$queryGetProduitsFournisseurServices=mysql_query("
SELECT * FROM 
produits P,tempsproduit T
WHERE 
P.idFournisseur=1
AND
P.idProduit=T.idProduit
") or die(mysql_error());
while($produit=mysql_fetch_array($queryGetProduitsFournisseurServices)){
?><option value="<?php echo $produit['idProduit']; ?>" <?php if($idProduit==$produit['idProduit']){echo " selected";} ?>><?php echo $produit['designation']; ?></option><?php
}
?>
</select>

</form>


Pour produit 1 selectioné qui dure <?php echo getTempsProduit($idProduit); ?>min:
<?php




function crenauLibre($heureDebut,$heureFin){

$queryCrenauxLibres=mysql_query("SELECT IF(
 (('".$heureFin."' <= S.heure AND '".$heureDebut."' <= SEC_TO_TIME( TIME_TO_SEC( S.heure ) + ( T.temps *60 ) ))
 OR
 (('".$heureDebut."' >= SEC_TO_TIME( TIME_TO_SEC( S.heure ) + ( T.temps *60 ) ))) 

 ) , 'oui', 'non') AS Libre, S.date, S.heure, T.temps, SEC_TO_TIME( TIME_TO_SEC( S.heure ) + ( T.temps *60 ) )
FROM salariesrdvservices S, tempsproduit T
WHERE S.idProduit = T.idProduit
ORDER BY S.heure
LIMIT 0 , 30
") or die(mysql_error());



$res=mysql_fetch_assoc($queryCrenauxLibres);

return $res['Libre'];
}


$queryCrenauxLibres=mysql_query("SELECT * FROM salariesRDVServices S,tempsproduit T WHERE date=CURDATE() AND S.idProduit=T.idProduit AND T.idProduit=".$idProduit."") or die(mysql_error());
while($crenauxReserves=mysql_fetch_array($queryCrenauxLibres)){

$dateHeureDebut =strtotime($crenauxReserves['date']." ".$crenauxReserves['heure']);
$dateHeureFin= date("H:i:s", $dateHeureDebut+($crenauxReserves['temps']*60));





}

function getTempsProduit($idProduit){
$queryTempsProduit=mysql_query("SELECT temps FROM tempsproduit WHERE idProduit=".$idProduit." ") or die(mysql_error());
$res=mysql_fetch_assoc($queryTempsProduit);
return $res['temps'];
}


?>
<!--<select id="creneauxDispo">//-->
<?php
$tps=strtotime($date." ".$debutJournee);

$oldDate="";
while($tps<strtotime($date." ".$finJournee)){
$oldDate=date("H:i:s",$tps);
//echo date("H:i:s",$tps);
$tps+=getTempsProduit($idProduit)*60;
//echo "-->".date("H:i:s",$tps);
$newDate=date("H:i:s",$tps);

//if(crenauLibre($oldDate,$newDate)!="oui"){
//echo "<option value="".$oldDate."">".$oldDate."-->".$newDate."-".crenauLibre($oldDate,$newDate)."</option>";
//	}
echo "
";
print_r(crenauLibre($oldDate,$newDate)); 

}




?>
<!--</select>//-->

<script>
$(document).ready(function() {
$("#creneauxDispo").change(function () { 

alert($('#creneauxDispo :selected').val());
 
});
});
</script>




Merci d'avance !

1 réponse

Seraphino Messages postés 29 Date d'inscription jeudi 14 avril 2005 Statut Membre Dernière intervention 5 octobre 2010
5 oct. 2010 à 03:25
Je cherche également à faire la même chose si quelqu'un à la soluce, je pense qu'elle aidera plusieurs personnes ;)
0
Rejoignez-nous