<?php
/**
 * DBFORM - 'demandeur' - Surcharge gen.
 *
 * Ce script définit la classe 'demandeur'.
 *
 * @package openads
 * @version SVN : $Id: demandeur.class.php 5056 2015-08-19 10:25:20Z nhaye $
 */

require_once ("../gen/obj/demandeur.class.php");
require_once "../obj/task.class.php";

class demandeur extends demandeur_gen {

    var $required_tag = array("particulier_nom",
                                "personne_morale_denomination",
                                "personne_morale_raison_sociale"
                            );

    function init_class_actions() {
        parent::init_class_actions();
        //
        $this->class_actions[998] = array(
            "identifier" => "json_data",
            "view" => "view_json_data",
            "permission_suffix" => "consulter",
        );
        //
        $this->class_actions[11] = array(
            "identifier" => "adresses_postale_values_json",
            "view" => "view_adresses_postale_values_json",
            "permission_suffix" => "consulter",
        );
    }

    /**
     * Clause select pour la requête de sélection des données de l'enregistrement.
     *
     * @return array
     */
    function get_var_sql_forminc__champs() {
        return array(
            'demandeur',
            'type_demandeur',
            'qualite',
            'om_collectivite',
            'particulier_civilite', 'particulier_nom', 'particulier_prenom',
            'particulier_date_naissance', 'particulier_commune_naissance', 
            'particulier_departement_naissance', 'particulier_pays_naissance',
            'personne_morale_denomination', 
            'personne_morale_raison_sociale', 'personne_morale_siret',
            'personne_morale_categorie_juridique',
            'personne_morale_civilite', 'personne_morale_nom', 'personne_morale_prenom',
            'numero',
            'voie',
            'complement',
            'lieu_dit',
            'localite',
            'code_postal',
            'bp',
            'cedex',
            'pays',
            'division_territoriale',
            'telephone_fixe',
            'telephone_mobile',
            'indicatif',
            'fax',
            'courriel',
            'notification',
            'frequent',
            'num_inscription',
            'nom_cabinet',
            'conseil_regional',
            'titre_obt_diplo_spec',
            'date_obt_diplo_spec',
            'lieu_obt_diplo_spec',
        );
    }

    /**
     * Mise en page.
     *
     * @param formulaire $form Instance de la classe om_formulaire.
     * @param integer    $maj  Identifiant de l'action.
     */
    function setLayout(&$form, $maj){

        // Gestion recherche pétitionnaire fréquent
        $search_fields = '';
        if ($maj == 0 || $maj == 1) {
            if ($form->val['type_demandeur'] === 'petitionnaire' ||
                $form->val['type_demandeur'] === 'avocat' ||
                $form->val['type_demandeur'] === 'bailleur') {
                $search_fields = ' search_fields';
            }
        }
        // Container du formulaire
        $form->setBloc('qualite', 'D', '', 'formulaire-demandeur');
        
            // Container des fieldset Qualité et Collectivité
            $form->setBloc('qualite', 'D', '', 'formulaire-demandeur--qualite-collectivite');
                // Qualité
                $form->setFieldset('qualite','DF',_("Qualité"));
                // Collectivité
                // Renomme "collectivité" en "service" si l'option est activée
                $om_collectivite_libelle = __("Collectivité");
                if ($this->f->is_option_renommer_collectivite_enabled() === true) {
                    $om_collectivite_libelle = __("service");
                }
                $form->setFieldset('om_collectivite','DF', $om_collectivite_libelle, $search_fields);
            $form->setBloc('om_collectivite', 'F');
            // Fin - Container des fieldset Qualité et Collectivité    


            // Début - Etat civil Particulier
            $form->setFieldset('particulier_civilite','D',_("Etat civil"), "group particulier_fields");
                // Nom - prénom
                $form->setBloc('particulier_nom','D', "","group particulier--nom-prenom".$search_fields);
                $form->setBloc('particulier_prenom', 'F');
                // Date + Commune de naissance
                $form->setBloc('particulier_date_naissance','D',_("Date et Lieu de Naissance"),"group particulier--naissance");
                $form->setBloc('particulier_commune_naissance', 'F');
                // Dpt + Pays de naissance
                $form->setBloc('particulier_departement_naissance','D', '',"group particulier--naissance-dpt-pays");
                $form->setBloc('particulier_pays_naissance', 'F');
            $form->setFieldset('particulier_pays_naissance','F');
            // Fin - Etat civil Particulier


            // Début - État civil Personne morale 
        $form->setFieldset('personne_morale_denomination','D',("Personne morale"),"personne_morale_fields");
            // Denomination - Raison Sociale    
            $form->setBloc('personne_morale_denomination','D',"", "group personne_morale--denom-rs");
            $form->setBloc('personne_morale_raison_sociale', 'F');
            // SIRET - Cat. juridique
            $form->setBloc('personne_morale_siret','D',"","group personne_morale--siret-cj");
            $form->setBloc('personne_morale_categorie_juridique','F');
            // Civilité
            $form->setBloc('personne_morale_civilite', 'DF', "");
            // Nom - Prénom 
            $form->setBloc('personne_morale_nom', 'D', "", "group personne_morale--nom-prenom".$search_fields);
            $form->setBloc('personne_morale_prenom', 'F');
        $form->setFieldset('personne_morale_prenom', 'F');
        // Fin - État Civil - Personne morale 
        
        // Adresse
        $form->setFieldset('numero', 'D', __("Adresse"), "formulaire-demandeur--adresse");
        
            $form->setBloc('numero', 'D', "", "group adresse--num-voie");
            $form->setBloc('voie', 'F');
            
            $form->setBloc('complement', 'DF', "");
            
            $form->setBloc('lieu_dit', 'D', "", "group");
            $form->setBloc('localite', 'F');
            
            $form->setBloc('code_postal', 'D', "", "group");
            $form->setBloc('cedex', 'F');
            
            $form->setBloc('pays', 'D', "", "", "group");
            $form->setBloc('division_territoriale', 'F');
        $form->setFieldset('division_territoriale', 'F');

        // Coordonnées
        $form->setFieldset('telephone_fixe', 'D', __("Coordonnees"), "");
            // Fixe + mobile + Indicatif
            $form->setBloc('telephone_fixe', 'D', __("Téléphone"), "group");
            $form->setBloc('indicatif', 'F');
            // Fax
            $form->setBloc('fax', 'DF', "", "group");

            $form->setBloc('courriel', 'DF', '', "group");
            $form->setBloc('notification', 'DF');

        $form->setFieldset('notification', 'F');

        // Architecte
        $form->setFieldset('num_inscription', 'D', __("Architecte législation connexe"), "");
            $form->setBloc('num_inscription', 'D', "", "group");
            $form->setBloc('num_inscription', 'F');
            $form->setBloc('nom_cabinet', 'D', "", "group");
            $form->setBloc('nom_cabinet', 'F');
            $form->setBloc('conseil_regional', 'D', "", "group");
            $form->setBloc('conseil_regional', 'F');
            $form->setBloc('titre_obt_diplo_spec', 'D', __("Obtention du diplôme de spécialisation et d’approfondissement en architecture mention architecture et patrimoine ou équivalent"), "alignForm");
            $form->setBloc('lieu_obt_diplo_spec', 'F');
        $form->setFieldset('lieu_obt_diplo_spec', 'F');
        
        //Fin container
        $form->setBloc('lieu_obt_diplo_spec', 'F');

    }

    /**
     * SETTER_FORM - setVal (setVal).
     *
     * @return void
     */
    function setVal(&$form, $maj, $validation, &$dnu1 = null, $dnu2 = null) {
        parent::setVal($form, $maj, $validation);
        //
        if ($maj == 0) {
            $form->setVal("pays", "France");
        }
    }

