<?php

//
require_once "dossier.class.php";

//
class dossier_instruction extends dossier {

    function dossier_instruction($id, &$db, $DEBUG) {
        //
        //$this->constructeur($id, $db, $DEBUG);
        $this->dossier($id, $db, $DEBUG);
    }

    /**
     * Définition des actions disponibles sur la classe.
     *
     * @return void
     */
    function init_class_actions() {
        //
        parent::init_class_actions();

        // ACTION - 001 - modifier
        //
        $this->class_actions[1]["portlet"]["libelle"] = _("Modifier");
        $this->class_actions[1]["condition"] = "is_editable";

        // ACTION - 002 - supprimer
        //
        $this->class_actions[2]["portlet"]["libelle"] = _("Supprimer");
        $this->class_actions[2]["portlet"]["order"] = 125;

        // ACTION - 100 - donnees_techniques
        // Affiche dans un overlay les données techniques
        $this->class_actions[100] = array(
            "identifier" => "donnees_techniques",
            "portlet" => array(
                "type" => "action-self",
                "libelle" => _("Données techniques"),
                "order" => 100,
                "class" => "rediger-16",
            ),
            "view" => "view_donnees_techniques",
            "permission_suffix" => "donnees_techniques_consulter",
            "condition" => "can_open_donnees_techniques",
        );

        // ACTION - 110 - rapport_instruction
        // Affiche dans un overlay le rapport d'instruction
        $this->class_actions[110] = array(
            "identifier" => "rapport_instruction",
            "portlet" => array(
                "type" => "action-self",
                "libelle" => _("Rapport d'instruction"),
                "order" => 110,
                "class" => "rediger-16",
            ),
            "view" => "view_rapport_instruction",
            "permission_suffix" => "rapport_instruction_rediger",
            "condition" => "can_open_rapport_instruction",
        );

        // ACTION - 120 - geolocalisation
        // Affiche dans un overlay la géolocalisation
        $this->class_actions[120] = array(
            "identifier" => "geolocalisation",
            "portlet" => array(
                "type" => "action-self",
                "libelle" => _("Geolocalisation"),
                "order" => 120,
                "class" => "rediger-16",
            ),
            "view" => "view_geolocalisation",
            "permission_suffix" => "geolocalisation_consulter",
            "condition" => "can_open_geolocalisation",
        );

        // ACTION - 130 - edition
        // Affiche l'édition
        $this->class_actions[130] = array(
            "identifier" => "edition",
            "portlet" => array(
                "type" => "action-blank",
                "libelle" => _("Recapitulatif"),
                "order" => 130,
                "class" => "pdf-16",
            ),
            "view" => "view_edition",
            "permission_suffix" => "consulter",
        );
    }

    /**
     * Vérifie la division de l'instructeur et l'état du dossier.
     *
     * @return boolean
     */
    function check_instructeur_division_and_di_state() {

        // Si l'utilisateur est un intructeur qui ne correspond pas à la
        // division du dossier
        if ($this->f->isUserInstructeur()
            && $this->f->om_utilisateur["division"] != $this->getDivisionFromDossier()) {

            //
            return false;
        }

        // Si l'utilisateur est un instructeur et que le dossier est cloturé
        if ($this->f->isUserInstructeur()
            && $this->getStatut() == "cloture") {

            //
            return false;
        }

        //
        return true;
    }

    /**
     * CONDITION - is_editable.
     *
     * Condition pour la modification.
     *
     * @return boolean
     */
    function is_editable() {

        // Contrôle si l'utilisateur possède un bypass
        $bypass = $this->f->isAccredited(get_class()."_modifier_bypass");
        //
        if ($bypass == true) {

            //
            return true;
        }

        // Contrôle le droit de l'instruction
        if ($this->check_instructeur_division_and_di_state() == false) {

            //
            return false;
        }

        //
        return true;
    }

    /**
     * CONDITION - can_open_donnees_techniques.
     *
     * Condition pour afficher les données techniques.
     *
     * @return boolean
     */
    function can_open_donnees_techniques() {

        // Contrôle si l'utilisateur possède un bypass
        $bypass = $this->f->isAccredited(get_class()."_donnees_techniques_consulter_bypass");
        //
        if ($bypass == true) {

            //
            return true;
        }

        //
        return true;
    }

