Alors la manière la plus simple à mettre en oeuvre :
1. Le scénario
Tu peux mettre en place un scénario programmé chaque jour à 4h10 par exemple :
avec ce bloc code
à exécuter :
/* Date de fin au format ANNEE-MOIS-JOUR (Exemple: 2028-07-15 = 15 juillet 2028 */
$date_retraite = '2028-07-15';
/********************************************************************************/
$date_depart = strtotime(date('Y-m-d')); // Date du jour
$date_fin = strtotime($date_retraite);
$nb_jours_ouvres = get_nb_open_days($date_depart, $date_fin);
$scenario->setLog('Il y a '.$nb_jours_ouvres.' jours ouvrés entre le '.date('d/m/Y', $date_depart).' et le '.date('d/m/Y', $date_fin));
$scenario->setLog('Enregistrement variable(jours_retraite) = Il reste ' . $nb_jours_ouvres . ' jours avant la retraite');
$scenario->setData('jours_retraite', 'Il reste ' . $nb_jours_ouvres . ' jours avant la retraite');
// Fonction permettant de compter le nombre de jours ouvrés entre deux dates
function get_nb_open_days($date_start, $date_stop) {
$arr_bank_holidays = array(); // Tableau des jours feriés
// On boucle dans le cas où l'année de départ serait différente de l'année d'arrivée
$diff_year = date('Y', $date_stop) - date('Y', $date_start);
for ($i = 0; $i <= $diff_year; $i++) {
$year = (int)date('Y', $date_start) + $i;
// Liste des jours feriés
$arr_bank_holidays[] = '1_1_'.$year; // Jour de l'an
$arr_bank_holidays[] = '1_5_'.$year; // Fete du travail
$arr_bank_holidays[] = '8_5_'.$year; // Victoire 1945
$arr_bank_holidays[] = '14_7_'.$year; // Fete nationale
$arr_bank_holidays[] = '15_8_'.$year; // Assomption
$arr_bank_holidays[] = '1_11_'.$year; // Toussaint
$arr_bank_holidays[] = '11_11_'.$year; // Armistice 1918
$arr_bank_holidays[] = '25_12_'.$year; // Noel
// Récupération de paques. Permet ensuite d'obtenir le jour de l'ascension et celui de la pentecote
$easter = easter_date($year);
$arr_bank_holidays[] = date('j_n_'.$year, $easter + 86400); // Paques
$arr_bank_holidays[] = date('j_n_'.$year, $easter + (86400*39)); // Ascension
$arr_bank_holidays[] = date('j_n_'.$year, $easter + (86400*50)); // Pentecote
}
//print_r($arr_bank_holidays);
$nb_days_open = 0;
// Mettre <= si on souhaite prendre en compte le dernier jour dans le décompte
while ($date_start < $date_stop) {
// Si le jour suivant n'est ni un dimanche (0) ou un samedi (6), ni un jour férié, on incrémente les jours ouvrés
if (!in_array(date('w', $date_start), array(0, 6))
&& !in_array(date('j_n_'.date('Y', $date_start), $date_start), $arr_bank_holidays)) {
$nb_days_open++;
}
$date_start = mktime(date('H', $date_start), date('i', $date_start), date('s', $date_start), date('m', $date_start), date('d', $date_start) + 1, date('Y', $date_start));
}
return $nb_days_open;
}
La seule chose à faire sera de renseigner la date que tu souhaites sur la ligne $date_retraite
à la place de 2028-07-15
sur la seconde ligne du code :
/* Date de fin au format ANNEE-MOIS-JOUR (Exemple: 2028-07-15 = 15 juillet 2028 */
$date_retraite = '2028-07-15';
/********************************************************************************/
Le résultat sera sauvegardé dans la variable jours_retraite
que tu peux consulter via le menu Outils->Variables.
2. Le virtuel
A l’aide du plugin Virtuel, tu ajoutes une commande info virtuelle de type Info/Autre en appelant la variable variable(jours_retraite)
dans le champs Calcul de la colonne Valeur :
3. Le résultat
Le must serait d’inclure la fonction dans le fichier user.function.class.php
et de l’appeler directement dans un virtuel programmé par un cron et de se passer du scénario mais c’est plus complexe à mettre en place et à suivre.
J’espère que ça va t’aider, n’hésites pas si tu as besoin de précisions