    /**
     * Lbellé des champs
     */
    function setLib(&$form,$maj) {
        parent::setLib($form,$maj);
        $form->setLib('qualite', '');
        $form->setLib('om_collectivite', '');
        // État civil - Particulier
        $form->setLib('particulier_date_naissance', __("Date"));
        $form->setLib('particulier_commune_naissance', __("Commune"));
        $form->setLib('particulier_departement_naissance', __("Département"));
        $form->setLib('particulier_pays_naissance', __("Pays"));

        //Coordonnées
        $form->setLib('telephone_fixe', __("Fixe"));
        $form->setLib('telephone_mobile', __("Mobile"));
        $form->setLib('notification', __("Le demandeur souhaite être notifié électroniquement"));

        // Dans le cas d’une intervention sur un immeuble classé au titre des monuments historiques
        $form->setLib('titre_obt_diplo_spec', __("Titre"));
        $form->setLib('date_obt_diplo_spec', __("Date"));
        $form->setLib('lieu_obt_diplo_spec', __("Établissement / ville / pays"));

        // Architecte législation connexe
        $form->setLib('num_inscription', __("Numéro de récépissé de déclaration à l'ordre des architectes"));
        $form->setLib('conseil_regional', __("Conseil régional de l'ordre de"));
    }

    /**
     * SETTER_FORM - setValsousformulaire (setVal).
     *
     * @return void
     */
    function setValsousformulaire(&$form, $maj, $validation, $idxformulaire, $retourformulaire, $typeformulaire, &$dnu1 = null, $dnu2 = null) {
        parent::setValsousformulaire($form, $maj, $validation, $idxformulaire, $retourformulaire, $typeformulaire);
        //
        if ($maj == 0) {
            $form->setVal("pays", "France");
        }
        // XXX L'objectif de cette portion de code n'est pas de faire un setVal
        // Message d'information concernant la modification des demandeurs
        // fréquents
        if ($maj == 1 && $this->getVal("frequent") == "t") {
            switch ($this->getVal("type_demandeur")) {
                case "petitionnaire":
                    $type_demandeur = __("Pétitionnaire");
                    break;

                case "avocat":
                    $type_demandeur = __("Avocat");
                    break;

                case "bailleur":
                    $type_demandeur = __("Bailleur");
                    break;
            }
            $message = sprintf(__("%s fréquent non modifiable"), $type_demandeur);
            $this->f->displayMessage("info", $message);
        }
    }

    /**
     * SURCHARGE
     *
     * Permet de modifier le fil d'Ariane depuis l'objet pour un sous-formulaire
     * @param string    $ent Fil d'Ariane récupéréré
     * @return                  Fil d'Ariane
     */
    function getSubFormTitle($ent) {
        return '';
    }

   /**
     * Surcharge du bouton pour empécher l'utilisateur de modifier un fréquent
     * Et ajout d'un bouton pour vider le formulaire
     */
    function boutonsousformulaire($datasubmit, $maj, $val=null) {
        // En mode ajout ou si le pétitionnaire n'est pas un fréquent
        if ($maj == 0
            || $this->getVal('frequent') != 't') {
            // Tant que le formulaire n'est pas validé et valide
            if (!$this->correct) {
                // Renomme les boutons
                switch ($maj) {
                    case 0:
                        $bouton = __("Ajouter le demandeur");
                        $title = __('Ajouter le demandeur sur la demande en cours de saisie');
                        break;
                    case 1:
                        $bouton = __("Modifier le demandeur");
                        $title = __('Modifier le demandeur sur la demande en cours de saisie');
                        break;
                    case 2:
                        $bouton = __("Supprimer le demandeur");
                        $title = __('Supprimer le demandeur sur la demande en cours de saisie');
                        break;
                    default:
                        $bouton = __('Valider');
                        $title = __('Valider le formulaire du demandeur');
                        break;
                }
                // Compose l'identifiant pour récupérer l'identifiant du demandeur
                // une fois ajouté
                $get_demandeur_id_type = $this->get_absolute_class_name();
                if (strpos($datasubmit, 'principal=true') !== false) {
                    $get_demandeur_id_type .= '_principal';
                }
                // Compose le bouton de validation pour les différents mode de
                // formulaire (ajouter, modifier)
                printf(
                    '<input type="button" value="%s" title="%s" onclick="validateSformDemandeur(\'%s\', \'%s\', %s, \'%s\'%s)" class="%s" />',
                    $bouton,
                    $title,
                    $this->get_absolute_class_name(),
                    $datasubmit,
                    'this.form',
                    $get_demandeur_id_type,
                    $this->getVal($this->clePrimaire) !== '' ? ', \''.intval($this->getVal($this->clePrimaire)).'\'' : '',
                    'om-button'
                );
            }
        }
        // Compose le bouton permettant de vider le formulaire
        if (!$this->correct && $this->getVal('frequent') !== 't') {
            printf(
                '<span class="om-form-button erase-%s delete-16" title="%s">%s</span>',
                    $this->get_absolute_class_name(),
                    __("Supprimer le contenu du formulaire du demandeur"),
                    __("Vider le formulaire du demandeur")
            );
        }
    }

    /**
     * @return void
     */
    function verifier($val = array(), &$dnu1 = null, $dnu2 = null) {
        parent::verifier($val);
        // le nom du particulier est obligatoire
        if($this->valF['qualite'] == "particulier" && $this->valF['particulier_nom'] == "") {
            $this->correct = false;
            $this->addToMessage(__("Le champ")." <span class=\"bold\">".
                                __("particulier_nom")."</span> ".__("est obligatoire."));
        }

        // la dénomination ou la raison sociale est obligatoire pour une personne morale
        if($this->valF['qualite'] == "personne_morale" 
            && $this->valF['personne_morale_denomination'] == "" 
                && $this->valF['personne_morale_raison_sociale'] == "") {
            $this->correct = false;
            $this->addToMessage(__("Un des champs")." <span class=\"bold\">".
                                __("personne_morale_denomination")."</span> ou <span class=\"bold\">".
                                __("personne_morale_raison_sociale")."</span> ".__("doit etre rempli."));
        }

        // Le numéro de SIRET doit contenir obligatoirement 14 caractères
        if ($this->valF['qualite'] == "personne_morale"
            && $this->valF['personne_morale_siret'] != null
            && strlen($this->valF['personne_morale_siret']) != 14) {
            $this->correct = false;
            $this->addToMessage(__("Le champ")." <span class=\"bold\">".__("personne_morale_siret")."</span>".__(" doit contenir 14 caractères."));
        }

    }

    /**
     * Methode de récupération et affichage au format au json des champs de l'adresse postale
     * du demandeur pour être traiter par la méthode JS copy_demandeur_address()
     * 
     * L'identifiant du demandeur est récupéré via l'url ($_GET)
     * 
     * @return bool  En cas d'erreur de traitement retourne false, sinon true
     */
    function view_adresses_postale_values_json(){

        $demandeur_id = $this->f->get_submitted_get_value("demandeur_id");

        if (empty($demandeur_id)){
            return false;
        }

        $res = $this->f->get_all_results_from_db_query(
            sprintf(
                'SELECT 
                    numero,
                    voie,
                    lieu_dit,
                    localite,
                    code_postal,
                    bp,
                    cedex
                FROM 
                    %1$sdemandeur
                WHERE 
                    demandeur.demandeur = \'%2$d\'',
                DB_PREFIXE,
                intVal($demandeur_id)
            ),
            array(
                "origin" => __METHOD__,
            )
        );

        // Retourne les valeurs en JSON
        echo json_encode($res['result'][0]);
        return true;
    }

    /**
     * Methode setTaille
     */
    function setTaille(&$form, $maj) {
        parent::setTaille($form, $maj);
        $form->setTaille("personne_morale_siret", 14);
    }

