Exemplo n.º 1
0
    // on verifie que $new_date_debut est anterieure a $new_date_fin
    if ($timestamp_date_debut > $timestamp_date_fin) {
        $code_erreur = 2;
        // code erreur : $new_date_debut est posterieure a $new_date_fin
        $choix_action = "saisie_dates";
    } elseif ($timestamp_date_debut < $timestamp_today) {
        $code_erreur = 3;
        // code erreur : saisie de date passée
        $choix_action = "saisie_dates";
    } elseif ($timestamp_date_debut == $timestamp_today || $timestamp_date_fin == $timestamp_today) {
        $code_erreur = 4;
        // code erreur : saisie de aujourd'hui
        $choix_action = "saisie_dates";
    } else {
        // 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_yyyy_mm_dd, $date_fin_yyyy_mm_dd, "am", "pm", $DEBUG);
        // on verifie si la periode saisie ne chevauche pas une periode existante
        if (verif_periode_chevauche_periode_groupe($date_debut_yyyy_mm_dd, $date_fin_yyyy_mm_dd, '', $tab_periode_calcul, $groupe_id, $DEBUG)) {
            $code_erreur = 5;
            // code erreur : fermeture chevauche une periode deja saisie
            $choix_action = "saisie_dates";
        }
    }
}
if ($onglet == 'calendar') {
    // les jours fériés de l'annee de la periode saisie ne sont pas enregistrés
    if ($code_erreur == 1) {
        echo "<div class=\"alert alert-danger\">" . _('admin_jours_fermeture_annee_non_saisie') . "</div>\n";
    }
    /************************************************/
    // CALENDRIER DES FERMETURES
Exemplo n.º 2
0
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;
    }
}
Exemplo n.º 3
0
 /**
  * Encapsule le comportement du module de jours de fermeture
  *
  * @param string $session
  *
  * @return void
  * @access public
  * @static
  */
 public static function pageJoursFermetureModule($session)
 {
     // verif des droits du user à afficher la page
     verif_droits_user($session, "is_hr");
     $return = '';
     /*** initialisation des variables ***/
     /*************************************/
     // recup des parametres reçus :
     // SERVER
     $PHP_SELF = $_SERVER['PHP_SELF'];
     // GET / POST
     $choix_action = getpost_variable('choix_action');
     $year = getpost_variable('year', 0);
     $groupe_id = getpost_variable('groupe_id');
     $id_type_conges = getpost_variable('id_type_conges');
     $new_date_debut = getpost_variable('new_date_debut');
     // valeur par dédaut = aujourd'hui
     $new_date_fin = getpost_variable('new_date_fin');
     // valeur par dédaut = aujourd'hui
     $fermeture_id = getpost_variable('fermeture_id', 0);
     $fermeture_date_debut = getpost_variable('fermeture_date_debut');
     $fermeture_date_fin = getpost_variable('fermeture_date_fin');
     $code_erreur = getpost_variable('code_erreur', 0);
     // si les dates de début ou de fin ne sont pas passé par get/post alors date du jour.
     if ($new_date_debut == "") {
         if ($year == 0) {
             $new_date_debut = date("d/m/Y");
         } else {
             $new_date_debut = date("d/m/Y", mktime(0, 0, 0, date("m"), date("d"), $year));
         }
     }
     if ($new_date_fin == "") {
         if ($year == 0) {
             $new_date_fin = date("d/m/Y");
         } else {
             $new_date_fin = date("d/m/Y", mktime(0, 0, 0, date("m"), date("d"), $year));
         }
     }
     if ($year == 0) {
         $year = date("Y");
     }
     /*************************************/
     /***********************************/
     /*  VERIF DES DATES RECUES   */
     $tab_date_debut = explode("/", $new_date_debut);
     // date au format d/m/Y
     $timestamp_date_debut = mktime(0, 0, 0, $tab_date_debut[1], $tab_date_debut[0], $tab_date_debut[2]);
     $date_debut_yyyy_mm_dd = $tab_date_debut[2] . "-" . $tab_date_debut[1] . "-" . $tab_date_debut[0];
     $tab_date_fin = explode("/", $new_date_fin);
     // date au format d/m/Y
     $timestamp_date_fin = mktime(0, 0, 0, $tab_date_fin[1], $tab_date_fin[0], $tab_date_fin[2]);
     $date_fin_yyyy_mm_dd = $tab_date_fin[2] . "-" . $tab_date_fin[1] . "-" . $tab_date_fin[0];
     $timestamp_today = mktime(0, 0, 0, date("m"), date("d"), date("Y"));
     /*********************************/
     /*   COMPOSITION DES ONGLETS...  */
     /*********************************/
     $onglet = getpost_variable('onglet');
     if (!$onglet) {
         $onglet = 'saisie';
     }
     $onglets = array();
     $onglets['saisie'] = _('admin_jours_fermeture_titre') . " " . "<span class=\"current-year\">{$year}</span>";
     $onglets['calendar'] = 'Calendrier des fermetures' . " " . "<span class=\"current-year\">{$year}</span>";
     $onglets['year_nav'] = NULL;
     //initialisation de l'action par défaut
     if ($choix_action == "") {
         $choix_action = "saisie_groupe";
     }
     /*********************************/
     /*   COMPOSITION DU HEADER...    */
     /*********************************/
     $add_css = '<style>#onglet_menu .onglet{ width: ' . str_replace(',', '.', 100 / count($onglets)) . '% ;}</style>';
     /***********************************/
     // AFFICHAGE DE LA PAGE
     header_menu('', 'Libertempo : ' . _('divers_fermeture'), $add_css);
     include ROOT_PATH . 'fonctions_javascript.php';
     /*********************************/
     /*   AFFICHAGE DES ONGLETS...  */
     /*********************************/
     $return .= '<div id="onglet_menu">';
     foreach ($onglets as $key => $title) {
         if ($key == 'year_nav') {
             // navigation
             $prev_link = "{$PHP_SELF}?session={$session}&onglet={$onglet}&year=" . ($year - 1) . "&groupe_id={$groupe_id}";
             $next_link = "{$PHP_SELF}?session={$session}&onglet={$onglet}&year=" . ($year + 1) . "&groupe_id={$groupe_id}";
             $return .= '<div class="onglet calendar-nav">';
             $return .= '<ul>';
             $return .= '<li><a href="' . $prev_link . '" class="calendar-prev"><i class="fa fa-chevron-left"></i><span>année précédente</span></a></li>';
             $return .= '<li class="current-year">' . $year . '</li>';
             $return .= '<li><a href="' . $next_link . '" class="calendar-next"><i class="fa fa-chevron-right"></i><span>année suivante</span></a></li>';
             $return .= '</ul>';
             $return .= '</div>';
         } else {
             $return .= '<div class="onglet ' . ($onglet == $key ? ' active' : '') . '" ><a href="' . $PHP_SELF . '?session=' . $session . '&year=' . $year . '&onglet=' . $key . '">' . $title . '</a></div>';
         }
     }
     $return .= '</div>';
     // vérifie si les jours fériés sont saisie pour l'année en cours
     if (verif_jours_feries_saisis($date_debut_yyyy_mm_dd) == FALSE && verif_jours_feries_saisis($date_fin_yyyy_mm_dd) == FALSE) {
         $code_erreur = 1;
         // code erreur : jour feriés non saisis
         $onglet = "calendar";
     }
     //initialisation de l'action demandée : saisie_dates, commit_new_fermeture pour enregistrer une fermeture, annul_fermeture pour confirmer une annulation, commit_annul_fermeture pour annuler une fermeture
     //en cas de confirmation d'une fermeture :
     if ($choix_action == "commit_new_fermeture") {
         // on verifie que $new_date_debut est anterieure a $new_date_fin
         if ($timestamp_date_debut > $timestamp_date_fin) {
             $code_erreur = 2;
             // code erreur : $new_date_debut est posterieure a $new_date_fin
             $choix_action = "saisie_dates";
         } elseif ($timestamp_date_debut < $timestamp_today) {
             $code_erreur = 3;
             // code erreur : saisie de date passée
             $choix_action = "saisie_dates";
         } elseif ($timestamp_date_debut == $timestamp_today || $timestamp_date_fin == $timestamp_today) {
             $code_erreur = 4;
             // code erreur : saisie de aujourd'hui
             $choix_action = "saisie_dates";
         } else {
             // 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_yyyy_mm_dd, $date_fin_yyyy_mm_dd, "am", "pm");
             // on verifie si la periode saisie ne chevauche pas une periode existante
             if (\hr\Fonctions::verif_periode_chevauche_periode_groupe($date_debut_yyyy_mm_dd, $date_fin_yyyy_mm_dd, '', $tab_periode_calcul, $groupe_id)) {
                 $code_erreur = 5;
                 // code erreur : fermeture chevauche une periode deja saisie
                 $choix_action = "saisie_dates";
             }
         }
     }
     if ($onglet == 'calendar') {
         // les jours fériés de l'annee de la periode saisie ne sont pas enregistrés
         if ($code_erreur == 1) {
             $return .= '<div class="alert alert-danger">' . _('admin_jours_fermeture_annee_non_saisie') . '</div>';
         }
         /************************************************/
         // CALENDRIER DES FERMETURES
         $return .= \hr\Fonctions::affiche_calendrier_fermeture($year);
     } elseif ($choix_action == "saisie_dates") {
         if ($groupe_id == "") {
             // choix du groupe n'a pas été fait ($_SESSION['config']['fermeture_par_groupe']==FALSE)
             $groupe_id = 0;
         }
         // $new_date_debut est anterieure a $new_date_fin
         if ($code_erreur == 2) {
             $return .= '<div class="alert alert-danger">' . _('admin_jours_fermeture_dates_incompatibles') . '</div>';
         }
         // ce ne sont des dates passées
         if ($code_erreur == 3) {
             $return .= '<div class="alert alert-danger">' . _('admin_jours_fermeture_date_passee_error') . '</div>';
         }
         // fermeture le jour même impossible
         if ($code_erreur == 4) {
             $return .= '<div class="alert alert-danger">' . _('admin_jours_fermeture_fermeture_aujourd_hui') . '</div>';
         }
         // la periode saisie chevauche une periode existante
         if ($code_erreur == 5) {
             $return .= '<div class="alert alert-danger">' . _('admin_jours_fermeture_chevauche_periode') . '</div>';
         }
         $return .= '<div class="wrapper">';
         $return .= '<a href="' . ROOT_PATH . 'hr/hr_index.php?session=' . $session . '" class="admin-back"><i class="fa fa-arrow-circle-o-left"></i>Retour mode rh</a>';
         if ($onglet == 'saisie') {
             $return .= \hr\Fonctions::saisie_dates_fermeture($year, $groupe_id, $new_date_debut, $new_date_fin, $code_erreur);
         }
     } elseif ($choix_action == "saisie_groupe") {
         $return .= '<div class="wrapper">';
         $return .= '<a href="' . ROOT_PATH . 'hr/hr_index.php?session=' . $session . '" class="admin-back"><i class="fa fa-arrow-circle-o-left"></i>Retour mode rh</a>';
         $return .= \hr\Fonctions::saisie_groupe_fermeture();
         $return .= '</div>';
     } elseif ($choix_action == "commit_new_fermeture") {
         $return .= $title;
         $return .= \hr\Fonctions::commit_new_fermeture($new_date_debut, $new_date_fin, $groupe_id, $id_type_conges);
     } elseif ($choix_action == "annul_fermeture") {
         $return .= $title;
         $return .= \hr\Fonctions::confirm_annul_fermeture($fermeture_id, $groupe_id, $fermeture_date_debut, $fermeture_date_fin);
     } elseif ($choix_action == "commit_annul_fermeture") {
         $return .= $title;
         $return .= \hr\Fonctions::commit_annul_fermeture($fermeture_id, $groupe_id);
     }
     return $return;
 }