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

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

class commission extends commission_gen {

    // Champs contenant les UID des fichiers
    var $abstract_type = array(
        "om_fichier_commission_ordre_jour" => "file",
        "om_fichier_commission_compte_rendu" => "file",
    );
    
    var $metadata = array(
        "om_fichier_commission_ordre_jour" => array(
            "dossier" => "getDossier",
            "dossier_version" => "getDossierVersion",
            "numDemandeAutor" => "getNumDemandeAutor",
            "anneemoisDemandeAutor" => "getAnneemoisDemandeAutor",
            "typeInstruction" => "getTypeInstruction",
            "statutAutorisation" => "getStatutAutorisation",
            "typeAutorisation" => "getTypeAutorisation",
            "dateEvenementDocument" => "getDateEvenementDocument",
            "groupeInstruction" => 'getGroupeInstruction',
            "title" => 'getTitleOrdreCommission',
        ),
        "om_fichier_commission_compte_rendu" => array(
            "dossier" => "getDossier",
            "dossier_version" => "getDossierVersion",
            "numDemandeAutor" => "getNumDemandeAutor",
            "anneemoisDemandeAutor" => "getAnneemoisDemandeAutor",
            "typeInstruction" => "getTypeInstruction",
            "statutAutorisation" => "getStatutAutorisation",
            "typeAutorisation" => "getTypeAutorisation",
            "dateEvenementDocument" => "getDateEvenementDocument",
            "groupeInstruction" => 'getGroupeInstruction',
            "title" => 'getTitleCompteRenduCommission',
        ),
    );

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

    function afterFormSpecificContent() {
        
        //Le sous-formulaire spécifique ne s'affiche qu'en consultation
        if ( $this->parameters['maj'] == 3 ){
            $f = $this->f;
            include "../app/commission_manage.php";
        }
    }
    
    //Le type de commission n'est pas modifiable une fois la commission ajoutée
    function setType(&$form,$maj) {
        parent::setType($form,$maj);
        
        //Cache le champ code en ajout
        if ( $maj == 0 ){
            
            $form->setType('code', 'hidden');
        }
        
        if ( $maj > 0 ) {
            $form->setType('commission_type', 'selecthiddenstatic');
            $form->setType('code', 'hiddenstatic');
        }
        
        //Cache les champs pour la finalisation
        $form->setType('om_fichier_commission_ordre_jour', 'hidden');
        $form->setType('om_final_commission_ordre_jour', 'hidden');
        $form->setType('om_fichier_commission_compte_rendu', 'hidden');
        $form->setType('om_final_commission_compte_rendu', 'hidden');
    }

    //Action javascript au changement du type de la commission
    function setOnchange(&$form,$maj){
        parent::setOnchange($form,$maj);
        
        $form->setOnchange("commission_type","chargeDonneesCommissionType(this.value);");
    }

    // Date du jour par défaut
    function setVal(&$form, $maj, $validation, &$db) {
        
        if( $maj == 0 ) {
            
             $form->setVal("date_commission",date('d/m/Y'));
        }
    }
    
    // Génération automatique du code de la commission
    function setvalF($val) {
        parent::setValF($val);

        // Récupération du code du type de la commission
        $codeTypeCommission = "";
        if ( isset($val['commission_type']) && is_numeric($val['commission_type']))
            $codeTypeCommission = $this->getCodeTypeCommission($val['commission_type']);

        //Formatte la date
        $dateFormatee = $this->formatDate($val['date_commission']);
        
        $this->valF['code'] = $codeTypeCommission.$dateFormatee;
    }
    
    //Retourne le code du type de la commission passée en paramètre
    function getCodeTypeCommission($typeCommission){
        
        $codeTypeCommission = "";
        
        $sql = "SELECT
                code
            FROM
                ".DB_PREFIXE."commission_type
            WHERE
                commission_type = ".$typeCommission;
        $codeTypeCommission = $this->db->getOne($sql);
        $this->f->addToLog("getCodeTypeCommission(): db->getone(\"".$sql."\")", VERBOSE_MODE);
        if ( database::isError($codeTypeCommission) ){
            die();
        }
        
        return $codeTypeCommission;
    }
    