    /**
     * Methode setMax
     */
    function setMax(&$form, $maj) {
        parent::setMax($form, $maj);
        $form->setMax("personne_morale_siret", 14);
    }

    /*
     * Select pour les champs qualite et type_demandeur
     */
    function setType(&$form,$maj) {
        parent::setType($form,$maj);

        $form->setType('num_inscription', 'hidden');
        $form->setType('nom_cabinet', 'hidden');
        $form->setType('conseil_regional', 'hidden');
        $form->setType('titre_obt_diplo_spec', 'hidden');
        $form->setType('date_obt_diplo_spec', 'hidden');
        $form->setType('lieu_obt_diplo_spec', 'hidden');

        if ($maj < 2) { //ajouter et modifier
            
            $form->setType('type_demandeur', 'select');
            $form->setType('qualite', 'select');
            if ($this->f->is_option_mode_service_consulte_enabled() === false) {
                if ($maj == 1){
                    if ($this->get_dossier_from_link() !== false && $this->get_dossier_from_link() !== null) {
                        $id_dossier = null;
                        if (empty($this->get_dossier_from_link())) {
                            if ($this->f->get_submitted_get_value('idx_dossier') != null) {
                                $id_dossier = $this->f->get_submitted_get_value('idx_dossier');
                            }
                        } else {
                            $id_dossier=$this->get_dossier_from_link()[0]['dossier'];
                        }

                        $inst_dossier = $this->f->get_inst__om_dbform(array(
                            "obj" => "dossier",
                            "idx" => $id_dossier,
                        ));
                        if ($this->f->is_type_dossier_platau($id_dossier) === true
                            && $inst_dossier->getVal('etat_transmission_platau') !== 'jamais_transmissible') {
                            //
                            $required_fields_platau = $inst_dossier->get_list_platau_required_fields_dossier();
                            foreach ($required_fields_platau as $required_field_platau) {
                                $champ = explode('.', $required_field_platau)[1];
                                if (in_array($champ, $this->champs)) {
                                    $form->setType($champ ,$form->type[$champ].'_demat_color');
                                }
                            }
                        }
                    }
                }
                if ($maj == 0) {
                    $inst_dossier = $this->f->get_inst__om_dbform(array(
                        "obj" => "dossier",
                        "idx" => $this->f->get_submitted_get_value('idx_dossier'),
                    ));
                    if ($this->f->is_type_dossier_platau($this->f->get_submitted_get_value('idx_dossier')) === true
                        && $inst_dossier->getVal('etat_transmission_platau') !== 'jamais_transmissible') {
                        //
                        $required_fields_platau = $inst_dossier->get_list_platau_required_fields_dossier();
                        foreach ($required_fields_platau as $required_field_platau) {
                            $champ = explode('.', $required_field_platau)[1];
                            if (in_array($champ, $this->champs)) {
                                $form->setType($champ ,$form->type[$champ].'_demat_color');
                            }
                        }
                    }
                }
            }
            if($maj == 0 && $this->getParameter("idx_demandeur") != "") {
                $form->setType('frequent','hidden');
                $form->setType('qualite','selectdisabled');
                $form->setType('particulier_nom','textdisabled');
                $form->setType('particulier_prenom','textdisabled');
                $form->setType('particulier_date_naissance','datedisabled');
                $form->setType('particulier_commune_naissance','textdisabled');
                $form->setType('particulier_departement_naissance','textdisabled');
                $form->setType('particulier_pays_naissance','textdisabled');
                $form->setType('personne_morale_denomination','textdisabled');
                $form->setType('personne_morale_raison_sociale','textdisabled');
                $form->setType('personne_morale_siret','textdisabled');
                $form->setType('personne_morale_categorie_juridique','textdisabled');
                $form->setType('personne_morale_nom','textdisabled');
                $form->setType('personne_morale_prenom','textdisabled');
                $form->setType('particulier_civilite','selectdisabled');
                $form->setType('personne_morale_civilite','selectdisabled');
                $form->setType('telephone_fixe','textdisabled');
                $form->setType('telephone_mobile','textdisabled');
                $form->setType('fax','textdisabled');
                $form->setType('indicatif','textdisabled');
                $form->setType('courriel','textdisabled');

            }
        }

        $form->setType('demandeur', 'hidden');

    }

    /**
     * SETTER_FORM - setSelect.
     *
     * @return void
     */
    function setSelect(&$form, $maj, &$dnu1 = null, $dnu2 = null) {
        parent::setSelect($form, $maj);

        // Type du demandeur
        $contenu=array();

        $contenu[0][0]="";
        $contenu[1][0]=__('choisir')." ".__('type_demandeur');
        $contenu[0][2]="petitionnaire";
        $contenu[1][2]=__('petitionnaire');
        $contenu[0][1]="delegataire";
        $contenu[1][1]=__('autre correspondant');
        $contenu[0][3]="plaignant";
        $contenu[1][3]=__('Plaignant');
        $contenu[0][4]="contrevenant";
        $contenu[1][4]=__('Contrevenant');
        $contenu[0][5]="requerant";
        $contenu[1][5]=__('Requérant');
        $contenu[0][6]="avocat";
        $contenu[1][6]=__('Avocat');
        $contenu[0][7]="bailleur";
        $contenu[1][7]=__('Bailleur');
        $contenu[0][8] = "proprietaire";
        $contenu[1][8] = __('Propriétaire');
        $contenu[0][9] = "architecte_lc";
        $contenu[1][9] = __('Architecte législation connexe');
        $contenu[0][10] = "paysagiste";
        $contenu[1][10] = __('Concepteur-Paysagiste');
        
        $form->setSelect("type_demandeur", $contenu);
        
        // Qualité du demandeur
        $contenu=array();

        $contenu[0][0]="particulier";
        $contenu[1][0]=_('particulier');
        $contenu[0][1]="personne_morale";
        $contenu[1][1]=_('personne morale');
        
        $form->setSelect("qualite", $contenu);
    }
    
    /*
     * Ajoute l'action javascript sur le select de la qualité
     */
    function setOnchange(&$form,$maj){
        parent::setOnchange($form,$maj);
        
        $form->setOnchange("qualite","changeDemandeurType('qualite');");
    }

    /**
     * Ajout d'un champs caché permettant de linker l'id du demandeur
     * recement ajouté
     **/
    function sousFormSpecificContent($maj) {
        if ($this->correct === true || $this->getVal('frequent') === 't') {
            $id_demandeur = $this->getVal("demandeur");
            if(isset($this->valF["demandeur"]) && !empty($this->valF["demandeur"])) {
                echo "<input id=\"id_retour\" name=\"idRetour\" type=\"hidden\" value=\"".
                        $this->valF["demandeur"]."\" />";
            } elseif (isset($id_demandeur) && !empty($id_demandeur) && $maj == 110) {
                echo "<input id=\"id_retour\" name=\"idRetour\" type=\"hidden\" value=\"".
                        $this->getVal("demandeur")."\" />";
            }
        }
    }
    /**
     * Surcharge du lien de retour permettant de linker l'id du demandeur
     * recement ajouté
     **/
    function retoursousformulaire($idxformulaire = NULL, $retourformulaire = NULL, $val = NULL,
                                  $objsf = NULL, $premiersf = NULL, $tricolsf = NULL, $validation = NULL,
                                  $idx = NULL, $maj = NULL, $retour = NULL) {
        if ($retourformulaire === "demande") {
            return '';
        } else {
            parent::retoursousformulaire($idxformulaire, $retourformulaire, $val,
                                  $objsf, $premiersf, $tricolsf, $validation,
                                  $idx, $maj, $retour);
        }
    }

