Le but est de pouvoir saisir n’importe quelle temps (TEMPS PASSE et TEMPS ESTIME) et non pas choisir dans une liste déroulante des temps prédéfinis.
Par des soucis d’erreurs de saisie, il faut passé d’une liste déroulante à trois listes déroulantes représentant successivement le nombre de jours, le nombre d’heures et le nombre de minutes.
Ainsi lors de l’enregistrement du ticket, on récupère les valeurs des trois listes que l’on convertit en minutes et que l’on additionne afin d’obtenir le temps total en minutes.
Nouveau code:
Partie “/ticket.php” (l.577 -> 622)
Code : Tout sélectionner
<?php
// Décomposition du global row en 3 valeur (j, h, min)
$globalrow['time_day']=floor($globalrow['time']/60/7);
$globalrow['time_hour']=floor(($globalrow['time']-($globalrow['time_day']*60*7))/60);
$globalrow['time_min']=($globalrow['time']-($globalrow['time_day']*60*7))%60;
?>
<select id="time_day" name="time_day" <?php if($rright['ticket_time']==0) echo 'onfocus="this.disabled = true;"';?> >
<?php
for($i=0; $i<31; $i++){
$val = $i*7*60;
if (($_POST['time_day']==$val)||($globalrow['time_day']==$i)){
echo '<option selected value="'.$val.'">'.$i.'</option>';
}else{
echo '<option value="'.$val.'">'.$i.'</option>';
}
}
?>
</select>
jours
<select id="time_hour" name="time_hour" <?php if($rright['ticket_time']==0) echo 'onfocus="this.disabled = true;"';?> >
<?php
for($i=0;$i<7;$i++){
$val = $i*60;
if (($_POST['time_hour']==$val)||($globalrow['time_hour']==$i)){
echo '<option selected value="'.$val.'">'.$i.'</option>';
}else{
echo '<option value="'.$val.'">'.$i.'</option>';
}
}
?>
</select>
heures
<select id="time_min" name="time_min" <?php if($rright['ticket_time']==0) echo 'onfocus="this.disabled = true;"';?> >
<?php
for($i=0; $i<56; $i++){
if($i%5==0){
if (($_POST['time_min']==$i)||($globalrow['time_min']==$i)){
echo '<option selected value="'.$i.'">'.$i.'</option>';
}else{
echo '<option value="'.$i.'">'.$i.'</option>';
}
}
}
?>
</select>
minutes
Pour les jours, les valeurs vont de 0 jour à 30 jours.
Pour les heures, les valeurs vont de 0 heure à 6 heure étant données qu’une journée de travail correspond à 7 heures.
Pour les minutes, les valeurs vont de 0 minute à 55 minutes par intervalle de 5 minutes.
Ces trois listes sont pré-rempli si le temps passé a déjà été saisie auparavant.
Partie “/core/ticket.php” avant un INSERT(l.223 -> 235) et avant un UPDATE(l.258 -> 270) de ticket:
Code : Tout sélectionner
// TIME : Verification que le temps total des 3 listes (en minute) existe dans la table ttime
$_POST['time'] = intval($_POST['time_day']) + intval($_POST['time_hour']) + intval($_POST['time_min']);
$globalrow['time'] = $_POST['time']; //intval($globalrow['time_day']) + intval($globalrow['time_hour']) + intval($globalrow['time_min']);
$timeD = intval($_POST['time_day'])/60/7;
$timeH = intval($_POST['time_hour'])/60;
$timeM = intval($_POST['time_min']);
$nameTime = $timeD."j".$timeH."h".$timeM."min";
$query = mysql_query("SELECT * FROM ttime WHERE name LIKE '$nameTime'");
// Si le resultat n'existe pas dans la base on l'ajoute
if(mysql_num_rows($query)==0){
$insert = "INSERT INTO ttime (min,name) VALUES (".$_POST['time'] .",'".$nameTime."')";
$query = mysql_query($insert);
}
Ces codes sont dupliqués pour le champ “temps estimé” (l.619 -> 675 pour le fichier “/ticket.php” et l.238 -> 250 et l.270 -> 282 pour le fichier “/core/ticket.php”) étant donné qu’il fonctionne de la même façon que le champ “temps passé”.
Je ne pense pas qu'ils soient très optimisés mais ça marche. L'insertion, du nouveau temps saisi, dans la base de données n'est plus trop utile, par exemple.
En espérant que ça puisse aider. Bonne continuation à vous.