<?php
/****************************************************************************************
 * SMI (Services Maintenance Interventions) est une gestion libre de maintenance et de SAV
 *
 * Version 1.0.4
 *
 * Copyright (C) 2006-2016  Sylvain FATOME
 * This program is free software; you can redistribute it and/or modify it under the terms
 * of the GNU General Public License as published by the Free Software Foundation;
 * either version 2 of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
 * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 * See the GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License along with this program
 * (in the directory docs);
 * if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
 * Boston, MA  02110-1301, USA.
 *
 * Contact : galawa@free.fr
 *
 * Web : http://smi.no-ip.org
 ****************************************************************************************/


// Vérification des tentatives de hack
$pos = strpos($_SERVER['PHP_SELF'], 'inc.php');
if ($pos !== FALSE) {
    header('Location: ../index.php');
}

/**************************************************/
/* Fonctions pour les accès aux fichiers planning */
/* et fichiers rattachés                          */
/**************************************************/

/**
 * Lecture des paramètres planning
 *
 * @param bool|TRUE $open
 * @return array|null
 */
function lit_enr_pprm($open = TRUE) {
    global
    $db;

    if ($open == TRUE) {
        $db = open_database(DBUSER, DBPASS, DBNAME, DBHOST, 'utf8');
    }
    $rech = 'SELECT * FROM `' . TBPPRM . '`';
    $row = $db->get_row($rech, ARRAY_A);
    if ($open == TRUE) {
        close_database();
    }

    return $row;
}

/** Catégories *
 * @param bool $open
 * @return null
 */

// Vérification du nombre de catégories d'évèvnements
function nb_pcat($open = TRUE)
{
    global
    $db;

    if ($open == TRUE) {
        $db = open_database(DBUSER, DBPASS, DBNAME, DBHOST, 'utf8');
    }
    $rexist = 'SELECT COUNT(*) FROM `' . TBPCAT . '`';
    $nbexist = $db->get_var($rexist);
    if ($open == TRUE) {
        close_database();
    }

    return $nbexist;
}

/**
 * Lecture d'un enregistrement catégorie évènement
 *
 * @param $code
 * @param bool $open
 * @return array|null
 */
function lit_enr_pcat($code, $open = TRUE)
{
    global
    $db;

    if ($open == TRUE) {
        $db = open_database(DBUSER, DBPASS, DBNAME, DBHOST, 'utf8');
    }
    $rech2 = 'SELECT * FROM `' . TBPCAT . "` WHERE pcat_code = '" . $db->escape($code) . "'";
    $row2 = $db->get_row($rech2, ARRAY_A);
    if ($open == TRUE) {
        close_database();
    }

    return $row2;
}

// Evénements

/**
 * Lecture d'un enregistrement évènement
 *
 * @param $id
 * @param bool $open
 * @return array|null
 */
function lit_enr_id_evt($id, $open = TRUE)
{
    global
    $db;

    if ($open == TRUE) {
        $db = open_database(DBUSER, DBPASS, DBNAME, DBHOST, 'utf8');
    }
    $rech2 = 'SELECT * FROM `' . TBPEVT . "` WHERE pevt_id = '$id'";
    $row2 = $db->get_row($rech2, ARRAY_A);
    if ($open == TRUE) {
        close_database();
    }

    return $row2;
}

/**
 * Retourne le nombre d'évènements se chevauchant
 * pour une personne donnée, une date donnée, une heure de début, et une heure de fin
 *
 * @param $coded
 * @param $date
 * @param $heured
 * @param $heuref
 * @param bool $open
 * @return int
 */
