lynkis

Inscris le 26/06/2013 à 14:14
  • Signature
    Lynkis
  • Nombre de sujets
    1
  • Nombre de messages
    5
  • Nombre de commentaires
    Aucun
  • Nombre de news
    Aucune
  • Niveau en PHP
    Débutant

Ses derniers sujets sur les forums

lynkis
le 26/06/2013 à 14:27
Probleme calcul plage horaire
Bonjours a tous,
Voila je suis en 1ère année de BTS Info Option SLAM et j'ai un stage de fin d'année.
Je suis actuellement dans une école (mon stage) .
Il m'ont donnés pour objectif de faire quelques script en PHP afin d'améliorer leur site de gestion d'emploi du temps des étudiants.
Le site etant déjà bien avancé bien sur mais il reste quelques "petits" soucis encore a corriger.
MON SOUCIS : Je doit faire en sorte que lorsque j'ajoute un cours dans mon emploi du temps (ex : De 8h00 à 9h00) celui ci s'affiche ( c'étais déjà de base) , petit bémol, c'est que lorsque je souhaite mettre cette fois ci un cours (ex : De 8h15 à 9h15) mais que le cours précédent est déjà créer, les deux cours sont chevaucher ( Pas cool ).
On m'a donc demander de faire en sorte que quand un cours est ajouté, on ne puisse pas en mettre un nouveau dans la même plage horaire.
Voici mon code que j'ai fait:
<?php                          $etdate = date("Y-m-d",date_offset(date_lundi($_SESSION['date']),$_POST['jour']-1));
$etdebut_new = "{$_POST['hh_deb']}:{$_POST['mm_deb']}:00";
$etduree = "{$_POST['hh_dur']}:{$_POST['mm_dur']}:00";
$etdebut_exist = $_SESSION['paperboard'][4]['et_debut'];
var_dump ($etdebut_new);
var_dump ($etduree);
var_dump ($etdebut_exist);

$sql = "SELECT id_et FROM emptps WHERE id_mat='{$_POST['mat']}' AND et_date='$etdate' ";
$sql.= "AND et_debut='".$etdebut_new."' AND id_gr='{$_POST['group']}' AND id_form={$_SESSION['form']}";
$result=mysql_query($sql) or $debug.=$sql;

// Le code que j'ai ajouter //
echo "<br>";
// 15 minutes en dec
$temps = 25*3600/100;
// Heure de durée en dec
$etduree = $etduree*3600;
// Heure de début en dec
$etdebut = $etdebut_new*3600;
// Heure de fin en dec
$etfin = $etduree + $etdebut;

for($i=$etdebut; $i!=$etfin; $i+=$temps){
$heure=date('H:i:s', $i);
echo'<option value="'.$heure.'">'.$heure.'</option>';
$sql2 = "SELECT et_debut FROM emptps WHERE et_date='$etdate' AND et_debut='".$etdebut_exist."' ";
$result2=mysql_query($sql2) or $debug.=$sql2;
$test = mysql_fetch_array($result2);
var_dump ($test);
if ($result&&mysql_num_rows($result)!=0&&){
$info ="Erreur(s) détectée(s):".$info;
$info.="--INSERTION NON EFFECTUEE--\\n La plage horaire a déjà été utilisée!";
}
}
// Le code que j'ai ajouter //

if ($result&&mysql_num_rows($result)!=0){
$info ="Erreur(s) détectée(s):".$info;
$info.="--INSERTION NON EFFECTUEE--\\n Cette intervention existe déja!";
}elseif ($_POST['hh_dur']==0 && $_POST['mm_dur']==0) {
$info ="Erreur(s) détectée(s):".$info;
$info.="--INSERTION NON EFFECTUEE--\\n La durée ne peut etre nulle!";
}else{
if ($_POST['attention']=='on') $es='S'; else $es='A';
if ($_POST['devoir']) $et=$_POST['devoir']; else $et='N';
if ($_POST['et_cpt']=='on') $ecpt='P'; else $ecpt='N';
if ($_POST['pause']=='on') $paus='Y'; else $paus='N';
if ($_POST['video']=='on') $video='Y'; else $video='N';

//Vérification
$chevauchement = "( ( et_debut < sec_to_time( time_to_sec('{$_POST['hh_deb']}:{$_POST['mm_deb']}:00')";
$chevauchement .= " +time_to_sec('{$_POST['hh_dur']}:{$_POST['mm_dur']}:00'))";
$chevauchement .= " AND sec_to_time(time_to_sec('{$_POST['hh_deb']}:{$_POST['mm_deb']}:00')";
$chevauchement .= " +time_to_sec('{$_POST['hh_dur']}:{$_POST['mm_dur']}:00'))";
$chevauchement .= " <= sec_to_time(time_to_sec(et_debut)+time_to_sec(et_duree)))"; // fin au milieu
$chevauchement .= " OR ( et_debut >= '{$_POST['hh_deb']}:{$_POST['mm_deb']}:00' ";
$chevauchement .= " AND sec_to_time( time_to_sec('{$_POST['hh_deb']}:{$_POST['mm_deb']}:00')";
$chevauchement .= " +time_to_sec('{$_POST['hh_dur']}:{$_POST['mm_dur']}:00')) ";
$chevauchement .= " >= sec_to_time(time_to_sec(et_debut)+time_to_sec(et_duree)))"; //debut avant et fin apr+¿s
$chevauchement .= " OR ( et_debut <= '{$_POST['hh_deb']}:{$_POST['mm_deb']}:00' ";
$chevauchement .= " AND '{$_POST['hh_deb']}:{$_POST['mm_deb']}:00' ";
$chevauchement .= " < (sec_to_time(time_to_sec(et_debut)+time_to_sec(et_duree))))) "; // debut au milieu

$info.=verif_salle(0,$_POST['salle'],$etdate,$chevauchement);
$info.=verif_ens(0,$_POST['prof'],$etdate,$chevauchement);
$info.=verif_gr(0,$_POST['group'],$etdate,$chevauchement);

// Il faut une pause a 10h et a 16h si pause = Y dans formation et TP ala modif on fera ce qu'on veut
if ($paus=='N'){
$sql="SELECT pause FROM formation WHERE id_form={$_SESSION['form']}";
$result=mysql_query($sql) or $debug.=$sql;
if ($result&&($row=mysql_fetch_array($result))&&($row['pause']=='Y')&&
($_POST['et_ens']=="TP")&&
(
(($_POST['hh_deb']*60+$_POST['mm_deb']<600)&&(($_POST['hh_deb']+$_POST['hh_dur'])*60+$_POST['mm_deb']+$_POST['mm_dur']>600))||
(($_POST['hh_deb']*60+$_POST['mm_deb']<960)&&(($_POST['hh_deb']+$_POST['hh_dur'])*60+$_POST['mm_deb']+$_POST['mm_dur']>960))
)
) $paus='Y';
}

if (!isset($_POST['et_ens'])) $_POST['et_ens']="TD";

//recup du id_form dans groupe pour mutualisation
$sql="SELECT id_form FROM groupe WHERE id_gr={$_POST['group']}";
$result=mysql_query($sql) or $debug.=$sql;
$row=mysql_fetch_array($result);
$form=$row['id_form'];

//INSERTION même si il y a des conflits
$champ = " (id_mat,id_sem,id_gr,id_prof,id_salle,et_type,et_ens,et_status,et_cpt,et_date,";
$champ.= "et_debut,et_duree,id_form,pause,divers,video,date_enreg ) ";
$table = " emptps ";
$value = "({$_POST['mat']},{$_SESSION['sem']},{$_POST['group']},{$_POST['prof']},{$_POST['salle']},'$et',";
$value.= "'{$_POST['et_ens']}','$es','$ecpt','$etdate','{$_POST['hh_deb']}:{$_POST['mm_deb']}:00',";
$value.= "'{$_POST['hh_dur']}:{$_POST['mm_dur']}:00',$form,'$paus','{$_POST['divers']}','$video',now())";
$sql = "INSERT INTO $table $champ VALUES $value ";

$result = mysql_query($sql) or $debug.=$sql;
$_SESSION['id_et']=mysql_insert_id();

if ($video=='Y') $info.=verif_video(0,$_POST['salle'],$etdate,$chevauchement);
if (!empty($info)) $info = "Anomalie(s) détectée(s):".$info;
}?>

Alors bien évidement c'est un code qui à déjà été fait avant que j'arrive.
Ma question : Est-il possible de pouvoir calculer une plage horaire d'un cours précédemment créer et que si la plage horaire est déjà occuper il m'affiche un message d'erreur ?

Merci d'avance pour vos réponses .
Lynkis
LoadingChargement en cours