<?php
/****************************************************************************************
 * SMI (Services Maintenance Interventions) est une gestion libre de maintenance et de SAV
 *
 * Version 1.0.2
 *
 * Copyright (C) 2006-2015  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 contrats clients */
/* et fichiers rattachés                                  */
/**********************************************************/

// Contrats

/**
 * Vérification du nombre de contrats gérés par une agence
 *
 * @param $agence
 * @param bool $open
 * @return null
 */
function nb_cocl($agence, $open = TRUE)
{
    global
    $db;

    if ($open == TRUE)
        $db = open_database(DBUSER, DBPASS, DBNAME, DBHOST);
    if ($agence <> "")
        $rexist = "SELECT COUNT(*) FROM `" . TBCOCL . "` WHERE `cocl_codeage` = '" . $db->escape($agence) . "'";
    else
        $rexist = "SELECT COUNT(*) FROM `" . TBCOCL . "`";
    $nbexist = $db->get_var($rexist);
    if ($open == TRUE)
        $db->disconnect();

    return $nbexist;
}

/**
 * Vérification du nombre de contrats pour un client
 *
 * @param $code
 * @param bool $open
 * @return null
 */
function nb_cocl_in_cli($code, $open = TRUE)
{
    global
    $db;

    if ($open == TRUE)
        $db = open_database(DBUSER, DBPASS, DBNAME, DBHOST);
    $rexist = "SELECT COUNT(*) FROM `" . TBCOCL . "` WHERE `cocl_codecli` = '" . $db->escape($code) . "'";
    $nbexist = $db->get_var($rexist);
    if ($open == TRUE)
        $db->disconnect();

    return $nbexist;
}

/**
 * Vérification du nombre de contrats pour un client
 *
 * @param $code
 * @param bool $open
 * @return null
 */
function nb_cocl_actifs_in_cli($code, $open = TRUE)
{
    global
    $db,
    $datea;

    if ($open == TRUE)
        $db = open_database(DBUSER, DBPASS, DBNAME, DBHOST);

    $rexist = "SELECT COUNT(*) FROM `" . TBCOCL . "` WHERE `cocl_codecli` = '" . $db->escape($code) . "'";
    $rexist .= " AND cocl_datesig<>'0000-00-00' AND cocl_dated<='" . $datea . "' AND (cocl_datef>='" . $datea . "' OR cocl_datef='0000-00-00') AND cocl_datefin='0000-00-00'";
    $nbexist = $db->get_var($rexist);
    if ($open == TRUE)
        $db->disconnect();

    return $nbexist;
}

/**
 * Vérification du nombre de contrats clients dans l'historique contrats
 *
 * @param $code
 * @param bool $open
 * @return null
 */
function nb_cocl_in_coclh($code, $open = TRUE)
{
    global
    $db;

    if ($open == TRUE)
        $db = open_database(DBUSER, DBPASS, DBNAME, DBHOST);
    $rexist = "SELECT COUNT(*) FROM `" . TBCOCLH . "` WHERE `coclh_codecocl` = '" . $db->escape($code) . "'";
    $nbexist = $db->get_var($rexist);
    if ($open == TRUE)
        $db->disconnect();

    return $nbexist;
}

/**
 * Vérification qu'un contrat client est signé
 *
 * @param $code
 * @param bool $open
 * @return bool
 */
function cocl_signed($code, $open = TRUE)
{
    global
    $db;
    $signe = FALSE;

    if ($open == TRUE)
        $db = open_database(DBUSER, DBPASS, DBNAME, DBHOST);

    $rexist = "SELECT cocl_signe FROM `" . TBCOCL . "` WHERE `cocl_code` = '" . $db->escape($code) . "'";
    $row2 = $db->get_row($rexist, ARRAY_A);
    if ($row2) {
        extract($row2);

        if ($cocl_signe <> "")
            $signe = TRUE;
    }
    if ($open == TRUE)
        $db->disconnect();

    return $signe;
}

/**
 * Vérification qu'un contrat est de type "quota d'heure"
 *
 * @param $code
 * @param bool $open
 * @return bool
 */
function cocl_quota($code, $open = TRUE)
{
    global
    $db;
    $quota = FALSE;

    if ($open == TRUE)
        $db = open_database(DBUSER, DBPASS, DBNAME, DBHOST);

    $rexist = "SELECT cocl_typh FROM `" . TBCOCL . "` WHERE `cocl_code` = '" . $db->escape($code) . "'";
    $row2 = $db->get_row($rexist, ARRAY_A);
    if ($row2) {
        extract($row2);

        if ($cocl_typh == 1)
            $quota = TRUE;
    }
    if ($open == TRUE)
        $db->disconnect();

    return $quota;
}

/**
 * Crée une chaîne qui contient la liste des sites rattachés aux annexes d'un contrat ($co)
 *  Si $except = TRUE : on prend tout SAUF l'id
 * Si $except = FALSE : on ne prend que l'id (si non nul)
 *
 * @param $co
 * @param $id
 * @param bool $except
 * @param bool $open
 * @return string
 */
function cree_str_lstsites_cocla($co,$id, $except = FALSE, $open = TRUE)
{
    global
    $db;
    // Construction de la chaîne des sites sélectionnés
    $lstsites = "";

    if ($open == TRUE)
        $db = open_database(DBUSER, DBPASS, DBNAME, DBHOST);

    $rech = "SELECT sclia_idscli FROM `" . TBSCLIA . "` WHERE sclia_codecocl = '" . $db->escape($co) . "'";

    // Si id<>0 : il faut uniquement travailler sur cet ID
    // Sinon ; on prend tout par rapport au contrat
    if ($id <> 0)
    {
        if ($except == TRUE) // Tout sauf cet ID
            $rech .= " AND sclia_idcocla <> '" . $id . "'";
        else // Uniquement cet ID
            $rech .= " AND sclia_idcocla = '" . $id . "'";
    }
    $rows = $db->get_results($rech, ARRAY_A);

    if ($rows) {
        foreach ($rows as $row) {
            $row = encode_str($row);
            extract($row);
            $lstsites .= $sclia_idscli . "-";
        }
    }
    if ($open == TRUE)
        $db->disconnect();

    if ($lstsites != "")
        $lstsites = substr($lstsites, 0, strlen($lstsites) - 1);

    return $lstsites;
}

/**
 * Crée une chaîne qui contient la liste des sites rattachés à un contrat
 * Inclus les annexes (si valeur $annexes à TRUE)
 *
 * @param $co
 * @param bool $annexes
 * @param int $idannexe
 * @param bool $open
 * @return string
 */
function cree_str_lstsites_cocl($co, $annexes = TRUE, $idannexe = 0, $open = TRUE)
{
    global
    $db;
    // Construction de la chaîne des sites sélectionnés
    $lstsites = "";

    if ($open == TRUE)
        $db = open_database(DBUSER, DBPASS, DBNAME, DBHOST);

    // Le contrat principal
    // Les sites secondaires
    $rech = "SELECT sclic_idscli FROM `" . TBSCLIC . "` WHERE sclic_codecocl = '" . $db->escape($co) . "'";
    $rows = $db->get_results($rech, ARRAY_A);
    if ($rows) {
        foreach ($rows as $row) {
            $row = encode_str($row);
            extract($row);
            $lstsites .= $sclic_idscli . "-";
        }
    }

    // Les annexes au contrat
    if ($annexes == TRUE) {
        // On récupère les annexes de contrats
        $rech = "SELECT sclia_idscli FROM `" . TBSCLIA . "` WHERE sclia_codecocl = '" . $db->escape($co) . "'";
        if ($idannexe <> 0)
            $rech .= " AND sclia_idcocla <> '" . $idannexe . "'";
        $rows = $db->get_results($rech, ARRAY_A);
        if ($rows) {
            foreach ($rows as $row) {
                extract($row);
                $lstsites .= $sclia_idscli . "-";
            }
        }
    }

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

    if ($lstsites != "")
        $lstsites = substr($lstsites, 0, strlen($lstsites) - 1);
    return $lstsites;
}