function nb_evt_commun($coded, $date, $heured, $heuref, $open = TRUE)
{
    global
    $db;
    $nbevt = 0;
    $heured_sec = heure_sec($heured);
    $heuref_sec = heure_sec($heuref);

    if ($open == TRUE) {
        $db = open_database(DBUSER, DBPASS, DBNAME, DBHOST, 'utf8');
    }
    // On récupère déjà les enregistrements du jour
    $rech2 = 'SELECT * FROM `' . TBPEVT . "` WHERE pevt_date = '$date'";
    // Si c'est un tableau, on est en mode agence, avec une liste de techniciens
    if (is_array($coded)) {
        if (count($coded) > 0) {
            $rech2 .= ' AND (';
            foreach ($coded as $value) {
                $rech2 .= " pevt_dest = '" . $value . "' OR";
            }
            // Suppression du dernier 'OR'
            $rech2 = substr($rech2, 0, -3);
            $rech2 .= ')';
        }
    } else {
        $rech2 .= " AND pevt_dest = '" . $db->escape($coded) . "'";
    }

    $rows2 = $db->get_results($rech2, ARRAY_A);
    if ($rows2) {
        foreach ($rows2 as $row2) {
            extract($row2);
            // On calcule l'heure de fin pour cet évènement
            $heurefin = heure_fin($pevt_heure, $pevt_dureem, '');
            // On transforme en secondes
            $evt_heured_sec = heure_sec($pevt_heure);
            $evt_heuref_sec = heure_sec($heurefin);

            if ((($heured_sec > $evt_heured_sec) AND ($heuref_sec < $evt_heuref_sec)) // A l'intérieur
                OR (($heured_sec < $evt_heured_sec) AND ($heuref_sec > $evt_heuref_sec)) // Par dessus
                OR (($heured_sec < $evt_heured_sec) AND ($heuref_sec > $evt_heured_sec) AND ($heuref_sec < $evt_heuref_sec)) // A cheval par le haut
                OR (($heured_sec > $evt_heured_sec) AND ($heured_sec < $evt_heuref_sec) AND ($heuref_sec > $evt_heuref_sec)) // A cheval par le bas
                OR ($heured_sec == $evt_heured_sec) OR ($heuref_sec == $evt_heuref_sec)
            ) // Pile dessus
            {
                ++$nbevt;
            }
        }
    }
    if ($open == TRUE) {
        close_database();
    }

    return $nbevt;
}

/**
 * Retourne un tableau avec les évènements, pour une ou des personnes données, sur une tranche de date donnée
 *
 * @param $typd
 * @param $coded
 * @param $lst_sel
 * @param $dated
 * @param $datef
 * @param bool $open
 * @return array
 */