    // Prend une date au format JJ/MM/AAAA et retourne AAAAMMJJ
    function formatDate($date){
        
        $dateFormatee = explode('/',$date);
        $dateFormatee = $dateFormatee[2].$dateFormatee[1].$dateFormatee[0];
        
        return $dateFormatee;
    }
    
    /**
     * Surcharge pour gérer les actions disponibles dans le portlet
     */
    function checkAccessibility() {
        //
        parent::checkAccessibility();
        //Si le document est déjà finalisé, on affiche uniquement le lien de 
        //dé-finalisation pour l'ordre du jour et le compte rendu
        $om_final_commission_ordre_jour = $this->getVal("om_final_commission_ordre_jour");
        if ( isset($this->actions_sup["commission_ordre_jour"]) &&
            $om_final_commission_ordre_jour== "t" ){
                
            //On cache le lien de finalisation et on affiche le bon lien pour l'édition
            $this->actions_sup["commission_ordre_jour"]["lien"] = "../spg/file.php?id=";
            $this->actions_sup["commission_ordre_jour"]["id"] = 
                "&amp;obj=commission&amp;champ=om_fichier_commission_ordre_jour";
        }
        
        $om_final_commission_compte_rendu = $this->getVal("om_final_commission_compte_rendu");
        if ( isset($this->actions_sup["finalisation"]) &&
            $om_final_commission_compte_rendu== "t" ){
                
            //On cache le lien de finalisation et on affiche le bon lien pour l'édition
            $this->actions_sup["commission_compte_rendu"]["lien"] = "../spg/file.php?id=";
            $this->actions_sup["commission_compte_rendu"]["id"] = 
                "&amp;obj=commission&amp;champ=om_fichier_commission_compte_rendu";
        }
    }
    
    /**
     * Finalisation des documents.
     * @param  string $champ    champ du fichier à finaliser
     * @param  booleen $status  permet de définir si on finalise ou définalise
     * @param  string $sousform permet de savoir si se trouve dans un sousformulaire (passé au javascript)
     */
    function finaliser( $champ = '', $status, $sousform){

        //Si on finalise le document
        //Génération du PDF
        $_GET['output'] = "string";
        $_GET['obj'] = 'commission_'.$champ;
        $_GET['idx'] = $this->getVal($this->clePrimaire);
        $f = $this->f;
        include '../pdf/pdfetat.php';
        $idx = $this->getVal($this->clePrimaire);

        //Métadonnées du document
        $metadata = array(
            'filename' => 'commission_'.$champ.'_'.$idx.'.pdf',
            'mimetype' => 'application/pdf',
            'size' => strlen($pdf_output)
        );
        // Récupération des métadonnées calculées après validation
        $spe_metadata = $this->getMetadata("om_fichier_commission_".$champ);
        $metadata = array_merge($metadata, $spe_metadata);

        $uid = $this->f->storage->create($pdf_output, $metadata);

        // Recuperation de la valeur de la cle primaire de l'objet
        if($this->getVal($this->clePrimaire)!='')
            $id = $this->getVal($this->clePrimaire);
        else
            $id=$this->id;
        //Mise à jour des données
        if ( $uid != '' && $uid != 'OP_FAILURE' ){
            // Logger
            $this->addToLog("finaliser() - begin", EXTRA_VERBOSE_MODE);

            // Initialisation du marqueur de bon déroulement de la méthode de
            // traitement
            $this->correct = true;

            //Tableau contenant le lien vers le PDF et lien du portlet pour la mise
            //à jour de l'interface
            $lien = '../spg/file.php?obj=commission&'.
                    'champ=om_fichier_commission_'.$champ.'&id='.$id;
            
            foreach ( $this->champs as $key=>$value )
                $val[$value] = $this->val[$key];
            $val['date_commission']=$this->dateDBToForm($val['date_commission']);
            
            $this->setvalF($val);
            
            // Verification de la validite des donnees
            $this->verifier($this->val, $this->db, DEBUG);
            // Verification du verrou
            $this->testverrou();
            // Si les verifications precedentes sont correctes, on procede a
            // la modification, sinon on ne fait rien et on retourne une erreur
            if ($this->correct) {
                // Execution du trigger 'before' specifique au MODE 'update'
                $this->triggermodifier( $id, $this->db, $this->val, DEBUG);
                
                //Modifie uniquement les valeurs des champs concernant la finalisation 
                //du document
                $valF = array(
                    "om_final_commission_".$champ => TRUE,
                    "om_fichier_commission_".$champ => $uid
                );
                
                // Execution de la requête de modification des donnees de l'attribut
                // valF de l'objet dans l'attribut table de l'objet
                $res = $this->db->autoExecute(DB_PREFIXE.$this->table, $valF, 
                    DB_AUTOQUERY_UPDATE, $this->getCle($id));
                // Si une erreur survient
                if (database::isError($res)) {
                    // Appel de la methode de recuperation des erreurs
                    $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
                } else {
                    // Log
                    $this->addToLog(_("Requete executee"), VERBOSE_MODE);
                    // Log
                    $message = _("Enregistrement")."&nbsp;".$id."&nbsp;";
                    $message .= _("de la table")."&nbsp;\"".$this->table."\"&nbsp;";
                    $message .= "[&nbsp;".$this->db->affectedRows()."&nbsp;";
                    $message .= _("enregistrement(s) mis a jour")."&nbsp;]";
                    $this->addToLog($message, VERBOSE_MODE);
                    // Mise en place du verrou pour ne pas finaliser plusieurs fois
                    // le meme document
                    $this->verrouille();
                    // Execution du trigger 'after' specifique au MODE 'update'
                    $this->triggermodifierapres($id, $this->db, $this->val, DEBUG);

                    return $lien;
                } 
            } else {
                // Message d'echec (saut d'une ligne supplementaire avant le
                // message pour qu'il soit mis en evidence)
                $this->addToLog(
                    _("Finalisation non enregistree")." - ".
                    _("id commission_").$champ." = ".$id." - ".
                    _("uid fichier")." = ".$uid
                );
                return -1;
            }
        }
        // Si le document n'a pas été stocké
        else{
            $this->addToLog(
                _("Finalisation non enregistree")." - ".
                _("id commission_").$champ." = ".$id." - ".
                _("uid fichier")." = ".$uid
            );
            return -1;
        }
    }