/**
 * Crée le texte des matériels (contrats) sur la base de la string des matériel/licences choisis
 *
 * @param $lstrlp
 * @param bool $open
 * @return string
 */
function cree_txt_matos_cocl($lstrlp, $open = TRUE)
{
    global
    $db;

    if ($open == TRUE)
        $db = open_database(DBUSER, DBPASS, DBNAME, DBHOST);

    $txtmatos = '';
    $txtmatos_pdt = '';
    $txtmatos_lic = '';
    $tab_lstrlp = explode("-", $lstrlp);

    if (count($tab_lstrlp) > 0) {
        // Injection des matériels
        $j = 1;

        $titre = "=== " . _("MATERIEL CONCERNE") . " ===%%%%";
        for ($i = 0; $i < count($tab_lstrlp); $i++) {
            $rech = "SELECT * FROM `" . TBRPDT . "` WHERE `rpdt_code`= '" . $tab_lstrlp[$i] . "' ORDER BY `rpdt_idsite`";
            $row = $db->get_row($rech, ARRAY_A);
            if ($row) {
                $row = encode_str($row);
                extract($row);

                if (trim($txtmatos_pdt) == '')
                    $txtmatos_pdt .= $titre;

                $txtmatos_titre = "---- " . _("MATERIEL N°") . sprintf("%'010s", $j);

                $nom_site = '';
                switch ($rpdt_idsite) {
                    case -1 :
                        $nom_site = _("Tous les sites");
                        break;
                    case 0 :
                        $nom_site = _("Site principal");
                        break;
                    default :
                        $rech2 = "SELECT scli_ste,scli_ville FROM `" . TBSCLI . "` WHERE `scli_id` = '" . $rpdt_idsite . "'";
                        $row2 = $db->get_row($rech2, ARRAY_A);
                        if ($row2) {
                            $row2 = encode_str($row2);
                            extract($row2);
                            $nom_site .= $scli_ste;
                            $nom_site .= " (" . Retournecp_Id($scli_ville, FALSE) . " " . Retourneville_Id($scli_ville, FALSE) . ")";
                        }
                }
                $rech2 = "SELECT * FROM `" . TBRPCAT . "` WHERE `rpcat_code` = '" . $rpdt_codecat . "'";
                $row2 = $db->get_row($rech2, ARRAY_A);
                if ($row2) {
                    $row2 = encode_str($row2);
                    extract($row2);
                }
                $rech2 = "SELECT * FROM `" . TBMQUE . "` WHERE `mque_code` = '" . $rpdt_codema . "'";
                $row2 = $db->get_row($rech2, ARRAY_A);
                if ($row2) {
                    $row2 = encode_str($row2);
                    extract($row2);
                }
                $saut = chr(13) . chr(10);
                $txtmatos_corps1 = _("Site") . " : " . $nom_site . "%%" . _("Relevé") . " " . $rpdt_code . " (" . $rpdt_codep . ") : " . $rpcat_desc . " / " . $mque_ste . " " . $rpdt_modele . ", " . _("NS") . " " . $rpdt_ns . ", " . _("localisation") . " : " . $rpdt_empl;
                $txtmatos_corps1 = str_replace($saut, "%%", $txtmatos_corps1);

                $txtmatos_pied = "--------";
                $txtmatos_pdt .= $txtmatos_titre . "%%" . $txtmatos_corps1 . "%%" . $txtmatos_pied . "%%%%";
            }
            $j++;
        }
        // Injection des licences
        $j = 1;
        $titre = "=== " . _("LICENCES CONCERNEES") . " ===%%%%";
        for ($i = 0; $i < count($tab_lstrlp); $i++) {
            $rech = "SELECT * FROM `" . TBRLIC . "` WHERE `rlic_code`= '" . $tab_lstrlp[$i] . "'  ORDER BY `rlic_idsite`";
            $row = $db->get_row($rech, ARRAY_A);
            if ($row) {
                $row = encode_str($row);
                extract($row);

                if (trim($txtmatos_lic) == '')
                    $txtmatos_lic .= $titre;

                $txtmatos_titre .= "---- " . _("LICENCE N°") . sprintf("%'010s", $j);

                $nom_site = '';
                switch ($rlic_idsite) {
                    case -1 :
                        $nom_site = _("Tous les sites");
                        break;
                    case 0 :
                        $nom_site = _("Site principal");
                        break;
                    default :
                        $rech2 = "SELECT scli_ste,scli_ville FROM `" . TBSCLI . "` WHERE `scli_id` = '" . $rpdt_idsite . "'";
                        $row2 = $db->get_row($rech2, ARRAY_A);
                        if ($row2) {
                            $row2 = encode_str($row2);
                            extract($row2);
                            $nom_site .= $scli_ste;
                            $nom_site .= " (" . Retournecp_Id($scli_ville, FALSE) . " " . Retourneville_Id($scli_ville, FALSE) . ")";
                        }
                        break;
                }
                $rech2 = "SELECT mque_ste FROM `" . TBMQUE . "` WHERE `mque_code` = '" . $rlic_codema . "'";
                $row2 = $db->get_row($rech2, ARRAY_A);
                if ($row2) {
                    $row2 = encode_str($row2);
                    extract($row2);
                }
                $saut = chr(13) . chr(10);
                $txtmatos_corps1 = _("Site") . " : " . $nom_site . "%%" . _("Relevé") . " " . $rlic_code . " : " . $mque_ste . " " . $rlic_modele . " " . $rlic_version . ".";
                $txtmatos_corps1 = str_replace($saut, "%%", $txtmatos_corps1);

                $txtmatos_pied = "--------";
                $txtmatos_lic .= $txtmatos_titre . "%%" . $txtmatos_corps1 . "%%" . $txtmatos_pied . "%%%%";
            }
            $j++;
        }
    }
    if ($open == TRUE)
        $db->disconnect();

    if (($txtmatos_pdt != "") OR ($txtmatos_lic != "")) {
        if ($txtmatos_pdt != "") {
            $txtmatos .= $txtmatos_pdt;
            if ($txtmatos_lic != "")
                $txtmatos .= "%%";
        }
        if ($txtmatos_lic != "")
            $txtmatos .= $txtmatos_lic;
        $txtmatos = substr($txtmatos, 0, strlen($txtmatos) - 4);
    }
    return $txtmatos;
}

/**
 * Lecture d'un enregistrement contrat client
 *
 * @param $code
 * @param bool $open
 * @return array|null
 */
function lit_enr_cocl($code, $open = TRUE)
{
    global
    $db;

    if ($open == TRUE)
        $db = open_database(DBUSER, DBPASS, DBNAME, DBHOST);

    $rech2 = "SELECT * FROM `" . TBCOCL . "` WHERE `cocl_code` = '" . $db->escape($code) . "'";
    $row2 = $db->get_row($rech2, ARRAY_A);
    if ($open == TRUE)
        $db->disconnect();

    return $row2;
}

/**
 * Récupération du temps travaillé sur un contrat donné
 * pour une intervention donnée
 *
 * @param $codecocl
 * @param $codeint
 * @param bool $open
 * @return int
 */
