function get_td_class_of_the_day_in_the_week($timestamp_du_jour) { $j_name = date('D', $timestamp_du_jour); $j_date = date('Y-m-d', $timestamp_du_jour); if ($j_name == 'Sat' && !$_SESSION['config']['samedi_travail'] || $j_name == 'Sun' && !$_SESSION['config']['dimanche_travail'] || est_chome($timestamp_du_jour) || est_ferme($timestamp_du_jour)) { return 'weekend'; } else { return 'semaine'; } }
function compter($user, $num_current_periode, $date_debut, $date_fin, $opt_debut, $opt_fin, &$comment, $DEBUG = FALSE, $num_update = null) { // verif si date_debut est bien anterieure à date_fin // ou si meme jour mais debut l'apres midi et fin le matin if (strtotime($date_debut) > strtotime($date_fin) || $date_debut == $date_fin && $opt_debut == "pm" && $opt_fin == "am") { $comment = _('calcul_nb_jours_commentaire_bad_date'); return 0; } if ($date_debut != 0 && $date_fin != 0) { // On ne peut pas calculer si, pour l'année considérée, les jours feries ont ete saisis if (verif_jours_feries_saisis($date_debut, $DEBUG, $num_update) == FALSE || verif_jours_feries_saisis($date_fin, $DEBUG, $num_update) == FALSE) { $comment = _('calcul_impossible') . "<br>\n" . _('jours_feries_non_saisis') . "<br>\n" . _('contacter_admin') . "<br>\n"; return 0; } /************************************************************/ // 1 : on fabrique un tableau de jours (divisé chacun en 2 demi-jour) de la date_debut à la date_fin // 2 : on verifie que le conges demandé ne chevauche pas une periode deja posée // 3 : on affecte à 0 ou 1 chaque demi jour, en fonction de s'il est travaillé ou pas // 4 : à la fin , on parcours le tableau en comptant le nb de demi-jour à 1, on multiplie ce total par 0.5, ça donne le nb de jours du conges ! $nb_jours = 0; /************************************************************/ // 1 : fabrication et initialisation du tableau des demi-jours de la date_debut à la date_fin $tab_periode_calcul = make_tab_demi_jours_periode($date_debut, $date_fin, $opt_debut, $opt_fin, $DEBUG); /************************************************************/ // 2 : on verifie que le conges demandé ne chevauche pas une periode deja posée if (verif_periode_chevauche_periode_user($date_debut, $date_fin, $user, $num_current_periode, $tab_periode_calcul, $comment, $DEBUG, $num_update)) { return 0; } /************************************************************/ // 3 : on affecte à 0 ou 1 chaque demi jour, en fonction de s'il est travaillé ou pas // on initialise le tableau global des jours fériés s'il ne l'est pas déjà : if (!isset($_SESSION["tab_j_feries"])) { init_tab_jours_feries(); //print_r($_SESSION["tab_j_feries"]); // verif DEBUG } // on initialise le tableau global des jours fermés s'il ne l'est pas déjà : if (!isset($_SESSION["tab_j_fermeture"])) { init_tab_jours_fermeture($user, $DEBUG); //print_r($_SESSION["tab_j_fermeture"]); // verif DEBUG } $current_day = $date_debut; $date_limite = jour_suivant($date_fin); // on va avancer jour par jour jusqu'à la date limite et voir si chaque jour est travaillé, férié, rtt, etc ... while ($current_day != $date_limite) { // calcul du timestamp du jour courant $pieces = explode("-", $current_day); // date de la forme yyyy-mm-jj $y = $pieces[0]; $m = $pieces[1]; $j = $pieces[2]; $timestamp_du_jour = mktime(0, 0, 0, $m, $j, $y); // on regarde si le jour est travaillé ou pas dans la config de l'appli $j_name = date("D", $timestamp_du_jour); if ($j_name == "Sat" && $_SESSION['config']['samedi_travail'] == FALSE || $j_name == "Sun" && $_SESSION['config']['dimanche_travail'] == FALSE) { // on ne compte ce jour à 0 $tab_periode_calcul[$current_day]['am'] = 0; $tab_periode_calcul[$current_day]['pm'] = 0; } elseif (est_chome($timestamp_du_jour)) { // on ne compte ce jour à 0 $tab_periode_calcul[$current_day]['am'] = 0; $tab_periode_calcul[$current_day]['pm'] = 0; } else { /***************/ // verif des rtt ou temp partiel (dans la table rtt) $val_matin = "N"; $val_aprem = "N"; recup_infos_artt_du_jour($user, $timestamp_du_jour, $val_matin, $val_aprem); if ($val_matin == "Y") { // rtt le matin $tab_periode_calcul[$current_day]['am'] = 0; } if ($val_aprem == "Y") { // rtt l'après midi $tab_periode_calcul[$current_day]['pm'] = 0; } } $current_day = jour_suivant($current_day); } if ($DEBUG) { echo "tab_periode_calcul :<br>\n"; print_r($tab_periode_calcul); echo "<br>\n"; } /************************************************************/ // 3 : on va avancer jour par jour jusqu'à la date limite pour compter le nb de demi jour à 1 $current_day = $date_debut; $date_limite = jour_suivant($date_fin); while ($current_day != $date_limite) { $nb_jours = $nb_jours + $tab_periode_calcul[$current_day]['am'] + $tab_periode_calcul[$current_day]['pm']; $current_day = jour_suivant($current_day); } $nb_jours = $nb_jours * 0.5; return $nb_jours; } else { return 0; } }