<?php
/**
 * DBFORM - 'instruction_notification_manuelle' - Surcharge instruction.
 *
 * @package openads
 * @version SVN : $Id$
 */

//
require_once "../obj/instruction.class.php";

//
class instruction_notification_manuelle extends instruction {

    /**
     *
     */
    protected $_absolute_class_name = "instruction_notification_manuelle";

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

        // ACTION - 411 - view_notification_manuelle
        $this->class_actions[411] = array(
            "identifier" => "notification_manuelle",
            "view" => "view_notification_manuelle",
            "permission_suffix" => "modifier",
        );
    }

    /**
     * VIEW - view_notification_manuelle.
     *
     * Ouvre le sous-formulaire en ajaxIt dans un overlay.
     * Cette action est bindée pour utiliser la fonction popUpIt.
     *
     * @return void
     */
    function view_notification_manuelle() {
        // Vérification de l'accessibilité sur l'élément
        $this->checkAccessibility();
        $message_class = "valid";

        // Affichage de la structure HTML
        $description = _("Sélectionner les demandeurs à notifier");
        $this->f->displayDescription($description);

        // Vérification que le paramétrage nécessaire pour l'envoi des notifications existe
        $dossier = $this->getVal('dossier');
        $collectivite_di = $this->get_dossier_instruction_om_collectivite($dossier);

        // Récupération de la liste des demandeurs notifiables
        $demandeurs = $this->get_demandeurs_notifiable();

        //
        // Traitement des données du formulaire
        //
        // Si des données ont été envoyées par le formulaire
        $postValues = $this->f->get_submitted_post_value();
        if ($postValues != null && is_array($postValues) && $postValues != array()) {
            // Récupération de la liste des demandeurs à notifier
            // Récupération de la catégorie et notification des demandeurs choisis
            $categorie = $this->f->get_param_option_notification($collectivite_di);
            $nbDemChoisis = 0;
            // Création d'une notification et d'une tâche pour chaque demandeur à notifier
            foreach ($postValues as $idDemandeur => $isChecked) {
                if ($isChecked == 'Oui' && is_numeric($idDemandeur)) {
                    $nbDemChoisis++;
                    $inst_demandeur = $this->f->get_inst__om_dbform(array(
                        "obj" => "demandeur",
                        "idx" => $idDemandeur,
                    ));
                    // Ajout de la notif et récupération de son id
                    $idNotif = $this->ajouter_notification(
                        $this->getVal($this->clePrimaire),
                        false,
                        $this->f->get_connected_user_login_name(),
                        $inst_demandeur->getVal('courriel')
                    );
                    if ($idNotif === false) {
                            $message_class = "error";
                            $message = __("Erreur lors de la génération de la notification au(x) pétitionnaire(s).");
                            $this->f->displayMessage($message_class, $message);
                            // quitte la boucle si l'ajout de la notification échoue
                            break;
                    }
                    // Création de la tache en lui donnant l'id de la notification
                    $notification_by_task = $this->notification_by_task(
                        $idNotif,
                        $this->getVal('dossier'),
                        $categorie
                    );
                    if ($notification_by_task === false) {
                        $message_class = "error";
                        $message = __("Erreur lors de la génération de la notification au(x) pétitionnaire(s).").'<br/>';
                        $this->f->displayMessage($message_class, $message);
                        // quitte la boucle si l'ajout de la tache de notification échoue
                        break;
                    }
                }
            }
            if ($nbDemChoisis === 0) {
                $message = __("Aucun pétitionnaire n'a été sélectionné.").'<br/>';
                $this->f->displayMessage($message_class, $message);
            } else {
                // Message de valisation si il n'y a pas eu d'erreur au cours du traitement
                if ($message_class === 'valid') {
                    $message = sprintf('%s<br/>%s', __("La notification a été générée."), __("Le suivi de la notification est disponible depuis l'instruction."));
                    $this->f->displayMessage($message_class, $message);
                }
            }
        }

        //
        // Affichage du formulaire
        //
        if ($demandeurs != array()) {
            // Ouverture du formulaire de sélection des demandeurs
            $this->f->layout->display__form_container__begin(array(
                "action" => '',
                "onsubmit" => "affichersform('instruction_notification_manuelle', '".
                    $this->getDataSubmit().
                    "', this); validation_formulaire_notification_manuelle(); return false;",
                "name" => "f2",
            ));
            // Instanciation de l'objet formulaire avec 1 champs par demandeur
            $champs = array_keys($demandeurs);
            $form = $this->f->get_inst__om_formulaire(array(
                "validation" => 0,
                "maj" => $this->getParameter("maj"),
                "champs" => $champs
            ));
            // Ouverture du conteneur de formulaire
            $form->entete();
            // Paramétrage des champs correspondant aux différents demandeurs
            foreach ($demandeurs as $idDemandeur => $courriel) {
                // Paramétrage des champs du formulaire
                $form->setType($idDemandeur, 'checkbox');
                $form->setTaille($idDemandeur, 1);
                $form->setMax($idDemandeur, 1);
                $form->setVal($idDemandeur, 'f');

                // Récupération des informations du demandeur
                $demandeur = $this->f->get_inst__om_dbform(array(
                    "obj" => 'demandeur',
                    "idx" => $idDemandeur,
                ));
                $infoDemandeurs = $demandeur->get_datas();
                $lib = sprintf(
                    '%1$s %2$s %3$s %4$s %5$s %6$s',
                    $demandeur->getVal('type_demandeur'),
                    (array_key_exists('particulier_civilite', $infoDemandeurs)) ?
                        $infoDemandeurs['particulier_civilite'] :
                        $infoDemandeurs['personne_morale_civilite'],
                    (array_key_exists('particulier_nom', $infoDemandeurs)) ?
                        $infoDemandeurs['particulier_nom'] :
                        $infoDemandeurs['personne_morale_nom'],
                    (array_key_exists('particulier_prenom', $infoDemandeurs)) ?
                        $infoDemandeurs['particulier_prenom'] :
                        $infoDemandeurs['personne_morale_prenom'],
                    (array_key_exists('personne_morale_raison_sociale', $infoDemandeurs)) ?
                        $infoDemandeurs['personne_morale_raison_sociale'] :
                        '',
                    $infoDemandeurs['courriel']
                );
                $form->setLib($idDemandeur, trim($lib));
            }
            // affichage des champs
            $form->afficher($champs, 0, false, false);
            // Fermeture du conteneur de formulaire
            $form->enpied();
            $this->f->layout->display__form_controls_container__begin(array(
                "controls" => "bottom",
            ));
            // Affichage du bouton valider
            $this->f->layout->display__form_input_submit(array(
                "name" => "submit-directory",
                "value" => __("Valider"),
                "class" => "boutonFormulaire",
            ));
            $this->f->layout->display__form_controls_container__end();
            $this->f->layout->display__form_container__end();
        } else {
            // Affiche un message d'erreur si aucun demandeur ne peut être notifié
            $message_class = "error";
            $message = _("Aucun demandeur notifiable");
            $this->f->displayMessage($message_class, $message);
        }
    }
    
}// fin classe
