Bonjour à tous,

Je met en place un script de pointage, mon soucis et de permettre le pointage de sortie un jour différent du pointage d'entrée ( pour les quelques personnes qui finissent à 1h du matin), actuellement lorsqu'ils pointent pour terminer leur journée, le script comptabilise comme le début d'une nouvelle journée.

J'ai eu beau réfléchir à une solution mais aucune ne me vient à l'esprit, d’où ma demande.

Voici les deux fichiers qui permettent respectivement le pointage et la lecture du pointage.

Je m'en remet donc à votre esprit, peut-être plus débrouillard que le miens.

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
<?php
try{
$db = new PDO('mysql:host=localhost;dbname=personnel','login','psw');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOException $e){
echo 'Erreur SQL';
}
$req = $db->prepare("SELECT * FROM pointage WHERE id='".$_POST['id']."' AND jour='".$_POST['jour']."'");
//On recupère les pseudo de t'as base ou les pseudo son egal au pseudo passer par le formulaire
$req->bindValue('id', $_POST['id'], PDO::PARAM_STR);
$req->bindValue('jour', $_POST['jour'], PDO::PARAM_STR);
$req->execute();
//on exécute la requête
$req2 = $db->prepare("SELECT * FROM salaries WHERE id='".$_POST['id']."'");
//On recupère les pseudo de t'as base ou les pseudo son egal au pseudo passer par le formulaire
$req2->bindValue('id', $_POST['id'], PDO::PARAM_STR);
$req2->execute();
//on exécute la requête
$pseudoINbdd = $req->rowCount();
$pseudoINbdd2 = $req2->rowCount();
//Rowcount permet de sortir le nombre de valeur que t'as requête renvoi, que l'on rentre dans la variable pseudoINbdd (ou autre )
if(isset($_POST['id'])&&($pseudoINbdd2)==true){
//Si la requête renvoi 0, le pseudo n'existe pas dans la base, sinon le pseudo existe.
	if($pseudoINbdd == 0){
		  $arrive = "INSERT INTO pointage (arrive, jour, semaine, id, nom, prenom, service, entree_t, depart_dej_t, retour_dej_t, sortie_t) SELECT '".$_POST['heuri']."', '".$_POST['jour']."',WEEK('".$_POST['jour']."',1), id, nom, prenom, service, entree_t, depart_dej_t, retour_dej_t, sortie_t FROM salaries WHERE id='".$_POST['id']."'";
		  $controle = $arrive;
		  $controle = $db->query($controle);
		  echo "<div class=\"validation\">Votre arrivee à bien été enregistré</div>";
	   }
	else if($d=$req->fetch()){
 
		if((($d['depart_dejeuner'])=='0000-00-00 00:00:00')&&(($d['retour_dejeuner'])=='0000-00-00 00:00:00')&&(($d['sortie'])=='0000-00-00 00:00:00')){
		$depart_dejeuner = "UPDATE pointage SET depart_dejeuner='".$_POST['heuri']."' WHERE id='".$_POST['id']."' AND jour='".$_POST['jour']."'";
		$controle = $depart_dejeuner;
		$controle = $db->query($controle);
	echo "<div class=\"validation\">Votre départ pour le déjeuner à bien été enregistré</div>";
	   }
	else if((($d['retour_dejeuner'])=='0000-00-00 00:00:00')&&(($d['sortie'])=='0000-00-00 00:00:00')){
		$retour_dejeuner = "UPDATE pointage SET retour_dejeuner='".$_POST['heuri']."' WHERE id='".$_POST['id']."' AND jour='".$_POST['jour']."'";
		$controle = $retour_dejeuner;
		$controle = $db->query($controle);
	echo "<div class=\"validation\">Votre retour de déjeuner à bien été enregistré</div>";
	   } 
	else if(($d['sortie'])=='0000-00-00 00:00:00'){
		$sortie = "UPDATE pointage SET sortie='".$_POST['heuri']."' WHERE id='".$_POST['id']."' AND jour='".$_POST['jour']."'";
		$controle = $sortie;
		$controle = $db->query($controle);
		echo "<div class=\"validation\">Votre sortie à bien été enregistré</div>";
		}
	else echo  "<div class=\"erreur\">Tous vos pointages sont déjà enregistrés pour la journée</div>";
}
 
else echo  "<div class=\"erreur\">Erreur lors de la saisie, vérifiez que la touche MAJ soit bien activée</div>";
}
?>
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
<?php
function getTime($val) {
				$nbHour = floor($val / 3600);
				$nbMin = str_pad(round(($val - $nbHour * 3600) / 60),2,0, STR_PAD_LEFT);
				return $nbHour.'h'.$nbMin.'min';
			}
