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

JavaScript Discussion :

Fonction de comptage des heures


Sujet :

JavaScript

  1. #1
    Membre habitué
    Femme Profil pro
    Inscrit en
    Mai 2012
    Messages
    360
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 360
    Points : 139
    Points
    139
    Par défaut Fonction de comptage des heures
    Bonjour,

    Je suis en train de développer une application de gestion des horaires, notamment sur le nombre d'heure réalisé par une personne dans une semaine.


    Une personne est :
    Soit présente la demi journée
    Soit présente toute la journée
    Soit absente

    Je vous met ci-dessous un extrait du code, celui-ci correspondant à la journée du Lundi :


    Code html : 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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
    <!-- Lundi -->		
     <td>
    <input type="radio" id="demiab1_<s:property value="%{personneDto.idPersonne}"/>" name="work1_<s:property value="%{personneDto.idPersonne}"/>"  value="0" onchange="afficheDiv('1_<s:property value="%{personneDto.idPersonne}"/>', 'demiab1_<s:property value="%{personneDto.idPersonne}"/>', 'pres1_<s:property value="%{personneDto.idPersonne}"/>')" />  1/2 Abs 
    <input type="radio" id="ab1_<s:property value="%{personneDto.idPersonne}"/>" name="work1_<s:property value="%{personneDto.idPersonne}"/>"  value="0" onchange="afficheDiv('1_<s:property value="%{personneDto.idPersonne}"/>', 'ab1_<s:property value="%{personneDto.idPersonne}"/>', 'pres1_<s:property value="%{personneDto.idPersonne}"/>')" />Abs 
    <input type="radio" id="pres1_<s:property value="%{personneDto.idPersonne}"/>" name="work1_<s:property value="%{personneDto.idPersonne}"/>" value="1" onchange="afficheDiv('1_<s:property value="%{personneDto.idPersonne}"/>', 'ab1_<s:property value="%{personneDto.idPersonne}"/>', 'pres1_<s:property value="%{personneDto.idPersonne}"/>')" checked/> Pres<br>
    	<div id="horaire1_<s:property value="%{personneDto.idPersonne}"/>" style="display: block;">
    	<table border="1">
    		<tr>
    			<td>
     
    				De <s:textfield name="horaire1dm_%{personneDto.idPersonne}" id="horaire1dm_%{personneDto.idPersonne}" size="5" maxLength="5" value="00:00" onBlur="javascript:doCount(${personneDto.idPersonne})"/>A<s:textfield name="horaire1fm_%{personneDto.idPersonne}" id="horaire1fm_%{personneDto.idPersonne}" size="5" maxLength="5" value="00:00" onBlur="javascript:doCount(${personneDto.idPersonne})"/>
    			</td>
    		</tr>
    		<tr>
    			<td>
     
    				De <s:textfield name="horaire1da_%{personneDto.idPersonne}" id="horaire1da_%{personneDto.idPersonne}" size="5" maxLength="5" value="00:00" onBlur="javascript:doCount(${personneDto.idPersonne})"/>A<s:textfield name="horaire1fa_%{personneDto.idPersonne}" id="horaire1fa_%{personneDto.idPersonne}" size="5" maxLength="5" value="00:00" onBlur="javascript:doCount(${personneDto.idPersonne})"/>
    			</td>
    		</tr>
    	</table>
    	</div>
    	<div id="abs1_<s:property value="%{personneDto.idPersonne}"/>" style="display: none;">
    	<table border="1">
    		<tr>
    			<td>
     
    				<s:select headerKey="-1" headerValue="Abs ?" id="absenceSelected1_%{personneDto.idPersonne}" name="absenceSelected1_%{personneDto.idPersonne}" list="listAbsenceDto" listKey="idAbsence" listValue="abrAbsence"></s:select>
    			</td>
    		</tr>
    	</table>
    	</div>
    	<div id="demiabs1_<s:property value="%{personneDto.idPersonne}"/>" style="display: none;">
    	<table border="1">
    		<tr>
    			<td>
    				<div id="horaire1DemiAbsMatin_<s:property value="%{personneDto.idPersonne}"/>"></div>
    			</td>
    		</tr>
    		<tr>
    			<td>
    				<s:select headerKey="-1" headerValue="Abs ?" id="demiabsenceSelected1_%{personneDto.idPersonne}" name="demiabsenceSelected1_%{personneDto.idPersonne}" list="listAbsenceDto" listKey="idAbsence" listValue="abrAbsence"></s:select>
    			</td>
    		</tr>
    		<tr>
    			<td>
    				<div id="horaire1DemiAbsApres_<s:property value="%{personneDto.idPersonne}"/>"></div>
    			</td>
    		</tr>
    	</table>
    	</div>
     
    </td>

    Et voici ma fonction javascript qui me permet de calculer le nombre d'heure réalisée :

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
     
    function doCount(idPersonne){
    	//alert("do count");
    	var res = 0;
    	for (i=1; i<8; i++){
    		var debutAM = 'horaire'+i+'dm_'+idPersonne;
    		var finAM = 'horaire'+i+'fm_'+idPersonne;
    		var debutPM = 'horaire'+i+'da_'+idPersonne;
    		var finPM = 'horaire'+i+'fa_'+idPersonne;
     
    		//Gestion des demi-absence matin ou après midi
    		var horaireApresdebDemiAbs = "horaire"+i+"debApresDemiAbs_"+idPersonne;
    		var horairApresfinDemiAbs = "horaire"+i+"finApresDemiAbs_"+idPersonne
    		var horaireMatindebDemiAbs = "horaire"+i+"debMatinDemiAbs_"+idPersonne;
    		var horairMatinfinDemiAbs = "horaire"+i+"finMatinDemiAbs_"+idPersonne
     
    		var debutDemiAbs = '';
    		var finDemiAbs = '';
     
    		if(document.getElementById(horaireApresdebDemiAbs)!=null){ 
    			debutDemiAbs = horaireApresdebDemiAbs;
    			//alert("horaireApresdebDemiAbs");
    		}
    		if(document.getElementById(horairApresfinDemiAbs)!=null){ 
    			finDemiAbs = horairApresfinDemiAbs;
    			//alert("horairApresfinDemiAbs");
    		}
     
    		if(document.getElementById(horaireMatindebDemiAbs)!=null){ 
    			debutDemiAbs = horaireMatindebDemiAbs;
    			//alert("horaireMatindebDemiAbs");
    		}
     
    		if(document.getElementById(horairMatinfinDemiAbs)!=null){
    			finDemiAbs = horairMatinfinDemiAbs;
    			//alert("horairMatinfinDemiAbs");
    		}
     
    		//alert("debutDemiAbs : "+debutDemiAbs);						
    		var debutAM_value = document.getElementById(debutAM).value;
    		//alert("debutDemiAbs : "+debutDemiAbs);
    		//alert("finDemiAbs : "+finDemiAbs);
     
    		var finAM_value = document.getElementById(finAM).value;
    		var debutPM_value = document.getElementById(debutPM).value;
    		var finPM_value = document.getElementById(finPM).value;
     
    		var debutDemiAbs_value = "00:00";
     
    		if(document.getElementById(debutDemiAbs)!=null){ 
    			//alert("Ma variable debutDemiAbs est defini");
    			if(document.getElementById(debutDemiAbs).value!=null){
    			debutDemiAbs_value = document.getElementById(debutDemiAbs).value;
    			//alert("DEMI début : "+debutDemiAbs_value);
    			}
    		}
     
    		//alert("Existnate : "+document.getElementById(debutDemiAbs_value));
     
    		var finDemiAbs_value = "00:00";
    		//alert("document.getElementById(finDemiAbs).value ====> "+document.getElementById(finDemiAbs).value);
     
    		if(document.getElementById(finDemiAbs)!=null){ 
    			//alert("Ma variable finDemiAbs est defini");
    			if(document.getElementById(finDemiAbs).value){
    			finDemiAbs_value = document.getElementById(finDemiAbs).value;
    			//alert("DEMI Fin : "+finDemiAbs_value);
    			}
    		}
     
    		if(debutAM_value == ''){
    			debutAM_value = '00:00';
    		}
     
    		var debutAM_temps = debutAM_value.split(':');
    		var debutAM_heure = debutAM_temps[0];
    		var debutAM_min = debutAM_temps[1];
     
    		var debutAM_min_res = (parseInt(debutAM_heure*60))+parseInt(debutAM_min);
     
    		if(finAM_value == ''){
    			finAM_value = '00:00';
    		}
     
    		var finAM_temps = finAM_value.split(':');
    		var finAM_heure = finAM_temps[0];
    		var finAM_min = finAM_temps[1];
     
    		var finAM_min_res = (parseInt(finAM_heure*60))+parseInt(finAM_min);
    		//alert('finAM_min_res : '+finAM_min_res);
     
    		//calcul du temps effectué le matin en min
    		var totalAM_min = finAM_min_res - debutAM_min_res;
     
    		if(debutPM_value == ''){
    			debutPM_value = '00:00';
    		}
     
    		var debutPM_temps = debutPM_value.split(':');
    		var debutPM_heure = debutPM_temps[0];
    		var debutPM_min = debutPM_temps[1];
     
    		var debutPM_min_res = (parseInt(debutPM_heure*60))+parseInt(debutPM_min);
     
    		if(finPM_value == ''){
    			finPM_value = '00:00';
    		}
     
    		var finPM_temps = finPM_value.split(':');
    		var finPM_heure = finPM_temps[0];
    		var finPM_min = finPM_temps[1];
     
    		var finPM_min_res = (parseInt(finPM_heure*60))+parseInt(finPM_min);
     
    		//calcul du temps effectué l'apres midi en min
    		var totalPM_min = finPM_min_res - debutPM_min_res;
     
    		if(debutDemiAbs_value == ''){
    			debutDemiAbs_value = '00:00';
    		}
     
    		var debutDemiAbs_temps = debutDemiAbs_value.split(':');
    		var debutDemiAbs_heure = debutDemiAbs_temps[0];
    		var debutDemiAbs_min = debutDemiAbs_temps[1];
     
    		var debutDemiAbs_min_res = (parseInt(debutDemiAbs_heure*60))+parseInt(debutDemiAbs_min);
     
    		if(finDemiAbs_value == ''){
    			finDemiAbs_value = '00:00';
    		}
     
    		var finDemiAbs_temps = finDemiAbs_value.split(':');
    		var finDemiAbs_heure = finDemiAbs_temps[0];
    		var finDemiAbs_min = finDemiAbs_temps[1];
     
    		var finDemiAbs_min_res = (parseInt(finDemiAbs_heure*60))+parseInt(finDemiAbs_min);
     
    		//calcul du temps effectué durant la demi absence en min
    		var totalDemiAbs_min = finDemiAbs_min_res - debutDemiAbs_min_res;
     
    		//calcul total de l'heure effectué
    		var total_Global_min = parseInt(totalAM_min) + parseInt(totalPM_min) + parseInt(totalDemiAbs_min);
    		/*alert('totalAM_min : '+totalAM_min);
    		alert('totalPM_min : '+totalPM_min);
    		alert('totalDemiAbs_min : '+totalDemiAbs_min);
    		alert('total_Global_min : '+total_Global_min);*/
     
    		res += total_Global_min;
    		/*var total_Global_heure = Math.floor(total_Global_min/60)+":"+(total_Global_min%60);
    		alert('totalAM_min : '+total_Global_heure);*/
    	}
    	var heure_res = Math.floor(res/60);
    	if (heure_res == 0 || heure_res < 10) heure_res = "0"+heure_res;
    	var min_res = (res%60);
    	if (min_res == 0 || min_res < 10) min_res = "0"+min_res;
     
    	var total_Global_heure_sem = heure_res+":"+min_res;
    	//alert('total_Global_heure_sem : '+total_Global_heure_sem);
     
    	var champCache = 'nbHeureFaite_'+idPersonne;
    	document.getElementById(champCache).value = total_Global_heure_sem;
     
    	var div_res = 'div_nbHeureFaite_'+idPersonne;
    	document.getElementById(div_res).innerHTML=total_Global_heure_sem;
     
    }
    Cette dernière fonctionne si je met dès le départ les bonnes valeurs.
    Mais j'indique que la personne travaille toute la journée (bouton "pres" coché) et que finalement la personne est absente (bouton "abs" coché), le nombre d'heure réalisé n'est pas changé.

    Pourriez vous m'indiquer comment faire, s'il vous plait ? Je vous remercie d'avance de votre aide.

  2. #2
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 115
    Points : 125
    Points
    125
    Par défaut
    Salut,

    Je vois que tes boutons sont des "radio", et dans tes tests il n'y a pas de "checked".
    Habituellement, on test si un bouton radio a été coché avec radioObject.checked, pas ".value".

Discussions similaires

  1. [PHP 5.3] fonction date - afficher des heures au délas de 24H
    Par Michel Rotta dans le forum Langage
    Réponses: 9
    Dernier message: 04/05/2011, 10h13
  2. Logiciel comptage des heures connectées
    Par JauB dans le forum Internet
    Réponses: 2
    Dernier message: 23/10/2008, 17h46
  3. [Comptage des heures] Déplacements pros
    Par hegros dans le forum Paie
    Réponses: 11
    Dernier message: 01/02/2008, 09h07
  4. [VBA]comptage de lignes en fonction du contenu des cellules
    Par calimero91 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 22/12/2005, 11h38
  5. [Fonction Oracle] Convertir des secondes en heure
    Par falcon dans le forum Oracle
    Réponses: 12
    Dernier message: 18/11/2004, 11h56

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