<?php
//$Id$ 
//gen openMairie le 18/12/2020 20:07

require_once "../gen/obj/lien_id_interne_uid_externe.class.php";

class lien_id_interne_uid_externe extends lien_id_interne_uid_externe_gen {

    /**
     * @var $SQL_TEMPLATE_DOSSIER_COLLECTIVITE
     *
     * Template pour sélectionner un/des éléments de la table de lien,
     * à partir d'un numéro de dossier et d'un identifiant de collectivité.
     */
    protected $SQL_TEMPLATE_DOSSIER_COLLECTIVITE = "
        SELECT
            %s
        FROM
            ".DB_PREFIXE."dossier
            LEFT JOIN ".DB_PREFIXE."lien_id_interne_uid_externe
                ON lien_id_interne_uid_externe.object_id = dossier.dossier
                AND lien_id_interne_uid_externe.object = 'dossier'
        WHERE
            dossier.om_collectivite = '%s'
            AND lien_id_interne_uid_externe.external_uid = '%s'
    ";

    /**
     * [is_dossier_exists]
     * Permet de vérifier que le dossier existe à partir de son identifiant.
     * Il est nécessaire de spécifier soit l'acteur soit la collectivité
     *
     * @param string $dossier              identifiant du dossier
     * @param string $external_uid_acteur  libellé de collectivité
     *
     * @return boolean  'true' si le dossier existe, 'false' sinon
     *
     * @throw InvalidArgumentException  si aucun acteur ni collectivité
     */
    public function is_dossier_exist($external_uid_dossier, $collectiviteId) {
        if (empty($collectiviteId)) {
            throw new InvalidArgumentException(sprintf(
                __("Échec du test d'existence du dossier %s (aucun acteur / service indiqué)"),
                $external_uid_dossier));
        }
        $sql = sprintf($this->SQL_TEMPLATE_DOSSIER_COLLECTIVITE,
                       'COUNT(lien_id_interne_uid_externe.object_id)',
                       $this->f->db->escapeSimple($collectiviteId),
                       $this->f->db->escapeSimple($external_uid_dossier));
        $this->f->addToLog(__METHOD__."() sql: $sql", DEBUG_MODE);
        $count = $this->f->db->getone($sql);
        $this->f->addToLog(__METHOD__."() count: $count", DEBUG_MODE);
        $this->f->isDatabaseError($count);
        return intval($count) != 0;
    }

    /**
     * [is_dossier_exist]
     * Récupère l'identifiant openADS d'un dossier à partir de son identifiant Platau
     * Il est nécessaire de spécifier soit l'acteur soit la collectivité
     *
     * @param string $dossier              identifiant du dossier
     * @param string $external_uid_acteur  libellé de collectivité
     *
     * @return string  le numéro de dossier trouvé, null sinon
     *
     * @throw InvalidArgumentException  si aucun acteur ni collectivité
     */
    public function get_id_dossier_from_external_uid($external_uid_dossier,
                                                     $collectiviteId) {
        if (empty($collectiviteId)) {
            throw new InvalidArgumentException(sprintf(
                __("Échec du test d'existence du dossier %s (aucun acteur / service indiqué)"),
                $external_uid_dossier));
        }
        $sql = sprintf($this->SQL_TEMPLATE_DOSSIER_COLLECTIVITE,
                       'lien_id_interne_uid_externe.object_id',
                       $this->f->db->escapeSimple($collectiviteId),
                       $this->f->db->escapeSimple($external_uid_dossier));
        $this->f->addToLog(__METHOD__."() sql: $sql", DEBUG_MODE);
        $id_dossier = $this->f->db->getone($sql);
        $this->f->addToLog(__METHOD__."() id_dossier: $id_dossier", DEBUG_MODE);
        $this->f->isDatabaseError($id_dossier);
        return $id_dossier;
    }
}