function tps_trav_int_sec($codecocl, $codeint, $open = TRUE)
{
    global
    $db;

    if ($open == TRUE)
        $db = open_database(DBUSER, DBPASS, DBNAME, DBHOST);

    // Calcul des cumuls
    // Récupération du total travaillé
    $nbtotalsec = 0;

    // On vérifie d'abord si la combinaison code contrat/code intervention existe
    $rech = "SELECT int_id FROM `" . TBINT . "`";
    $rech .= " WHERE " . TBINT . ".int_codecocl = '" . $db->escape($codecocl) . "' AND " . TBINT . ".int_code = '" . $db->escape($codeint) . "'";
    $rows = $db->get_results($rech, ARRAY_A);
    if (($rows) AND (count($rows) > 0)) {
        $rech2 = "SELECT " . TBINTH . ".inth_heurea, " . TBINTH . ".inth_heured , " . TBINTH . ".inth_codeind ";
        $rech2 .= "FROM `" . TBINTH . "`";
        $rech2 .= " WHERE " . TBINTH . ".inth_offert = 0 AND " . TBINTH . ".inth_codeint = '" . $db->escape($codeint) . "'";

        $rows2 = $db->get_results($rech2, ARRAY_A);
        if (($rows2) AND (count($rows2) > 0)) {
            foreach ($rows2 as $row2) {
                extract($row2);
                $ind_coeff = 1;
                if (intval($inth_codeind) <> -1) {
                    $rech3 = "SELECT ind_coeff FROM `" . TBIND . "` WHERE ind_code = '$inth_codeind'";
                    $row3 = $db->get_row($rech3, ARRAY_A);
                    if ($row3)
                        extract($row3);
                }
                $nbtotalsec = $nbtotalsec + (diff_time_sec($inth_heurea, $inth_heured) * $ind_coeff);
            }
        }
    }
    if ($open == TRUE)
        $db->disconnect();

    return $nbtotalsec;
}

/**
 * Récupération du temps travaillé offert sur un contrat donné pour une intervention données
 *
 * @param $codecocl
 * @param $codeint
 * @param bool $open
 * @return int
 */
function tps_trav_offert_int_sec($codecocl, $codeint, $open = TRUE)
{
    global
    $db;

    if ($open == TRUE)
        $db = open_database(DBUSER, DBPASS, DBNAME, DBHOST);

    // Calcul des cumuls
    // Récupération du total travaillé
    $nbtotalsec = 0;

    $rech2 = "SELECT " . TBINTH . ".inth_heurea, " . TBINTH . ".inth_heured , " . TBINTH . ".inth_codeind ";
    $rech2 .= "FROM `" . TBINT . "`, `" . TBINTH . "`";
    $rech2 .= " WHERE " . TBINT . ".int_codecocl = '" . $db->escape($codecocl) . "'";
    $rech2 .= " AND " . TBINT . ".int_code = " . TBINTH . ".inth_codeint";
    $rech2 .= " AND " . TBINTH . ".inth_offert = 1 AND " . TBINTH . ".inth_codeint = '" . $db->escape($codeint) . "'";

    $rows2 = $db->get_results($rech2, ARRAY_A);
    if (($rows2) AND (count($rows2) > 0)) {
        foreach ($rows2 as $row2) {
            $ind_coeff = 1;
            if ($row2["inth_codeind"] <> "-1") {
                $row3 = lit_enr_ind($row2["inth_codeind"], FALSE);
                if (is_array($row3)) {
                    $row3 = encode_str($row3);
                    extract($row3);
                }
            }
            $nbtotalsec = $nbtotalsec + (diff_time_sec($row2["inth_heurea"], $row2["inth_heured"]) * $ind_coeff);
        }
    }
    if ($open == TRUE)
        $db->disconnect();

    return $nbtotalsec;
}

/**
 * Récupération du temps travaillé sur un contrat donné pour des interventions closes
 * $except : si non vide on exclu cette intervention
 *
 * @param $codecocl
 * @param bool $open
 * @param string $except
 * @return int
 */
function tps_trav_clot_sec($codecocl, $open = TRUE, $except = '')
{
    global
    $db;

    if ($open == TRUE)
        $db = open_database(DBUSER, DBPASS, DBNAME, DBHOST);

    // Calcul des cumuls
    // Récupération du total travaillé
    $nbtotalsec = 0;

    $rech2 = "SELECT " . TBINTH . ".inth_heurea, " . TBINTH . ".inth_heured , " . TBINTH . ".inth_codeind ";
    $rech2 .= "FROM `" . TBINT . "`, `" . TBINTH . "`";
    $rech2 .= " WHERE " . TBINT . ".int_codecocl = '" . $db->escape($codecocl) . "'";
    $rech2 .= " AND " . TBINT . ".int_code = " . TBINTH . ".inth_codeint";
    $rech2 .= " AND " . TBINT . ".int_datefin <> '0000-00-00'";
    $rech2 .= " AND " . TBINTH . ".inth_offert = 0";

    if (trim($except) <> '')
        $rech2 .= " AND " . TBINTH . ".inth_codeint <> '".$except."'";

    $rows2 = $db->get_results($rech2, ARRAY_A);
    if (($rows2) AND (count($rows2) > 0)) {
        foreach ($rows2 as $row2) {
            $ind_coeff = 1;

            if ($row2["inth_codeind"] <> "-1") {
                $row3 = lit_enr_ind($row2["inth_codeind"], FALSE);
                if (is_array($row3)) {
                    $row3 = encode_str($row3);
                    extract($row3);
                }
            }
            $nbtotalsec = $nbtotalsec + (diff_time_sec($row2["inth_heurea"], $row2["inth_heured"]) * $ind_coeff);
        }
    }
    if ($open == TRUE)
        $db->disconnect();

    return $nbtotalsec;
}

/**
 * Récupération du temps travaillé sur un contrat donné pour des interventions non closes
 * $except : si non vide, on exclu l'intervention
 *
 * @param $codecocl
 * @param bool $open
 * @param string $except
 * @return int
 */
function tps_trav_non_clot_sec($codecocl, $open = TRUE, $except ='')
{
    global
    $db;

    if ($open == TRUE)
        $db = open_database(DBUSER, DBPASS, DBNAME, DBHOST);

    // Calcul des cumuls
    // Récupération du total travaillé
    $nbtotalsec = 0;

    $rech2 = "SELECT " . TBINTH . ".inth_heurea, " . TBINTH . ".inth_heured , " . TBINTH . ".inth_codeind ";
    $rech2 .= "FROM `" . TBINT . "`, `" . TBINTH . "`";
    $rech2 .= " WHERE " . TBINT . ".int_codecocl = '" . $db->escape($codecocl) . "'";
    $rech2 .= " AND " . TBINT . ".int_code = " . TBINTH . ".inth_codeint";
    $rech2 .= " AND " . TBINT . ".int_datefin = '0000-00-00'";
    $rech2 .= " AND " . TBINTH . ".inth_offert = 0";
    if (trim($except) <> '')
        $rech2 .= " AND " . TBINTH . ".inth_codeint <> '".$except."'";
    $rows2 = $db->get_results($rech2, ARRAY_A);
    if (($rows2) AND (count($rows2) > 0)) {
        foreach ($rows2 as $row2) {
            $ind_coeff = 1;
            if ($row2["inth_codeind"] <> "-1") {
                $row3 = lit_enr_ind($row2["inth_codeind"], FALSE);
                if (is_array($row3)) {
                    $row3 = encode_str($row3);
                    extract($row3);
                }
            }
            $nbtotalsec = $nbtotalsec + (diff_time_sec($row2["inth_heurea"], $row2["inth_heured"]) * $ind_coeff);
        }
    }
    if ($open == TRUE)
        $db->disconnect();

    return $nbtotalsec;
}

/**
 * Récupération du total reporté vers un contrat
 *
 * @param $codecocl
 * @param bool $open
 * @return int
 */
function apport_vers_contrat_sec($codecocl, $open = TRUE)
{
    global
    $db;

    if ($open == TRUE)
        $db = open_database(DBUSER, DBPASS, DBNAME, DBHOST);

    $apports = 0;

    // Solde des reports
    $rech2 = "SELECT SUM(coclr_nbsrep) AS total_apport";
    $rech2 .= " FROM `" . TBCOCLR . "`";
    $rech2 .= " WHERE coclr_cocldest = '" . $db->escape($codecocl) . "'";
    $row2 = $db->get_row($rech2, ARRAY_A);
    if ($row2) {
        extract($row2);
        $apports = $total_apport;
    }
    if ($open == TRUE)
        $db->disconnect();

    return $apports;
}

