Modification des champs faisant référence aux temps

Contribuer au projet de part vos connaissances: PHP, HTML, CSS, SQL, JS ....
Répondre
Benguy
Gsup LEVEL 0
Messages : 1
Enregistré le : mar. 14 avr. 2015 16:47

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)

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
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:

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);
}
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. :D
oneil4
Gsup LEVEL 0
Messages : 6
Enregistré le : jeu. 18 juin 2015 10:06

bonjour, merci pour cette aide,

je suis entrain d'essayer d'adapter gestsup pour la gestion de bon de travail dans mon usine, si cela s’avère positif, peux être qu'il y aura un déploiement dans toutes les usines du groupe, + de 70 usines avec énormément de personnes dessus.


Je n'arrive pas a modifier les champs de date comme tu le dit, peu être qu'une personne connaissent un peu le php pourrais m'aider ...


EDIT :

voila une image de ce que je suhaiterais faire, ( les nouveau champs ne marche pas )

Image
Pierre
Gsup LEVEL 1
Messages : 28
Enregistré le : dim. 20 août 2017 16:20

Bonjour,

Je rencontre le même problème.

Et je pense que la gestion actuelle présente des faiblesses qui pourraient être résolues par cette solution.

Faiblesse :
- déclarer un temps de 1m sur une tache
- reparamétrer 1m en 1h
--> votre tâche vient de passer de 1m à 1h sans aucun message d'avertissement

Cdt

Pierre
GestSup : 3.1.24 de test, hébergée par GestSup (OVH)
Répondre