<?php
/****************************************************************************************
 * SMI (Services Maintenance Interventions) est une gestion libre de maintenance et de SAV
 *
 * Version 1.0.0
 *
 * Copyright (C) 2006-2014  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)
    $ok_inc = TRUE;
else
    $ok_inc = FALSE;
if ($ok_inc == FALSE) header("Location: ../index.php");

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

/** 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);
    $rexist = "SELECT COUNT(*) FROM `" . TBPCAT . "`";
    $nbexist = $db->get_var($rexist);
    if ($open == TRUE)
        $db->disconnect();

    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);
    $rech2 = "SELECT * FROM `" . TBPCAT . "` WHERE pcat_code = '" . $db->escape($code) . "'";
    $row2 = $db->get_row($rech2, ARRAY_A);
    if ($open == TRUE)
        $db->disconnect();

    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);
    $rech2 = "SELECT * FROM `" . TBPEVT . "` WHERE pevt_id = '$id'";
    $row2 = $db->get_row($rech2, ARRAY_A);
    if ($open == TRUE)
        $db->disconnect();

    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);
    // 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, strlen($rech2) - 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 = $nbevt + 1;
        }
    }
    if ($open == TRUE)
        $db->disconnect();

    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 : code du technicien sélectionné
 * @param $lst_sel : tableau des techniciens ou sites sélectionnés
 * @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);
    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, strlen($rech2) - 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"] = intval($pevt_prive);
                        if (intval($pevt_prive) == 1)
                            $tab_evt[$i]["titre"] = _("Evénement privé");

                        $modifiable = intval(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 (intval($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, strlen($rech2) - 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 ($code as $value) {
                                    if ($value['code'] == $pevt_dest) {
                                        $tab_evt[$i]["coul"] = $value['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 (intval($pevt_prive) == 1)
                                    $tab_evt[$i]["titre"] = _("Evénement privé");

                                $modifiable = intval(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]["detail"] = "Has autem provincias, quas Orontes ambiens amnis imosque pedes Cassii montis illius celsi praetermeans funditur in Parthenium mare, Gnaeus Pompeius superato Tigrane regnis Armeniorum abstractas dicioni Romanae coniunxit.";
                    $tab_evt[$i]["detail"].= "Novo denique perniciosoque exemplo idem Gallus ausus est inire flagitium grave, quod Romae cum ultimo dedecore temptasse aliquando dicitur Gallienus, et adhibitis paucis clam ferro succinctis vesperi per tabernas palabatur et conpita quaeritando Graeco sermone, cuius erat inpendio gnarus, quid de Caesare quisque sentiret. et haec confidenter agebat in urbe ubi pernoctantium luminum claritudo dierum solet imitari fulgorem. postremo agnitus saepe iamque, si prodisset, conspicuum se fore contemplans, non nisi luce palam egrediens ad agenda quae putabat seria cernebatur. et haec quidem medullitus multis gementibus agebantur.";
                    $tab_evt[$i]["detail"].= "Ciliciam vero, quae Cydno amni exultat, Tarsus nobilitat, urbs perspicabilis hanc condidisse Perseus memoratur, Iovis filius et Danaes, vel certe ex Aethiopia profectus Sandan quidam nomine vir opulentus et nobilis et Anazarbus auctoris vocabulum referens, et Mopsuestia vatis illius domicilium Mopsi, quem a conmilitio Argonautarum cum aureo vellere direpto redirent, errore abstractum delatumque ad Africae litus mors repentina consumpsit, et ex eo cespite punico tecti manes eius heroici dolorum varietati medentur plerumque sospitales.";
                    */

                    $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 (intval($pevt_prive) == 1)
                        $tab_evt[$i]["titre"] = _("Evénement privé");

                    $modifiable = intval(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;
                    /*$tab_evt[$i]["compl"] = 'Texte complémentaire';*/

                    $i++;
                }
            }
            break;
    }

    if ($open == TRUE)
        $db->disconnect();

    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);
    $rech2 = "SELECT COUNT(*) FROM `" . TBPEVT . "` WHERE pevt_idrdv = " . $idrdv;
    $nbres = $db->get_var($rech2);
    if ($nbres > 0)
        $planifie = TRUE;
    if ($open == TRUE)
        $db->disconnect();

    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);
    $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)
        $db->disconnect();

    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);
    $rech2 = "SELECT * FROM `" . TBRDV . "` WHERE rdv_id = '$id'";
    $row2 = $db->get_row($rech2, ARRAY_A);
    if ($open == TRUE)
        $db->disconnect();

    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);
    $rech2 = "SELECT * FROM `" . TBPEVT . "` WHERE pevt_idrdv = '$id'";
    $row2 = $db->get_row($rech2, ARRAY_A);
    if ($open == TRUE)
        $db->disconnect();

    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 = $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 = $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);

        // 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 = '" . intval($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 (intval($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 (intval($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 (intval($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)
            $db->disconnect();
    }

    return $modifiable;
}

/**
 * @param $typr
 * @return mixed
 */
function give_tab_tdest_plan($typr)
{
    global
        $_SESSION;

    /*
    $pla_tdest = array(
        -1 => _("Moi-même"),
        1 => _("Techniciens agences"),
        2 => _("Agences"),
        3 => _("Techniciens sous-traitants"),
        4 => _("Sous-traitants"),
        5 => _("Centre de gestion"),
        6 => _("Administrateur"));

    $tab_tdest = array();

    foreach ($pla_tdest as $key => $value)
    {
    */
        switch ($typr) {
            // Evénement divers
            case -1 :
                switch (@$_SESSION["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 (@$_SESSION["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 (@$_SESSION["niv_log"]) {
                case 3 :
                    // On récupère le code agence du technicien
                    $row = lit_enr_tec(@$_SESSION["code_log"]);
                    if ($row)
                    {
                        extract($row);
                        $rech .= " WHERE tec_codeage = '" . $tec_codeage . "'";
                    }
                    break;
                case 4 :
                    $rech .= " WHERE tec_codeage = '" . @$_SESSION["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 (@$_SESSION["niv_log"]) {
                case 4 :
                    $rech .= " AND age_code = '" . @$_SESSION["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);

        $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)
            $db->disconnect();

    }

    return $tab_dest;
}

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

    $tab_rat = [];
    $rech = '';

    switch ($typrat)
    {
        // Aucun rattachement
        case -1 :
            break;
        // Interventions
        case 1 :
            switch (@$_SESSION["niv_log"]) {
                case 3 :
                case 4 :
                    $rech = "SELECT * FROM `" . TBINT . "`";
                    $rech .= " WHERE int_codeage='" . @$_SESSION["code_age"] . "' OR int_codeages='" . @$_SESSION["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);
        $rows = $db->get_results($rech, ARRAY_A);
        if ($rows) {
            foreach ($rows as $row) {
                $row = encode_str($row);
                extract($row);
                switch (intval($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)
            $db->disconnect();
    }

    return $tab_rat;
}
?>
