Dans le cadre du développement d'une application WEB, je propose à mes agents de poser leurs jours de congés. Je souhaitais ne pas déduire les jours fériés ainsi que les week-end (samedi - dimanche).
J'ai trouvé une fonction permettant de gérer les jours fériés fixes et mouvants. Voici le code :
<?php
function isNotWorkable($date)
{
if ($date === null)
{
$date = time();
}
$date = strtotime(date('m/d/Y',$date));
$year = date('Y',$date);
$easterDate = easter_date($year);
$easterDay = date('j', $easterDate);
$easterMonth = date('n', $easterDate);
$easterYear = date('Y', $easterDate);
$holidays = array(
// Dates fixes
mktime(0, 0, 0, 1, 1, $year), // 1er janvier
mktime(0, 0, 0, 5, 1, $year), // Fête du travail
mktime(0, 0, 0, 5, 8, $year), // Victoire des alliés
mktime(0, 0, 0, 7, 14, $year), // Fête nationale
mktime(0, 0, 0, 8, 15, $year), // Assomption
mktime(0, 0, 0, 11, 1, $year), // Toussaint
mktime(0, 0, 0, 11, 11, $year), // Armistice
mktime(0, 0, 0, 12, 25, $year), // Noel
// Dates variables
mktime(0, 0, 0, $easterMonth, $easterDay + 1, $easterYear),
mktime(0, 0, 0, $easterMonth, $easterDay + 39, $easterYear),
mktime(0, 0, 0, $easterMonth, $easterDay + 50, $easterYear),
);
return in_array($date, $holidays);
}
?>
<html>
<form method="post" action="essai_heure.php" enctype="multipart/form-data">
<fieldset style='background:#c4ddf1; width:100%; height:160px;'>
<legend style='background:#9c8d87; color:white; width:60%; height:24px; size: 16px;'>Validation</legend>
<!-- Date début des vacances -->
<label for 'date_posee' align='right'>Date Souhaitée</label><br/>
<label for 'date_posee' align='right'>Du (inclus) : </label><input type='date' style='background:url("images/design/date.png") #fafafa 10px center no-repeat;width:30%;' name='date_posee_du' id='date_posee_du' />
<label for 'date_posee' align='right'>A : </label>
<select name="time_du" id='time_du' style='#fafafa 10px center no-repeat;width:15%; text-align: right; height: 20%;'>
<option value="08:00:00">8h00</option>
<option value="12:00:00">12h00</option>
</select><br/>
<!-- Date fin des vacances -->
<label for 'date_posee' align='right'>Au (inclus) : </label><input type='date' style='background:url("images/design/date.png") #fafafa 10px center no-repeat;width:30%;' name='date_posee_au' id='date_posee_au' />
<label for 'date_posee' align='right'>A : </label>
<select name="time_au" id='time_au' style='#fafafa 10px center no-repeat;width:15%; text-align: right; height: 20%;'>
<option value="12:00:00">12h00</option>
<option value="17:30:00">17h30</option>
</select><br/>
<!-- Nombre de jours -->
<!-- Ce nombre de jour est à vérifier au travers du décompte -->
<label for 'vacances_posees' align='right'>Nombre Jours Décomptés : </label><input type='number' style='background:url("images/design/numero.png") #fafafa 10px center no-repeat;width:20%;' name='vacances_posees' id='vacances_posees' min='0' max='<?php echo $vacDroit;?>' />
<input type="submit" name="enregistrer_vac" value="Enregistrer" />
<input type="submit" value="Retour" onclick="history.go(-2)" />
</fieldset>
</form>
</html>
<?php
if (!empty($_POST['enregistrer_vac'])){
echo "Les vacances du : ".$_POST['date_posee_du']." a ".$_POST['time_du']."<br/>";
echo "Les vacances du : ".$_POST['date_posee_au']." a ".$_POST['time_au']."<br/>";
echo "Nombre de jours pris : ".$_POST['vacances_posees']."<br/>";
// Mise en forme des dates pour insertion table "absence_personnel"
$date_debut_vacances= date("Y-m-d H:i:s", strtotime($_POST['date_posee_du']." ".$_POST['time_du']));
$date_fin_vacances=date("Y-m-d H:i:s", strtotime($_POST['date_posee_au']." ".$_POST['time_au']));
$date_premier_jour_vac=date("Y-m-d", strtotime($_POST['date_posee_du']));
$id_agent=2;
$nom_agent="XXXXX XXXXXXXXXXXX";
// Appel de la fonction pour vérifier les jours posés
// A ce stade, je ne vérifie que le premier jour
// Je ferais une boucle foreach pour traiter tous les jours posés
if(isNotWorkable(date("Y-m-d H:i:s", strtotime($_POST['date_posee_du']." ".$_POST['time_du'])))){
echo 'Nous sommes un jour férié !! Apéro !!';
}else{
echo 'Nous sommes un jour normal, au boulot :p';
}
// Connexion à la base de données
include("menu//chiens.php");
$req = $bdd->prepare('INSERT INTO `absence_personnel` (`ID_AGENT`,`NOM_AGENT`,`DATE_DEBUT_VACANCES`, `DATE_FIN_VACANCES`,`NOMBRE_JOURS_POSES`) VALUES(:id_agent, :nom_agent, :date_debut_vacances, :date_fin_vacances, :nombre_jours_poses)');
$req->execute(array('id_agent'=>$id_agent, 'nom_agent'=>$nom_agent, 'date_debut_vacances'=>$date_debut_vacances, 'date_fin_vacances'=>$date_fin_vacances, 'nombre_jours_poses'=>$nombre_jours_poses));
/*Messages d'erreur de validation*/
$bdd ->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
else{
echo "il faut saisir un truc";
}
?>
J'ai bien l'insertion dans la table mais j'ai le message suivant :Notice: A non well formed numeric value encountered in C:\Program Files (x86)\EasyPHP-DevServer-14.1VC9\data\localweb\projects\GestParq_Version1.1\essai_heure.php on line 10
Je ne comprends pas. J'ai modifié le format de la date, j'ai changé le DateTime rien n'y fait. J'ai toujours ce message qui s'affiche.
Auriez vous une solution ?
Par avance merci.