$voirdate = "SELECT *,"
. "TIMESTAMPDIFF(SECOND,arrive, depart_dejeuner)+TIMESTAMPDIFF(SECOND,retour_dejeuner,sortie) AS working_time, "
. "TIMESTAMPDIFF(SECOND,entree_t, depart_dej_t)+TIMESTAMPDIFF(SECOND,retour_dej_t,sortie_t) AS working_time_t, "
. "TIMESTAMPDIFF(SECOND,(TIMESTAMPDIFF(SECOND,arrive, depart_dejeuner)+TIMESTAMPDIFF(SECOND,retour_dejeuner,sortie)),(TIMESTAMPDIFF(SECOND,entree_t, depart_dej_t)+TIMESTAMPDIFF(SECOND,retour_dej_t,sortie_t))) AS working_time_diff "
. "FROM pointage "
. "WHERE jour='".$_POST['jour']."' AND nom = '".$_POST['nom']."' "
. "ORDER BY service ASC";	
 
if(isset($_POST['submit'])&&($_POST['jour'])&&($_POST['nom'])){
$voirdate = $db->query($voirdate);
while($rows = $voirdate->fetch(PDO::FETCH_ASSOC)){
	echo	"<tr><td>".date("d/m/Y", strtotime($rows['jour']))."</td>".
			"<td style=\"color:BLUE;\">".date("H:i", strtotime($rows['entree_t']))."</td>".
			"<td style=\"background-color:#F7F7F7;color:#FF0000;\">".date("H:i", strtotime($rows['arrive']))."</td>".
			"<td style=\"color:BLUE;\">".date("H:i", strtotime($rows['depart_dej_t']))."</td>".
			"<td style=\"background-color:#F7F7F7;color:#FF0000;\">".date("H:i", strtotime($rows['depart_dejeuner']))."</td>".
			"<td style=\"color:BLUE;\">".date("H:i", strtotime($rows['retour_dej_t']))."</td>".
			"<td style=\"background-color:#F7F7F7;color:#FF0000;\">".date("H:i", strtotime($rows['retour_dejeuner']))."</td>".
			"<td style=\"color:BLUE;\">".date("H:i", strtotime($rows['sortie_t']))."</td>".
			"<td style=\"background-color:#F7F7F7;color:#FF0000;\">".date("H:i", strtotime($rows['sortie']))."</td>".
			"<td>".$rows['id']."</td>".
			"<td>".$rows['nom']."</td>".
			"<td>".$rows['prenom']."</td>".
			"<td>".$rows['service']."</td>".
			"<td style=\"color:BLUE;\">".getTime($rows['working_time_t']). "</td>".
			"<td style=\"background-color:#F7F7F7;color:#FF0000;\">".getTime($rows['working_time'])."</td></tr>";
}
}	
 
