<?php
//$Id$ 
//gen openMairie le 24/10/2024 10:17

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

class consultation_entrante extends consultation_entrante_gen {

    /**
     * TRIGGER - triggerajouterapres.
     *
     * - Si l’identifiant d’acteur du service consultant correspond 
     *   à l’identifiant d’un tiers associé au dossier,
     *   ce tiers est marqué comme « service consultant »
     *
     * @return boolean
     */
    function triggerajouterapres($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
        $this->addToLog(__METHOD__."(): start", EXTRA_VERBOSE_MODE);
        $parent_res = parent::triggerajouterapres($id, $dnu1, $val);
        if ($parent_res === false) return $parent_res;
        $data = array('val' => &$val, 'id' => $id, 'parent_res' => &$parent_res);
        $this->f->module_manager->run_hooks('triggerajouterapres_override_pre', $this, $data);

        // Nettoyage de l’identifiant du service consultant (évite les problèmes d'espaces ou retours chariot)
        $service_id = trim($val['service_consultant_id']);

        // la requête n'est pas incluse dans un sprintf, suite à l'utilisation de E'\r\n' (particulièrement difficile à échapper), 
        // afin de créer un array à partir des lignes d'un champ (le délimiteur étant un saut de ligne)
        $sql = "SELECT lien_dossier_tiers
            FROM ".DB_PREFIXE."lien_dossier_tiers
            INNER JOIN ".DB_PREFIXE."dossier ON lien_dossier_tiers.dossier = dossier.dossier
            WHERE dossier.dossier = '".$this->f->db->escapeSimple($val['dossier'])."' 
            AND '".$this->f->db->escapeSimple($service_id)."' IN (
                SELECT TRIM(
                    UNNEST(
                        STRING_TO_ARRAY(tiers_consulte.uid_platau_acteur::text, E'\r\n')
                    )
                )
                FROM ".DB_PREFIXE."tiers_consulte
                WHERE tiers_consulte.tiers_consulte = lien_dossier_tiers.tiers
            );";

        $qres = $this->f->get_all_results_from_db_query(
            $sql,
            array(
                "origin" => __METHOD__,
                "force_return" => true,
                )
        );

        if (isset($qres['result'][0]['lien_dossier_tiers'])) {
            $tiers_inst = $this->f->get_inst__om_dbform(array(
                'obj' => 'lien_dossier_tiers',
                'idx' => $qres['result'][0]['lien_dossier_tiers']
            ));
        
            $valF = array();
            // Pour appeler la fonction modifier il faut traiter tous les champs de l'objet
            foreach ($tiers_inst->champs as $champ) {
                    $valF[$champ] = $tiers_inst->getVal($champ);
            }
            $tiers_inst->setParameter("maj", 1);
            // Passage du tiers consultant à 't', s'il réunit les conditions incluses dans la requête
            $valF['service_consultant'] = 't';
            $ret = $tiers_inst->modifier($valF);

            if ($ret === false) {
                $this->correct = false;
                $this->addToMessage(__("Une erreur est survenue lors de la mise à jour des champs."));
                // Termine le traitement
                return $this->end_treatment(__METHOD__, false);
            }
        } 
        else {
            // Gérer le cas où lien_dossier_tiers n'est pas défini
            $this->f->log(__METHOD__, "lien_dossier_tiers non trouvé dans le résultat", "ERROR", "custom");
        }

        $res = true;
        $data = array('val' => &$val, 'id' => $id, 'result' => &$res);
        $this->f->module_manager->run_hooks('triggerajouterapres_override_post', $this, $data);
        $this->addToLog(__METHOD__."(): end", EXTRA_VERBOSE_MODE);
        return $res;
    }
}