function cre_tab_evt($typd, $coded, $lst_sel, $dated, $datef, $open = TRUE)
{
    global
    $db,
    $_SESSION;

    $tab_evt = [];
    $i = 0;

    if ($open == TRUE) {
        $db = open_database(DBUSER, DBPASS, DBNAME, DBHOST, 'utf8');
    }

    switch ($typd) {
        // Agence
        case 2 :
            // On doit utiliser le mode liste
            if (is_array($lst_sel)) {
                $rech2 = 'SELECT * FROM `' . TBPEVT . "` WHERE pevt_date>='$dated' AND pevt_date<='$datef'";
                if (count($lst_sel) > 0) {
                    $rech2 .= ' AND (';
                    foreach ($lst_sel as $value) {
                        $rech2 .= " pevt_dest = '" . $value . "' OR";
                    }
                    // Suppression du dernier 'OR'
                    $rech2 = substr($rech2, 0, -3);
                    $rech2 .= ')';
                }
                $rech2 .= ' ORDER BY pevt_date';
                $rows2 = $db->get_results($rech2, ARRAY_A);
                if ($rows2) {
                    foreach ($rows2 as $row2) {
                        $row2 = encode_str($row2);
                        extract($row2);
                        $tab_evt[$i]['id'] = $pevt_id;
                        $tab_evt[$i]['code'] = $pevt_dest;
                        $row3 = lit_enr_tec($pevt_dest, FALSE);
                        if ($row3) {
                            $row3 = encode_str($row3);
                            extract($row3);
                            $tab_evt[$i]['coul'] = $tec_couleur;
                        }
                        $tab_evt[$i]['date'] = $pevt_date;
                        $tab_evt[$i]['heure'] = $pevt_heure;
                        $tab_evt[$i]['heurefin'] = heure_fin($pevt_heure, $pevt_dureem);
                        $tab_evt[$i]['dureem'] = $pevt_dureem;
                        $tab_evt[$i]['help_titre'] = _('Clic pour modifier');
                        $tab_evt[$i]['help_pied'] = _('Cliquer/Tirer pour réduire ou agrandir');
                        $tab_evt[$i]['detail'] = $pevt_detail;
                        $tab_evt[$i]['index'] = -1;
                        $tab_evt[$i]['codecat'] = $pevt_codecat;
                        $tab_evt[$i]['nivurg'] = $pevt_nivurg;
                        $tab_evt[$i]['codelieu'] = $pevt_codelieu;
                        $tab_evt[$i]['coder'] = $pevt_coderat;
                        $tab_evt[$i]['titre'] = $pevt_titre;
                        $tab_evt[$i]['prive'] = (int)$pevt_prive;
                        if ((int)$pevt_prive == 1) {
                            $tab_evt[$i]['titre'] = _('Evénement privé');
                        }

                        $modifiable = (int)evt_modifiable($pevt_id, FALSE);
                        if ($modifiable == 0) {
                            $tab_evt[$i]['help_titre'] = _('Non modifiable');
                            $tab_evt[$i]['help_pied'] = _('Non modifiable');
                        }
                        $tab_evt[$i]['modifiable'] = $modifiable;

                        // On génère les compléments d'affichage
                        $txt_compl = '';
                        // On analyse la pièce jointe
                        switch ((int)$pevt_typrat) {
                            // Pièce rattachée = intervention
                            case 1 :
                                $rech3 = 'SELECT int_datefin, int_codeman, int_codeocli FROM `' . TBINT . "` WHERE int_code = '$pevt_coderat'";
                                $row3 = $db->get_row($rech3, ARRAY_A);
                                if ($row3) {
                                    extract($row3);
                                    if ($int_codeman <> '') {
                                        $txt_compl = _('S.I.') . ' : ' . $int_codeman;
                                    }
                                    if ($int_codeocli <> '') {
                                        if ($int_codeman <> '') {
                                            $txt_compl .= '<br />';
                                        }
                                        $txt_compl .= _('O.C.') . ' : ' . $int_codeocli;
                                    }
                                }
                                break;
                            default :
                                break;
                        }
                        $tab_evt[$i]['compl'] = $txt_compl;

                        $i++;
                    }
                }
            }
            break;
        // Client
        case 0 :
            // '$coded' est un tableau, on est en mode client, avec une liste de sites
            if (is_array($lst)) {
                // On récupère les interventions qui concernent le client, les sites sélectionnés, sur la fourchette de date demandée
                $tab_int = [];
                $rech2 = 'SELECT int_code FROM `' . TBINT . "` WHERE int_codecli='" . $db->escape($coded) . "' AND int_daterdv>='$dated' AND int_daterdv<='$datef'";
                if (count($lst) > 0) {
                    $rech2 .= ' AND (';
                    foreach ($lst as $value) {
                        $rech2 .= " int_idsite = '" . $value['id'] . "' OR";
                    }
                    // Suppression du dernier 'OR'
                    $rech2 = substr($rech2, 0, -3);
                    $rech2 .= ')';
                }
                $rows2 = $db->get_results($rech2, ARRAY_A);
                if ($rows2) {
                    foreach ($rows2 as $row2) {
                        $row2 = encode_str($row2);
                        extract($row2);
                        $tab_int[] = $int_code;
                    }
                }

                // On récupère les évènements concernés
                if (count($tab_int) > 0) {
                    foreach ($tab_int as $value) {
                        $rech2 = 'SELECT * FROM `' . TBPEVT . "` WHERE pevt_coderat='$value'";
                        $rech2 .= ' ORDER BY pevt_date';
                        $rows2 = $db->get_results($rech2, ARRAY_A);
                        if ($rows2) {
                            foreach ($rows2 as $row2) {
                                $row2 = encode_str($row2);
                                extract($row2);
                                $tab_evt[$i]['id'] = $pevt_id;
                                $tab_evt[$i]['code'] = $pevt_dest;
                                foreach ($coded as $value2) {
                                    if ($value2['code'] == $pevt_dest) {
                                        $tab_evt[$i]['coul'] = $value2['coul'];
                                        break;
                                    }
                                }
                                $tab_evt[$i]['date'] = $pevt_date;
                                $tab_evt[$i]['heure'] = $pevt_heure;
                                $tab_evt[$i]['heurefin'] = heure_fin($pevt_heure, $pevt_dureem);
                                $tab_evt[$i]['dureem'] = $pevt_dureem;
                                $tab_evt[$i]['titre'] = $pevt_titre;
                                $tab_evt[$i]['detail'] = $pevt_detail;
                                $tab_evt[$i]['index'] = -1;
                                $tab_evt[$i]['codecat'] = $pevt_codecat;
                                $tab_evt[$i]['nivurg'] = $pevt_nivurg;
                                $tab_evt[$i]['codelieu'] = $pevt_codelieu;
                                $tab_evt[$i]['coder'] = $pevt_coderat;
                                $tab_evt[$i]['help_titre'] = _('Clic pour modifier');
                                $tab_evt[$i]['titre'] = $pevt_titre;
                                $tab_evt[$i]['prive'] = $pevt_prive;
                                if ((int)$pevt_prive == 1) {
                                    $tab_evt[$i]['titre'] = _('Evénement privé');
                                }

                                $modifiable = (int)evt_modifiable($pevt_id, FALSE);
                                if ($modifiable == 0) {
                                    $tab_evt[$i]['help_titre'] = _('Non modifiable');
                                    $tab_evt[$i]['help_pied'] = _('Non modifiable');
                                }
                                $tab_evt[$i]['modifiable'] = $modifiable;

                                // On génère les compléments d'affichage
                                $txt_compl = '';
                                switch ($pevt_typrat) {
                                    // Pièce rattachée = intervention
                                    case 1 :
                                        $rech3 = 'SELECT int_codeman, int_codeocli FROM `' . TBINT . "` WHERE int_code = '$pevt_coderat'";
                                        $row3 = $db->get_row($rech3, ARRAY_A);
                                        if ($row3) {
                                            $row3 = encode_str($row3);
                                            extract($row3);
                                            if ($int_codeman <> '') {
                                                $txt_compl = _('S.I.') . ' : ' . $int_codeman;
                                            }
                                            if ($int_codeocli <> '') {
                                                if ($int_codeman <> '') {
                                                    $txt_compl .= '<br />';
                                                }
                                                $txt_compl .= _('O.C.') . ' : ' . $int_codeocli;
                                            }

                                        }
                                        break;
                                    default :
                                        break;
                                }
                                $tab_evt[$i]['compl'] = $txt_compl;

                                $i++;
                            }
                        }
                    }
                }
            }
            break;
        // Technicien (agence ou sous-traitant)
        case 1 :
        case 3 :
            // '$code' n'est pas un tableau, on est donc en mode individuel
            $rech2 = 'SELECT * FROM `' . TBPEVT . "` WHERE pevt_dest = '" . $db->escape($coded) . "' AND pevt_date>='$dated' AND pevt_date<='$datef'";
            $rech2 .= ' ORDER BY pevt_date';
            $rows2 = $db->get_results($rech2, ARRAY_A);
            if ($rows2) {
                foreach ($rows2 as $row2) {
                    $row2 = encode_str($row2);
                    extract($row2);
                    $tab_evt[$i]['id'] = $pevt_id;
                    $tab_evt[$i]['date'] = $pevt_date;
                    $tab_evt[$i]['heure'] = $pevt_heure;
                    $tab_evt[$i]['heurefin'] = heure_fin($pevt_heure, $pevt_dureem);
                    $tab_evt[$i]['dureem'] = $pevt_dureem;
                    $tab_evt[$i]['titre'] = $pevt_titre;
                    $tab_evt[$i]['detail'] = $pevt_detail;
                    $tab_evt[$i]['index'] = -1;
                    $tab_evt[$i]['codecat'] = $pevt_codecat;
                    $tab_evt[$i]['nivurg'] = $pevt_nivurg;
                    $tab_evt[$i]['codelieu'] = $pevt_codelieu;
                    $tab_evt[$i]['coder'] = $pevt_coderat;
                    $tab_evt[$i]['help_titre'] = _('Clic pour modifier');

                    $tab_evt[$i]['titre'] = $pevt_titre;
                    $tab_evt[$i]['prive'] = $pevt_prive;
                    if ((int)$pevt_prive == 1) {
                        $tab_evt[$i]['titre'] = _('Evénement privé');
                    }

                    $modifiable = (int)evt_modifiable($pevt_id, FALSE);
                    if ($modifiable == 0) {
                        $tab_evt[$i]['help_titre'] = _('Non modifiable');
                        $tab_evt[$i]['help_pied'] = _('Non modifiable');
                    }
                    $tab_evt[$i]['modifiable'] = $modifiable;

                    // On génère les compléments d'affichage
                    $txt_compl = '';
                    // On analyse la pièce jointe
                    switch ($pevt_typrat) {
                        // Pièce rattachée = intervention
                        case 1 :
                            $rech3 = 'SELECT int_datefin, int_codeman, int_codeocli FROM `' . TBINT . "` WHERE int_code = '$pevt_coderat'";
                            $row3 = $db->get_row($rech3, ARRAY_A);
                            if ($row3) {
                                $row3 = encode_str($row3);
                                extract($row3);
                                if ($int_codeman <> '') {
                                    $txt_compl = _('S.I.') . ' : ' . $int_codeman;
                                }
                                if ($int_codeocli <> '') {
                                    if ($int_codeman <> '') {
                                        $txt_compl .= '<br />';
                                    }
                                    $txt_compl .= _('O.C.') . ' : ' . $int_codeocli;
                                }
                            }
                            break;
                        default :
                            break;
                    }
                    $tab_evt[$i]['compl'] = $txt_compl;

                    $i++;
                }
            }
            break;
    }

    if ($open == TRUE) {
        close_database();
    }

    return $tab_evt;
}