    /**
     * Récupération du numéro de dossier d'instruction à ajouter aux métadonnées
     * @return chaîne vide
     */
    protected function getDossier() {
        return "";
    }
    /**
     * Récupération la version du dossier d'instruction à ajouter aux métadonnées
     * @return chaîne vide
     */
    protected function getDossierVersion() {
        return "";
    }
    /**
     * Récupération du numéro de dossier d'autorisation à ajouter aux métadonnées
     * @return chaîne vide
     */
    protected function getNumDemandeAutor() {
        return "";
    }
    /**
     * Récupération de la date de demande initiale du dossier à ajouter aux métadonnées
     * @return chaîne vide
     */
    protected function getAnneemoisDemandeAutor() {
        return "";
    }
    /**
     * Récupération du type de dossier d'instruction à ajouter aux métadonnées
     * @return chaîne vide
     */
    protected function getTypeInstruction() {
        return "";
    }
    /**
     * Récupération du statut du dossier d'autorisation à ajouter aux métadonnées
     * @return chaîne vide
     */
    protected function getStatutAutorisation() {
        return "";
    }
    /**
     * Récupération du type de dossier d'autorisation à ajouter aux métadonnées
     * @return chaîne vide
     */
    protected function getTypeAutorisation() {
        return "";
    }
    /**
     * Récupération de la date d'ajout de document à ajouter aux métadonnées
     * @return date de l'évènement
     */
    protected function getDateEvenementDocument() {
        return date("Y-m-d");
    }
    /**
     * Récupération du groupe d'instruction à ajouter aux métadonnées
     * @return string Groupe d'instruction
     */
    protected function getGroupeInstruction() {
        return "ADS";
    }
    /**
     * Récupération du type du document à ajouter aux métadonnées
     * @return string Type de document
     */
    protected function getTitleOrdreCommission() {
        return "Ordre du jour de commission";
    }
    /**
     * Récupération du type du document à ajouter aux métadonnées
     * @return string Type de document
     */
    protected function getTitleCompteRenduCommission() {
        return "Compte-rendu de commission";
    }
    
}// fin classe
?>