$voirmois = "SELECT *,"
. "TIMESTAMPDIFF(SECOND,arrive, depart_dejeuner)+TIMESTAMPDIFF(SECOND,retour_dejeuner,sortie) AS working_time, "
. "TIMESTAMPDIFF(SECOND,entree_t, depart_dej_t)+TIMESTAMPDIFF(SECOND,retour_dej_t,sortie_t) AS working_time_t, "
. "(TIMESTAMPDIFF(SECOND,arrive, depart_dejeuner)+TIMESTAMPDIFF(SECOND,retour_dejeuner,sortie))-(TIMESTAMPDIFF(SECOND,entree_t, depart_dej_t)+TIMESTAMPDIFF(SECOND,retour_dej_t,sortie_t)) AS working_time_diff "
. "FROM pointage "
. "WHERE MONTH(jour) = '".$_POST['mois']."' AND nom = '".$_POST['nom']."' "
. "ORDER BY service ASC";
if(isset($_POST['submit'])&&($_POST['mois'])&&($_POST['nom'])){
$voirmois = $db->query($voirmois);								
while($rows = $voirmois->fetch(PDO::FETCH_ASSOC)){
	echo	"<tr><td>".date("d/m/Y", strtotime($rows['jour']))."</td>".
			"<td style=\"color:BLUE;\">".date("H:i", strtotime($rows['entree_t']))."</td>".
			"<td style=\"background-color:#F7F7F7;color:#FF0000;\">".date("H:i", strtotime($rows['arrive']))."</td>".
			"<td style=\"color:BLUE;\">".date("H:i", strtotime($rows['depart_dej_t']))."</td>".
			"<td style=\"background-color:#F7F7F7;color:#FF0000;\">".date("H:i", strtotime($rows['depart_dejeuner']))."</td>".
			"<td style=\"color:BLUE;\">".date("H:i", strtotime($rows['retour_dej_t']))."</td>".
			"<td style=\"background-color:#F7F7F7;color:#FF0000;\">".date("H:i", strtotime($rows['retour_dejeuner']))."</td>".
			"<td style=\"color:BLUE;\">".date("H:i", strtotime($rows['sortie_t']))."</td>".
			"<td style=\"background-color:#F7F7F7;color:#FF0000;\">".date("H:i", strtotime($rows['sortie']))."</td>".
			"<td>".$rows['id']."</td>".
			"<td>".$rows['nom']."</td>".
			"<td>".$rows['prenom']."</td>".
			"<td>".$rows['service']."</td>".
			"<td style=\"color:BLUE;\">".getTime($rows['working_time_t']). "</td>".
			"<td style=\"background-color:#F7F7F7;color:#FF0000;\">".getTime($rows['working_time'])."</td></tr>";
}
}	
$voirweek = "SELECT *,"
. "TIMESTAMPDIFF(SECOND,arrive, depart_dejeuner)+TIMESTAMPDIFF(SECOND,retour_dejeuner,sortie) AS working_time, "
. "TIMESTAMPDIFF(SECOND,entree_t, depart_dej_t)+TIMESTAMPDIFF(SECOND,retour_dej_t,sortie_t) AS working_time_t, "
. "(TIMESTAMPDIFF(SECOND,arrive, depart_dejeuner)+TIMESTAMPDIFF(SECOND,retour_dejeuner,sortie))-(TIMESTAMPDIFF(SECOND,entree_t, depart_dej_t)+TIMESTAMPDIFF(SECOND,retour_dej_t,sortie_t)) AS working_time_diff "
. "FROM pointage "
. "WHERE semaine = '".$_POST['week']."' AND nom = '".$_POST['nom']."' "
. "ORDER BY nom";
if(isset($_POST['submit'])&&($_POST['week'])&&($_POST['nom'])){
$voirweek = $db->query($voirweek);	
while($rows = $voirweek->fetch(PDO::FETCH_ASSOC)){
	echo	"<tr><td>".date("d/m/Y", strtotime($rows['jour']))."</td>".
			"<td style=\"color:BLUE;\">".date("H:i", strtotime($rows['entree_t']))."</td>".
			"<td style=\"background-color:#F7F7F7;color:#FF0000;\">".date("H:i", strtotime($rows['arrive']))."</td>".
			"<td style=\"color:BLUE;\">".date("H:i", strtotime($rows['depart_dej_t']))."</td>".
			"<td style=\"background-color:#F7F7F7;color:#FF0000;\">".date("H:i", strtotime($rows['depart_dejeuner']))."</td>".
			"<td style=\"color:BLUE;\">".date("H:i", strtotime($rows['retour_dej_t']))."</td>".
			"<td style=\"background-color:#F7F7F7;color:#FF0000;\">".date("H:i", strtotime($rows['retour_dejeuner']))."</td>".
			"<td style=\"color:BLUE;\">".date("H:i", strtotime($rows['sortie_t']))."</td>".
			"<td style=\"background-color:#F7F7F7;color:#FF0000;\">".date("H:i", strtotime($rows['sortie']))."</td>".
			"<td>".$rows['id']."</td>".
			"<td>".$rows['nom']."</td>".
			"<td>".$rows['prenom']."</td>".
			"<td>".$rows['service']."</td>".
			"<td style=\"color:BLUE;\">".getTime($rows['working_time_t']). "</td>".
			"<td style=\"background-color:#F7F7F7;color:#FF0000;\">".getTime($rows['working_time'])."</td></tr>";
}
}
 
?>
Merci à vous par avance.