/**
 * Récupération du total sorti en report depuis un contrat
 * On ne prend que les montants positifs, qui correspondent à des sorties
 *
 * @param $codecocl
 * @param bool $open
 * @return int
 */
function report_depuis_contrat_sec($codecocl, $open = TRUE)
{
    global
    $db;

    if ($open == TRUE)
        $db = open_database(DBUSER, DBPASS, DBNAME, DBHOST);

    $reports = 0;

    // Solde des reports
    $rech2 = "SELECT SUM(coclr_nbsrep) AS total_report";
    $rech2 .= " FROM `" . TBCOCLR . "`";
    $rech2 .= " WHERE coclr_coclori = '" . $db->escape($codecocl) . "'";
    $rech2 .= " AND coclr_nbsrep > 0";

    $row2 = $db->get_row($rech2, ARRAY_A);
    if ($row2) {
        extract($row2);
        $reports = $total_report;
    }
    if ($open == TRUE)
        $db->disconnect();

    return $reports;
}

/**
 * Récupération du solde en secondes d'un contrat donné
 * Sans les interventions en cours
 *
 * @param $codecocl
 * @param bool $open
 * @return int
 */
function solde_contrat_sec($codecocl, $open = TRUE)
{
    global
    $db;

    if ($open == TRUE)
        $db = open_database(DBUSER, DBPASS, DBNAME, DBHOST);

    $soldes = 0;
    // Montant initial du contrat
    $rech2 = "SELECT cocl_nbs";
    $rech2 .= " FROM `" . TBCOCL . "`";
    $rech2 .= " WHERE cocl_code = '" . $db->escape($codecocl) . "'";
    $row2 = $db->get_row($rech2, ARRAY_A);
    if ($row2) {
        extract($row2);
        $soldes = $cocl_nbs;
    }
    // On retire les temps travaillés clots et non clots
    $soldes = $soldes - tps_trav_clot_sec($codecocl, FALSE);
    // On rajoute les apports et on soustrait les reports
    $soldes = $soldes + apport_vers_contrat_sec($codecocl, FALSE) - report_depuis_contrat_sec($codecocl, FALSE);

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

    return $soldes;
}

/**
 * Récupération du solde réel en secondes d'un contrat donné
 * (réel : solde complet, y compris interventions en cours)
 *
 * @param $codecocl
 * @param bool $open
 * @param string $except
 * @return int
 */
function solde_reel_contrat_sec($codecocl, $open = TRUE, $except = '')
{
    global
    $db;

    if ($open == TRUE)
        $db = open_database(DBUSER, DBPASS, DBNAME, DBHOST);

    $soldes = 0;

    // Montant initial du contrat
    $rech2 = "SELECT cocl_nbs";
    $rech2 .= " FROM `" . TBCOCL . "`";
    $rech2 .= " WHERE cocl_code = '" . $db->escape($codecocl) . "'";
    $row2 = $db->get_row($rech2, ARRAY_A);
    if ($row2) {
        extract($row2);
        $soldes = $cocl_nbs;
    }
    // On retire les temps travaillés clots et non clots
    $soldes = $soldes - tps_trav_clot_sec($codecocl, FALSE, $except) - tps_trav_non_clot_sec($codecocl, FALSE, $except);

    // On rajoute les apports et on soustrait les reports
    $soldes = $soldes + apport_vers_contrat_sec($codecocl, FALSE) - report_depuis_contrat_sec($codecocl, FALSE);

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

    return $soldes;
}



/**
 * Calcule le prix de revient d'un contrat
 *
 * @param $codecocl
 * @param bool $open
 * @return int
 */
function px_revient_cocl($codecocl, $open = TRUE)
{
    global
    $db;
    $pr = 0;

    if ($open == TRUE)
        $db = open_database(DBUSER, DBPASS, DBNAME, DBHOST);

    // Récupération prix de revient pour le travail effectué (inclus offert)
    $rech = "SELECT coclh_codeint FROM `" . TBCOCLH . "` WHERE `coclh_codecocl`= '" . $db->escape($codecocl) . "'";
    $rows = $db->get_results($rech, ARRAY_A);
    if (($rows) AND (count($rows) > 0)) {
        foreach ($rows as $row) {
            $row = encode_str($row);
            extract($row);
            // Récupération prix de revient pour le travail effectué (inclus offert)
            $rech2 = "SELECT * FROM `" . TBINTH . "` WHERE `inth_codeint`= '" . $coclh_codeint . "'";
            $rows2 = $db->get_results($rech2, ARRAY_A);
            if (($rows2) AND (count($rows2) > 0)) {
                foreach ($rows2 as $row2) {
                    extract($row2);
                    // Calcul du coût de déplacement
                    // On récupère le prix de revient du technicien en fonction de la date
                    $rech3 = "SELECT tecpr_couth FROM `" . TBTECPR . "` WHERE `tecpr_date` <= '$inth_date' AND `tecpr_codetec` = '" . $inth_codetec . "' ORDER BY tecpr_date DESC";
                    $row3 = $db->get_row($rech3, ARRAY_A);
                    if ($row3) {
                        extract($row3);
                        $tps = diff_time_sec($inth_heurea, $inth_heured); // Temps passé sur site
                        $cout_aller = 0;
                        $tpsa = diff_time_sec($inth_aheured, $inth_aheuref); // Temps pour aller
                        $cout_retour = 0;
                        $tpsr = diff_time_sec($inth_rheured, $inth_rheuref); // Temps pour retour
                        // ... Aller
                        $rech4 = "SELECT * FROM `" . TBMT . "` WHERE `mt_code` = '$inth_acodemt'";
                        $row4 = $db->get_row($rech4, ARRAY_A);
                        if ($row4) {
                            extract($row4);
                            if ($mt_coutk > 0) // C'est un coût interne
                                $cout_aller = $inth_akm * $mt_coutk; // Montant "kilométrique" aller
                            else // C'est sous-traité
                            {
                                // Coût forfaitaire
                                if ($mt_coutas == 0) // A saisir ?
                                    $cout_aller = $mt_coutf; // Oui : Montant forfaitaire pour l'aller
                                else
                                    $cout_aller = $inth_acd; // Non : Montant saisi pour l'aller
                                // Coût kilométrique
                                if ($mt_kmill == 0) // Pas illimité : on calcule (sinon on ne fait rien)
                                {
                                    $diff_km = $inth_akm - $mt_kmi;
                                    if ($diff_km > 0)
                                        $cout_aller = $cout_aller + ($mt_kms * $diff_km);
                                }
                            }
                            $cout_aller = $cout_aller + $mt_coutc + $inth_afrais; // Rajout des frais supplémentaires

                            if ($mt_tpsdi == 0) // Le temps de déplacement n'est pas inclus : on calcul (sinon on ne fait rien)
                                $cout_aller = $cout_aller + round((($tecpr_couth / 3600) * $tpsa) * 100) / 100;
                        }
                        // ...Sur site
                        $cout_site = round((($tecpr_couth / 3600) * $tps) * 100) / 100;
                        // ... Retour
                        $rech4 = "SELECT * FROM `" . TBMT . "` WHERE `mt_code` = '$inth_rcodemt'";
                        $row4 = $db->get_row($rech4, ARRAY_A);
                        if ($row4) {
                            extract($row4);
                            if ($mt_coutk > 0) // C'est un coût interne
                                $cout_retour = $inth_rkm * $mt_coutk; // Montant "kilométrique" retour
                            else // C'est sous-traité
                            {
                                // Coût forfaitaire
                                if ($mt_coutas == 0) // A saisir ?
                                    $cout_retour = $mt_coutf; // Oui : Montant forfaitaire pour le retour
                                else
                                    $cout_retour = $inth_rcd; // Non : Montant saisi pour le retour
                                // Coût kilométrique
                                if ($mt_kmill == 0) // Pas illimité : on calcule (sinon on ne fait rien)
                                {
                                    $diff_km = $inth_rkm - $mt_kmi;
                                    if ($diff_km > 0)
                                        $cout_retour = $cout_retour + ($mt_kms * $diff_km);
                                }
                            }
                            $cout_retour = $cout_retour + $mt_coutc + $inth_rfrais; // Rajout des frais supplémentaires

                            if ($mt_tpsdi == 0) // Le temps de déplacement n'est pas inclus : on calcul (sinon on ne fait rien)
                                $cout_retour = $cout_retour + round((($tecpr_couth / 3600) * $tpsr) * 100) / 100;
                        }
                        $pr = $pr + $cout_site + $cout_aller + $cout_retour;
                    }
                }
            }
        }
    }

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

    return $pr;
}