/**
 * Détermine si un ID de RDV
 *
 * @param $idrdv
 * @param bool $open
 * @return bool
 */
function est_planifie_rdv($idrdv, $open = TRUE)
{
    global
    $db;
    $planifie = FALSE;

    if ($open == TRUE) {
        $db = open_database(DBUSER, DBPASS, DBNAME, DBHOST, 'utf8');
    }
    $rech2 = 'SELECT COUNT(*) FROM `' . TBPEVT . '` WHERE pevt_idrdv = ' . $idrdv;
    $nbres = $db->get_var($rech2);
    if ($nbres > 0) {
        $planifie = TRUE;
    }
    if ($open == TRUE) {
        close_database();
    }

    return $planifie;
}


/**
 * Retourne le détail des intervenants sur planification de RDV
 * $full = avec prénom et nom (sinon, que code)
 * $tab = on crée un tableau au lieu d'une string
 *
 * @param $idrdv
 * @param bool $full
 * @param bool $open
 * @return array|string
 */
function detail_planifie_rdv($idrdv, $full = TRUE, $open = TRUE)
{
    global
    $db;
    $detail = '';
    $tab = [];

    if ($open == TRUE) {
        $db = open_database(DBUSER, DBPASS, DBNAME, DBHOST, 'utf8');
    }
    $rech2 = 'SELECT pevt_typdest, pevt_dest FROM `' . TBPEVT . '` WHERE pevt_idrdv = ' . $idrdv;
    $rows2 = $db->get_results($rech2, ARRAY_A);
    if ($rows2) {
        foreach ($rows2 as $row2) {
            extract($row2);
            switch ($pevt_typdest) {
                // Technicien
                case 1 :
                    $rech3 = 'SELECT tec_prenom, tec_nom, tec_codeage FROM `' . TBTEC . "` WHERE `tec_code` = '$pevt_dest'";
                    $rech3 .= 'ORDER BY tec_nom';
                    $row3 = $db->get_row($rech3, ARRAY_A);
                    if ($row3) {
                        extract($row3);

                        $txt_detail = $pevt_dest;
                        // En mode mod "full", détail complet, sinon, que code
                        if ($full == TRUE) {
                            $txt_detail = $tec_nom . ' ' . $tec_prenom . ' (' . $tec_codeage . ')';
                        }

                        // En mode "tab", on crée un tableau, sinon, une string
                        if ($tab == TRUE) {
                            $tab[$pevt_dest] = $txt_detail;
                        } else {
                            if (trim($detail) <> '') {
                                $detail .= '<br />';
                            }
                            $detail .= $txt_detail;
                        }
                    }
                    break;
                default :
                    break;
            }
        }
    }
    if ($open == TRUE) {
        close_database();
    }

    if ($tab == TRUE) {
        return $tab;
    } else {
        return $detail;
    }
}