    /**
     * Ajout du paramètre principal
     */
    function getDataSubmitSousForm() {
        /*Création du lien de validation du sous-formulaire*/
        $datasubmit = "";
        $datasubmit .= OM_ROUTE_SOUSFORM;
        $datasubmit .= "&obj=".$this->get_absolute_class_name();
        $datasubmit .= "&amp;validation=".$this->getParameter("validation");
        if ($this->getParameter("idx") != "]") {
            //
            if ($this->getParameter("maj") == 1) { // modifier
                $datasubmit .= "&amp;action=1";
                $datasubmit .= "&amp;idx=".$this->getParameter("idx");
            } else { // supprimer
                $datasubmit .= "&amp;action=2";
                $datasubmit .= "&amp;idx=".$this->getParameter("idx");
            }
        }
        $datasubmit .= "&amp;premiersf=".$this->getParameter("premiersf");
        $datasubmit .= "&amp;retourformulaire=".$this->getParameter("retourformulaire");
        $datasubmit .= "&amp;trisf=".$this->getParameter("tricolsf");
        $datasubmit .= "&amp;idxformulaire=".$this->getParameter("idxformulaire");
        $datasubmit .= "&amp;principal=".$this->getParameter("principal");
        //
        return $datasubmit;
    }

    /**
     * Tableau associant un type de demandeur et son libellé.
     * 
     * @return array Libellé de chaque type de demandeur
     * 
     */
    function libelle_demandeur () {
        return array(
            'petitionnaire_principal' => __("Demandeur principal"),
            'petitionnaire'           => __("Demandeur"),
            'delegataire'             => __("Autre correspondant"),
            'contrevenant_principal'  => __("Contrevenant principal"),
            'contrevenant'            => __("Contrevenant"),
            'plaignant_principal'     => __("Plaignant principal"), 
            'plaignant'               => __("Plaignant"),
            'requerant_principal'     => __("Requérant principal"),
            'requerant'               => __("Requérant"),
            'avocat_principal'        => __("Avocat principal"),
            'avocat'                  => __("Avocat"),
            'bailleur_principal'      => __("Bailleur principal"),
            'bailleur'                => __("Bailleur"),
            'proprietaire'            => __('Propriétaire'),
            'architecte_lc'           => __('Architecte législation connexe'),
            'paysagiste'              => __('Concepteur-Paysagiste'),
        );
    }

    /**
     * Tableau associatif de toutes les données du demandeur.
     * 
     */
    // Récupération du type de demandeur pour l'affichage
    function demandeur_data ($type = "") {
        $demandeur_data = array_combine($this->champs, $this->val);
        if (!empty($type)) {
            $demandeur_data["type"] = $type;
            $demandeur_data["type_lib"] = $this->libelle_demandeur()[$type];
        }

        return $demandeur_data;
    } 

    /**
     * Template des boutons d'éditions de contact
     *
     * @param string $data    Texte à afficher.
     * 
     * @param string $tag      Balise HTML à utiliser. Défaut : <p>
     * 
     * @param string $id       ID de la balise HTML
     * 
     * @param string $class    Classe de la balise HTML
     * 
     * @return string Texte à afficher dans une balise HTML avec ID et Class
     * 
     */
    function addTag($data, $tag="p", $id="", $class="") {
        return sprintf('
            <%2$s %3$s %4$s>
                %1$s
            </%2$s>
        ',
        $data,
        $tag,
        'id="'.$id. '"',
        'class="'.$class. '"'
        );
    }
    
    
     /**
     * Template des boutons d'éditions de contact
     *
     * @param array $data    Données du demandeur.
     * 
     * @return string Adresse du demandeur
     * 
     */

    function templateNomAdresse($data) {

        // Variables liées a l'identité du demandeur.
        $demandeur_civilite = "";
        $demandeur_nom      = "";
        $represente         = "";
        $nom_tag            = "h3";
        $rs_denomination    = "";
        $qualite            = $data["qualite"];
        $civilite_id        = $data[$qualite."_civilite"];
        $prenom             = $data[$qualite."_prenom"];
        $nom                = $data[$qualite."_nom"];
        $has_name_data      = !empty($nom) || !empty($prenom) || !empty($civilite_id);
        $is_personne_morale = $data["qualite"] === "personne_morale";


        // Variables liées à l'adresse.
        $full_adresse       = " ";
        $bp                 = !empty($data["bp"]) ? "BP " . $data["bp"] : ""; 
        $cedex              = !empty($data["cedex"]) ? "Cedex " . $data["cedex"]: ""; 
        $complement         = !empty($data["complement"]) ? $this->addTag($data["complement"]) : "";
        $lieudit            = !empty($data["lieu_dit"]) ? $this->addTag($data["lieu_dit"]) : "";
        $adresse_1          = !empty($data["numero"] || $data["voie"]) ? $this->addTag(implode(" ", [$data["numero"],$data["voie"]])) : "";
        $adresse_2          = !empty($data["code_postal"] || $data["localite"]) ? $this->addTag(implode(" ", [$data["code_postal"],$data["localite"]])) : "";
        $adresse_3          = !empty($bp && $cedex) ? $this->addTag(implode(" ", [$bp, $cedex])) : "";

        // Champ input hidden INDISPENSABLE au bon fonctionnement du Javascript
        $hidden_input       = sprintf('<input type="hidden" class="demandeur_id" name="%s" value="%s"/>',
                                        $data["type"]."[]",
                                        $data["demandeur"]
                                    );
        // On affiche l'adresse uniquement si c'est un demandeur "principal" (Demandeur, contrevenant, etc...)
        if (preg_match('/_principal/', $data["type"])) {
            $full_adresse   = implode("", [$adresse_1,
                                            $complement,
                                            $lieudit,
                                            $adresse_2,
                                            $this->addTag($data["pays"]),
                                            $adresse_3]
                                    );
        }
        // Ajustement du texte si le demandeur est une personne morale
        if ($is_personne_morale) { 
            $represente      = $has_name_data ? "Représenté par :" : "";
            $nom_tag         = "p";
            $rs_denomination = implode(" ", [$this->addTag($data[$qualite."_raison_sociale"], "span", "raison_sociale"), 
                                            $this->addTag($data[$qualite."_denomination"], "span", "denomination"),
                                            ]
                                        );
        }                             

        // Récupération du libellé de la civilité                                   
        if ($civilite_id) {
            $inst_civilite = $this->f->get_inst__om_dbform(array(
                "obj" => "civilite",
                "idx" => $civilite_id,
            ));
            $demandeur_civilite = $inst_civilite->getVal("libelle");
        };
        
        // Mise à jour du nom complet avec le libellé de la civilité
        $demandeur_nom = implode(" ", [$represente, 
                                        $demandeur_civilite, 
                                        $nom, 
                                        $prenom]);
        
        // Template de la section Nom/Adresse
        return sprintf(
            '<section id="%3$s" class="demandeur--nom-adresse">
        
                %5$s
                <div class="demandeur-heading">
                    %1$s
                    %2$s
                    %6$s
                </div>
                %4$s
            </section>',
            // 1 : Denom/Raison sociale; 2: Nom complet ; 3: ID adresse ; 4. Adresse ; 
            // 5: input hidden obligatoire pour le JS ; 6 : Badge type de demandeur
            !empty($rs_denomination) ? $this->addTag($rs_denomination, "h3") : "",
            !empty($demandeur_nom) ? $this->addTag($demandeur_nom, $nom_tag) : "",
            $data["qualite"]."_".$data["demandeur"]."_adresse",
            $full_adresse, 
            $hidden_input,
            $this->addTag($data["type_lib"], "span", "", "badge"),
        );
    }

