Modification des champs faisant référence aux temps
Posté : mar. 14 avr. 2015 17:08
Tout d'abord, merci aux développeurs pour cette appli qui fonctionne déjà super bien. cependant pour mon cas, j'ai dû faire quelques modifications sur les champs faisant référence au temps afin que la saisie du temps soit plus pratique.
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)
Explication du code : Tout d’abord on décompose la variable, contenant le temps passé du ticket (en minutes), en 3 nouvelles variables représentant le nombre de jours, le nombre d’heures et le nombre de minutes afin d’obtenir le temps passé en jours heures minutes. On créé ensuite 3 listes déroulantes dans lesquelles on stocke les valeurs suivantes:
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:
Explication du code : On récupère les 3 valeurs des listes déroulantes (jours, heures et minutes), on les convertis en minutes et on les additionne afin d’obtenir le temps passé total en minutes. On vérifie que ce temps (en minutes) existe dans la base de données. Si il n’existe pas, on l’ajoute sinon on passe à l’INSERT ou l’UPDATE du ticket.
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.
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.