/**
 * Création du tableau des contrats possibles pour une intervention
 * site choisi : si on a coché un site dans une liste de choix
 * (Si = -1, c'est que l'on veut calculer la liste à l'ouverture de l'intervention)
 *
 * @param $td
 * @param $codeint
 * @param $codecli
 * @param bool $open
 * @param int $sitechoisi
 * @return array
 */

function cre_tab_cocl_int($td, $codeint, $codecli, $open = TRUE, $sitechoisi = -1)
{
    global
    $db,
    $datea;

    $tab_cocl = [];
    // $tab_cocl_ok = array();

    if ($open == TRUE)
        $db = open_database(DBUSER, DBPASS, DBNAME, DBHOST);

    // On récupère les infos nécessaires pour l'intervention
    // Si en ajout, comme il n'y a pas de code intervention, on ne récupère rien
    $rech = "";
    switch ($td) {
        case "add" :
            $int_idsite = 0;
            break;
        default :
            if (trim($codeint) <> "")
                $rech = "SELECT int_datedde, int_codecocl, int_idsite FROM `" . TBINT . "` WHERE `int_code` = '" . $db->escape($codeint) . "'";
            else
                $int_idsite = 0;
            break;
    }
    if ($rech <> "") {
        $row = $db->get_row($rech, ARRAY_A);
        if ($row) {
            $row = encode_str($row);
            extract($row);
        }
    }

    // On récupère les contrats possibles
    $rech = "SELECT * FROM `" . TBCOCL . "` WHERE `cocl_codecli` = '" . $db->escape($codecli) . "'";
    switch ($td) {
        case "add" :
            // Contrats non terminés et signés
            $rech .= " AND `cocl_datefin` = '0000-00-00' AND `cocl_datesig` <> '0000-00-00'";
            // Contrats valables à la date du jour
            $rech .= " AND `cocl_dated` <= '" . $datea . "' AND (`cocl_datef` >= '" . $datea . "' OR `cocl_datef` = '0000-00-00')";
            break;
        default :
            // Contrats non terminés et signés
            $rech .= " AND ((`cocl_datefin` = '0000-00-00' AND `cocl_datesig` <> '0000-00-00'";
            // Contrats valables à la date de l'intervention
            $rech .= " AND `cocl_dated` <= '" . $int_datedde . "' AND (`cocl_datef` >= '" . $int_datedde . "' OR `cocl_datef` = '0000-00-00'))";
            // On n'oublie pas de reprendre le code contrat déjà affecté (cas où le contrat est entre temps passé en date dépassée)
            if ($int_codecocl <> "")
                $rech .= " OR cocl_code='" . $int_codecocl . "')";
            else
                $rech .= ")";
            break;
    }
    $rech .= " ORDER BY cocl_code";
    $rows = $db->get_results($rech, ARRAY_A);
    if (($rows) AND (count($rows) > 0)) {
        // $tab_cocl[""] = _("-- Faites votre choix --");

        foreach ($rows as $row) {
            $row = encode_str($row);
            extract($row);

            // On vérifie si le site de l'intervention est inclus dans le contrat
            $addok = FALSE;

            // On crée le tableau des sites couverts par le contrat (inclus annexes)
            $lstsites = cree_str_lstsites_cocl($cocl_code, TRUE, 0, FALSE);

            if (trim($lstsites) <> "") {
                $tab_sites = explode('-', $lstsites);

                // On a choisi un site dans une liste
                if ($sitechoisi >= 0) {
                    if ($sitechoisi > 0) {
                        if (exist_in_array($sitechoisi, $tab_sites) == TRUE)
                            $addok = TRUE;
                    } else {
                        if ($cocl_sitep == TRUE)
                            $addok = TRUE;
                    }
                } // On part de l'ouverture de l'intervention
                else {
                    switch ($td) {
                        // on est en ajout : on prend tous les contrats actifs du client sur le site principal (site choisi par défaut)
                        case "add" :
                            if ($cocl_sitep == 1)
                                $addok = TRUE;
                            break;
                        // Autre : on vérifie que le site de l'intervention est bien couvert par le contrat
                        default :
                            if ($int_idsite > 0) {
                                if (exist_in_array($int_idsite, $tab_sites) == TRUE)
                                    $addok = TRUE;
                            } else {
                                if ($cocl_sitep == TRUE)
                                    $addok = TRUE;
                            }
                            break;
                    }
                }
            } else {
                if ($cocl_sitep == 1)
                    $addok = TRUE;
                else
                    $addok = FALSE;
            }

            // Oui : on récupère le contrat
            if ($addok == TRUE) {
                $rech2 = "SELECT co_nom FROM `" . TBCO . "` WHERE co_code = '" . $cocl_codeco . "'";
                $row2 = $db->get_row($rech2, ARRAY_A);
                if ($row2) {
                    $row2 = encode_str($row2);
                    extract($row2);
                }
                if ($cocl_delai <> 0)
                    $txt_cocl = $cocl_code . " - " . $co_nom . " (" . $cocl_delai . "h";
                else
                    $txt_cocl = $cocl_code . " - " . $co_nom . " (" . _("Pas de délai");
                if ($cocl_datef <> "0000-00-00")
                    $txt_cocl .= ", " . _("ech.") . " " . datetolocal($cocl_datef);
                else
                    $txt_cocl .= ", " . _("sans ech.") . " ";
                $txt_cocl .= ")";
                if (intval($cocl_typh) == 1) {
                    // On vérifie s'il y a du temps travaillé pour le contrat, sur cette intervention
                    $tpstrav = tps_trav_int_sec($cocl_code, $codeint, FALSE);

                    // On calcule le solde réel du contrat, en ne tenant pas compte du temps, pour cette intervention,
                    // déjà utilisé dans ce contrat
                    $solde_reel = solde_reel_contrat_sec($cocl_code, FALSE) + $tpstrav;
                    $txt_cocl .= " - " . _("solde, hors cette intervention") . " -> " . heure_to_hhmm(sec_heure($solde_reel, 3, TRUE));
                }

                $tab_cocl[$cocl_code] = $txt_cocl;
            }


        }
    } else
        $tab_cocl[""] = _("-- Pas de contrat actif sur ce client --");

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

    return $tab_cocl;
}

/**
 * Création du tableau des reports possibles pour un contrat donné, en cas de cloture manuelle
 *
 * @param $codecocl
 * @param bool $open
 * @return array
 */