// RDV

/**
 * Lecture d'un enregistrement RDV à partir ID RDV
 *
 * @param $id
 * @param bool $open
 * @return array|null
 */
function lit_enr_id_rdv($id, $open = TRUE)
{
    global
    $db;

    if ($open == TRUE) {
        $db = open_database(DBUSER, DBPASS, DBNAME, DBHOST, 'utf8');
    }
    $rech2 = 'SELECT * FROM `' . TBRDV . "` WHERE rdv_id = '$id'";
    $row2 = $db->get_row($rech2, ARRAY_A);
    if ($open == TRUE) {
        close_database();
    }

    return $row2;
}

/**
 * Lecture d'un enregistrement événement à partir ID RDV
 *
 * @param $id
 * @param bool $open
 * @return array|null
 */
function lit_enr_id_rdv_evt($id, $open = TRUE)
{
    global
    $db;

    if ($open == TRUE) {
        $db = open_database(DBUSER, DBPASS, DBNAME, DBHOST, 'utf8');
    }
    $rech2 = 'SELECT * FROM `' . TBPEVT . "` WHERE pevt_idrdv = '$id'";
    $row2 = $db->get_row($rech2, ARRAY_A);
    if ($open == TRUE) {
        close_database();
    }

    return $row2;
}

// PLANNING

/**
 * @param $tab_iddates
 * @param $firsth
 * @param $lasth
 * @param $steph
 * @return array
 */