    /**
     * CONDITION - can_open_rapport_instruction.
     *
     * Condition pour afficher le rapport d'instruction en overlay.
     *
     * @return boolean
     */
    function can_open_rapport_instruction() {

        // Contrôle si l'utilisateur possède un bypass
        $bypass = $this->f->isAccredited(get_class()."_rapport_instruction_rediger_bypass");
        //
        if ($bypass == true) {

            //
            return true;
        }

        // Si l'utilisateur est un intructeur qui ne correspond pas à la
        // division du dossier
        if ($this->f->isUserInstructeur()
            && $this->f->om_utilisateur["division"] != $this->getDivisionFromDossier()) {

            // Cache le lien du rapport d'instruction, si aucun n'est lié
            if ($this->getRapportInstruction() == '') {

                //
                return false;
            }
        }

        // Si l'utilisateur est un instructeur et que le dossier est cloturé
        if ($this->f->isUserInstructeur()
            && $this->getStatut() == "cloture") {

            // Cache le lien du rapport d'instruction, si aucun n'est lié
            if ($this->getRapportInstruction() == '') {

                //
                return false;
            }
        }

        //
        return true;
    }

    /**
     * CONDITION - can_open_geolocalisation.
     *
     * Condition pour afficher la géolocalisation en overlay.
     *
     * @return boolean
     */
    function can_open_geolocalisation() {

        // Si l'option sig n'est pas réglé sur 'sig_externe',
        // l'action géolocalisation n'est pas affiché
        if ($this->f->getParameter('option_sig') != 'sig_externe') {

            //
            return false;
        }

        // Contrôle si l'utilisateur possède un bypass
        $bypass = $this->f->isAccredited(get_class()."_geolocalisation_consulter_bypass");
        //
        if ($bypass == true) {

            //
            return true;
        }

        // Contrôle le droit de l'instruction
        if ($this->check_instructeur_division_and_di_state() == false) {

            //
            return false;
        }

        //
        return true;
    }

    /**
     * VIEW - view_edition.
     *
     * Affiche le récapitulatif du dossier d'instruction.
     *
     * @return void
     */
    function view_edition() {

        // Identifiant du dossier
        $idx = $this->getVal($this->clePrimaire);

        // Redirection vers le script d'édition pdf avec les bons paramètres
        header("Location: ../pdf/pdfetat.php?idx=".$idx."&obj=".$this->table);
        exit();
    }

    /**
     * VIEW - view_donnees_techniques.
     *
     * Redirige pour ouvrir le formulaire en ajaxIt dans un overlay.
     * Cette action est bindée pour utiliser la fonction popUpIt.
     *
     * @return void
     */
    function view_donnees_techniques() {

        // Vérification de l'accessibilité sur l'élément
        $this->checkAccessibility();

        //
        $idx = $this->getVal($this->clePrimaire);
        $obj = "donnees_techniques";

        //
        $this->redirect_onglet($idx, $obj, "", "dossier_instruction_donnees_techniques_consulter");
    }

    /**
     * VIEW - view_rapport_instruction.
     *
     * Redirige pour ouvrir le formulaire en ajaxIt dans un overlay.
     * Cette action est bindée pour utiliser la fonction popUpIt.
     *
     * @return void
     */
    function view_rapport_instruction() {

        //
        $idx = $this->getVal($this->clePrimaire);
        $obj = "rapport_instruction";

        //
        $this->redirect_onglet($idx, $obj, "", "rapport_instruction_rediger");
    }

    /**
     * Redirige vers un sousform.
     *
     * @return void
     */
    function redirect_onglet($idx = "", $obj = "", $sousform = "", $right) {
        //
        $this->f->disableLog();

        // Seulement si le numéro de dossier est fourni
        if ($this->f->isAccredited($right) != false
            && isset($idx) && !is_null($idx) 
            && isset($obj) && !is_null($obj)){

            // Vérifie que l'objet n'existe pas
            $sql = "SELECT 
                        ".$obj."
                    FROM 
                        ".DB_PREFIXE.$obj."
                    where 
                        dossier_instruction = '$idx'";
            // Ajout au log
            $this->f->addToLog($obj.".php: db->query(\"".$sql."\");", VERBOSE_MODE);
            // Exécution de la requête 
            $res = $this->f->db->query($sql);
            $this->f->isDatabaseError($res);

            // S'il n'y en a pas, afficher le formulaire d'ajout
            if ( $res->numrows() == 0 ){
                //
                echo '
                    <script type="text/javascript" >
                        overlayIt(\''.$obj.'\',\'../scr/sousform.php?objsf='.$obj.'&obj='.$obj.'&action=0&retourformulaire=dossier_instruction&idxformulaire='.$idx.'\', 1);
                    </script>
                ';
            }
            // Sinon afficher l'objet en consultation
            elseif ( $res->numrows() > 0 && $sousform != "dossier_autorisation" ){
                //
                $row = & $res->fetchRow(DB_FETCHMODE_ASSOC);
                //
                echo '
                    <script type="text/javascript" >
                        overlayIt(\''.$obj.'\',\'../scr/sousform.php?objsf='.$obj.'&idxformulaire='.$idx.'&retourformulaire='.$obj.'&obj='.$obj.'&action=3&idx='.$row[$obj].'\', 1);
                    </script>
                ';
            }
            elseif ( $res->numrows() > 0 && $sousform == "dossier_autorisation" ){
                //
                $row = & $res->fetchRow(DB_FETCHMODE_ASSOC);
                //
                echo '
                    <script type="text/javascript" >
                        overlayIt(\''.$obj.'\',\'../scr/sousform.php?objsf='.$obj.'&idxformulaire='.$idx.'&retourformulaire='.$obj.'&obj='.$obj.'&action=3&idx='.$row[$obj].'&visualisation=dossier_autorisation\', 1);
                    </script>
                ';
            }
        }
    }

    /**
     * VIEW - view_geolocalisation.
     *
     * Redirige pour ouvrir le formulaire en ajaxIt dans un overlay.
     * Cette action est bindée pour utiliser la fonction popUpIt.
     *
     * @return void
     */
    function view_geolocalisation() {

        // Vérification de l'accessibilité sur l'élément
        $this->checkAccessibility();

        //
        $idx = $this->getVal($this->clePrimaire);

        // Récupération des données de sig_elyx
        $sqlDonneesSIG = "SELECT *
                FROM ".DB_PREFIXE."sig_elyx
                WHERE dossier = '$idx'";
        $resDonneesSIG = $this->f->db->query($sqlDonneesSIG);
        $this->f->addToLog(__METHOD__."() : db->query(\"".$sqlDonneesSIG."\")", VERBOSE_MODE);
        $this->f->isDatabaseError($resDonneesSIG);
        $rowDonneesSIG = &$resDonneesSIG->fetchRow(DB_FETCHMODE_ASSOC);

        // Récupération des données du dossier d'instruction
        $sqlDonneesDI = "SELECT dossier, geom, dossier_libelle, 
                terrain_references_cadastrales, terrain_adresse_voie_numero, 
                terrain_adresse_voie, terrain_adresse_lieu_dit, terrain_adresse_localite, 
                terrain_adresse_code_postal, terrain_adresse_bp, terrain_adresse_cedex
                FROM ".DB_PREFIXE."dossier
                WHERE dossier = '$idx'";
        $resDonneesDI = $this->f->db->query($sqlDonneesDI);
        $this->f->addToLog(__METHOD__."() : db->query(\"".$sqlDonneesDI."\")", VERBOSE_MODE);
        $this->f->isDatabaseError($resDonneesDI);
        $rowDonneesDI = &$resDonneesDI->fetchRow(DB_FETCHMODE_ASSOC);

        // Récupération des contraintes liées au DI
        $sqlDossierContrainte = "SELECT dossier_contrainte, reference
                FROM ".DB_PREFIXE." dossier_contrainte
                WHERE dossier = '".$idx."'";
        $resDossierContrainte = $this->f->db->query($sqlDossierContrainte);
        $this->f->addToLog(__METHOD__."() : db->query(\"".$sqlDossierContrainte."\")", VERBOSE_MODE);
        $this->f->isDatabaseError($resDossierContrainte);

        //
        $geom = "";
        //
        if (isset($rowDonneesDI) && $rowDonneesDI['geom'] != '') {
            //
            $sqlGEOM = "SELECT public.ST_AsText('".$rowDonneesDI['geom']."'::geometry)";
            $geom = $this->f->db->getOne($sqlGEOM);
            $this->f->addToLog(__METHOD__."() : db->getOne(\"".$sqlGEOM."\")", VERBOSE_MODE);
        }

        // Compteurs de contrainte manuelle et automatique
        $nb_conrainte_man = 0;
        $nb_conrainte_sig = 0;
        // Nombre de contrainte du DI
        while ($rowDossierContrainte = &$resDossierContrainte->fetchRow(DB_FETCHMODE_ASSOC)) {
            //
            if ($rowDossierContrainte['reference'] == 'f') {
                $nb_conrainte_man++;
            } else {
                $nb_conrainte_sig++;
            }
        }
        // Modifie les messages en fonction du nombre de contrainte
        if ($nb_conrainte_man == 0) {
            $msg_contrainte_man = _("Aucune contraintes ajoutees depuis l'application");
        } else {
            $msg_contrainte_man = $nb_conrainte_man." "._("contrainte(s) ajoutee(s) depuis l'application");
        }
        if ($nb_conrainte_sig == 0) {
            $msg_contrainte_sig = _("Aucune contraintes ajoutees depuis le SIG");
        } else {
            $msg_contrainte_sig = $nb_conrainte_sig." "._("contrainte(s) ajoutee(s) depuis le SIG");
        }
        $contrainte_val = "<span id='msg_contrainte_man'>".$msg_contrainte_man."</span>"."<br />".
            "<span id='msg_contrainte_sig'>".$msg_contrainte_sig."</span>";

        // Affichage du fil d'Ariane
        $this->f->displaySubTitle(_("Geolocalisation") . "->" . $rowDonneesDI["dossier_libelle"]);
        $this->f->display();

        // Message affiché
        $message_field = '<div class="message ui-widget ui-corner-all ui-state-highlight ui-state-%s" id="%s">
            <p>
                <span class="ui-icon ui-icon-info"></span> 
                <span class="text">%s<br></span>
            </p>
        </div>';

        // Message d'erreur si les références cadastrales ont été modifiées
        // dans le dossier d'instruction
        if (isset($rowDonneesSIG["terrain_references_cadastrales_archive"]) && 
            $rowDonneesSIG["terrain_references_cadastrales_archive"] != $rowDonneesDI["terrain_references_cadastrales"]) {
            
            $messageRefCadUtilisees = (is_null($rowDonneesSIG["terrain_references_cadastrales_archive"])&&
                $rowDonneesSIG["terrain_references_cadastrales_archive"]!="")?
                    _("Les references cadastrales utilisees par le SIG")." : ".
                    $rowDonneesSIG["terrain_references_cadastrales_archive"] :
                    _("Aucune reference cadastrale n'est renseignee pour le SIG");
            
            printf($message_field, "error", "geolocalisation-message",
                "<p>"._("Les references cadastrales ont ete modifiees dans le dossier d'instruction.")."</p>".
                "<p>".$messageRefCadUtilisees."</p>");
        }

        // Bouton retour
        $button_return = '<div class="formControls">
            <a id="retour-button" onclick="redirectPortletAction(1,\'main\'); refresh_page_return();" href="#" class="retour">Retour</a>
        </div>';

        // Affiche le bouton de retour
        printf($button_return);

        // Début du formulaire
        printf("\n<!-- ########## START FORMULAIRE ########## -->\n");
        printf("<div class=\"formEntete ui-corner-all\">\n");

        // Champ pour le bouton
        $button_field = '<div class="field field-type-static">
            <div class="form-libelle">
                <label id="lib-%1$s" class="libelle-%1$s" for="%1$s">
                %2$s
                </label>
            </div>
            <div class="form-content">
                <span id="%1$s" class="field_value">
                    %3$s  
                </span>
            </div>
        </div>';

        // Boutons d'action sur la géolocalisation
        $button = '<input type="submit" class="om-button ui-button ui-widget ui-state-default ui-corner-all" id="%s-button" value="%s" onclick="%s" role="button" aria-disabled="false">';

        // Affiche le bouton permettant de lancer tous les traitements
        printf('<div class="alignBtnCenter">');
        printf($button, "chance", "J'ai de la chance", "all_geolocalisation_treatments('$idx', '"._("Etes vous sur de vouloir recuperer les contraintes ?")."')");
        printf('</div>');

        // Tableau pour afficher l'interface sur deux colonnes
        printf("<div class='sousform-geolocalisation'><div class='list-buttons-geolocalisation'>");

        //Affichage des boutons
        printf($button_field, 'verif_parcelle', sprintf($button, 'verif_parcelle', "Vérifier les parcelles", "geolocalisation_treatment('$idx', 'verif_parcelle', set_geolocalisation_message)"), $this->build_message('verif_parcelle', $message_field, $rowDonneesSIG, $this->f));

        printf($button_field, 'calcul_emprise', sprintf($button, 'calcul_emprise', "Calculer l'emprise", "geolocalisation_treatment('$idx', 'calcul_emprise', '')"), $this->build_message('calcul_emprise', $message_field, $rowDonneesSIG, $this->f));

        printf($button_field, 'dessin_emprise', sprintf($button, 'dessin_emprise', "Dessiner l'emprise", "geolocalisation_treatment('$idx', 'dessin_emprise', redirection_elyxweb)"), $this->build_message('dessin_emprise', $message_field, $rowDonneesSIG, $this->f));

        printf($button_field, 'calcul_centroide', sprintf($button, 'calcul_centroide', "Calculer le centroïde", "geolocalisation_treatment('$idx', 'calcul_centroide', set_geolocalisation_centroide)"), $this->build_message('calcul_centroide', $message_field, $rowDonneesSIG, $this->f));

        printf($button_field, 'recup_contrainte', sprintf($button, 'recup_contrainte', "Récupérer les contraintes", "geolocalisation_treatment('$idx', 'recup_contrainte', set_geolocalisation_contrainte, '"._("Etes vous sur de vouloir recuperer les contraintes ?")."')"), $this->build_message('recup_contrainte', $message_field, $rowDonneesSIG, $this->f));

        //
        printf("</div>");

        // Le formulaire n'a pas été validé
        $validation = 1;
        // Le formulaire est en mode consultation
        $maj = 3;

        // Champs du formulaire
        $champs = array("centroide", "contrainte", "adresse", "references_cadastrales");

        // Création d'un nouvel objet de type formulaire
        $form = new formulaire(NULL, $validation, $maj, $champs);

        // Configuration des types de champs
        foreach ($champs as $key) {
            $form->setType($key, 'static');
        }
        $form->setType("references_cadastrales", "referencescadastralesstatic");

        // Configuration des libellés
        $form->setLib("references_cadastrales", _("terrain_references_cadastrales"));
        $form->setLib("adresse", _("adresse"));
        $form->setLib("centroide", _("centroide"));
        $form->setLib("contrainte", _("contrainte"));

        // Configuration des données
        $form->setVal("references_cadastrales", $rowDonneesDI["terrain_references_cadastrales"]);
        $form->setVal("adresse", $rowDonneesDI["terrain_adresse_voie_numero"]." ".$rowDonneesDI["terrain_adresse_voie"]." ".$rowDonneesDI["terrain_adresse_lieu_dit"]." ".$rowDonneesDI["terrain_adresse_code_postal"]." ".$rowDonneesDI["terrain_adresse_localite"]." ".$rowDonneesDI["terrain_adresse_bp"]." ".$rowDonneesDI["terrain_adresse_cedex"]);
        if($geom != "") {
            $form->setVal('centroide',
                "<a id='action-form-localiser'".
                " target='_SIG' href='../app/redirect_plan_sig.php?idx=".$rowDonneesDI["dossier"]."'>".
                "<span class='om-icon om-icon-16 om-icon-fix sig-16' title='Localiser'>Localiser</span> ".
                $geom.
                " </a>");
        } else {
            $form->setVal('centroide', $geom);
        }
        $form->setVal("contrainte", $contrainte_val);

        // Affichage des champs
        $form->setBloc("centroide", "D", _("Donnees du dossier d'instruction"), "alignForm col_12");
            $form->setBloc("centroide", "DF", "", "geoloc_form alignForm col_12");
            $form->setBloc("contrainte", "DF", "", "geoloc_form alignForm col_12");
            $form->setBloc("adresse", "DF", "", "geoloc_form alignForm col_12");
            $form->setBloc("references_cadastrales", "DF", "", "geoloc_form alignForm col_12");
        $form->setBloc("references_cadastrales", "F");

        $form->afficher($champs, $validation, false, false);
        // Ferme le tableau pour l'affichage sur deux colonnes
        printf("</div></div>");

        //Ajout d'un div vide pour éviter les superspositions des div
        printf("<div class=\"both\"></div>");

        // Fin du formulaire
        printf("</div></div>");

        // Affiche le bouton de retour
        printf($button_return);
    }

    /**
     * Compose le message affiché à l'utilisateur
     * @param  string $field_name    Nom du champ
     * @param  string $message_field Code html du message
     * @param  array $rowDonneesSIG  Tableau des données
     * @param  object $f             Instance de la classe utils
     * @return string                Message
     */
    function build_message($field_name, $message_field, $rowDonneesSIG, $f) {

        // Récupération des infos
        $date = (isset($rowDonneesSIG["date_".$field_name])) ? $this->f->formatTimestamp($rowDonneesSIG["date_".$field_name]) : "";
        $etat = (isset($rowDonneesSIG["etat_".$field_name])) ? $rowDonneesSIG["etat_".$field_name] : "";;
        $text = (isset($rowDonneesSIG["message_".$field_name])) ? $rowDonneesSIG["message_".$field_name] : "";;

        // id du message
        $id_message = $field_name."-message";

        // Définit le type du message "empty", "valid" ou "error"
        // empty : message grisé
        // valid : message de validation
        // error : message d'erreur
        $type_message = "empty";
        if ($etat != "") {
            //
            $type_message = "valid";
            if ($etat == 'f') {
                $type_message = "error";
            }
        }

        // Si il y a une date, un message est ajouté en debut
        if ($date != "") {
            //
            $date = sprintf(_("Dernier traitement effectue le %s."), $date);
        }
        
        // Si aucun message alors l'action n'a jamais été effectuée
        if ($text == "") {
            //
            $text = _("Action non effectuee.");
            //
            $type_message = "empty";
        }

        // Compose le message
        $message = sprintf($message_field, $type_message, $id_message, $date." ".$text);

        // retour
        return $message;
    }

    /**
     *
     */
    function view_widget_dossiers_evenement_retour_finalise() {

        // Création de la requête de récupération des dossiers
        $sql =
            "SELECT
                dossier.dossier,
                dossier.dossier_libelle,
                CASE WHEN dossier.instructeur IS NOT NULL THEN
                    CONCAT(instructeur.nom, ' (', division.code, ')')
                    END as nom_instructeur,
                CASE WHEN incomplet_notifie IS TRUE AND incompletude IS TRUE THEN
                    dossier.date_limite_incompletude ELSE
                    dossier.date_limite END as date_limite_na,
                COALESCE(demandeur.particulier_nom, demandeur.personne_morale_denomination)
                    AS nom_petitionnaire
            FROM
                ".DB_PREFIXE."dossier
            LEFT JOIN
                ".DB_PREFIXE."lien_dossier_demandeur
                ON
                    dossier.dossier = lien_dossier_demandeur.dossier
                    AND lien_dossier_demandeur.petitionnaire_principal IS TRUE
            LEFT JOIN
                ".DB_PREFIXE."demandeur
                ON
                    lien_dossier_demandeur.demandeur = demandeur.demandeur
            LEFT JOIN
                ".DB_PREFIXE."instructeur
                ON
                    dossier.instructeur=instructeur.instructeur
            LEFT JOIN
                ".DB_PREFIXE."division
                ON
                    instructeur.division=division.division
            LEFT JOIN
                ".DB_PREFIXE."instruction
                ON
                    instruction.dossier=dossier.dossier
            WHERE
                -- dernier événement d'instruction de type arrêté
                instruction.instruction = (SELECT instruction
                    FROM ".DB_PREFIXE."instruction
                    LEFT JOIN ".DB_PREFIXE."evenement
                        ON instruction.evenement=evenement.evenement
                    LEFT JOIN ".DB_PREFIXE."dossier as di
                            ON instruction.dossier=di.dossier
                    WHERE instruction.date_evenement = (SELECT max(date_evenement)
                        FROM ".DB_PREFIXE."instruction
                        LEFT JOIN ".DB_PREFIXE."evenement
                            ON instruction.evenement=evenement.evenement
                        LEFT JOIN ".DB_PREFIXE."dossier as di
                            ON instruction.dossier=di.dossier
                        WHERE evenement.type = 'arrete'
                        AND di.dossier  = dossier.dossier
                        -- qui n'est pas un retour
                        AND evenement.retour = false
                        -- qui n'a aucune autre date renseignée
                        AND instruction.date_envoi_signature IS NULL
                        AND instruction.date_retour_signature IS NULL
                        AND instruction.date_envoi_rar IS NULL
                        AND instruction.date_retour_rar IS NULL
                        AND instruction.date_envoi_controle_legalite IS NULL
                        AND instruction.date_retour_controle_legalite IS NULL
                        -- qui est finalisé
                        AND instruction.om_final_instruction = true
                    )
                -- condition identique à la sous-requête
                AND evenement.type = 'arrete'
                AND di.dossier  = dossier.dossier
                AND evenement.retour = false
                AND instruction.date_envoi_signature IS NULL
                AND instruction.date_retour_signature IS NULL
                AND instruction.date_envoi_rar IS NULL
                AND instruction.date_retour_rar IS NULL
                AND instruction.date_envoi_controle_legalite IS NULL
                AND instruction.date_retour_controle_legalite IS NULL
                AND instruction.om_final_instruction = true
        ) ";

        // Si collectivité de l'utilisateur niveau mono alors filtre sur celle-ci
        if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
            $sql .= " AND dossier.om_collectivite=".$_SESSION['collectivite'];
        }
     
        $sql .= "
        ORDER BY
            dossier.dossier
        LIMIT 5";
         
        // Exécution de la requête
        $res = $this->f->db->query($sql);
        $this->f->addToLog(__METHOD__."(): db->query(\"".$sql."\");", VERBOSE_MODE);
        $this->f->isDatabaseError($res);
        $nb_result = $res->numrows();
        // Ouverture conteneur
        echo '<div id="view_widget_dossiers_evenement_retour_finalise">';
        // Affiche des données résultats
        if ($nb_result > 0) {
            echo '<table class="tab-tab">';
            // Entête de tableau
            echo '<thead>';
                echo '<tr class="ui-tabs-nav ui-accordion ui-state-default tab-title">';
                    echo '<th class="title col-0 firstcol">';
                        echo '<span class="name">';
                            echo _('dossier');
                        echo '</span>';
                    echo '</th>';
                    echo '<th class="title col-0 firstcol">';
                        echo '<span class="name">';
                            echo _('petitionnaire');
                        echo '</span>';
                    echo '</th>';
                    echo '<th class="title col-0 firstcol">';
                        echo '<span class="name">';
                            echo _('instructeur');
                        echo '</span>';
                    echo '</th>';
                echo '</tr>';
            echo '</thead>';
           
            echo '<tbody>';
           
            // Données dans le tableau
            while ( $row =& $res->fetchRow(DB_FETCHMODE_ASSOC) ) {
         
                echo '<tr class="tab-data odd">';
                    // Numéro de dossier
                    echo '<td class="col-1 firstcol">';
                        echo '<a class="lienTable"
                            href="form.php?obj=dossier_instruction&amp;action=3&amp;idx='.$row["dossier"].'&amp;idz='.$row["dossier_libelle"].'&amp;premier=0&amp;advs_id=&amp;recherche=&amp;tricol=&amp;selectioncol=&amp;valide=&amp;retour=tab">'
                                .$row["dossier_libelle"]
                            .'</a>';
                    echo '</td>';
                   
                    // Nom du pétitionnaire
                    echo '<td class="col-1">';
                        echo '<a class="lienTable"
                            href="form.php?obj=dossier_instruction&amp;action=3&amp;idx='.$row["dossier"].'&amp;idz='.$row["dossier_libelle"].'&amp;premier=0&amp;advs_id=&amp;recherche=&amp;tricol=&amp;selectioncol=&amp;valide=&amp;retour=tab">'
                                .$row["nom_petitionnaire"]
                            .'</a>';
                    echo '</td>';
                   
                    // Instructeur
                    echo '<td class="col-2 lastcol">';
                        echo '<a class="lienTable"
                            href="form.php?obj=dossier_instruction&amp;action=3&amp;idx='.$row["dossier"].'&amp;idz='.$row["dossier_libelle"].'&amp;premier=0&amp;advs_id=&amp;recherche=&amp;tricol=&amp;selectioncol=&amp;valide=&amp;retour=tab">'
                                .$row["nom_instructeur"]
                            .'</a>';
                    echo '</td>';
                   
                echo "</tr>";
            }
         
            echo '</tbody>';
         
            echo '</table>';
            if ($nb_result > 5 && $this->f->isAccredited("dossier_instruction_tab")) {
                $link = '../scr/tab.php?obj=dossier_instruction&decision=true';
                $title = _("Voir tous les dossiers");
                printf('<br/><a href="%s">%s</a>', $link, $title);
            }
        }
        else{
            echo _("Vous n'avez pas de dossier pour lequel on peut proposer une autre decision.");
        }
        // Fermeture conteneur
        echo '</div>';
        return false;
    }
}

?>