function cre_tab_cocl_report_clot($codecocl, $open = TRUE)
{
    global
        $db,
        $datea;

    $tab_report = [];
    $tab = [
        "cocl_code" => "",
        "cocl_desc" => _("-- Faites votre choix --")];
    $tab_report[] = $tab;

    if (trim($codecocl) <> "")
    {
        if ($open == TRUE)
            $db = open_database(DBUSER, DBPASS, DBNAME, DBHOST);

        // On récupère les contrats possibles
        $rech = "SELECT * FROM `" . TBCOCL . "` WHERE cocl_code='" . $codecocl . "'";
        $row = $db->get_row($rech, ARRAY_A);
        if ($row) {
            $row = encode_str($row);
            extract($row);
            if ($cocl_typh == 1) {
                if ($cocl_nbsnc == 1) // Contrat pouvant être reporté ?
                {
                    $tab = [
                        "cocl_code" => "-2",
                        "cocl_desc" => _("Pas de report")];
                    $tab_report[] = $tab;

                    $tab = [];
                    if (trim($cocl_rnum) == '') {
                        if ($cocl_renauto == TRUE) {
                            $tab = [
                                "cocl_code" => "-1",
                                "cocl_desc" => _("Report sur renouvellement (création automatique)")];
                        }
                    } else {
                        $tab = [
                            "cocl_code" => "-1",
                            "cocl_desc" => _("Report sur renouvellement")." (" . $cocl_rnum . ")"];
                    }

                    if (count($tab) > 0)
                        $tab_report[] = $tab;

                    // On recupere les enregistrements complémentaires
                    $rech2 = "SELECT * FROM `" . TBCOCL . "` WHERE cocl_code <> '" . $codecocl . "' AND cocl_codecli='" . $cocl_codecli . "'";
                    $rech2 .= " AND cocl_typh=1 AND (cocl_datef>='" . $datea . "' OR cocl_datef='0000-00-00')";
                    $rech2 .= " AND cocl_datefin='0000-00-00'";
                    $rech2 .= " ORDER BY cocl_code";
                    $rows2 = $db->get_results($rech2, ARRAY_A);
                    // On cree le resultat
                    if ($rows2) {
                        foreach ($rows2 as $row2) {
                            if ($cocl_rnum <> $row2["cocl_code"]) {
                                $rech3 = "SELECT * FROM `" . TBCO . "` WHERE co_code = '" . $row2["cocl_codeco"] . "'";
                                $row3 = $db->get_row($rech3, ARRAY_A);
                                if ($row3) {
                                    $row3 = encode_str($row3);
                                    $txt_cocl = $row2["cocl_code"] . " - " . $row3["co_nom"];
                                    $rech4 = "SELECT * FROM `" . TBCLI . "` WHERE `cli_code` = '" . $row2["cocl_codecli"] . "'";
                                    $row4 = $db->get_row($rech4, ARRAY_A);
                                    if ($row4) {
                                        $row4 = encode_str($row4);
                                        if ($row4["cli_ste"] <> "")
                                            $txt_cocl .= " (" . $row4["cli_ste"];
                                        else
                                            $txt_cocl .= " (" . $row4["cli_nom"];
                                        if ($row2["cocl_delai"] <> 0)
                                            $txt_cocl .= " - " . $row2["cocl_delai"] . "h";
                                        else
                                            $txt_cocl = $row2["cocl_code"] . " - " . $row3["co_nom"] . " ("._("Pas de délai");
                                        if ($row2["cocl_datef"] <> "0000-00-00")
                                            $txt_cocl .= ", " . _("ech.") . " " . datetolocal($row2["cocl_datef"]);
                                        else
                                            $txt_cocl .= ", " . _("sans ech.") . " ";
                                        $solde_reel = solde_reel_contrat_sec($row2["cocl_code"], FALSE);
                                        $txt_cocl .= ", "._("solde réel")." " . heure_to_hhmm(sec_heure($solde_reel, 3, TRUE));
                                        if ($row["cocl_datesig"] <> "0000-00-00")
                                            $txt_cocl .= ", "._("Signé");
                                        else
                                            $txt_cocl .= ", "._("Non signé");
                                        $txt_cocl .= ")";
                                    }
                                }

                                // Calcul du montant à sortir de ce contrat
                                $tab = [
                                    "cocl_code" => $row2["cocl_code"],
                                    "cocl_desc" => $txt_cocl];
                                $tab_report[] = $tab;
                            }
                        }
                    }
                } else
                {
                    $tab = [
                        "cocl_code" => "0",
                        "cocl_desc" => _("Paramètre 'Report non consommé' à 'Non' (Cloture simple)")];
                    $tab_report[] = $tab;
                }
            } else
            {
                $tab = [
                    "cocl_code" => "0",
                    "cocl_desc" => _("Aucun report horaire car ce contrat n'est pas de type 'Quota Horaire' (Cloture simple)")];
                $tab_report[] = $tab;
            }
        }


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

    return $tab_report;
}


/**
 * Création du tableau des reports possibles pour un contrat donné, dans une intervention
 *
 * @param $codecocl
 * @param $codeint
 * @param $codecli
 * @param $idsite
 * @param bool $open
 * @param bool $escape
 * @param bool $forceprm
 * @return array
 */
function cre_tab_cocl_report_nc($codecocl, $codeint, $codecli, $idsite, $open = TRUE, $escape = FALSE, $forceprm = FALSE)
{
    global
    $db,
    $datea;

    $tab_report_nc = [];

    if ($open == TRUE)
        $db = open_database(DBUSER, DBPASS, DBNAME, DBHOST);

    // On récupère les infos nécessaires pour l'intervention
    if ($forceprm == FALSE)
    {
        $rech = "SELECT int_codecli, int_codecocl, int_idsite FROM `" . TBINT . "` WHERE `int_code` = '" . $db->escape($codeint) . "'";
        $row = $db->get_row($rech, ARRAY_A);
        if ($row)
            extract($row);
        else
        {
            $int_codecli = $codecli;
            $int_codecocl = $codecocl;
            $int_idsite = $idsite;
        }
    }
    else
    {
        $int_codecli = $codecli;
        $int_codecocl = $codecocl;
        $int_idsite = $idsite;
    }

    // On récupère les contrats possibles
    if ($int_codecocl <> '')
    {
        $rech = "SELECT cocl_typh, cocl_nbsnc, cocl_datef, cocl_rnum, cocl_renauto FROM `" . TBCOCL . "` WHERE `cocl_code` = '" . $db->escape($int_codecocl) . "'";
        $row = $db->get_row($rech, ARRAY_A);
        if ($row) {
            $row = encode_str($row);
            extract($row);
            if ($cocl_typh == 1) {
                if ($cocl_nbsnc == 1) // Contrat pouvant être reporté ?
                {
                    $tab_report_nc[""] = _("-- Faites votre choix --");

                    if ((($cocl_datef <> "0000-00-00") AND (comp_date($datea,$cocl_datef) == TRUE)) OR ($cocl_datef == "0000-00-00")) {
                        // Choix primaires
                        $tab_report_nc["-2"] = _("Pas de report");
                        if (trim($cocl_rnum) == "") {
                            if (intval($cocl_renauto) == 1)
                                $txt = _("Report sur renouvellement (automatique)");
                        } else
                            $txt = _("Report sur renouvellement") . " (" . $cocl_rnum . ")";
                        $tab_report_nc["-1"] = $txt;

                        // Liste des contrats possibles
                        $rech2 = "SELECT * FROM `" . TBCOCL . "` WHERE cocl_code<>'" . $int_codecocl . "' AND cocl_codecli='" . $int_codecli . "'";
                        $rech2 .= " AND cocl_typh=1 AND (cocl_datef>='" . $datea . "' OR cocl_datef='0000-00-00')";
                        $rech2 .= " AND cocl_datefin='0000-00-00'";
                        if (trim($cocl_rnum) <> "")
                            $rech2 .= " AND cocl_code<>'" . $cocl_rnum . "'";
                        $rech2 .= " ORDER BY cocl_code";
                        $rows2 = $db->get_results($rech2, ARRAY_A);
                        if (($rows2) AND (count($rows2) > 0)) {
                            foreach ($rows2 as $row2) {
                                $row2 = encode_str($row2);
                                extract($row2);
                                $addok = TRUE;
                                if (intval($int_idiste) > 0) {
                                    $rech3 = "SELECT COUNT(*) FROM `" . TBSCLIC . "` WHERE sclic_codecocl = '" . $cocl_code . "' AND sclic_idscli='" . $int_idsite . "'";
                                    $nbres3 = $db->get_var($rech3);
                                    if ($nbres3 == 0)
                                        $addok = FALSE;
                                } else {
                                    if ($cocl_sitep == FALSE)
                                        $addok = FALSE;
                                }
                                if ($addok == TRUE) {
                                    $rech3 = "SELECT * FROM `" . TBCO . "` WHERE co_code = '" . $cocl_codeco . "'";
                                    $row3 = $db->get_row($rech3, ARRAY_A);
                                    if ($row3) {
                                        $row3 = encode_str($row3);
                                        extract($row3);
                                    }
                                    if (intval($cocl_delai) <> 0)
                                        $txt_cocl = $cocl_code . " - " . $co_nom . " (" . $cocl_delai . "h";
                                    else
                                        $txt_cocl = $cocl_code . ", " . $co_nom . " ("._("Pas de délai");

                                    if ($cocl_datef <> "0000-00-00")
                                        $txt_cocl .= ", " . _("ech.") . " " . datetolocal($cocl_datef);
                                    else
                                        $txt_cocl .= ", " . _("sans ech.") . " ";
                                    if ($cocl_datesig <> "0000-00-00")
                                        $txt_cocl .= ", " . _("Signé");
                                    else
                                        $txt_cocl .= ", " . _("Non signé");
                                    $txt_cocl .= ")";

                                    // On vérifie s'il y a du temps travaillé pour le contrat, sur cette intervention
                                    $tpstrav = tps_trav_int_sec($cocl_code, $codeint, FALSE);

                                    // On calcule le solde réel du contrat, en ne tenant pas compte du temps, pour cette intervention,
                                    // déjà utilisé dans ce contrat
                                    // $solde_reel=solde_reel_contrat_sec($cocl_code,FALSE)+$tpstrav;
                                    $solde_reel = solde_reel_contrat_sec($cocl_code, FALSE) + $tpstrav;
                                    $txt_cocl .= " - "._("solde, hors cette intervention")." -> " . heure_to_hhmm(sec_heure($solde_reel, 3, TRUE));

                                    $tab_report_nc[$cocl_code] = $txt_cocl;
                                }
                            }
                        }
                    } else
                        $tab_report_nc["0"] = _("Echéance atteinte ou dépassée");
                } else
                    $tab_report_nc["0"] = _("Paramètre 'Report non consommé' à 'Non'");

            } else
                $tab_report_nc["0"] = _("Ce contrat n'est pas de type 'Quota Horaire'");
        }
        else
            $tab_report_nc[""] = _("-- Faites votre choix --");
    }
    else
        $tab_report_nc[""] = _("-- Faites votre choix --");

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

    if ($escape == TRUE)
        $tab_report_nc = str_escape($tab_report_nc);
    return $tab_report_nc;
}

/**
 * Création du tableau des déductions possibles pour un contrat donné, dans une intervention
 *
 * @param $codecocl
 * @param $codeint
 * @param $codecli
 * @param $idsite
 * @param bool $open
 * @param bool $escape
 * @param bool $forceprm
 * @return array|string
 */
function cre_tab_cocl_deduc($codecocl, $codeint, $codecli, $idsite, $open = TRUE, $escape = FALSE, $forceprm = FALSE)
{
    global
    $db,
    $datea;

    $tab_deduc = [];

    // On se connecte a la base
    if ($open == TRUE)
        $db = open_database(DBUSER, DBPASS, DBNAME, DBHOST);

    // On récupère les infos nécessaires pour l'intervention
    if ($forceprm == FALSE)
    {
        $rech = "SELECT int_codecli, int_codecocl, int_idsite FROM `" . TBINT . "` WHERE `int_code` = '" . $db->escape($codeint) . "'";
        $row = $db->get_row($rech, ARRAY_A);
        if ($row)
            extract($row);
        else
        {
            $int_codecli = $codecli;
            $int_codecocl = $codecocl;
            $int_idsite = $idsite;
        }
    }
    else
    {
        $int_codecli = $codecli;
        $int_codecocl = $codecocl;
        $int_idsite = $idsite;
    }

    // On récupère les contrats possibles
    if ($int_codecocl <> '') {
        $rech = "SELECT cocl_typh, cocl_nbsnc, cocl_datef, cocl_rnum, cocl_renauto, cocl_nbsdep FROM `" . TBCOCL . "` WHERE `cocl_code` = '" . $db->escape($int_codecocl) . "'";
        $row = $db->get_row($rech, ARRAY_A);
        if ($row) {
            $row = encode_str($row);
            extract($row);
            if ($cocl_typh == 1) {
                $tab_deduc[""] = _("-- Faites votre choix --");

                // Temps travaillé sur l'intervention
                $tps_retenu_int = tps_retenu_int_sec($codeint, FALSE);

                // Solde du contrat choisi = solde réel du contrat (hors intervention en cours)
                $solde_ce_contrat_sans_cette_int = solde_reel_contrat_sec($int_codecocl, FALSE, $codeint);
                if ($solde_ce_contrat_sans_cette_int < $tps_retenu_int) {
                    if (intval($cocl_nbsdep) == 1) {
                        // Choix primaires
                        $tab_deduc["-2"] = _("Pas de déduction");

                        if (trim($cocl_rnum) == "") {
                            if ($cocl_renauto == TRUE)
                                $txt = _("Déduction sur renouvellement (automatique)");
                        } else {
                            $txt = _("Déduction sur renouvellement") . " (" . $cocl_rnum . ")";
                            $rnum = $cocl_rnum;
                        }
                        $tab_deduc["-1"] = $txt;

                        // Liste des contrats possibles
                        $rech2 = "SELECT * FROM `" . TBCOCL . "` WHERE cocl_code<>'" . $int_codecocl . "' AND cocl_codecli='" . $int_codecli . "'";
                        $rech2 .= " AND cocl_typh=1 AND (cocl_datef>='" . $datea . "' OR cocl_datef='0000-00-00')";
                        $rech2 .= " AND cocl_datefin='0000-00-00'";
                        if (trim($rnum) <> "")
                            $rech2 .= " AND cocl_code<>'" . $rnum . "'";
                        $rech2 .= " ORDER BY cocl_code";
                        $rows2 = $db->get_results($rech2, ARRAY_A);
                        if ($rows2) {
                            foreach ($rows2 as $row2) {
                                $row2 = encode_str($row2);
                                extract($row2);
                                $addok = TRUE;
                                if (intval($int_idsite) > 0) {
                                    $rech3 = "SELECT COUNT(*) FROM `" . TBSCLIC . "` WHERE sclic_codecocl = '" . $cocl_code . "' AND sclic_idscli='" . $int_idsite . "'";
                                    $nbres3 = $db->get_var($rech3);
                                    if ($nbres3 == 0)
                                        $addok = FALSE;
                                } else {
                                    if ($cocl_sitep == FALSE)
                                        $addok = FALSE;
                                }

                                if ($addok == TRUE) {
                                    // On calcule le solde réel du contrat, en ne tenant pas compte du temps, pour cette intervention,
                                    // déjà utilisé dans ce contrat
                                    $solde_reel = solde_reel_contrat_sec($cocl_code, FALSE);

                                    if ($solde_reel >= $tps_retenu_int) {
                                        $rech3 = "SELECT * FROM `" . TBCO . "` WHERE co_code = '" . $cocl_codeco . "'";
                                        $row3 = $db->get_row($rech3, ARRAY_A);
                                        if ($row3) {
                                            $row3 = encode_str($row3);
                                            extract($row3);
                                        }
                                        if ($cocl_delai <> 0)
                                            $txt_cocl = $cocl_code . " - " . $co_nom . " (" . $cocl_delai . _("h");
                                        else
                                            $txt_cocl = $cocl_code . " - " . $co_nom . " (" . _("Pas de délai");
                                        if ($cocl_datef <> "0000-00-00")
                                            $txt_cocl .= ", " . _("ech.") . " " . datetolocal($cocl_datef);
                                        else
                                            $txt_cocl .= ", " . _("sans ech.") . " ";

                                        if ($cocl_datesig <> "0000-00-00")
                                            $txt_cocl .= ", " . _("Signé");
                                        else
                                            $txt_cocl .= ", " . _("Non signé");
                                        $txt_cocl .= ")";

                                        $txt_cocl .= " - " . _("solde, hors cette intervention") . " -> " . heure_to_hhmm(sec_heure($solde_reel, 3, TRUE));

                                        $tab_deduc[$cocl_code] = $txt_cocl;
                                    }
                                }
                            }
                        }
                    } else
                        $tab_deduc["0"] = _("Paramètre 'Report sur-consommé' à 'Non'");
                } else
                    $tab_deduc["0"] = _("Solde") . " " . $codecocl . " " . _("suffisant");
            } else
                $tab_deduc["0"] = _("Ce contrat n'est pas de type 'Quota Horaire'");
        } else
            $tab_deduc[""] = _("-- Faites votre choix --");
    } else
        $tab_deduc[""] = _("-- Faites votre choix --");

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

    if ($escape == TRUE)
        return str_escape($tab_deduc);
    else
        return $tab_deduc;
}

// Préavis

/**
 * Maximum (jours) pour le préavis
 *
 * @param bool $open
 * @return int
 */
function preavis_max($open = TRUE)
{
    global
    $db;

    $cons_relmax = 0;

    if ($open == TRUE)
        $db = open_database(DBUSER, DBPASS, DBNAME, DBHOST);

    $rech2 = "SELECT cons_relmax FROM `" . TBCONS . "`";
    $row2 = $db->get_row($rech2, ARRAY_A);
    if ($row2)
        extract($row2);
    if ($open == TRUE)
        $db->disconnect();

    return $cons_relmax;
}

/**
 * Minimum (jours) pour le préavis
 *
 * @param bool $open
 * @return int
 */
function preavis_min($open = TRUE)
{
    global
    $db;
    $cons_relmin = 0;

    if ($open == TRUE)
        $db = open_database(DBUSER, DBPASS, DBNAME, DBHOST);
    $rech2 = "SELECT cons_relmin FROM `" . TBCONS . "`";
    $row2 = $db->get_row($rech2, ARRAY_A);
    if ($row2)
        extract($row2);
    if ($open == TRUE)
        $db->disconnect();

    return $cons_relmin;
}


// Annexes

/**
 * Lecture d'un enregistrement annexe contrat client
 *
 * @param $code
 * @param $codecocl
 * @param bool $open
 * @return array|null
 */
function lit_enr_cocla($code, $codecocl, $open = TRUE)
{
    global
    $db;

    if ($open == TRUE)
        $db = open_database(DBUSER, DBPASS, DBNAME, DBHOST);

    $rech2 = "SELECT * FROM `" . TBCOCLA . "` WHERE `cocla_code` = '" . $db->escape($code) . "' AND `cocla_codecocl` = '" . $db->escape($codecocl) . "'";
    $row2 = $db->get_row($rech2, ARRAY_A);
    if ($open == TRUE)
        $db->disconnect();

    return $row2;
}

/**
 * Vérification qu'une annexe contrat client est signée
 *
 * @param $code
 * @param bool $open
 * @return bool
 */
function cocla_signed($code, $open = TRUE)
{
    global
    $db;
    $signe = FALSE;

    if ($open == TRUE)
        $db = open_database(DBUSER, DBPASS, DBNAME, DBHOST);

    $rech2 = "SELECT colca_signe FROM `" . TBCOCLA . "` WHERE `cocla_code` = '" . $db->escape($code) . "'";
    $row2 = $db->get_row($rech2, ARRAY_A);
    if ($row2) {
        extract($row2);

        if ($cocla_signe <> "")
            $signe = TRUE;
    }
    if ($open == TRUE)
        $db->disconnect();

    return $signe;
}

/**
 * Retourne le nombre d'annexes à un contrat
 *
 * @param $codecocl
 * @param bool $open
 * @return null
 */
function nb_cocla_cocl($codecocl, $open = TRUE)
{
    global
    $db;

    if ($open == TRUE)
        $db = open_database(DBUSER, DBPASS, DBNAME, DBHOST);

    $rexist = "SELECT COUNT(*) FROM `" . TBCOCLA . "` WHERE `cocla_codecocl` = '" . $db->escape($codecocl) . "'";
    $nb = $db->get_var($rexist);
    if ($open == TRUE)
        $db->disconnect();
    return $nb;
}

/**
 * Calcule le prix de revient d'une annexe contrat (ou de toutes les annexes)
 *
 * @param $codecocl
 * @param $codecocla
 * @param bool $open
 * @return int
 */
function px_vte_cocla($codecocl, $codecocla, $open = TRUE)
{
    global
    $db;
    $pv = 0;

    if ($open == TRUE)
        $db = open_database(DBUSER, DBPASS, DBNAME, DBHOST);

    $rech2 = "SELECT cocla_pvht FROM `" . TBCOCLA . "` WHERE ";
    $rech2 .= " `cocla_codecocl` = '" . $db->escape($codecocl) . "'";
    if (trim($codecocla) <> '')
        $rech2 .= " AND `cocla_code` = '" . $db->escape($codecocla) . "'";
    $rows2 = $db->get_results($rech2, ARRAY_A);
    if (($rows2) AND (count($rows2) > 0)) {
        foreach ($rows2 as $row2) {
            extract($row2);
            $pv = $pv + $cocla_pvht;
        }
    }
    if ($open == TRUE)
        $db->disconnect();

    return $pv;
}

/**
 * Dit si site principal inclus dans un contrat principal ou ses annexes, hors une annexe précise
 * Si $codecocla est vide, on teste toutes les annexes
 *
 * @param $codecocl
 * @param $codecocla
 * @param bool $open
 * @return bool
 */
function sitep_in_cocl_except($codecocl, $codecocla, $open = TRUE)
{
    global
    $db;
    $inclus = FALSE;

    if ($open == TRUE)
        $db = open_database(DBUSER, DBPASS, DBNAME, DBHOST);

    // On vérifie dans le contrat principal
    $rexist = "SELECT cocl_sitep FROM `" . TBCOCL . "` WHERE `cocl_code` = '" . $db->escape($codecocl) . "'";
    $row2 = $db->get_row($rexist, ARRAY_A);
    if ($row2) {
        extract($row2);
        if (intval($cocl_sitep) == 1)
            $inclus = TRUE;
    }

    if ($inclus == FALSE) {
        // On vérifie dans les annexes, sauf l'annexxe donnée
        $rexist = "SELECT cocla_sitep FROM `" . TBCOCLA . "` WHERE `cocla_codecocl` = '" . $db->escape($codecocl) . "'";
        if (trim($codecocla) <> '')
            $rexist .= " AND `cocla_code` <> '" . $db->escape($codecocla) . "'";
        $rows2 = $db->get_results($rexist, ARRAY_A);
        if (($rows2) AND (count($rows2) > 0)) {
            foreach ($rows2 as $row2) {
                extract($row2);
                if (intval($cocla_sitep) == 1) {
                    $inclus = TRUE;
                    break;
                }
            }
        }
    }

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

    return $inclus;
}