function cre_tab_conteneur($tab_iddates, $firsth, $lasth, $steph)
{
    global
    $_SESSION;

    $tab_idcont = [];


    for ($i = ($firsth * 3600); $i <= ($lasth * 3600); $i += ($steph * 60)) {
        foreach ($tab_iddates as $value) {
            $id = 'j' . $value . 'h' . substr(sec_heure($i), 0, 2) . substr(sec_heure($i), 3, 2);
            $tab_idcont[$id]['id'] = $id;
            $tab_idcont[$id]['codetec'] = '';
            $tab_idcont[$id]['classe'] = 'heures_out';
        }
    }

    // On vérifie pour chaque technicien sélectionné, la plage horaire
    if (count($_SESSION['tab_tec_sel']) > 0) {
        foreach ($_SESSION['tab_tec_sel'] as $value) {
            $row = lit_enr_tec($value);
            if (is_array($row)) {
                $row = encode_str($row);
                extract($row);
                // Récupération derniers paramètres horaires
                // Si technicien agence
                if ($tec_codeage <> '') {
                    $id_tecpr = last_id_tecpr($tec_code);
                    $row2 = lit_enr_tecpr($id_tecpr);
                    if (is_array($row2)) {
                        $row2 = encode_str($row2);
                        extract($row2);
                    }
                }
            }

            for ($i = ($firsth * 3600); $i <= ($lasth * 3600); $i += ($steph * 60)) {
                foreach ($tab_iddates as $value2) {
                    $id = 'j' . $value2 . 'h' . substr(sec_heure($i), 0, 2) . substr(sec_heure($i), 3, 2);

                    $date = substr($value2, 4, 4) . '-' . substr($value2, 2, 2) . '-' . substr($value2, 0, 2);
                    $dayweek = date('w', strtotime(date('Y-m-d', strtotime($date)))) + 1;

                    // On récupère les horaires (en secondes) du jour
                    $hm1_sec = 0;
                    $hm2_sec = 0;
                    $ha1_sec = 0;
                    $ha2_sec = 0;

                    $variable = "\$tecpr_j" . $dayweek . 'm1';
                    eval ("\$hm1_sec = heure_sec($variable);");
                    $variable = "\$tecpr_j" . $dayweek . 'm2';
                    eval ("\$hm2_sec = heure_sec($variable);");
                    $variable = "\$tecpr_j" . $dayweek . 'a1';
                    eval ("\$ha1_sec = heure_sec($variable);");
                    $variable = "\$tecpr_j" . $dayweek . 'a2';
                    eval ("\$ha2_sec = heure_sec($variable);");

                    // On choisi la classe CSS à appliquer
                    if ((($i >= $hm1_sec) AND ($i <= $hm2_sec) AND ($hm1_sec <> $hm2_sec)) OR
                        (($i >= $ha1_sec) AND ($i <= $ha2_sec) AND ($ha1_sec <> $ha2_sec))
                    ) {
                        $tab_idcont[$id]['classe'] = 'heures_in';
                    }
                }
            }
        }
    }

    return $tab_idcont;
}

/**
 * Vérifie si un événement est modifiable par l'utilisateur courant
 *
 * @param $idevt
 * @param bool $open
 *
 * @return bool
 */
