IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Calculer les heures (d'entrée, de sortie, de travail) à partir d'un seul champ Datetime [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 5
    Points : 3
    Points
    3
    Par défaut Calculer les heures (d'entrée, de sortie, de travail) à partir d'un seul champ Datetime
    Bonjour à tous,

    Voici le problème, je veux calculer la somme des heures travaillées pour tous les employés / jour sachant qu'un employé utilise une pointeuse biométrique pour l'entrée/sortie, chaque fois qu'il pointe, le système insère dans la table correspondante : La date et l'heure de pointage dans un seul champ (Datetime) et l'action Entrée/Sortie (0 : entrée et 1 : sortie) et l'identifiant de l'employé.

    Merci d'avance pour votre aide.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu peux faire une jointure sur la même table pour rassembler le temps de début et le temps de fin.
    Je présume qu'il ne peut y avoir qu'une seule entrée et une seule sortie par jour par employé.

    ici j'ai appellé "horodate" ta colonne DATEIME, "employe" la colonne pour l'employe et "type" la colonne entrée/sortie :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT e.employe, e.horodate as debut, s.horodate as fin, timediff(s.horodate, e.horodate) as duree
    FROM tatable e
    JOIN tatable s ON e.employe = s.employe AND DATE(e.horodate) = DATE(s.horodate) AND s.type = 1 AND e.type = 0

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Vraiment je te remercie pour ta réponse.
    En fait on peut trouver plusieurs entrées et sorties. Pour cela on peut calculer les infos (début, fin et durée) pour chaque user en éliminant les redondances tout en prenant le min pour les entrées et le max pour la sortie. (Si on récupère les infos via la requête)

    Mais la solution que je veux suivre étant :
    (Sans passer par la requête précédente)
    - Récupérer toutes les données dans un array : $data
    - Créer une collection pour chaque user dont chacune fait référence à une autre collection de dates qui à son tour fait référence à un objet contenant les infos.
    - Remplir les collections tout en parcourant le tableau $data et positionner les éléments dans leurs places convenables.

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu peux simplement parcourir tes événements chronologiquement pour chaque employé.
    La seule difficulté c'est de traiter les anomalies (par exemple un employe oublie de pointer au départ).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    <?php
    $pdo = new pdo('mysql:host=localhost;dbname=test','root','');
    $sth = $pdo->query('SELECT horodate, type, employe FROM pointeuse ORDER BY employe ASC, horodate ASC');
    $current_employe = 0;
     
    while ($row =$sth->fetch(PDO::FETCH_ASSOC)) {
     
       if ($row['employe'] != $current_employe) {
              $current_employe = $row['employe'];
              $total[$current_employe]= 0;
              unset($debut);
       }
     
       switch ($row['type']) {
             case 0 :
                $debut = date_create($row['horodate']);
    			var_dump($debut);
             break;
     
             case 1 :
                if (isset($debut)) {
     
                       $fin  = date_create($row['horodate']);
     
                       $total[$current_employe] += $fin->format('U') - $debut->format('U');
     
                       unset($debut);
                }
             break;
        }
    }
     
    print_r($total);

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 5
    Points : 3
    Points
    3
    Par défaut Calculer les heures (d'entrée, de sortie, de travail) pour tous les employés
    Je veux :

    1- Extraire les données de la table des pointages : employe , horodate et type de tous les employés dans la dernière semaine.

    2- Parcourir le résultat ligne par ligne en calculant pour chaque employé par date (dates de la dernière semaine) :
    - Date entrée (checkin)
    - Date sortie (checkout)
    - Temps travaillé (workedtime)
    Sachant que :
    - L'employé peut oublier de pointer à l'entrée, à la sortie ou les 2
    - Plusieurs pointages existes : à l'entrée, à la sortie ou les 2.
    - L'employé peut entré et sortir plusieurs fois par jour.

    3- Stocker le résultat dans une collection.

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    L'employé peut oublier de pointer à l'entrée, à la sortie ou les 2
    Si l'employé oublie de pointer son entrée, mais pointe en sortie, cela enregistre une entrée ou une sortie ?

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Si l'employé oublie de pointer son entrée, mais pointe en sortie, cela enregistre une entrée ou une sortie ?
    Cela enregistre une sortie (type = 1)

    A partir de la pointeuse on choisie :
    Arrivée : cela enregistre une entrée (type=0)
    Départ : cela enregistre une sortie (type=1)

    On peut trouver encore d'autre problèmes comme par exemple : pointer une entrée au lieu d'une sortie mais on peut pas traiter ces cas.

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    A quoi va servir la collection ?
    Pourquoi tu ne fais pas les calculs directement comme je t'ai proposé ?

  9. #9
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Envoi une collection avec les résultats plutôt qu'avec les données de base alors.

  10. #10
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    C'est seulement des conditions à écrire.
    J'en ai déjà d'ailleurs mis une dans mon exemple : je ne traite une sortie que s'il y a eu une entrée avant.

  11. #11
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Merci beaucoup pour ton aide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] VBA calcul en heures ouvrées entre 2 dates
    Par Stefane1969 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 15/04/2015, 07h10
  2. [WD17] Calcul différence entre les heures
    Par karim15 dans le forum WinDev
    Réponses: 1
    Dernier message: 28/07/2013, 10h03
  3. [XL-2003] Calculer les heures entre 2 dates
    Par Neptune64 dans le forum Excel
    Réponses: 3
    Dernier message: 30/12/2009, 22h49
  4. Calculer les heures en jours et les jours en heures dans 2 combobox
    Par philoflore dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/07/2008, 19h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo