<?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 patrimoine */
/* et fichiers rattachés                   */
/*******************************************/

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

    if ($open == TRUE)
        $db = open_database(DBUSER, DBPASS, DBNAME, DBHOST);
    $rech2 = "SELECT * FROM `" . TBRPAT . "` WHERE `rpat_code` = '" . $db->escape($code) . "'";
    $row2 = $db->get_row($rech2, ARRAY_A);
    if ($open == TRUE)
        $db->disconnect();

    return $row2;
}

/**
 * Vérification du nombre de dossiers de patrimoines sur une agence
 *
 * @param $agence
 * @param bool $open
 * @return null
 */
function nb_rela($agence, $open = TRUE)
{
    global
    $db;

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

    return $nbexist;
}

/**
 * Lecture d'un enregistrement patrimoine à partir du code client
 *
 * @param $codecli
 * @param bool $open
 * @return array|null
 */
function lit_enr_rpat_cli($codecli, $open = TRUE)
{
    global
    $db;

    if ($open == TRUE)
        $db = open_database(DBUSER, DBPASS, DBNAME, DBHOST);
    $rech2 = "SELECT * FROM `" . TBRPAT . "` WHERE `rpat_codecli` = '" . $db->escape($codecli) . "'";
    $row2 = $db->get_row($rech2, ARRAY_A);
    if ($open == TRUE)
        $db->disconnect();

    return $row2;
}

/**
 * Donne le numéro de patrimoine à partir du code client
 *
 * @param $codecli
 * @param bool $open
 * @return string
 */
function num_rpat_cli($codecli, $open = TRUE)
{
    global
    $db;
    $num_rel = "";

    if ($open == TRUE)
        $db = open_database(DBUSER, DBPASS, DBNAME, DBHOST);
    $rech2 = "SELECT rpat_code FROM `" . TBRPAT . "` WHERE `rpat_codecli` = '" . $db->escape($codecli) . "'";
    $row2 = $db->get_row($rech2, ARRAY_A);
    if ($row2)
        $num_rel = $row2["rpat_code"];
    if ($open == TRUE)
        $db->disconnect();

    return $num_rel;
}

/**
 * Vérifie si un dossier patrimoine est utilisé dans un patrimoine licence
 *
 * @param $coderel
 * @param bool $open
 * @return bool
 */
function exist_rpat_in_rlic($coderel, $open = FALSE)
{
    global
    $db;
    $exist = FALSE;

    if ($open == TRUE)
        $db = open_database(DBUSER, DBPASS, DBNAME, DBHOST);
    $rexist = "SELECT COUNT(*) FROM `" . TBRLIC . "` WHERE `rlic_coderel` = '" . $db->escape($coderel) . "'";
    $nbres = $db->get_var($rexist);
    if ($nbres > 0)
        $exist = TRUE;
    if ($open == TRUE)
        $db->disconnect();

    return $exist;
}

/**
 * Vérifie si un dossier patrimoine est utilisé dans un patrimoine produit
 *
 * @param $coderel
 * @param bool $open
 * @return bool
 */
function exist_rpat_in_rpdt($coderel, $open = TRUE)
{
    global
    $db;
    $exist = FALSE;

    if ($open == TRUE)
        $db = open_database(DBUSER, DBPASS, DBNAME, DBHOST);
    $rexist = "SELECT COUNT(*) FROM `" . TBRPDT . "` WHERE `rpdt_coderel` = '" . $db->escape($coderel) . "'";
    $nbres = $db->get_var($rexist);
    if ($nbres > 0)
        $exist = TRUE;
    if ($open == TRUE)
        $db->disconnect();

    return $exist;
}

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

    if ($open == TRUE)
        $db = open_database(DBUSER, DBPASS, DBNAME, DBHOST);
    $rech2 = "SELECT * FROM `" . TBRLIC . "` WHERE `rlic_code` = '" . $db->escape($code) . "'";
    $row2 = $db->get_row($rech2, ARRAY_A);
    if ($open == TRUE)
        $db->disconnect();

    return $row2;
}

/**
 * Vérification du nombre de patrimoines licences sur une agence
 *
 * @param $agence
 * @param bool $open
 * @return null
 */
function nb_rlica($agence, $open = TRUE)
{
    global
    $db;

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

    return $nbexist;
}

/**
 * Vérification le nombre de fois où est utilisé un patrimoine licence dans des fiches patrimoines matériels d'un client
 *
 * @param $client
 * @param $coderlic
 * @param bool $open
 * @return mixed
 */
function nb_rlic($client, $coderlic, $open = TRUE)
{
    global
    $db;


    if ($open == TRUE)
        $db = open_database(DBUSER, DBPASS, DBNAME, DBHOST);
    $rexist = "SELECT rpdt_coderlic FROM `" . TBRPDT . "` WHERE `rpdt_codecli` = '" . $db->escape($client) . "'";
    $rows = $db->get_results($rexist, ARRAY_A);
    if (($rows) AND (count($rows) > 0)) {
        foreach ($rows as $row) {
            $row = encode_str($row);
            if (strpos($row["rpdt_coderlic"], $coderlic) !== false)
                $nbexist++;
        }
    }
    if ($open == TRUE)
        $db->disconnect();

    return $nbexist;
}

/**
 * Vérifie s'il existe des patrimoines de licences actifs pour un client particulier
 * Sur une liste de site donnée (si vide, on n'en tient pas compte)
 * $site : on prend aussi le site principal
 *
 * @param $codecli
 * @param string $lstsites
 * @param bool $sitep
 * @param bool $open
 * @return bool
 */
function exist_rlic_actif($codecli, $lstsites = '', $sitep = TRUE, $open = TRUE)
{
    global
    $db;
    $exist = FALSE;

    if ($open == TRUE)
        $db = open_database(DBUSER, DBPASS, DBNAME, DBHOST);
    $rech = "SELECT COUNT(rlic_id) FROM `" . TBRLIC . "` WHERE `rlic_codecli` = '" . $db->escape($codecli) . "' AND `rlic_dateout` = '0000-00-00'";
    if (trim($lstsites) <> '') {
        $tab_sites = explode('-', $lstsites);
        $rech .= " AND (";
        foreach ($tab_sites as $value) {
            $rech .= " `rlic_id`= " . $value . " OR";
        }
        // Suppression du dernier 'OR'
        $rech = substr($rech, 0, strlen($rech) - 3);
        $rech .= ")";
        if ($sitep == TRUE)
            $rech .= " OR `rlic_id`= 0";
        $rech .= " OR `rlic_id`= -1";
    }
    $nbres = $db->get_var($rech);
    if ($nbres > 0)
        $exist = TRUE;
    if ($open == TRUE)
        $db->disconnect();

    return $exist;
}

/**
 * Vérifie si un patrimoine licence est présent dans un patrimoine de problème
 *
 * @param $coderlic
 * @param bool $open
 * @return bool
 */
function exist_rlic_in_rpbm($coderlic, $open = TRUE)
{
    global
    $db;
    $exist = FALSE;

    if ($open == TRUE)
        $db = open_database(DBUSER, DBPASS, DBNAME, DBHOST);
    $rexist = "SELECT COUNT(*) FROM `" . TBRPBM . "` WHERE `rpbm_coderlp` = '" . $db->escape($coderlic) . "'";
    $nbres = $db->get_var($rexist);
    if ($nbres > 0)
        $exist = TRUE;
    if ($open == TRUE)
        $db->disconnect();

    return $exist;
}

/**
 * Vérifie si un patrimoine licence est présent dans un patrimoine de problème non clôt
 *
 * @param $coderlic
 * @param bool $open
 * @return bool
 */
function exist_rlic_in_rpbm_actif($coderlic, $open = TRUE)
{
    global
    $db;
    $exist = FALSE;

    if ($open == TRUE)
        $db = open_database(DBUSER, DBPASS, DBNAME, DBHOST);
    $rexist = "SELECT COUNT(*) FROM `" . TBRPBM . "` WHERE `rpbm_coderlp` = '" . $db->escape($coderlic) . "' AND `rpbm_datett` = '0000-00-00'";
    $nbres = $db->get_var($rexist);
    if ($nbres > 0)
        $exist = TRUE;
    if ($open == TRUE)
        $db->disconnect();

    return $exist;
}

/**
 * Vérifie si un patrimoine licence est présent dans une fiche patrimoine de matériel d'un client
 *
 * @param $client
 * @param $coderlic
 * @param bool $open
 * @return bool
 */
function exist_rlic_in_rpdt($client, $coderlic, $open = TRUE)
{
    global
    $db;
    $exist = FALSE;

    if ($open == TRUE)
        $db = open_database(DBUSER, DBPASS, DBNAME, DBHOST);
    $rexist = "SELECT rpdt_coderlic FROM `" . TBRPDT . "` WHERE `rpdt_codecli` = '" . $db->escape($client) . "'";
    $rows = $db->get_results($rexist, ARRAY_A);
    if (($rows) AND (count($rows) > 0)) {
        foreach ($rows as $row) {
            $row = encode_str($row);
            if (strpos($row["rpdt_coderlic"], $coderlic) !== false) {
                $exist = TRUE;
                break;
            }
        }
    }
    if ($open == TRUE)
        $db->disconnect();

    return $exist;
}

/**
 * Vérifie si un patrimoine licence est présent dans une fiche patrimoine de matériel ACTIVE d'un client
 *
 * @param $client
 * @param $coderlic
 * @param bool $open
 * @return bool
 */
function exist_rlic_in_rpdt_actif($client, $coderlic, $open = TRUE)
{
    global
    $db;
    $exist = FALSE;

    if ($open == TRUE)
        $db = open_database(DBUSER, DBPASS, DBNAME, DBHOST);
    $rexist = "SELECT rpdt_coderlic FROM `" . TBRPDT . "` WHERE `rpdt_codecli` = '" . $db->escape($client) . "' AND `rpdt_dateout` ='0000-00-00'";
    $rows = $db->get_results($rexist, ARRAY_A);
    if (($rows) AND (count($rows) > 0)) {
        foreach ($rows as $row) {
            $row = encode_str($row);
            if (strpos($row["rpdt_coderlic"], $coderlic) !== false) {
                $exist = TRUE;
                break;
            }
        }
    }
    if ($open == TRUE)
        $db->disconnect();

    return $exist;
}

/**
 * Retourne un tableau des licences sélectionnables pour une liste de sites donnés
 * $tab_sites_cocl : tableau des sites du contrat
 * $tab_sites_cocla : tableau des sites des annexes au contrat
 *
 * @param $co
 * @param $sitep
 * @param $tab_sites_cocl
 * @param array $tab_sites_cocla
 * @param bool $open
 * @return array
 */
function cre_tab_rlic_cocl($co, $sitep, $tab_sites_cocl, $tab_sites_cocla = [], $open = TRUE)
{
    global
    $db;
    $tab_rlic_sel = [];

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

    // On récupère le champ des produits/licences rattachés sur le contrat
    $rech = "SELECT cocl_coderlp, cocl_codecli FROM `" . TBCOCL . "` WHERE `cocl_code` = '" . $db->escape($co) . "'";
    $row = $db->get_row($rech, ARRAY_A);
    if ($row)
        extract($row);

    // On construit le tableau des produits sur les sites du contrat
    $rech = "SELECT rlic_code FROM `" . TBRLIC . "` WHERE `rlic_codecli` = '" . $cocl_codecli . "' AND `rlic_dateout` = '0000-00-00'";

    // On ne prend que les produits "tous sites" ou des sites choisis sur le contrat
    if (count($tab_sites_cocl) > 0) {
        if (count($tab_sites_cocl) > 1) {
            $rech .= " AND (";
            foreach ($tab_sites_cocl as $value) {
                $rech .= "`rlic_idsite` = " . $value . " OR ";
            }
            $rech = substr($rech, 0, strlen($rech) - 4);
            $rech .= ")";
        } else
            $rech .= " AND `rlic_idsite` = " . $tab_sites_cocl[0];
    }

    // On ne prend que les produits "tous sites" ou des sites choisis sur les annexes
    if (count($tab_sites_cocla) > 0) {
        if (count($tab_sites_cocla) > 1) {
            $rech .= " AND (";
            foreach ($tab_sites_cocla as $value) {
                $rech .= "`rlic_idsite` = " . $value . " OR ";
            }
            $rech = substr($rech, 0, strlen($rech) - 4);
            $rech .= ")";
        } else
            $rech .= " AND `rlic_idsite` = " . $tab_sites_cocla[0];
    }

    // Site site principal, on prend aussi les produits sur ce site
    if ($sitep == 1)
        $rech .= " OR `rlic_idsite` = 0";

    // On inclus les produit "tous sites"
    $rech .= " OR `rlic_idsite` = -1";
    $rech .= " ORDER BY `rlic_idsite`";

    $rows = $db->get_results($rech, ARRAY_A);
    if (($rows) AND (count($rows) > 0)) {
        foreach ($rows as $row) {
            $row = encode_str($row);
            extract($row);
            $tab_rlic_sel[] = $rlic_code;
        }
    }

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

    return $tab_rlic_sel;
}


/**
 * Retourne un tableau des licences sélectionnables pour une liste de sites donnés
 * $tab_sites_cocl : tableau des sites du contrat
 * $tab_sites_cocla : tableau des sites des annexes au contrat
 *
 * @param $id
 * @param $co
 * @param $sitep
 * @param $tab_sites_cocl
 * @param $tab_sites_cocla
 * @param bool $open
 * @return array
 */
function cre_tab_rlic_cocla($id, $co, $sitep, $tab_sites_cocl, $tab_sites_cocla, $open = TRUE)
{
    global
    $db;
    $tab_rlic_sel_coa = [];
    $tab_rlic_sel = [];

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

    // On récupère le contrat associé
    if ($id <> 0) {
        $rech = "SELECT cocla_coderlp, cocla_codecocl FROM `" . TBCOCLA . "` WHERE `cocla_id` = '$id'";
        $row = $db->get_row($rech, ARRAY_A);
        if ($row) {
            extract($row);
            // Les produits possibles à coup s�r sont ceux de l'annexe
            if (trim($cocla_coderlp) <> "")
                $tab_rlic_sel = explode('-', $cocla_coderlp);


            // Création du tableau complet des produits possibles
            $tab_rlic_sel_coa = cre_tab_rlic_cocl($cocla_codecocl, $sitep, $tab_sites_cocl, $tab_sites_cocla, FALSE);
        }
    } else {
        if (trim($co) <> "")
            $tab_rlic_sel_coa = cre_tab_rlic_cocl($co, $sitep, $tab_sites_cocl, $tab_sites_cocla, FALSE);
    }
    if (count($tab_rlic_sel_coa) > 0) {
        foreach ($tab_rlic_sel_coa as $value) {
            // Déjà dans le tableau des produits de l'annexe : on ne fait rien
            // Sinon, quelques contrôles
            if (exist_in_array($value, $tab_rlic_sel) == FALSE) {
                $sel_ok = TRUE;

                // On récupère le contrat principal "couvre" déjà le produit
                $rech = "SELECT COUNT(cocl_id) FROM `" . TBCOCL . "` WHERE `cocl_coderlp` LIKE '%" . $value . "%'";
                $nbres = $db->get_var($rech);

                // Si pas de résultat : le produit est s�lectionnable dans l'annexe
                if ($nbres > 0)
                    $sel_ok = FALSE;

                // On vérifie si une annexe "couvre" déjà le produit
                $rech = "SELECT COUNT(cocla_id) FROM `" . TBCOCLA . "` WHERE `cocla_coderlp` LIKE '%" . $value . "%'";
                $nbres = $db->get_var($rech);

                // Si pas de résultat : le produit est s�lectionnable dans l'annexe
                if ($nbres > 0)
                    $sel_ok = FALSE;

                if ($sel_ok == TRUE)
                    $tab_rlic_sel[] = $value;
            }
        }
    }

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

    return $tab_rlic_sel;
}

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

    if ($open == TRUE)
        $db = open_database(DBUSER, DBPASS, DBNAME, DBHOST);
    $rech2 = "SELECT * FROM `" . TBRPDT . "` WHERE `rpdt_code` = '" . $db->escape($code) . "'";
    $row2 = $db->get_row($rech2, ARRAY_A);
    if ($open == TRUE)
        $db->disconnect();

    return $row2;
}

/**
 * Vérification du nombre de patrimoines matériel sur une agence
 *
 * @param $agence
 * @param bool $open
 * @return null
 */
function nb_rpdta($agence, $open = TRUE)
{
    global
    $db;

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

    return $nbexist;
}

/**
 * Vérification du nombre de patrimoines matériel sur un client
 *
 * @param $client
 * @param bool $open
 * @return null
 */
function nb_rpdtc($client, $open = TRUE)
{
    global
    $db;


    if ($open == TRUE)
        $db = open_database(DBUSER, DBPASS, DBNAME, DBHOST);
    if ($client <> "") {
        $rexist = "SELECT COUNT(*) FROM `" . TBRPDT . "` WHERE `rpdt_codecli` = '" . $db->escape($client) . "'";
        $nbexist = $db->get_var($rexist);
    }
    if ($open == TRUE)
        $db->disconnect();

    return $nbexist;
}

/**
 * Vérifie s'il existe des patrimoines de produits actifs pour un client particulier
 *
 * @param $codecli
 * @param bool $open
 * @return bool
 */
function exist_rpdt_actif($codecli, $open = TRUE)
{
    global
    $db;
    $exist = FALSE;

    if ($open == TRUE)
        $db = open_database(DBUSER, DBPASS, DBNAME, DBHOST);
    $rexist = "SELECT COUNT(*) FROM `" . TBRPDT . "` WHERE `rpdt_codecli` = '" . $db->escape($codecli) . "' AND `rpdt_dateout` = '0000-00-00'";
    $nbres = $db->get_var($rexist);
    if ($nbres > 0)
        $exist = TRUE;
    if ($open == TRUE)
        $db->disconnect();

    return $exist;
}

/**
 * Vérifie si un patrimoine matériel est présent dans un patrimoine de problème
 *
 * @param $coderpdt
 * @param bool $open
 * @return bool
 */
function exist_rpdt_in_rpbm($coderpdt, $open = TRUE)
{
    global
    $db;
    $exist = FALSE;

    if ($open == TRUE)
        $db = open_database(DBUSER, DBPASS, DBNAME, DBHOST);
    $rexist = "SELECT COUNT(*) FROM `" . TBRPBM . "` WHERE `rpbm_coderlp` = '" . $db->escape($coderpdt) . "'";
    $nbres = $db->get_var($rexist);
    if ($nbres > 0)
        $exist = TRUE;
    if ($open == TRUE)
        $db->disconnect();

    return $exist;
}

/**
 * Vérifie si un patrimoine matériel est présent dans un patrimoine de problème non clôt
 *
 * @param $coderpdt
 * @param bool $open
 * @return bool
 */
function exist_rpdt_in_rpbm_actif($coderpdt, $open = TRUE)
{
    global
    $db;
    $exist = FALSE;

    if ($open == TRUE)
        $db = open_database(DBUSER, DBPASS, DBNAME, DBHOST);
    $rexist = "SELECT COUNT(*) FROM `" . TBRPBM . "` WHERE `rpbm_coderlp` = '" . $db->escape($coderpdt) . "' AND `rpbm_datett` = '0000-00-00'";
    $nbres = $db->get_var($rexist);
    if ($nbres > 0)
        $exist = TRUE;
    if ($open == TRUE)
        $db->disconnect();

    return $exist;
}

/**
 * Retourne un tableau des produits sélectionnables pour une liste de sites donnés
 * $tab_sites_cocl : tableau des sites du contrat
 * $tab_sites_cocla : tableau des sites des annexes au contrat
 *
 * @param $co
 * @param $sitep
 * @param $tab_sites_cocl
 * @param array $tab_sites_cocla
 * @param bool $open
 * @return array
 */
function cre_tab_rpdt_cocl($co, $sitep, $tab_sites_cocl, $tab_sites_cocla = [], $open = TRUE)
{
    global
    $db;
    $tab_rpdt_sel = [];

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

    // On récupère le champ des produits/licences rattachés sur le contrat
    $rech = "SELECT cocl_coderlp, cocl_codecli FROM `" . TBCOCL . "` WHERE `cocl_code` = '" . $db->escape($co) . "'";
    $row = $db->get_row($rech, ARRAY_A);
    if ($row)
        extract($row);

    // On construit le tableau des produits sur les sites du contrat
    $rech = "SELECT rpdt_code FROM `" . TBRPDT . "` WHERE `rpdt_codecli` = '" . $cocl_codecli . "' AND `rpdt_dateout` = '0000-00-00'";

    // On ne prend que les produits "tous sites" ou des sites choisis sur le contrat
    if (count($tab_sites_cocl) > 0) {
        if (count($tab_sites_cocl) > 1) {
            $rech .= " AND (";
            foreach ($tab_sites_cocl as $value) {
                $rech .= "`rpdt_idsite` = " . $value . " OR ";
            }
            $rech = substr($rech, 0, strlen($rech) - 4);
            $rech .= ")";
        } else
            $rech .= " AND `rpdt_idsite` = " . $tab_sites_cocl[0];
    }

    // On ne prend que les produits "tous sites" ou des sites choisis sur les annexes
    if (count($tab_sites_cocla) > 0) {
        if (count($tab_sites_cocla) > 1) {
            $rech .= " AND (";
            foreach ($tab_sites_cocla as $value) {
                $rech .= "`rpdt_idsite` = " . $value . " OR ";
            }
            $rech = substr($rech, 0, strlen($rech) - 4);
            $rech .= ")";
        } else
            $rech .= " AND `rpdt_idsite` = " . $tab_sites_cocla[0];
    }

    // Site site principal, on prend aussi les produits sur ce site
    if ($sitep == 1)
        $rech .= " OR `rpdt_idsite` = 0";

    // On inclus les produit "tous sites"
    $rech .= " OR `rpdt_idsite` = -1";
    $rech .= " ORDER BY `rpdt_idsite`";

    $rows = $db->get_results($rech, ARRAY_A);
    if (($rows) AND (count($rows) > 0)) {
        foreach ($rows as $row) {
            $row = encode_str($row);
            extract($row);
            $tab_rpdt_sel[] = $rpdt_code;
        }
    }
    if ($open == TRUE)
        $db->disconnect();

    return $tab_rpdt_sel;
}


/**
 * Retourne un tableau des produits sélectionnables pour une liste de sites donnés
 * $tab_sites_cocl : tableau des sites du contrat
 * $tab_sites_cocla : tableau des sites des annexes au contrat
 *
 * @param $id
 * @param $co
 * @param $sitep
 * @param $tab_sites_cocl
 * @param $tab_sites_cocla
 * @param bool $open
 * @return array
 */
function cre_tab_rpdt_cocla($id, $co, $sitep, $tab_sites_cocl, $tab_sites_cocla, $open = TRUE)
{
    global
    $db;
    $tab_rpdt_sel_coa = [];
    $tab_rpdt_sel = [];

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

    // On récupère le contrat associé
    if ($id <> 0) {
        $rech = "SELECT cocla_coderlp, cocla_codecocl FROM `" . TBCOCLA . "` WHERE `cocla_id` = '$id'";
        $row = $db->get_row($rech, ARRAY_A);
        if ($row) {
            extract($row);
            // Les produits possibles à coup sûr sont ceux de l'annexe
            if (trim($cocla_coderlp) <> "")
                $tab_rpdt_sel = explode('-', $cocla_coderlp);


            // Création du tableau complet des produits possibles
            $tab_rpdt_sel_coa = cre_tab_rpdt_cocl($cocla_codecocl, $sitep, $tab_sites_cocl, $tab_sites_cocla, FALSE);
        }
    } else {
        if (trim($co) <> "")
            $tab_rpdt_sel_coa = cre_tab_rpdt_cocl($co, $sitep, $tab_sites_cocl, $tab_sites_cocla, FALSE);
    }
    if (count($tab_rpdt_sel_coa) > 0) {
        foreach ($tab_rpdt_sel_coa as $value) {
            // Déjà dans le tableau des produits de l'annexe : on ne fait rien
            // Sinon, quelques contrôles
            if (exist_in_array($value, $tab_rpdt_sel) == FALSE) {
                $sel_ok = TRUE;

                // On récupère le contrat principal "couvre" déjà le produit
                $rech = "SELECT COUNT(cocl_id) FROM `" . TBCOCL . "` WHERE `cocl_coderlp` LIKE '%" . $value . "%'";
                $nbres = $db->get_var($rech);

                // Si pas de résultat : le produit est s�lectionnable dans l'annexe
                if ($nbres > 0)
                    $sel_ok = FALSE;

                // On vérifie si une annexe "couvre" déjà le produit
                $nbres = $db->get_var($rech);

                // Si pas de résultat : le produit est s�lectionnable dans l'annexe
                if ($nbres > 0)
                    $sel_ok = FALSE;

                if ($sel_ok == TRUE)
                    $tab_rpdt_sel[] = $value;
            }
        }
    }

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

    return $tab_rpdt_sel;
}

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

    if ($open == TRUE)
        $db = open_database(DBUSER, DBPASS, DBNAME, DBHOST);
    $rech2 = "SELECT * FROM `" . TBRPBM . "` WHERE `rpbm_id` = '$id'";
    $row2 = $db->get_row($rech2, ARRAY_A);
    if ($open == TRUE)
        $db->disconnect();

    return $row2;
}

/**
 * Vérifie s'il existe des déclarations de problèmes pour une fiche patrimoine licence ou matériel
 *
 * @param $code
 * @param bool $open
 * @return bool
 */
function exist_rpbm($code, $open = TRUE)
{
    global
    $db;
    $exist = FALSE;

    if ($open == TRUE)
        $db = open_database(DBUSER, DBPASS, DBNAME, DBHOST);
    $rexist = "SELECT COUNT(*) FROM `" . TBRPBM . "` WHERE `rpbm_coderlp` = '" . $db->escape($code) . "'";
    $nbres = $db->get_var($rexist);
    if ($nbres > 0)
        $exist = TRUE;
    if ($open == TRUE)
        $db->disconnect();

    return $exist;
}

/**
 * Vérifie s'il existe des déclarations de problèmes non affectées (sauf code en cours)
 *
 * @param $mode
 * @param $codecli
 * @param $codeint
 * @param bool $open
 * @return bool
 */

function exist_rpbm_actif($mode, $codecli, $codeint, $open = TRUE)
{
    global
    $db;
    $exist = FALSE;

    if ($open == TRUE)
        $db = open_database(DBUSER, DBPASS, DBNAME, DBHOST);
    if ($mode == "edit") // On est édition d'intervention
        $rexist = "SELECT COUNT(*) FROM `" . TBRPBM . "` WHERE `rpbm_codeint` = '" . $db->escape($codeint) . "' OR (`rpbm_codecli`= '" . $db->escape($codecli) . "' AND `rpbm_datett`= '0000-00-00' AND `rpbm_codeint` IS NULL)";
    if ($mode == "add") // On est en création d'intervention
        $rexist = "SELECT COUNT(*) FROM `" . TBRPBM . "` WHERE `rpbm_codecli`= '" . $db->escape($codecli) . "' AND `rpbm_codeint` IS NULL";
    $nbres = $db->get_var($rexist);
    if ($nbres > 0)
        $exist = TRUE;
    if ($open == TRUE)
        $db->disconnect();

    return $exist;
}

/**
 * Vérifie s'il existe des déclarations de problèmes non affectées (sauf code en cours) sur un site donné
 *
 * @param $mode
 * @param $codecli
 * @param $codeint
 * @param $site
 * @param bool $open
 * @return bool
 */
function exist_rpbm_actif_site($mode, $codecli, $codeint, $site, $open = TRUE)
{
    global
    $db;
    $exist = FALSE;

    if ($open == TRUE)
        $db = open_database(DBUSER, DBPASS, DBNAME, DBHOST);
    switch ($mode) {
        // On est édition d'intervention
        case "edit" :
            $rech = "SELECT COUNT(*) FROM `" . TBRPBM . "` WHERE (`rpbm_codeint` = '" . $db->escape($codeint) . "' AND `rpbm_idsite`= '" . $site . "') OR (`rpbm_codecli`= '" . $db->escape($codecli) . "' AND `rpbm_idsite`= '" . $site . "' AND `rpbm_codeint` IS NULL)";
            break;
        // On est en création d'intervention
        case "add" :
            $rech = "SELECT COUNT(*) FROM `" . TBRPBM . "` WHERE `rpbm_codecli`= '" . $db->escape($codecli) . "' AND `rpbm_idsite`= '" . $site . "' AND `rpbm_codeint` IS NULL";
            break;
        default :
            break;
    }
    $nbres = $db->get_var($rech);
    if ($nbres > 0)
        $exist = TRUE;
    if ($open == TRUE)
        $db->disconnect();

    return $exist;
}

/**
 * Vérifie s'il reste des problèmes à affecter sur une intervention avec champ ID inth à zéro (cas où ajout)
 * ou comprenant l'ID en cours (cas où modification)
 *
 * @param $codeint
 * @param int $idinth
 * @param bool $open
 * @return bool
 */
function exist_rpbm_int($codeint, $idinth = 0, $open = TRUE)
{
    global
    $db;
    $exist = FALSE;

    if ($open == TRUE)
        $db = open_database(DBUSER, DBPASS, DBNAME, DBHOST);
    $rech = "SELECT COUNT(*) FROM `" . TBRPBM . "` WHERE `rpbm_codeint` = '" . $db->escape($codeint) . "' AND `rpbm_idinth` = 0";
    if ($idinth <> 0)
        $rech .= " OR `rpbm_idinth` = " . $idinth;
    $nbres = $db->get_var($rech);
    if ($nbres > 0)
        $exist = TRUE;
    if ($open == TRUE)
        $db->disconnect();

    return $exist;
}

// Types licences

/**
 * Vérification du nombre de types de licences
 *
 * @param bool $open
 * @return null
 */
function nb_typlic($open = TRUE)
{
    global
    $db;

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

    return $nbexist;
}

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

    if ($open == TRUE)
        $db = open_database(DBUSER, DBPASS, DBNAME, DBHOST);
    $rech2 = "SELECT * FROM `" . TBRLTL . "` WHERE rltl_code = '" . $db->escape($code) . "'";
    $row2 = $db->get_row($rech2, ARRAY_A);
    if ($open == TRUE)
        $db->disconnect();

    return $row2;
}


/** Etats Produits *
 * @param bool $open
 * @return null
 */

// Vérification du nombre de types d'état produits
function nb_etatpdt($open = TRUE)
{
    global
    $db;

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

    return $nbexist;
}

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

// Vérification du nombre de catégories produits (patrimoines)
function nb_catpdt($open = TRUE)
{
    global
    $db;

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

    return $nbexist;
}

/** Type accès Télémaintenance *
 * @param $code
 * @param bool $open
 * @return array|null
 */

// Lecture d'un enregistrement type accès télémaintenance
function lit_enr_tmta($code, $open = TRUE)
{
    global
    $db;

    if ($open == TRUE)
        $db = open_database(DBUSER, DBPASS, DBNAME, DBHOST);
    $rech2 = "SELECT * FROM `" . TBRLPTMTA . "` WHERE rlptmta_code = '" . $db->escape($code) . "'";
    $row2 = $db->get_row($rech2, ARRAY_A);
    if ($open == TRUE)
        $db->disconnect();

    return $row2;
}


/** Type licence *
 * @param $code
 * @param bool $open
 * @return array|null
 */

// Lecture d'un enregistrement type accès télémaintenance
function lit_enr_tl($code, $open = TRUE)
{
    global
    $db;

    if ($open == TRUE)
        $db = open_database(DBUSER, DBPASS, DBNAME, DBHOST);
    $rech2 = "SELECT * FROM `" . TBRLTL . "` WHERE rltl_code = '" . $db->escape($code) . "'";
    $row2 = $db->get_row($rech2, ARRAY_A);
    if ($open == TRUE)
        $db->disconnect();

    return $row2;
}


/** Media *
 * @param bool $open
 * @return null
 */

// Vérification du nombre de types de m�dias
function nb_media($open = TRUE)
{
    global
    $db;

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

    return $nbexist;
}

/**
 * Lecture d'un enregistrement média
 *
 * @param $code
 * @param bool $open
 * @return array|null
 */
function lit_enr_med($code, $open = TRUE)
{
    global
    $db;

    if ($open == TRUE)
        $db = open_database(DBUSER, DBPASS, DBNAME, DBHOST);
    $rech2 = "SELECT * FROM `" . TBRLMED . "` WHERE rlmed_code = '" . $db->escape($code) . "'";
    $row2 = $db->get_row($rech2, ARRAY_A);
    if ($open == TRUE)
        $db->disconnect();

    return $row2;
}

// Catégorie Produit

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

    if ($open == TRUE)
        $db = open_database(DBUSER, DBPASS, DBNAME, DBHOST);
    $rech2 = "SELECT * FROM `" . TBRPCAT . "` WHERE rpcat_code = '" . $db->escape($code) . "'";
    $row2 = $db->get_row($rech2, ARRAY_A);
    if ($open == TRUE)
        $db->disconnect();

    return $row2;
}

// Logiciel télémaintenance

/**
 * Lecture d'un enregistrement logiciel de télémaintenance
 *
 * @param $code
 * @param bool $open
 * @return array|null
 */
function lit_enr_rlptml($code, $open = TRUE)
{
    global
    $db;

    if ($open == TRUE)
        $db = open_database(DBUSER, DBPASS, DBNAME, DBHOST);
    $rech2 = "SELECT * FROM `" . TBRLPTML . "` WHERE rlptml_code = '" . $db->escape($code) . "'";
    $row2 = $db->get_row($rech2, ARRAY_A);
    if ($open == TRUE)
        $db->disconnect();

    return $row2;
}


// Mode Mise à Jour

/**
 * Lecture d'un enregistrement mode mise à jour
 *
 * @param $code
 * @param bool $open
 * @return array|null
 */
function lit_enr_rlpmm($code, $open = TRUE)
{
    global
    $db;

    if ($open == TRUE)
        $db = open_database(DBUSER, DBPASS, DBNAME, DBHOST);
    $rech2 = "SELECT * FROM `" . TBRLPMM . "` WHERE rlpmm_code = '" . $db->escape($code) . "'";
    $row2 = $db->get_row($rech2, ARRAY_A);
    if ($open == TRUE)
        $db->disconnect();

    return $row2;
}

/**
 * Nombre d'enregistrements mode mise à jour
 *
 * @param bool $open
 * @return null
 */
function nb_rlpmm($open = TRUE)
{
    global
    $db;

    if ($open == TRUE)
        $db = open_database(DBUSER, DBPASS, DBNAME, DBHOST);
    $rech2 = "SELECT COUNT(*) FROM `" . TBRLPMM . "`";
    $nbexist = $db->get_var($rech2);
    if ($open == TRUE)
        $db->disconnect();

    return $nbexist;
}

?>