function evt_modifiable($idevt, $open = TRUE)
{
    global
    $db,
    $_SESSION;

    $modifiable = true;

    if ($idevt <> 0) {
        // On se connecte a la base
        if ($open == TRUE) {
            $db = open_database(DBUSER, DBPASS, DBNAME, DBHOST, 'utf8');
        }

        // On vérifie si l'utilisateur courant est autorisé à modifier l'évènement
        $modifiable = TRUE;
        $rech = 'SELECT pevt_typdest, pevt_dest, pevt_typrat,pevt_coderat,pevt_gest FROM `' . TBPEVT . "` WHERE pevt_id = '" . (int)$idevt . "'";
        $row = $db->get_row($rech, ARRAY_A);
        if ($row) {
            extract($row);
            switch ($_SESSION['niv_log']) {
                // Un client ne peut rien modifier
                case 1 :
                    $modifiable = FALSE;
                    break;
                // Un technicien ne peut modifier que les évènements qu'il a saisi
                case 3 :
                case 7 :
                case 11 :
                    if ($pevt_gest <> $_SESSION['code_log']) {
                        // Analyse en fonction type de rattachement
                        switch ((int)$pevt_typrat) {
                            // Divers
                            case -1 :
                            case 0 :
                                $modifiable = FALSE;
                                break;
                            // Intervention
                            case 1 :
                                $row = lit_enr_int($pevt_coderat, FALSE);
                                if ($row) {
                                    extract($row);
                                    // Si technicien connecté différent de technicien responsable de l'intervention,
                                    // modification impossible
                                    if ($_SESSION['code_log'] <> $int_codetec) {
                                        $modifiable = FALSE;
                                    }
                                    if ($int_datefin <> '0000-00-00') {
                                        $modifiable = FALSE;
                                    }
                                }
                                break;
                            // Bon de travail
                            case 2 :
                                break;
                        }
                    }
                    break;
                // Une agence ne peut modifier que les évènements qu'elle a saisi ou ceux saisis par ses techniciens
                // Idem donneur d'ordre ou sous-traitant
                case 4 :
                    // Si ce n'est pas elle qui a saisi, il faut effectuer d'autres tests
                    if ($pevt_gest <> $_SESSION['code_log']) {
                        // Analyse en fonction type de rattachement
                        switch ((int)$pevt_typrat) {
                            // Divers
                            case -1 :
                            case 0 :
                                // On vérifie d'abord si c'est bien un technicien agence qui a saisi l'évènement
                                $rech2 = 'SELECT pw_id FROM `' . TBPW . "` WHERE pw_code = '" . $pevt_gest . "' AND pw_level = 3";
                                $row2 = $db->get_row($rech2, ARRAY_A);
                                if ($row2) {
                                    extract($row2);
                                    $rech3 = 'SELECT COUNT(*) FROM `' . TBTEC . "` WHERE tec_code = '" . $pevt_gest . "' AND tec_codeage = '" . $_SESSION['code_log'] . "'";
                                    $nbres3 = $db->get_var($rech3);
                                    if ($nbres3 == 0) // Pas de technicien avec ce code gestionnaire dans l'agence : on ne peut pas modifier
                                    {
                                        $modifiable = FALSE;
                                    }
                                } else // Ce n'est pas le cas, on ne peut donc pas modifier
                                {
                                    $modifiable = FALSE;
                                }
                                break;
                            // Intervention
                            case 1 :
                                $row = lit_enr_int($pevt_coderat, FALSE);
                                if ($row) {
                                    extract($row);
                                    // Si agence connectée différente des agences responsables de l'intervention,
                                    // modification impossible
                                    if (($_SESSION['code_log'] <> $int_codeage) AND ($_SESSION['code_log'] <> $int_codeages)) {
                                        $modifiable = FALSE;
                                    }
                                    if ($int_datefin <> '0000-00-00') {
                                        $modifiable = FALSE;
                                    }
                                }
                                break;
                            // Bon de travail
                            case 2 :
                                break;
                        }

                    }
                    break;
                default :
                    // Analyse en fonction type de rattachement
                    switch ((int)$pevt_typrat) {
                        // Intervention
                        case 1 :
                            $row = lit_enr_int($pevt_coderat, FALSE);
                            if ($row) {
                                extract($row);
                                if ($int_datefin <> '0000-00-00') {
                                    $modifiable = FALSE;
                                }
                            }
                            break;
                    }
                    break;
            }
        } else {
            $modifiable = FALSE;
        }

        if ($open == TRUE) {
            close_database();
        }
    }

    return $modifiable;
}

/**
 * @param $typr
 * @return mixed
 */
function give_tab_tdest_plan($typr)
{
    switch ($typr) {
        // Evénement divers
        case -1 :
            switch (valsession('niv_log')) {
                case 3 :
                    $tab_tdest[1] = _('Techniciens agences');
                    break;
                case 4 :
                    $tab_tdest[1] = _('Techniciens agences');
                    $tab_tdest[2] = _('Agences');
                    break;
                case 5 :
                    $tab_tdest[1] = _('Techniciens agences');
                    $tab_tdest[2] = _('Agences');
                    $tab_tdest[5] = _('Centre de gestion');
                    break;
                default :
                    $tab_tdest[1] = _('Techniciens agences');
                    $tab_tdest[2] = _('Agences');
                    $tab_tdest[5] = _('Centre de gestion');
                    $tab_tdest[9] = _('Administrateur');
                    break;
            }
            break;
        // Interventions
        case 1 :
            switch (valsession('niv_log')) {
                case 3 :
                    $tab_tdest[1] = _('Techniciens agences');
                    break;
                case 4 :
                default :
                    $tab_tdest[1] = _('Techniciens agences');
                    $tab_tdest[2] = _('Agences');
                    break;
            }
            break;
    }

    return $tab_tdest;
}

/**
 * @param $typdest
 * @param bool $open
 * @return array
 */
function give_tab_dest_plan($typdest, $open = TRUE)
{
    global
    $_SESSION;

    $tab_dest = [];
    $rech = '';

    switch ($typdest) {
        case 1 :
            $rech = 'SELECT * FROM `' . TBTEC . '`';
            switch (valsession('niv_log')) {
                case 3 :
                    // On récupère le code agence du technicien
                    $row = lit_enr_tec(valsession('code_log'));
                    if ($row) {
                        extract($row);
                        $rech .= " WHERE tec_codeage = '" . $tec_codeage . "'";
                    }
                    break;
                case 4 :
                    $rech .= " WHERE tec_codeage = '" . valsession('code_log') . "'";
                    break;
                default :
                    $rech .= " WHERE tec_codeage <> ''";
                    break;
            }
            $rech .= ' AND tec_out=0 ORDER BY tec_nom';
            break;
        case 2 :
            $rech = 'SELECT * FROM `' . TBAGE . '` WHERE age_ouvert=1';
            switch (valsession('niv_log')) {
                case 4 :
                    $rech .= " AND age_code = '" . valsession('code_log') . "'";
                    break;
                default :
                    break;
            }
            $rech .= ' ORDER BY age_nom';
            break;
    }

    if ($rech <> '') {
        // Création de la liste des techniciens présents
        if ($open == TRUE) {
            $db = open_database(DBUSER, DBPASS, DBNAME, DBHOST, 'utf8');
        }

        $rows = $db->get_results($rech, ARRAY_A);
        if ($rows) {
            foreach ($rows as $row) {
                $row = encode_str($row);
                extract($row);
                switch ($typdest) {
                    case 1 :
                        $str = $tec_nom . ' ' . $tec_prenom . ' (' . $tec_code;
                        $str .= ' - AGENCE : ' . $tec_codeage;
                        $str .= ')';
                        $tab_dest[$tec_code] = $str;
                        break;
                    case 2 :
                        $tab_dest[$age_code] = $age_nom . ' (' . $age_code . ')';
                        break;
                }
            }
        }
        if ($open == TRUE) {
            close_database();
        }

    }

    return $tab_dest;
}

/**
 * @param $typrat
 * @param bool $open
 * @return array
 */
function give_tab_rat_plan($typrat, $open = TRUE)
{
    $tab_rat = [];
    $rech = '';

    switch ($typrat) {
        // Aucun rattachement
        case -1 :
            break;
        // Interventions
        case 1 :
            switch (valsession('niv_log')) {
                case 3 :
                case 4 :
                    $rech = 'SELECT * FROM `' . TBINT . '`';
                    $rech .= " WHERE int_codeage='" . valsession('code_age') . "' OR int_codeages='" . valsession('code_age') . "'";
                    $rech .= " AND int_datefin='0000-00-00'";
                    $rech .= ' ORDER BY int_code DESC';
                    break;
                case 10 :
                case 11 :
                    break;
                default :
                    $rech = 'SELECT * FROM `' . TBINT . '`';
                    $rech .= " WHERE int_datefin='0000-00-00'";
                    $rech .= ' ORDER BY int_code DESC';
                    break;
            }
            break;
        // Bon de travail
        case 2 :
            break;
    }

    if ($rech <> '') {
        if ($open == TRUE) {
            $db = open_database(DBUSER, DBPASS, DBNAME, DBHOST, 'utf8');
        }
        $rows = $db->get_results($rech, ARRAY_A);
        if ($rows) {
            foreach ($rows as $row) {
                $row = encode_str($row);
                extract($row);
                switch ((int)$typrat) {
                    // Interventions
                    case 1 :
                        $rech2 = 'SELECT cli_ste,cli_nom,cli_prenom FROM `' . TBCLI . '`';
                        $rech2 .= " WHERE cli_code='" . $int_codecli . "'";
                        $row2 = $db->get_row($rech2, ARRAY_A);
                        if ($row2) {
                            $row2 = encode_str($row2);
                            extract($row2);
                        }
                        if (trim($cli_ste) <> '') {
                            $txtcli = $cli_ste;
                        } else {
                            $txtcli = $cli_nom . ' ' . $cli_prenom;
                        }
                        $str = $int_code . ' ' . _('du') . ' ' . datetolocal($int_datedde) . ' (' . $txtcli . ')';
                        $tab_rat[$int_code] = $str;
                        break;
                    // Bons de travail
                    case 2 :
                        break;
                }
            }
        }
        if ($open == TRUE) {
            close_database();
        }
    }

    return $tab_rat;
}