       /**
     * Template des boutons d'éditions de contact
     *
     * @param string  $data    Données du demandeur.
     * 
     * @return string Coordonnées Tel + Mail du demandeur
     * 
     */
    function templateCoordonnees($data) {
        
        // Toutes les variables nécessaires à l'affichage.
        $notification_message = "";
        $notification_status  = 'ne souhaite pas';
        $notification_icone   =  'icon-notif-refuse';
        $demandeur_email      = !empty($data["courriel"]) ? '<i class="ri-at-line"></i>'.$data['courriel']: '';
        $demandeur_fixe       = !empty($data["telephone_fixe"]) ? '<i class="ri-phone-line"></i>'.$data['telephone_fixe']: '';
        $demandeur_mobile     = !empty($data["telephone_mobile"]) ? '<i class="ri-cellphone-line"></i>'.$data['telephone_mobile']: '';
        
        // Mise à jour du message et de l'icone de notification si le demandeur accepte les notifications
        if ($data["notification"] === 't') {
            $notification_status  = 'souhaite';
            $notification_icone   = 'icon-notif-accepte';
        }
        if ($data["type"] === "petitionnaire_principal") {
            $notification_message = sprintf('<i class="ri-mail-unread-line %1$s"></i>Le demandeur %2$s être notifié électroniquement', 
                                            $notification_icone,
                                            $notification_status);
        }

        // Template de la section Coordonnées
        return sprintf('
        <section id="%1$s" class="demandeur--coordonnees">
            <p class="demandeur_notif">%2$s</p>
            <p class="demandeur_email">%3$s</p>
            <p class="demandeur_telephones">
                %4$s  %5$s
            </p>
        </section>
        ',
        // 1: ID container ; 2. Notification (message) 3. Adresse email; 
        // 4: Téléphone fixe ; 5 : Téléphone mobile
        $data["qualite"]."_".$data["demandeur"]."_informations",
        $notification_message,
        $demandeur_email,
        $this->addTag($demandeur_fixe, 'span'),
        $this->addTag($demandeur_mobile, 'span'),
        );
    }

    /**
     * Template des boutons d'éditions de contact
     *
     * @param string  $type     Type de demandeur.
     * 
     * @param boolean $linkable Affiche le lien d'édition.
     * 
     * @return string Boutons d'action du bloc "Contact"
     * 
     */
    function templateButtons($type, $linkable, $type_demandeur, $demandeur) {

        $button_editer     = sprintf('
                            <button type="button" class="button-edit button-secondary" onclick="editDemandeur(\'%1$s\',%2$s,\'%3$s\',\'%3$s_%2$s\'); return false;">
                                <i class="ri-edit-2-line"></i> %4$s
                            </button>',
                            $type_demandeur,
                            $demandeur,
                            $type,
                            _("ÉDITER"));
        $button_supprimer = sprintf(
                            '<button type="button" class="button-remove button-danger-secondary" onclick="removeDemandeur(\'%1$s_%2$s\') ; return false;">
                                <i class="ri-delete-bin-line"></i> %3$s
                            </button>',
                            $type,
                            $demandeur,
                            _("SUPPRIMER"));

        // On affiche les boutons d'action uniquement en mode "Édition"
        if ($linkable === true) {
            return sprintf('
                <section class="demandeur--buttons">
                    %1$s %2$s
                </section>',
                $button_editer,
                $button_supprimer
            );
        };
    }  


    /**
     * Synthèse des demandeurs pour le formulaire de la demande.
     *
     * @param string  $type     Type de demandeur.
     * 
     * @param boolean $linkable Affiche le lien d'édition.
     * 
     * @return string Bloc demandeur complet
     * 
     */
    function afficherSynthese($type, $linkable) {

        $demandeur_data = $this->demandeur_data($type);
            
        // Affichage de la synthèse demandeur
        return sprintf('<article class="demandeur %4$s" id="%4$s_%5$s">%1$s %2$s %3$s</article>
                        ',
                $this->templateNomAdresse($demandeur_data),
                $this->templateCoordonnees($demandeur_data), 
                $this->templateButtons($type, $linkable, $demandeur_data["type_demandeur"], $demandeur_data["demandeur"]),
                $demandeur_data["type"],
                $demandeur_data["demandeur"],
        );
    }

    /**
     *
     */
    function get_inst_civilite($civilite) {
        return $this->get_inst_common("civilite", $civilite);
    }

    /**
     * Retourne un tableau avec les données principales du demandeur.
     *
     * L'objectif est de mettre à disposition via un WS Reste un ensemble
     * de données exploitable par une autre application.
     */
    function get_datas() {

        /**
         *
         */
        $particulier_civilite = "";
        $personne_morale_civilite = "";
        if ($this->getVal('qualite') == 'particulier'
            && $this->getVal('particulier_civilite') !== '') {
            //
            $inst_civilite = $this->get_inst_civilite($this->getVal('particulier_civilite'));
            $particulier_civilite = $inst_civilite->getVal("libelle");
        } elseif ($this->getVal('qualite') == 'personne_morale'
            && $this->getVal('personne_morale_civilite') !== '') {
            //
            $inst_civilite = $this->get_inst_civilite($this->getVal('personne_morale_civilite'));
            $personne_morale_civilite = $inst_civilite->getVal("libelle");
        }

        /**
         *
         */
        //
        $datas = array(
            "demandeur" => $this->getVal($this->clePrimaire),
            "qualite" => $this->getVal("qualite"),
        );

        if ($this->getVal('qualite') == 'particulier') {
            $datas["particulier_civilite"] = $particulier_civilite;
            $datas["particulier_nom"] = $this->getVal("particulier_nom");
            $datas["particulier_prenom"] = $this->getVal("particulier_prenom");
            $datas["particulier_date_naissance"] = $this->getVal("particulier_date_naissance");
            $datas["particulier_commune_naissance"] = $this->getVal("particulier_commune_naissance");
            $datas["particulier_departement_naissance"] = $this->getVal("particulier_departement_naissance");
            $datas["particulier_pays_naissance"] = $this->getVal("particulier_pays_naissance");
        }
        if ($this->getVal('qualite') == 'personne_morale') {
            $datas["personne_morale_civilite"] = $personne_morale_civilite;
            $datas["personne_morale_denomination"] = $this->getVal("personne_morale_denomination");
            $datas["personne_morale_raison_sociale"] = $this->getVal("personne_morale_raison_sociale");
            $datas["personne_morale_siret"] = $this->getVal("personne_morale_siret");
            $datas["personne_morale_categorie_juridique"] = $this->getVal("personne_morale_categorie_juridique");
            $datas["personne_morale_nom"] = $this->getVal("personne_morale_nom");
            $datas["personne_morale_prenom"] = $this->getVal("personne_morale_prenom");
        }
        //
        $datas["numero"] = $this->getVal("numero");
        $datas["voie"] = $this->getVal("voie");
        $datas["complement"] = $this->getVal("complement");
        $datas["lieu_dit"] = $this->getVal("lieu_dit");
        $datas["localite"] = $this->getVal("localite");
        $datas["code_postal"] = $this->getVal("code_postal");
        $datas["bp"] = $this->getVal("bp");
        $datas["cedex"] = $this->getVal("cedex");
        $datas["pays"] = $this->getVal("pays");
        $datas["division_territoriale"] = $this->getVal("division_territoriale");
        $datas["telephone_fixe"] = $this->getVal("telephone_fixe");
        $datas["telephone_mobile"] = $this->getVal("telephone_mobile");
        $datas["indicatif"] = $this->getVal("indicatif");
        $datas["courriel"] = $this->getVal("courriel");
        $datas["fax"] = $this->getVal("fax");

        /**
         *
         */
        return $datas;
    }


    /**
     * Indique si la redirection vers le lien de retour est activée ou non.
     *
     * L'objectif de cette méthode est de permettre d'activer ou de désactiver
     * la redirection dans certains contextes.
     *
     * @return boolean
     */
    function is_back_link_redirect_activated() {
        //
        if ($this->getParameter("retourformulaire") === 'demande') {
            //
            return false;
        }

        //
        return true;
    }

    public function get_dossier_from_link() {
        $query = sprintf('
            SELECT lien_dossier_demandeur.dossier
            FROM %1$slien_dossier_demandeur
            WHERE lien_dossier_demandeur.demandeur = \'%2$s\'
            ',
            DB_PREFIXE,
            $this->getVal($this->clePrimaire)
        );
        $res = $this->f->get_all_results_from_db_query(
            $query,
            array(
                "origin" => __METHOD__,
                "force_return" => true,
            )
        );
        if ($res['code'] === 'KO') {
            return false;
        }
        return $res['result'];
    }

    public function triggermodifierapres($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
        parent::triggermodifierapres($id, $dnu1, $val, $dnu2);
        if (count(array_diff_assoc($this->valF, array_combine($this->champs, $this->val))) > 0) {
            /**
             * Gestion des tâches pour la dématérialisation
             */
            $dossiers = $this->get_dossier_from_link();
            foreach ($dossiers as $dossier) {
                //
                $inst_dossier = $this->f->get_inst__om_dbform(array(
                    "obj" => "dossier",
                    "idx" => $dossier['dossier'],
                ));

                if ($this->f->is_option_mode_service_consulte_enabled() === false
                && $this->f->is_type_dossier_platau($dossier['dossier']) === true
                    && $inst_dossier->getVal('etat_transmission_platau') !== 'jamais_transmissible') {

                    $trigger_platau_required_fields = $inst_dossier->trigger_platau_required_fields($dossier['dossier']);
                    // Gestion de l'erreur
                    if (! $trigger_platau_required_fields) {
                        $this->addToMessage(sprintf('%s %s',
                            __("Une erreur s'est produite lors de la mise à jour de l'état de transmission du dossier."),
                            __("Veuillez contacter votre administrateur.")
                        ));
                        $this->correct = false;
                        return false;
                    }
                }

                if ($this->f->is_type_dossier_platau($dossier['dossier'])
                    && $inst_dossier->getVal('etat_transmission_platau') !== 'jamais_transmissible'
                    && ($this->f->is_option_mode_service_consulte_enabled() !== true
                        || ($this->f->is_option_mode_service_consulte_enabled() === true
                        && ($inst_dossier->get_source_depot_from_demande() === PLATAU
                            || $inst_dossier->get_source_depot_from_demande() === PORTAL)))) {
                    //
                    $inst_task = $this->f->get_inst__om_dbform(array(
                        "obj" => "task",
                        "idx" => 0,
                    ));
                    $task_val = array(
                        'type' => 'modification_DI',
                        'object_id' => $dossier['dossier'],
                        'dossier' => $dossier['dossier'],
                    );
                    // Change l'état de la tâche de notification en fonction de l'état de
                    // transmission du dossier d'instruction
                    if ($this->f->is_option_mode_service_consulte_enabled() === false
                        && ($this->getVal('etat_transmission_platau') == 'non_transmissible' 
                        || $this->getVal('etat_transmission_platau') == 'transmis_mais_non_transmissible')) {
                        //
                        $task_val['state'] = task::STATUS_DRAFT;
                    }
                    $add_task = $inst_task->add_task(array('val' => $task_val));
                    if ($add_task === false) {
                        $this->addToMessage(sprintf('%s %s',
                            __("Une erreur s'est produite lors de la création tâche."),
                            __("Veuillez contacter votre administrateur.")
                        ));
                        $this->correct = false;
                        return false;
                    }
                    // XXX Les données du DA sont mises à jour seulement lors de l'ajout ou modification
                    // d'une instruction du DI initial et lors de la décision sur le DI non initial.
                    // Sachant ce comportement, voir si cette tâche modification_DA est bien située.
                    // $inst_task = $this->f->get_inst__om_dbform(array(
                    //     "obj" => "task",
                    //     "idx" => 0,
                    // ));
                    // $task_val = array(
                    //     'type' => 'modification_DA',
                    //     'object_id' => $inst_dossier->getVal('dossier_autorisation'),
                    //     'dossier' => $inst_dossier->getVal('dossier_autorisation'),
                    // );
                    // // Change l'état de la tâche de notification en fonction de l'état de
                    // // transmission du dossier d'instruction
                    // if ($this->f->is_option_mode_service_consulte_enabled() === false
                    //     && ($this->getVal('etat_transmission_platau') == 'non_transmissible' 
                    //     || $this->getVal('etat_transmission_platau') == 'transmis_mais_non_transmissible')) {
                    //     //
                    //     $task_val['state'] = task::STATUS_DRAFT;
                    // }
                    // $add_task = $inst_task->add_task(array('val' => $task_val));
                    // if ($add_task === false) {
                    //     $this->addToMessage(sprintf('%s %s',
                    //         __("Une erreur s'est produite lors de la création tâche."),
                    //         __("Veuillez contacter votre administrateur.")
                    //     ));
                    //     $this->correct = false;
                    //     return false;
                    // }
                }
            }
        }
        //
        return true;
    }

    public function view_json_data() {
        $this->checkAccessibility();
        $this->f->disableLog();
        $view = $this->get_json_data();
        echo json_encode($view);
    }

    public function get_json_data() {
        $val = array_combine($this->champs, $this->val);
        foreach ($val as $key => $value) {
            $val[$key] = strip_tags($value);
        }
        return $val;
    }

    /**
     * MERGE_FIELDS - get_merge_fields.
     * 
     * On choisit de surcharger get_merge_fields pour ne pas avoir la génération
     * de base des champs de fusion.
     *
     * @return array
     */
    function get_merge_fields($type) {
        $all = array(
        );
        //
        switch ($type) {
            case 'values':
                //
                $values = $this->get_values_legacy_merge_fields();
                foreach ($all as $table => $field) {
                    $elem = $this->f->get_inst__om_dbform(array(
                        "obj" => $table,
                        "idx" => $this->getVal($field),
                    ));
                    $elem_values = $elem->get_merge_fields($type);
                    $values = array_merge($values, $elem_values);
                }
                return $values;
            case 'labels':
                //
                $labels = $this->get_labels_legacy_merge_fields();
                foreach ($all as $table => $field) {
                    $elem = $this->f->get_inst__om_dbform(array(
                        "obj" => $table,
                        "idx" => 0,
                    ));
                    $elem_labels = $elem->get_merge_fields($type);
                    $labels = array_merge($labels, $elem_labels);
                }
                return $labels;
            default:
                return array();
        }
    }

    /**
     * MERGE_FIELDS - get_values_legacy_merge_fields.
     *
     * @return array
     */
    function get_values_legacy_merge_fields() {
        if ($this->exists() !== true) {
            return array(
                "nom_complet_qualite_part_ou_pm_demandeur" => "",
                "civilite_qualite_part_ou_pm_demandeur" => "",
                "nom_qualite_part_ou_pm_demandeur" => "",
                "prenom_qualite_part_ou_pm_demandeur" => "",
                "nom_complet_qualite_part_demandeur" => "",
                "civilite_qualite_part_demandeur" => "",
                "nom_qualite_part_demandeur" => "",
                "prenom_qualite_part_demandeur" => "",
                "nom_complet_qualite_pm_demandeur" => "",
                "civilite_qualite_pm_demandeur" => "",
                "nom_qualite_pm_demandeur" => "",
                "prenom_qualite_pm_demandeur" => "",
                "nom_demandeur" => "",
                "civilite_demandeur" => "",
                "nom_particulier_demandeur" => "",
                "prenom_particulier_demandeur" => "",
                "raison_sociale_demandeur" => "",
                "denomination_demandeur" => "",
                "siret_demandeur" => "",
                "categorie_juridique_demandeur" => "",
                "numero_demandeur" => "",
                "adresse_demandeur_sdl" => "",
                "adresse_demandeur" => "",
                "voie_demandeur" => "",
                "complement_demandeur" => "",
                "lieu_dit_demandeur" => "",
                "bp_demandeur" => "",
                "code_postal_demandeur" => "",
                "localite_demandeur" => "",
                "ville_demandeur" => "",
                "cedex_demandeur" => "",
                "pays_demandeur" => "",
                "division_territoriale_demandeur" => "",
                "date_naissance_demandeur" => "",
                "lieu_naissance_demandeur" => "",
                "email_demandeur" => "",
                "coordonnees_telephonique_demandeur" => "",
                "notification_demandeur" => "",
                "num_inscription_demandeur" => "",
                "nom_cabinet_demandeur" => "",
                "conseil_regional_demandeur" => "",
                "titre_obt_diplo_spec_demandeur" => "",
                "date_obt_diplo_spec_demandeur" => "",
                "lieu_obt_diplo_spec_demandeur" => "",
            );
        }
        $qres = $this->f->get_all_results_from_db_query(
            sprintf(
                'SELECT
                    CASE WHEN demandeur.qualite=\'particulier\'
                        THEN TRIM(CONCAT_WS(\' \', civilite.libelle, demandeur.particulier_nom, demandeur.particulier_prenom))
                        ELSE
                            CASE WHEN demandeur.personne_morale_nom IS NOT NULL OR demandeur.personne_morale_prenom IS NOT NULL
                                THEN TRIM(CONCAT_WS(\' \', demandeur.personne_morale_raison_sociale, demandeur.personne_morale_denomination, \'représenté(e) par\', civilite.libelle, demandeur.personne_morale_nom, demandeur.personne_morale_prenom))
                                ELSE TRIM(CONCAT(demandeur.personne_morale_raison_sociale, \' \', demandeur.personne_morale_denomination))
                            END
                    END as nom_complet_qualite_part_ou_pm_demandeur,
                    CASE WHEN demandeur.qualite=\'particulier\' OR demandeur.personne_morale_nom IS NOT NULL OR demandeur.personne_morale_prenom IS NOT NULL
                        THEN civilite.libelle
                        ELSE \'\'
                    END as civilite_qualite_part_ou_pm_demandeur,
                    CASE WHEN demandeur.qualite=\'particulier\'
                        THEN demandeur.particulier_nom
                        ELSE
                            CASE WHEN demandeur.personne_morale_nom IS NOT NULL
                                THEN demandeur.personne_morale_nom
                                ELSE \'\'
                            END
                    END as nom_qualite_part_ou_pm_demandeur,
                    CASE WHEN demandeur.qualite=\'particulier\'
                        THEN demandeur.particulier_prenom
                        ELSE
                            CASE WHEN demandeur.personne_morale_prenom IS NOT NULL
                                THEN demandeur.personne_morale_prenom
                                ELSE \'\'
                            END
                    END as prenom_qualite_part_ou_pm_demandeur,
                    CASE WHEN demandeur.qualite=\'particulier\'
                        THEN TRIM(CONCAT_WS(\' \', civilite.libelle, demandeur.particulier_nom, demandeur.particulier_prenom))
                        ELSE \'\'
                    END as nom_complet_qualite_part_demandeur,
                    CASE WHEN demandeur.qualite=\'particulier\'
                        THEN civilite.libelle
                        ELSE \'\'
                    END as civilite_qualite_part_demandeur,
                    CASE WHEN demandeur.qualite=\'particulier\'
                        THEN demandeur.particulier_nom
                        ELSE \'\'
                    END as nom_qualite_part_demandeur,
                    CASE WHEN demandeur.qualite=\'particulier\'
                        THEN demandeur.particulier_prenom
                        ELSE \'\'
                    END as prenom_qualite_part_demandeur,
                    CASE WHEN demandeur.personne_morale_nom IS NOT NULL OR demandeur.personne_morale_prenom IS NOT NULL
                        THEN TRIM(CONCAT_WS(\' \', demandeur.personne_morale_raison_sociale, demandeur.personne_morale_denomination, \'représenté(e) par\', civilite.libelle, demandeur.personne_morale_nom, demandeur.personne_morale_prenom))
                        ELSE TRIM(CONCAT(demandeur.personne_morale_raison_sociale, \' \', demandeur.personne_morale_denomination))
                    END as nom_complet_qualite_pm_demandeur,
                    CASE WHEN demandeur.personne_morale_nom IS NOT NULL OR demandeur.personne_morale_prenom IS NOT NULL
                        THEN civilite.libelle
                        ELSE \'\'
                    END as civilite_qualite_pm_demandeur,
                    CASE WHEN demandeur.personne_morale_nom IS NOT NULL
                        THEN demandeur.personne_morale_nom
                        ELSE \'\'
                    END as nom_qualite_pm_demandeur,
                    CASE WHEN demandeur.personne_morale_prenom IS NOT NULL
                        THEN demandeur.personne_morale_prenom
                        ELSE \'\'
                    END as prenom_qualite_pm_demandeur,
                    CASE WHEN demandeur.qualite=\'particulier\'
                        THEN TRIM(CONCAT_WS(\' \', civilite.libelle, demandeur.particulier_nom, demandeur.particulier_prenom))
                        ELSE
                            CASE WHEN demandeur.personne_morale_nom IS NOT NULL OR demandeur.personne_morale_prenom IS NOT NULL
                                THEN TRIM(CONCAT_WS(\' \', demandeur.personne_morale_raison_sociale, demandeur.personne_morale_denomination, \'représenté(e) par\', civilite.libelle, demandeur.personne_morale_nom, demandeur.personne_morale_prenom))
                                ELSE TRIM(CONCAT(demandeur.personne_morale_raison_sociale, \' \', demandeur.personne_morale_denomination))
                            END
                    END as nom_demandeur,
                    CASE WHEN demandeur.qualite=\'particulier\' OR demandeur.personne_morale_nom IS NOT NULL OR demandeur.personne_morale_prenom IS NOT NULL
                        THEN civilite.libelle
                        ELSE \'\'
                    END as civilite_demandeur,
                    CASE WHEN demandeur.qualite=\'particulier\'
                        THEN demandeur.particulier_nom
                        ELSE
                            CASE WHEN demandeur.personne_morale_nom IS NOT NULL
                                THEN demandeur.personne_morale_nom
                                ELSE \'\'
                            END
                    END as nom_particulier_demandeur,
                    CASE WHEN demandeur.qualite=\'particulier\'
                        THEN demandeur.particulier_prenom
                        ELSE
                            CASE WHEN demandeur.personne_morale_prenom IS NOT NULL
                                THEN demandeur.personne_morale_prenom
                                ELSE \'\'
                            END
                    END as prenom_particulier_demandeur,
                    CASE WHEN demandeur.qualite=\'particulier\'
                        THEN \'\'
                        ELSE demandeur.personne_morale_raison_sociale
                    END as raison_sociale_demandeur,
                    CASE WHEN demandeur.qualite=\'particulier\'
                        THEN \'\'
                        ELSE demandeur.personne_morale_denomination
                    END as denomination_demandeur,
                    CASE WHEN demandeur.qualite=\'particulier\'
                        THEN \'\'
                        ELSE demandeur.personne_morale_siret
                    END as siret_demandeur,
                    CASE WHEN demandeur.qualite=\'particulier\'
                        THEN \'\'
                        ELSE demandeur.personne_morale_categorie_juridique
                    END as categorie_juridique_demandeur,
                    demandeur.numero as numero_demandeur,
                    %1$sadresse(demandeur.numero::text, demandeur.voie::text, demandeur.complement::text, demandeur.lieu_dit::text, demandeur.bp::text, demandeur.code_postal::text, demandeur.localite::text, demandeur.cedex::text, demandeur.pays::text) as adresse_demandeur_sdl,
                    %1$sadresse(demandeur.numero::text, demandeur.voie::text, demandeur.complement::text, demandeur.lieu_dit::text, demandeur.bp::text, demandeur.code_postal::text, demandeur.localite::text, demandeur.cedex::text, demandeur.pays::text, \' \'::text) as adresse_demandeur,
                    demandeur.voie as voie_demandeur,
                    demandeur.complement as complement_demandeur,
                    demandeur.lieu_dit as lieu_dit_demandeur,
                    CASE 
                        WHEN demandeur.bp IS NULL
                        THEN \'\'
                        ELSE CONCAT(\'BP \', demandeur.bp)
                    END as bp_demandeur,
                    demandeur.code_postal as code_postal_demandeur,
                    demandeur.localite as localite_demandeur,
                    demandeur.localite as ville_demandeur,
                    CASE 
                        WHEN demandeur.cedex IS NULL
                        THEN \'\'
                        ELSE CONCAT(\'CEDEX \', demandeur.cedex)
                    END as cedex_demandeur,
                    demandeur.pays as pays_demandeur,
                    demandeur.division_territoriale as division_territoriale_demandeur,
                    CASE WHEN demandeur.qualite = \'particulier\'
                        THEN to_char(demandeur.particulier_date_naissance, \'DD/MM/YYYY\')
                        ELSE \'\'
                    END as date_naissance_demandeur,
                    CASE WHEN demandeur.qualite = \'particulier\'
                        THEN CONCAT_WS(\' \', demandeur.particulier_commune_naissance, demandeur.particulier_departement_naissance, demandeur.particulier_pays_naissance)
                        ELSE \'\'
                    END as lieu_naissance_demandeur,
                    demandeur.courriel as email_demandeur,
                    CONCAT_WS(\' \', demandeur.indicatif, CONCAT_WS(\' / \', demandeur.telephone_fixe, demandeur.telephone_mobile)) as coordonnees_telephonique_demandeur,
                    CASE WHEN demandeur.notification IS TRUE
                        THEN \'[X]\'
                        ELSE \'[ ]\'
                    END as notification_demandeur,
                    demandeur.num_inscription as num_inscription_demandeur,
                    demandeur.nom_cabinet as nom_cabinet_demandeur,
                    demandeur.conseil_regional as conseil_regional_demandeur,
                    demandeur.titre_obt_diplo_spec as titre_obt_diplo_spec_demandeur,
                    to_char(demandeur.date_obt_diplo_spec, \'DD/MM/YYYY\') as date_obt_diplo_spec_demandeur,
                    demandeur.lieu_obt_diplo_spec as lieu_obt_diplo_spec_demandeur
                FROM
                    %1$sdemandeur
                    LEFT JOIN %1$scivilite
                        ON (demandeur.particulier_civilite=civilite.civilite OR demandeur.personne_morale_civilite = civilite.civilite)
                WHERE
                    demandeur.demandeur=%2$d',
                DB_PREFIXE,
                intval($this->getVal($this->clePrimaire))
            ),
            array(
                "origin" => __METHOD__,
            )
        );
        if (count($qres["result"]) === 1) {
            return $qres["result"][0];
        }
        return array();
    }

    /**
     * MERGE_FIELDS - get_labels_legacy_merge_fields.
     *
     * @return array
     */
    function get_labels_legacy_merge_fields() {
        return array(
            "Coordonnées du demandeur" => array(
                "nom_complet_qualite_part_ou_pm_demandeur" => "concaténation des champs correspondant au demandeur selon sa qualité (particulier ou personne morale)",
                "civilite_qualite_part_ou_pm_demandeur" => "libellé de la civilité : soit la civilité du particulier soit la civilité de la personne physique représentant la personne morale",
                "nom_qualite_part_ou_pm_demandeur" => "soit le nom du particulier soit le nom de la personne représentant la personne morale",
                "prenom_qualite_part_ou_pm_demandeur" => "soit le prénom du particulier soit le prénom de la personne représentant la personne morale",
                "nom_complet_qualite_part_demandeur" => "concaténation des champs civilité, nom et prénom du demandeur",
                "civilite_qualite_part_demandeur" => "Civilité du demandeur (demandeur particulier)",
                "nom_qualite_part_demandeur" => "nom du demandeur (demandeur particulier)",
                "prenom_qualite_part_demandeur" => "prénom du demandeur (demandeur particulier)",
                "nom_complet_qualite_pm_demandeur" => "concaténation des champs raison sociale, dénomination suivi de « représenté par » avec la donnée des champs civilité, nom de la personne représentant la personne morale",
                "civilite_qualite_pm_demandeur" => "libellé de la civilité de la personne physique représentant la personne morale",
                "nom_qualite_pm_demandeur" => "nom de la personne représentant la personne morale",
                "prenom_qualite_pm_demandeur" => "prénom de la personne représentant la personne morale",
                "nom_demandeur" => "(Déprécié, à ne plus utiliser)",
                "civilite_demandeur" => "(Déprécié, à ne plus utiliser)",
                "nom_particulier_demandeur" => "(Déprécié, à ne plus utiliser)",
                "prenom_particulier_demandeur" => "(Déprécié, à ne plus utiliser)",
                "raison_sociale_demandeur" => "raison sociale du demandeur de type personne morale",
                "denomination_demandeur" => "denomination du demandeur de type personne morale",
                "siret_demandeur" => "N° de SIRET lorsque demandeur est de type personne morale",
                "categorie_juridique_demandeur" => "catégorie juridique de la société lorsque demandeur est de type personne morale",
                "numero_demandeur" => "numero de la voie – adresse du demandeur",
                "adresse_demandeur_sdl" => "concaténation de tous les champs de fusion permettant de créer l’ adresse postale du demandeur",
                "adresse_demandeur" => "concaténation de tous les champs de fusion permettant de créer l’ adresse postale du demandeur",
                "voie_demandeur" => "nom de la voie – adresse du demandeur",
                "complement_demandeur" => "complément de la voie – adresse du demandeur",
                "lieu_dit_demandeur" => "lieu dit – adresse du demandeur",
                "bp_demandeur" => "boite postale – adresse du demandeur",
                "code_postal_demandeur" => "code postal – adresse du demandeur",
                "localite_demandeur" => "nom de la commune de résidence – adresse du demandeur",
                "ville_demandeur" => "(Déprécié, à ne plus utiliser)",
                "cedex_demandeur" => "cedex – adresse du demandeur",
                "pays_demandeur" => "nom du pays de résidence – adresse du demandeur",
                "division_territoriale_demandeur" => "code géographique international permettant d’identifier le pays de résidence",
                "date_naissance_demandeur" => "affiche la date de naissance du demandeur sous le format DD/MM/YYYY. Par exemple : 20/04/1991",
                "lieu_naissance_demandeur" => "affiche la concaténation de la commune de naissance, du département de naissance et du Pays de naissance. Par exemple : Marseille Bouches-du-Rhône France",
                "email_demandeur" => "adresse mél renseignée du demandeur",
                "coordonnees_telephonique_demandeur" => "affiche la concaténation de l'indicatif, du téléphone fixe et du téléphone mobile",
                "notification_demandeur" => "case cochée servant à valider l’acceptation de la notification électronique",
                "num_inscription_demandeur" => "",
                "nom_cabinet_demandeur" => "",
                "conseil_regional_demandeur" => "",
                "titre_obt_diplo_spec_demandeur" => "",
                "date_obt_diplo_spec_demandeur" => "",
                "lieu_obt_diplo_spec_demandeur" => "",
            ),
        );
    }

}
