<?php
//$Id$ 
//gen openMairie le 07/12/2012 17:34

require_once ("../gen/obj/dossier_commission.class.php");

class dossier_commission extends dossier_commission_gen {

    function dossier_commission($id,&$db,$debug) {
        $this->constructeur($id,$db,$debug);
    }// fin constructeur

    // {{{ Gestion de la confidentialité des données spécifiques

    /**
     * Surcharge pour gérer les actions disponibles dans le portlet
     */
    function checkAccessibility() {
        //
        parent::checkAccessibility();
        
        // Si l'utilisateur est un intructeur qui en correspond pas à la
        // division du dossier
        if (!$this->is_editable()){
            unset($this->actions_sup["modifier"]);
            $actions = $this->getParameter("actions");
            unset($actions["modifier"]);
            $this->setParameter("actions", $actions);
        }
        //
        if (!$this->is_deletable()){
            unset($this->actions_sup["supprimer"]);
            $actions = $this->getParameter("actions");
            unset($actions["supprimer"]);
            $this->setParameter("actions", $actions);
        }
        //
        if (!$this->is_markable()||!$this->show_marquer_comme_lu_portlet_action()){
            
            unset($this->actions_sup["lu"]);
        }
        
    }

    /**
     * Cette variable permet de stocker le résultat de la méthode
     * getDivisionFromDossier() afin de ne pas effectuer le recalcul à chacun de
     * ces appels.
     * @var string Code de la division du dossier en cours
     */
    var $_division_from_dossier = NULL;

    /**
     * Cette méthode permet de récupérer le code de division correspondant
     * au dossier sur lequel on se trouve.
     *
     * @return string Code de la division du dossier en cours
     */
    function getDivisionFromDossier() {

        // Cette méthode peut être appelée plusieurs fois lors d'une requête.
        // Pour éviter de refaire le traitement de recherche de la division
        // alors on vérifie si nous ne l'avons pas déjà calculé.
        if ($this->_division_from_dossier != NULL) {
            // Logger
            $this->addToLog("getDivisionFromDossier(): retour de la valeur déjà calculée - '".$this->_division_from_dossier."'", EXTRA_VERBOSE_MODE);
            // On retourne la valeur déjà calculée
            return $this->_division_from_dossier;
        }

        // Par défaut, on définit la valeur du dossier à NULL
        $dossier = NULL;
        // Test sur le mode et le contexte du formulaire
        if ($this->getParameter("maj") == 0
            && ($this->getParameter("retourformulaire") == "dossier"
                || $this->getParameter("retourformulaire") == "dossier_instruction"
                || $this->getParameter("retourformulaire") == "dossier_instruction_mes_encours"
                || $this->getParameter("retourformulaire") == "dossier_instruction_tous_encours"
                || $this->getParameter("retourformulaire") == "dossier_instruction_mes_clotures"
                || $this->getParameter("retourformulaire") == "dossier_instruction_tous_clotures")) {
            // Si on se trouve en mode AJOUT (seul mode où l'enregistrement
            // n'existe pas en base de données) ET que nous nous trouvons
            // dans le contexte d'un dossier d'instruction alors on récupère
            // le numéro de dossier depuis le paramètre 'idxformulaire'
            $dossier = $this->getParameter("idxformulaire");
        } else {
            // Sinon on récupère le numéro de dossier dans le champs dossier de
            // l'enregistrement (en base de données)
            $dossier = $this->getVal("dossier");
        }

        // On appelle la méthode de la classe utils qui renvoi le code de la
        // division d'un dossier, on la stocke pour ne pas refaire le calcul au
        // prochain appel de cette méthode
        $this->_division_from_dossier = $this->f->getDivisionFromDossier($dossier);
        // Logger
        $this->addToLog("getDivisionFromDossier(): retour de la valeur nouvellement calculée - '".$this->_division_from_dossier."'", EXTRA_VERBOSE_MODE);
        // On retourne la valeur retournée
        return $this->_division_from_dossier;

    }

    // }}}
    
    function setType(&$form,$maj) {
        parent::setType($form, $maj);
        
        //En ajout ou modification pour l'instructeur
        if ( $maj < 2 &&
            (
                $this->retourformulaire=='dossier'
                || $this->retourformulaire=='dossier_instruction'
                || $this->retourformulaire=='dossier_instruction_mes_encours'
                || $this->retourformulaire=='dossier_instruction_tous_encours'
                || $this->retourformulaire=='dossier_instruction_mes_clotures'
                || $this->retourformulaire=='dossier_instruction_tous_clotures'
            ) ){ 
                    
            $form->setType('dossier','hiddenstatic');
            $form->setType('commission','hidden');
            $form->setType('avis','hidden');
            $form->setType('lu', 'hidden');
        }

        //En modification pour l'instructeur
        if ( $maj == 1 &&
            (
                $this->retourformulaire=='dossier'
                || $this->retourformulaire=='dossier_instruction'
                || $this->retourformulaire=='dossier_instruction_mes_encours'
                || $this->retourformulaire=='dossier_instruction_tous_encours'
                || $this->retourformulaire=='dossier_instruction_mes_clotures'
                || $this->retourformulaire=='dossier_instruction_tous_clotures'
            ) ){ 
                    
            $form->setType('lu','checkboxstatic');
        }

        // En consultation et modification pour la cellule suivi
        if ( $maj == 1 && $this->retourformulaire == 'commission'){ 

            $form->setType('dossier','hiddenstatic');
            $form->setType('commission_type','hiddenstatic');
            $form->setType('date_souhaitee','hiddenstaticdate');
            $form->setType('motivation','hiddenstatic');
            $form->setType('commission','hiddenstatic');
            $form->setType('lu','hidden');
        }

        if ( $maj == 3 && $this->retourformulaire == 'commission'){ 

            $form->setType('lu','hidden');
        }
        // 
        if ($this->getParameter("retourformulaire") == "dossier"
            || $this->getParameter("retourformulaire") == "dossier_instruction"
            || $this->getParameter("retourformulaire") == "dossier_instruction_mes_encours"
            || $this->getParameter("retourformulaire") == "dossier_instruction_tous_encours"
            || $this->getParameter("retourformulaire") == "dossier_instruction_mes_clotures"
            || $this->getParameter("retourformulaire") == "dossier_instruction_tous_clotures") {
            //
            $form->setType('dossier', 'hidden');
        }
    }


    function setLib(&$form, $maj) {
        //
        parent::setLib($form, $maj);
        //
        $form->setLib($this->clePrimaire, _("id"));
    }

    // la demande de commission est mis à lu par défaut
    function triggerajouter($id,&$db,$val,$DEBUG) {

        $this->valF['lu'] = TRUE;
    }

    // Si la commission rend son avis, la demande de commission est non lu pour que 
    // l'instructeur soit notifié
    function triggermodifier($id,&$db,$val,$DEBUG) {
        
        if ( $val['avis'] != "" ){
            
            $this->valF['lu'] = FALSE;
        }
    }

    // Met la date au bon format
    function setValsousformulaire(&$form,$maj,$validation,$idxformulaire,$retourformulaire,$typeformulaire,&$db,$DEBUG=null){
        //
        $this->retourformulaire = $retourformulaire;
        // En mode AJOUTER
        if ($maj == 0) {
            // On positionne la date du jour par défaut
            $form->setVal('date_souhaitee', date("d/m/Y"));
            // Afficher le numéro de dossier d'instruction
            if($retourformulaire =='dossier'
               || $retourformulaire =='dossier_instruction'
               || $retourformulaire =='dossier_instruction_mes_encours'
               || $retourformulaire =='dossier_instruction_tous_encours'
               || $retourformulaire =='dossier_instruction_mes_clotures'
               || $retourformulaire =='dossier_instruction_tous_clotures'){
                $form->setVal('dossier', $idxformulaire);
            }
        }
    }

    //Surcharge du bouton retour de la gestion des commissions afin de retourner directement vers le tableau
    function retoursousformulaire($idxformulaire, $retourformulaire, $val,
                                  $objsf, $premiersf, $tricolsf, $validation,
                                  $idx, $maj, $retour) {
                                      
        if( $maj = 1 && $retourformulaire === "commission") {
            
            echo "\n<a class=\"retour\" ";
            echo "href=\"#\" ";
            
            echo "onclick=\"ajaxIt('".$objsf."', '";
            echo "../scr/soustab.php?obj=dossier_commission&idxformulaire="
                   .$val['commission']. 
                "&retourformulaire=commission');\"";
            echo  "\" ";
            echo ">";
            //
            echo _("Retour");
            //
            echo "</a>\n";
            
        } else {
            parent::retoursousformulaire($idxformulaire, $retourformulaire, $val,
                                  $objsf, $premiersf, $tricolsf, $validation,
                                  $idx, $maj, ($this->getParameter("maj")==2&&$validation==1)?"tab":$retour);
        }
    }
                                  
    /**
     * Cette methode est à surcharger elle permet de tester dans chaque classe
     * des droits spécifiques en fonction des données
     */
    function canAccess() {

        $retourformulaire = $this->getParameter("retourformulaire");
        // Si l'utilisateur est un instructeur et que le dossier est cloturé
        if ( $this->f->isUserInstructeur() && 
            $this->f->getStatutDossier($this->getParameter("idxformulaire")) == "cloture" && 
            (
                $retourformulaire == 'dossier' ||
                $retourformulaire == 'dossier_instruction' ||
                $retourformulaire == 'dossier_instruction_mes_encours' ||
                $retourformulaire == 'dossier_instruction_tous_encours' ||
                $retourformulaire == 'dossier_instruction_mes_clotures' ||
                $retourformulaire == 'dossier_instruction_tous_clotures'
            ) && $this->getParameter("maj") != 3) {
            
            if ($this->f->can_bypass("dossier_commission", "modifier")&&$this->getParameter("maj")==1){
                return true;
            }
            
            if ($this->f->can_bypass("dossier_commission", "supprimer")&&$this->getParameter("maj")==2){
                return true;
            }
            return false;
        }
        //
        return true;
    }
    
    /**
     * Si le dossier d'instruction auquel est rattachée la consultation est 
     * cloturé, on affiche pas les liens du portlet.
     *
     * @return boolean true si non cloturé false sinon
     */
    function is_dossier_instruction_not_closed() {
        $idxformulaire = $this->getParameter("idxformulaire");
        $retourformulaire = $this->getParameter("retourformulaire");
        //Si le dossier d'instruction auquel est rattachée la consultation est 
        //cloturé, on affiche pas les liens du portlet
        if ( $idxformulaire != '' && 
            (
                $retourformulaire == 'dossier' ||
                $retourformulaire == 'dossier_instruction' ||
                $retourformulaire == 'dossier_instruction_mes_encours' ||
                $retourformulaire == 'dossier_instruction_tous_encours' ||
                $retourformulaire == 'dossier_instruction_mes_clotures' ||
                $retourformulaire == 'dossier_instruction_tous_clotures'
            )){
                
            //On récuppère le statut du dossier d'instruction        
            $statut = $this->f->getStatutDossier($idxformulaire);
            if ( $this->f->isUserInstructeur() && $statut == "cloture" ){
                return false;
            }
        }
        return true;
    }
    
    /**
     * Défini si l'utilisateur est un intructeur qui en correspond à la division
     * du dossier.
     *
     * @return boolean true si correspond false sinon
     */
    function is_instructeur_from_division() {
        
        if ($this->f->isUserInstructeur()
            && isset($this->f->om_utilisateur["division"])
            && $this->f->om_utilisateur["division"] != $this->getDivisionFromDossier()) {
            //
            return false;
        }
        return true;
    }
    
    function is_editable(){
        
        if ($this->f->can_bypass("dossier_commission", "modifier")){
            return true;
        }
        
        if ($this->is_dossier_instruction_not_closed()&&$this->is_instructeur_from_division()){
            return true;
        }
        return false;
    }
    
    function is_deletable(){
        
        if ($this->f->can_bypass("dossier_commission", "supprimer")){
            return true;
        }
        
        if ($this->is_dossier_instruction_not_closed()&&$this->is_instructeur_from_division()){
            return true;
        }
        return false;
    }
    
    function is_markable(){
        
        if($this->f->can_bypass("dossier_commission", "modifier_lu")){
            return true;
        }
        
        if ($this->is_instructeur_from_division()){
            return true;
        }
        return false;
    }
    
    /**
     * Si le champ lu est à true l'action "Marquer comme lu" n'est pas affichée
     *
     * @return boolean true sinon lu false sinon
     */
    function show_marquer_comme_lu_portlet_action() {
        if (isset($this->val[array_search("lu", $this->champs)])
            && $this->val[array_search("lu", $this->champs)]== "t") {
            return false;
        }
        return true;
    }
}// fin classe
?>