Bonjour,
Je n'ai pas envoyé les bonnes informations hier.
Je l'avais fait en fin de journée donc j'ai fait du n'importe quoi.
Ci-joint la bonne table. La requête est la tienne à la lettre sauf que j'ai changé le 18 par 60.
Merci beaucoup.
Bonjour,
Je n'ai pas envoyé les bonnes informations hier.
Je l'avais fait en fin de journée donc j'ai fait du n'importe quoi.
Ci-joint la bonne table. La requête est la tienne à la lettre sauf que j'ai changé le 18 par 60.
Merci beaucoup.
Il fallait trier les données des deux select reliés par le LEFT JOIN et de mettre un TIME_TO_SEC pour convertir les heures en secondes.
A toi de contrôler.
Code 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 SELECT `nom`,`prenom`,`date`, `heure`, `heure2`, `delta` FROM ( SELECT T1.`nom`,T1.`prenom`,T1.`date`, T1.`heure`, CASE WHEN T2.`heure` IS NULL THEN T1.`heure` ELSE T2.`heure` END AS `heure2`, TIME_TO_SEC(T1.`heure`) - (CASE WHEN T2.`heure` IS NULL THEN TIME_TO_SEC(T1.`heure`) ELSE TIME_TO_SEC(T2.`heure`) END ) AS `delta` FROM ( SELECT `nom`,`prenom`,`date`, `heure`, @rank:=@rank+1 as rang FROM `horaires_tmp` inner join (SELECT @rank:=0) RANK ORDER BY 1, 2, 3, 4 ) T1 LEFT JOIN ( SELECT `nom`,`prenom`,`date`, `heure`, @rank2:=@rank2+1 as rang FROM `horaires_tmp` inner join (SELECT @rank2:=0) RANK ORDER BY 1, 2, 3, 4 ) T2 ON T1.nom = T2.nom AND T1.prenom = T2.prenom AND T1.`date` = T2.`date` AND T1.`rang` = T2.`rang`+1 ) AS RESULTAT WHERE `delta` NOT BETWEEN 1 AND 60 ORDER BY `nom`,`prenom`,`date`, `heure`
PS: tel que, ça ne devrait pas marcher s'il y a plus d'une journée dans les données temporaires. Mais bon est-ce important dans ton cas ?
Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.
Mon site : www.emmella.fr
Je recherche le manuel de l'Olivetti Logos 80B.
Bonjour,
Je viens de tester ta requête et ça marche très bien même en essayant le champs Date en Varchar.
De toute façon le résultat de la requête, Je l'envoie vers une autre table et je vide après la table temporaire. Donc si ça ne marche pas pour 2 dates différentes ça pose pas de problème.
Je te remercie beaucoup pour ta disponibilité.
Quelques interrogations et suggestions:
- Le fait qu'il n'y ait pas de numéro de badge, ou même un identifiant pour chaque personne, dans ta base de données, ce qui veut dire qu'il est impossible d'avoir des homonymes avec une telle base. Est-il possible de les obtenir du fichier Excel?
- Est-il possible de savoir s'il s'agit d'une entrée ou d'une sortie? Là encore, peut-on le savoir et l'exporter via Excel? (Sinon le type pointe le matin, se barre 15 secondes après puis repasse son badge le soir vers 18h, et hop, il est payé à rien faire! Où encore plus fort, il peut arriver quand les autres partent et partir quand les autres arrivent, juste pour passer la nuit, comme ça pas de loyer à payer en plus du salaire).
- Tu as tout mis dans une seule table, c'est n'est pas un bon design qui duplique l'information: chaque pointage t'oblige à stocker le nom et le prénom d'un même individu minimum deux fois par jour et ce, multiplié par le nombre de jours. Pour éviter ça, il faut par exemple trois tables: 1) une pour les employés (id, nom, prénom), 2) une pour les pointages (id, datetime), 3) une pour les lier (id_employe, id_pointage).
- Tu devrais écrire un procédure stockée qui est en charge de l'import afin de pouvoir peupler correctement les trois tables.
- En adoptant une bonne convention de nommage de tes tables et de tes colonnes, tu pourrais te passer complètement de ``. Par exemple T_EMPLOYE(EMP_ID, EMP_NOM, EMP_PRENOM) avec ça tu ne risques pas d'utiliser un mot réservé comme `date`.
- Pour le dédoublonnage, pourquoi ne pas utiliser TIMESTAMPDIFF pour calculer le nombre de secondes entre deux dates?
Brachygobius xanthozonus
Ctenobrycon Gymnocorymbus
Bonjour,
Sur le fichier Excel que je reçois, le seul moyen d'identifier la personne est son nom et prénom.
Ce que je compte faire c'est de créer d'abord la table horaire éliminant les doublons et créer ensuite une table employés, sur laquelle j'insérerai les données nécessaires récupérées de la table horaire et voir ce que ça va donner.
Merci
Je ne suis pas persuadé que la badgeuse (s'il y en a une) soit capable de savoir s'il s'agit d'une entrée ou d'une sortie.
Je ne pointe pas mais quand je vois des gens pointer ils passent leur carte dans le lecteur et c'est tout.
Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.
Mon site : www.emmella.fr
Je recherche le manuel de l'Olivetti Logos 80B.
Effectivement la badjeuse ne peut pas vérifier s'agit d'une entrée ou une sortie.
C'est le plus dur dans l'application.
Je compte le faire en vérifiant le nombre de pointages par personne et en fonction des heures.
Et en fonction des résultats, calculer les heures supplémentaires, le cumul des retards par journée et ensuite par mois pour chaque personne.
Compliqué tout cela
Bonjour,
Je reviens vers vous par rapport à l'avancement du projet.
J'ai créé une table employés ayant comme champs :
nom, prenom, date, heure_entree1, heure_sortie1,heure_entree2, heure_sortie2,heure_entree2, heure_sortie2,
heure_entree3, heure_sortie3,heure_entree4, heure_sortie4 en supposant qu'un employé peut pointer au maximum 8 fois, heure_supplémentaire, heure_retard, total_heure_supplementaire, total_heure_retard.
Ce que je souhaiterais faire c'est d'insérer les résultats de la table précédente à cette nouvelle table à voir les heures d'entrée et de sortie et de pouvoir calculer ensuite les heures supplémentaires et du retard.
Retrouver aussi les employés n'ayant pas pointé ( Absents ) et pouvoir préciser qu'ils ne l'ont pas fait.
J'essaie de trouver la requête mais je n'arrive pas à le faire.
Merci de votre aide.
Voici un exemple à adapter. Attention vois y plus un principe qu'une solution même s'il ne doit pas y avoir beaucoup de modifications à faire.
Pour ma part je garderais une structure verticale plutôt qu'horizontale.
Code php : 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 <?php //---- DATABASE define('DB_HOST', '127.0.0.1'); define('DB_NAME', 'tests'); define('DB_USER', 'root'); define('DB_PWD' , '');$bdd = new PDO('mysql:host='.DB_HOST.'; dbname='.DB_NAME,DB_USER,DB_PWD, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)); $query = "SELECT nom, prenom, `date`, heure from horaires order by nom, prenom, `date`, heure"; $prepared = $bdd->prepare($query); $prepared->execute(); //------ Initialisation des variables pour test de changement de personne/date $savNom = ""; $savPrenom = ""; $savDate = ""; $savHeure = ""; $row = $prepared->fetch(PDO::FETCH_ASSOC); while ($row) { $nom = $row['nom']; $prenom = $row['prenom']; $date = $row['date']; $heure = $row['heure']; // détecte le changement de personne et de jour if ($savNom != $nom || $savPrenom != $prenom || $savDate != $date) { $savNom = $nom; $savPrenom = $prenom; $savDate = $date; // init des champs heures $heures = array(); } // sauvegarde de l'heure pour chaque enregistrement $heures[] = $heure; $row = $prepared->fetch(PDO::FETCH_ASSOC); // détecte le changement de personne ou de jour ou la fin des données $nom2 = $row['nom']; $prenom2 = $row['prenom']; $date2 = $row['date']; $heure2 = $row['heure']; if ($savNom != $nom2 || $savPrenom != $prenom2 || $savDate != $date2 || !$row) { //---- Insertion des données dans la table $nomPourTable = $savNom; $prenomPourTable = $savPrenom; $datePourTable = $savDate; $heureInPourTable1 = isset($heures[0]) ? $heures[0] : '00:00:00'; $heureOutPourTable1 = isset($heures[1]) ? $heures[1] : '00:00:00'; $heureInPourTable2 = isset($heures[2]) ? $heures[2] : '00:00:00'; $heureOutPourTable2 = isset($heures[3]) ? $heures[3] : '00:00:00'; $heureInPourTable3 = isset($heures[4]) ? $heures[4] : '00:00:00'; $heureOutPourTable3 = isset($heures[5]) ? $heures[5] : '00:00:00'; $heureInPourTable4 = isset($heures[6]) ? $heures[6] : '00:00:00'; $heureOutPourTable4 = isset($heures[7]) ? $heures[7] : '00:00:00'; print "$nomPourTable | $prenomPourTable | $datePourTable | $heureInPourTable1 | $heureOutPourTable1 | $heureInPourTable2 | $heureOutPourTable2 | $heureInPourTable3 | $heureOutPourTable3 | $heureInPourTable4 | $heureOutPourTable4<br/>"; } }
Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.
Mon site : www.emmella.fr
Je recherche le manuel de l'Olivetti Logos 80B.
Merci pour ton aide.
C'est exactement ce que je voulais.
Reste maintenant le calcul des retards et des heures supplémentaires.
Pour ça je créé les variables retard et heure_supplémentaires et je fais des "if" pour les mettre dans le tableau.
C'est bien ça ?
Je ne sais pas. Essaie selon ton idée et si ça ne marche pas poste le code.
Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.
Mon site : www.emmella.fr
Je recherche le manuel de l'Olivetti Logos 80B.
Bonjour,
Je reviens vers toi par rapport au projet.
J'ai essayé avec mes moyens de faire les calculs des retards et des heures supplémentaires en suivant quelques informations données par la DRH.
Le principe c'est que un retard de 10 min n'est pas comptabilisé.
15 min aprés 17h n'est pas considéré non plus comme un retard.
Je n'ai pas encore reçu les consignes d'un pointage impair.
Je poste le code qui a l'air de marcher selon les tests que j'ai effectués.
Ce que je n'ai pas réussi à faire c'est d'intégrer ses valeurs sur le tableau, donc en gros
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
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313 <?php function add_heures($heure1,$heure2){ $secondes1=heure_to_secondes($heure1); $secondes2=heure_to_secondes($heure2); $somme=$secondes1+$secondes2; //transfo en h:i:s $s=$somme % 60; //reste de la division en minutes => secondes $m1=($somme-$s) / 60; //minutes totales $m=$m1 % 60;//reste de la division en heures => minutes $h=($m1-$m) / 60; //heures if ($h <10 and $m <10 ) $resultat='0'.$h.":0".$m.""; else if ($h <10 and $m >10 ) $resultat='0'.$h.":".$m.""; else if ($h >10 and $m <10 ) $resultat=$h.":0".$m.""; else if ($h >10 and $m >10 ) $resultat=$h.":".$m.""; return $resultat; } function soustract_heures($heure1,$heure2){ $secondes1=heure_to_secondes($heure1); $secondes2=heure_to_secondes($heure2); $diff=$secondes1-$secondes2; //transfo en h:i:s $s=$diff % 60; //reste de la division en minutes => secondes $m1=($diff-$s) / 60; //minutes totales $m=$m1 % 60;//reste de la division en heures => minutes $h=($m1-$m) / 60; //heures if ($h <10 and $m <10 ) $resultat='0'.$h.":0".$m.""; else if ($h <10 and $m >10 ) $resultat='0'.$h.":".$m.""; else if ($h >10 and $m <10 ) $resultat=$h.":0".$m.""; else if ($h >10 and $m >10 ) $resultat=$h.":".$m.""; return $resultat; } function heure_to_secondes($heure){ $array_heure=explode(":",$heure); $secondes=3600*$array_heure[0]+60*$array_heure[1]+$array_heure[2]; return $secondes; } $retard= "00:00:00"; $supp="00:00:00"; /* Valeurs initailisés pour Test $heureIn1= "10:10:00"; $heureOut1= "11:00:00"; $heureIn2 = "12:30:00"; $heureOut2 = "12:45:00"; $heureIn3="13:00:00"; $heureOut3="14:10:00"; $heureIn4="15:10:00"; $heureOut4="18:10:00";*/ if ( $heureOut1 == "00:00:00") { if ( $heureIn1 > "08:10:00" ) { $retard= soustract_heures($heureIn1,"08:10:00"); } else $retard = "00:00"; $supp="00:00"; } else if ( $heureIn2 == "00:00:00" ) { if ( $heureIn1 < "08:10:00" and $heureOut1 <"17:00:00" ) { $retard = soustract_heures("17:00:00",$heureOut1); $supp = "00:00"; } else if ( $heureIn1 < "08:10:00" and $heureOut1 >"17:10:00" ) { $retard = "00:00"; $supp= soustract_heures($heureOut1,"17:10:00"); } else if ( $heureIn1 > "08:10:00" and $heureOut1 <"17:10:00" ) { $resultat1 = soustract_heures($heureIn1,"08:10:00"); $resultat2 = soustract_heures("17:00:00",$heureOut1); $retard = add_heures($resultat1,$resultat2); $supp = "00:00"; } else { $retard = soustract_heures($heureIn1,"08:10:00"); $supp = soustract_heures($heureOut1,"17:10:00"); } } /* Pointage 3 fois else if ( $heureOut2 == "00:00:00" ) { } */ else if ( $heureIn3 == "00:00:00" ) { if ( $heureIn1 < "08:10:00" and $heureOut2 < "17:00:00" ) { $res1 = soustract_heures($heureIn2,$heureOut1); $res2 = soustract_heures("17:00:00",$heureOut2); if ( $res1 > "00:30:00" ) { $res3 = soustract_heures($res1,"00:30:00"); $retard = add_heures($res2,$res3); } else $retard = $res2; $supp = "00:00"; } else if ( $heureIn1 < "08:10:00" and $heureOut2 >"17:10:00" ) { $res1 = soustract_heures($heureIn2,$heureOut1); $res2 = soustract_heures($heureOut2,"17:10:00"); if ( $res1 > "00:30:00" ) { $retard = soustract_heures($res1,"00:30:00"); } else $retard = "00:00"; $supp=$res2; } else if ( $heureIn1 > "08:10:00" and $heureOut2 <"17:00:00" ) { $res1 = soustract_heures($heureIn2,$heureOut1); $res2 = soustract_heures($heureIn1,"08:10:00"); $res3 = soustract_heures("17:00:00",$heureOut2); if ( $res1 > "00:30:00" ) { $tot = soustract_heures($res1,"00:30:00"); $tot2 = add_heures($res2,$res3); $retard = add_heures($tot,$tot2); } else $retard = add_heures($res2,$res3); $supp = "00:00"; } else { $res1 = soustract_heures($heureIn2,$heureOut1); $res2 = soustract_heures($heureIn1,"08:10:00"); $res3 = soustract_heures($heureOut2,"17:10:00"); if ( $res1 > "00:30:00" ) { $tot = soustract_heures($res1,"00:30:00"); $retard = add_heures($res2,$tot); } else $retard = $res2; $supp = $res3; } } /*Pointage 5 fois else if ( $heureOut3 == "00:00:00" ) */ else if ( $heureIn4 == "00:00:00" ) { if ( $heureIn1 < "08:10:00" and $heureOut3 < "17:00:00" ) { $res1 = soustract_heures($heureIn2,$heureOut1); $res2 = soustract_heures($heureIn3,$heureOut2); $res3 = soustract_heures("17:00:00",$heureOut3); $tot1 = add_heures($res1,$res2); $tot2 = add_heures($tot1,$res3); if ( $tot1 > "00:30:00" ) { $retard = soustract_heures($tot2,"00:30:00"); } else $retard = $res3; $supp = "00:00"; } else if ( $heureIn1 < "08:10:00" and $heureOut3 > "17:10:00" ) { $res1 = soustract_heures($heureIn2,$heureOut1); $res2 = soustract_heures($heureIn3,$heureOut2); $res3 = soustract_heures($heureOut3,"17:10:00"); $tot1 = add_heures($res1,$res2); if ( $tot1 > "00:30:00" ) { $retard = soustract_heures($tot1,"00:30:00"); } else $retard = "00:00"; $supp = $res3; } else if ( $heureIn1 > "08:10:00" and $heureOut3 < "17:00:00" ) { $res1 = soustract_heures($heureIn2,$heureOut1); $res2 = soustract_heures($heureIn3,$heureOut2); $res3 = soustract_heures($heureIn1,"08:10:00"); $res4 = soustract_heures("17:00:00",$heureOut3); $tot1 = add_heures($res1,$res2); $tot2 = add_heures($res3,$res4); $total = add_heures($tot1,$tot2); if ( $total > "00:30:00" ) { $retard = soustract_heures($total,"00:30:00"); } else $retard = "00:00"; $supp = "00:00"; } else { $res1 = soustract_heures($heureIn2,$heureOut1); $res2 = soustract_heures($heureIn3,$heureOut2); $res3 = soustract_heures($heureIn1,"08:10:00"); $res4 = soustract_heures($heureOut3,"17:10:00"); $tot1 = add_heures($res1,$res2); $tot2 = add_heures($tot1,$res3); if ( $tot1 > "00:30:00" ) { $retard = soustract_heures($tot2,"00:30:00"); } else $retard = $tot2; $supp = $res4; } } /*Pointage 7 fois else if ( $heureOut4 == "00:00:00" ) */ else { if ( $heureIn1 < "08:10:00" and $heureOut4 < "17:00:00" ) { $res1 = soustract_heures($heureIn2,$heureOut1); $res2 = soustract_heures($heureIn3,$heureOut2); $res3 = soustract_heures($heureIn4,$heureOut3); $res4 = soustract_heures("17:00:00",$heureOut4); $tot1 = add_heures($res1,$res2); $tot2 = add_heures($res3,$tot1); $total = add_heures($tot2,$res4); if ( $tot2 > "00:30:00" ) { $retard = soustract_heures($total,"00:30:00"); } else $retard = $res4; $supp = "00:00"; } else if ( $heureIn1 < "08:10:00" and $heureOut4 > "17:10:00" ) { $res1 = soustract_heures($heureIn2,$heureOut1); $res2 = soustract_heures($heureIn3,$heureOut2); $res3 = soustract_heures($heureIn4,$heureOut3); $tot1 = add_heures($res1,$res2); $tot2 = add_heures($res3,$tot1); if ( $tot2 > "00:30:00" ) { $retard = soustract_heures($tot2,"00:30:00"); } else $retard = "00:00"; $supp = soustract_heures($heureOut4,"17:10:00"); } else if ( $heureIn1 > "08:10:00" and $heureOut4 < "17:00:00" ) { $res1 = soustract_heures($heureIn2,$heureOut1); $res2 = soustract_heures($heureIn3,$heureOut2); $res3 = soustract_heures($heureIn4,$heureOut3); $res4 = soustract_heures($heureIn1,"08:10:00"); $res5 = soustract_heures("17:00:00",$heureOut4); $tot1 = add_heures($res1,$res2); $tot2 = add_heures($res3,$tot1); $tot3 = add_heures($res4,$res5); $total = add_heures($tot2,$tot3); if ( $tot2 > "00:30:00" ) { $retard = soustract_heures($total,"00:30:00"); } else $retard = "00:00"; $supp = "00:00"; } else { $res1 = soustract_heures($heureIn2,$heureOut1); $res2 = soustract_heures($heureIn3,$heureOut2); $res3 = soustract_heures($heureIn4,$heureOut3); $res4 = soustract_heures($heureIn1,"08:10:00"); $res5 = soustract_heures($heureOut4,"17:10:00"); $tot1 = add_heures($res1,$res2); $tot2 = add_heures($res3,$tot1); $tot3 = add_heures($res4,$tot2); if ( $tot2 > "00:30:00" ) { $retard = soustract_heures($tot3,"00:30:00"); } else $retard = $tot3; $supp = $res5; } } echo $retard. "\n"; echo $supp;
Je souhaiterais rajouter à ça :
les retards et les heures supplémentaires.
Code : Sélectionner tout - Visualiser dans une fenêtre à part print "$nomPourTable | $prenomPourTable | $datePourTable | $heureInPourTable1 | $heureOutPourTable1 | $heureInPourTable2 | $heureOutPourTable2 | $heureInPourTable3 | $heureOutPourTable3 | $heureInPourTable4 | $heureOutPourTable4
Merci beaucoup pour ton aide
Oulà. Il y a beaucoup de code. J’ai pas tout lu car il y a de quoi faire. Cependant, ça me paraît très long pour ce que j’ai compris de ce que tu dois faire.
Essaie de reformaliser le problème. Poste le et ensuite je suis quasiment sûr qu’on peut faire la même chose en beaucoup moins de place. L’informatique c’est aussi l’art de factoriser.
Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.
Mon site : www.emmella.fr
Je recherche le manuel de l'Olivetti Logos 80B.
Pour faire des comparaisons et des opérations sur des horaires, utilise plutôt les classes DateTime et DateInterval qui sont faites pour ça. Sinon: indente ton code, évite les constantes magiques, trouve une convention de nommage de tes variables.
Brachygobius xanthozonus
Ctenobrycon Gymnocorymbus
Bonjour,
Je vais essayer d'expliquer ce que j'essaie de faire :
Le travail commence à 8h et finit à 17h avec une pause déjeuner pas obligatoire de 30 min qui se prend entre 12h et 14h. avec une tolérance de retard de 10 min le matin. Les heures supplémentaires sont prises en compte à partir de 17h10.
-Si une personne commence à 08h et oublie de pointer la sortie on considère "par défaut" qu'elle a oublié de pointer sa sortie.
Exemple Pierre pointe à 08:20:31 le 13/11/2018 on aura:
heure entrée 08:20:31 heure sortie 17:00:00 heure
dupont | pierre | 13/11/2018 | 08:20:31 | 17:00:00 | 00:00:00 | 00:00:00 | 00:00:00 | 00:00:00 | 00:00:00 | 00:00:00 | 00:10 "pour le retard " | 00:00 pour les heures supp.
-Si une personne par contre pointe à 17h mais pas le matin on va supposer qu'il a oublier de pointer son entrée.
-Si Pierre pointe à 08:20 et 17:30 on aura :
dupont | pierre | 13/11/2018 | 08:20:31 | 17:30:22 | 00:00:00 | 00:00:00 | 00:00:00 | 00:00:00 | 00:00:00 | 00:00:00 | 00:10 | 00:20 car retard de 10min et heures supplémentaires de 20 min.
-Pierre pointe 3 fois à 10h, 12h, 19h " Oubli de pointer une fois : On suppose qu'il a oublié de pointer l'entrée de la pause déjeuner et on aura:
dupont | pierre | 13/11/2018 | 10:00:00 | 12:00:00 | 12:30:00 | 19:00:00 | 00:00:00 | 00:00:00 | 00:00:00 | 00:00:00 | 01:50 | 01:50
-Pierre pointe 4 fois : 08h, 09h,10h,19h on aura
upont | pierre | 13/11/2018 | 08:00:00 | 09:00:00 | 10:00:00 | 19:00:00 | 00:00:00 | 00:00:00 | 00:00:00 | 00:00:00 | 01:00 (de ratard car 9h-8h et ce n'est pas compris entre 12h et 14h) | 01:50 (19h-17h10)
-Pierre pointe 4 fois : 08h, 12h,13h,19h on aura
upont | pierre | 13/11/2018 | 08:00:00 | 12:00:00 | 13:00:00 | 19:00:00 | 00:00:00 | 00:00:00 | 00:00:00 | 00:00:00 | 00:30 (de ratard car c'est entre 12h et 14h et on soustrait les 30min autorisées pour la pause déjeuner) | 01:50 (19h-17h10).
Et ensuite c'est le meme principe jusqu'aux 8 pointages.
J'aimerais aussi par la suite avoir un bouton pour changer les informations afin de gérer les exceptions.
J'espère que j'étais clair.
Merci beaucoup
Bonjour,
il me semble que le titre de la discussion n'est pas/plus en rapport avec ta demande.
- soit tu changes le titres de cette discussion (en éditant ton 1er message)
- soit tu ouvres une nouvelle discussion, avec le titre du nouveau sujet
+1
Il faut que tu ailles jusqu'au bout de ton raisonnement, et que tu rédiges (par écrit) la liste exhaustive de tous les cas de figure possible.
C'est ainsi que tu seras en mesure d'élaborer :
- les règles de base
- les conditions logiques
- et les mettre en équation
Pour ça, il te faut 4 choses essentielles :
- du papier
- un crayon
- de la matière grise
- et de l'huile de coude
N'attends pas que ce soient les autres qui pensent/réfléchissent à ta place :
- d'abord parce que c'est TA problématique
- ensuite parce qu'on a ni le temps, ni l'implication pour ça
Exemple de règle de base :
Donc la "journée-type" (= référence) fait : 8h -> 17h...Le travail commence à 8h et finit à 17h...
Pause obligatoire ? Combien dure-t-elle (par convention) ? (1h de pause ? 1h30 ?)...avec une pause déjeuner qui se prend entre 12h et 14h...
Dans un 1er temps, l'objectif est de savoir comment déterminer et distinguer "heure d'entrée" et "heure de sortie".
-> on doit bien être capable de définir des créneaux horaires correspondant à chacun.
N.B. Tes exemples de ton message précédent me laissent dubitatif :
On pointe n'importe quand alors ???
Code : Sélectionner tout - Visualiser dans une fenêtre à part ... -Pierre pointe 4 fois : 08h, 09h,10h,19h...
On rentre, on sort quand on veut ??
S'il n'y a aucune règle... ça va sacrément compliquer...
Le nom et prénom ne suffisent pas à identifier formellement une personne (à cause des homonymes possibles, voire même simplement d'une faute de frappe dans le nom ou le prénom).
Tout employé est forcément identifié, ne serait-ce que par son numéro de sécu (ou un numéro de badge, unique).
Dernière modification par Invité ; 13/11/2018 à 10h23.
Si si j'ai élaboré un code que j'ai posté.
Par rapport au fait qu'on peut pointer n'importe quand.
L'exemple de -Pierre pointe 4 fois : 08h, 09h,10h,19h, ça fait partie des exceptions parce qu'il peut être parti en mission ou qu'il a simplement demandé une absence qui a été validée et qu'il ne soit pas parti en pause déjeuner car elle n'est pas obligatoire.
La pointeuse reconnait la personne par le code barre de son badge donc il ne peut pas y avoir de faute de frappe.
Tu dois te procurer les codes (numéros correspondants au code barre, ils sont bien quelque part) de ces badges associés aux personnes. Tant que tu n'as pas ça, ce n'est même pas la peine d'aller plus loin. Ensuite tu pourras modéliser une base de données correcte, mais pas avant. Se servir du nom/prénom pour identifier les gens n'est pas une solution acceptable.
Brachygobius xanthozonus
Ctenobrycon Gymnocorymbus
Je vais continuer comme ça et modifier le programme si je réussis à récupérer ses codes.
Merci
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager