/[openfoncier]/trunk/services/metier/consultationmanager.php
ViewVC logotype

Diff of /trunk/services/metier/consultationmanager.php

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 515 by mlimic, Wed Oct 17 16:22:13 2012 UTC revision 778 by fmichon, Tue Nov 20 16:14:25 2012 UTC
# Line 1  Line 1 
1  <?php  <?php
2    /**
3     * Ce fichier permet de déclarer la classe ConsultationManager, qui effectue les
4     * traitements pour la ressource 'consultations'.
5     *
6     * @package openfoncier
7     * @version SVN : $Id$
8     */
9    
10  require_once ("./metier/metiermanager.php");  // Inclusion de la classe de base MetierManager
11    require_once("./metier/metiermanager.php");
12    
13    // Inclusion de la classe métier consultation
14    require_once("../obj/consultation.class.php");
15    
16    /**
17     * Cette classe hérite de la classe MetierManager. Elle permet d'effectuer des
18     * traitements pour la ressource 'consultations'. Le traitement permet de
19     * rendre un retour d'avis sur une consultation existante par un service
20     * interne à la mairie directement depuis son application.
21     *
22     * @todo XXX Traduire et commenter toutes les méthodes
23     */
24  class ConsultationManager extends MetierManager {  class ConsultationManager extends MetierManager {
       
       
     function __construct() {  
         parent::__construct();  
     }  
       
       
     function __destruct() {  
         parent::__destruct();  
     }  
25    
26      function recommendation($data, $id) {      /**
27      /*               *
28          $date = $this->contents['date_retour'];       */
29                var $metier_instance = null;
30          if (!$this->dateValid($date)) {      var $filename_prefix = null;
31              return $this->sendHttpCode(400, "Bad date.");      var $filename = null;
32    
33        /**
34         * Cette méthode permet de modifier une consultation existante pour lui
35         * ajouter les informations de retour d'avis.
36         *
37         * @param mixed $request_data Les données JSON reçues
38         * @param string $id L'identifiant de la ressource
39         */
40        public function consultationDecision($data, $id) {
41    
42            // Si l'identifiant envoyé n'est pas un numérique alors on ajoute un
43            // message d'informations et on retourne un résultat d'erreur
44            if (!is_numeric($id)) {
45                $this->setMessage("L'identifiant '".$id."' fourni est incorrect.");
46                return $this->BAD_DATA;
47            }
48    
49            // On instancie la consultation sur laquelle porte la requête
50            $this->metier_instance = new consultation($id, $this->db, 0);
51    
52            // On vérifie si l'instanciation a produit une erreur de base de données
53            // alors on ajoute un message d'informations et on retourne un résultat
54            // d'erreur
55            if (isset($this->metier_instance->errors['db_debuginfo'])
56                && !empty($this->metier_instance->errors['db_debuginfo'])) {
57                $this->setMessage("Erreur lors de la récupération de la".
58                                  " consultation '".$id."'.");
59                return $this->KO;
60            }
61    
62            // Si l'identifiant de la consultation instanciée est différent de
63            // l'identifiant envoyé alors on ajoute un message d'informations et
64            // on retourne un résultat d'erreur
65            if ($id != $this->getMetierInstanceValForPrimaryKey()) {
66                $this->setMessage("Aucune consultation '".$id."'.");
67                return $this->BAD_DATA;
68            }
69    
70            // Si la consultation possède déjà une date de retour ou un avis ou une
71            // motivation alors on ajoute un message d'informations et on retourne
72            // un résultat d'erreur
73            $date_retour = $this->getMetierInstanceValForField("date_retour");
74            $avis = $this->getMetierInstanceValForField("avis");
75            $motivation = $this->getMetierInstanceValForField("motivation");
76            if (!empty($date_retour) || !empty($avis) || !empty($motivation)) {
77                $this->setMessage("Un retour d'avis a déjà été rendu pour la".
78                                  " consultation '".$id."'.");
79                return $this->BAD_DATA;
80            }
81    
82            // Le format de la date de retour valide est 'JJ/MM/AAAA'
83            // Si la donnée fournie n'est pas valide alors on ajoute
84            // un message d'informations et on retourne un résultat d'erreur
85            $date_retour = explode("/", $data['date_retour']);
86            if (count($date_retour)!= 3
87                || !checkdate($date_retour[1], $date_retour[0], $date_retour[2])) {
88                $this->setMessage("Le format de la date de retour d'avis fournie".
89                                  " pour la consultation '".$id."' n'est pas".
90                                  " correct.");
91                return $this->BAD_DATA;
92            }
93    
94            // Si la date de retour de l'avis ne se situe pas entre la date d'envoi
95            // de la consultation et la date limite de retour d'avis alors on ajoute
96            // un message d'informations et on retourne un résultat d'erreur
97            $date_retour = $data['date_retour'];
98            $date_envoi = $this->getMetierInstanceValForField("date_envoi");
99            $date_limite = $this->getMetierInstanceValForField("date_limite");
100            if (!$this->dateInsideInterval($date_retour,
101                                           $date_envoi, $date_limite)) {
102                $this->setMessage("La date de retour d'avis fournie pour la".
103                                  " consultation '".$id."' ne se trouve pas entre".
104                                  " la date d'envoi et la date limite.");
105                return $this->BAD_DATA;
106            }
107    
108            // => DATE DE RETOUR
109            $this->metier_instance->valF['date_retour'] = $data['date_retour'];
110    
111            // Si l'avis fourni ne correspond pas à la liste d'avis valides alors
112            // on ajoute un message d'informations et on retourne un résultat
113            // d'erreur
114            $avis = $data["avis"];
115            $avis_valid = array("Favorable",
116                                "Favorable avec réserve", "Défavorable", );
117            if (!in_array($avis, $avis_valid)) {
118                $this->setMessage("L'avis du retour d'avis fourni pour la".
119                                  " consultation '".$id."' n'est pas correct.");
120                return $this->BAD_DATA;
121            }
122    
123            // Récupération de la référence vers un avis_consultation existant
124            // On liste les avis possibles et on récupère l'identifiant
125            // correspondant au libellé transmis en paramètre
126            $sql = " SELECT avis_consultation, libelle ";
127            $sql .= " FROM ".DB_PREFIXE."avis_consultation ";
128            $sql .= " WHERE ((avis_consultation.om_validite_debut IS NULL ";
129            $sql .= " AND (avis_consultation.om_validite_fin IS NULL ";
130            $sql .= " OR avis_consultation.om_validite_fin > CURRENT_DATE)) ";
131            $sql .= " OR (avis_consultation.om_validite_debut <= CURRENT_DATE ";
132            $sql .= " AND (avis_consultation.om_validite_fin IS NULL ";
133            $sql .= " OR avis_consultation.om_validite_fin > CURRENT_DATE))) ";
134            $res = $this->db->query($sql);
135            // Logger
136            $this->addToLog("consultationDecision(): db->query(\"".$sql."\")",
137                            VERBOSE_MODE);
138    
139            // Si une erreur de base de données se produit sur cette requête
140            // alors on retourne un résultat d'erreur
141            if ($this->f->isDatabaseError($res, true)) {
142                $this->setMessage("Erreur lors de la récupération des avis pour la".
143                                  " consultation '".$id."'.");
144                return $this->KO;
145            }
146    
147            // Récupération de la référence vers un avis_consultation existant
148            // On liste les avis possibles et on récupère l'identifiant
149            // correspondant au libellé transmis en paramètre
150            $avis = $data["avis"];
151            $avis_id = NULL;
152            while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
153                if ($avis == $row["libelle"]) {
154                    $avis_id = $row["avis_consultation"];
155                    break;
156                }
157            }
158            $res->free();
159    
160            // Si la décision n'existe pas dans la base de données alors on ajoute
161            // un message d'informations et on retourne un résultat d'erreur
162            if (is_null($avis_id)) {
163                $this->setMessage("L'avis n'existe pas.");
164                return $this->KO;
165            }
166    
167            // => AVIS
168            $this->metier_instance->valF['avis_consultation'] = $avis_id;
169    
170            // Si un nom de fichier (nom_fichier) est fourni mais pas un contenu de
171            // fichier (fichier_base64) alors on ajoute un message d'informations
172            // et on retourne un résultat d'erreur
173            if (isset($data['nom_fichier']) && !isset($data['fichier_base64'])
174                || isset($data['fichier_base64']) && !isset($data['nom_fichier'])) {
175                $this->setMessage("Les informations du fichier de retour d'avis".
176                                  " fournies pour la consultation '".$id."' ne".
177                                  " sont pas correctes.");
178                return $this->BAD_DATA;
179            }
180    
181            //
182            $this->filename_prefix = "consultation_".$id."_";
183    
184            //
185            if (isset($data['fichier_base64'])) {
186                //
187                if ($file_content = base64_decode($data['fichier_base64'], true)) {
188                    //
189                    $r = $this->f->storeDecisionFile($file_content,
190                        $data['nom_fichier'],
191                        $this->getMetierInstanceValForField("dossier"),
192                        $this->filename_prefix);
193                    // XXX Vérifier le retour d'erreur de la méthode
194                    // StoreDecisionFile
195                    if ($r !== true) {
196                        return $r;
197                    }
198                } else {
199                    $this->setMessage("Le contenu du fichier n'est pas valide.");
200                    return $this->BAD_DATA;
201                }
202          }          }
203      */  
204          return $this->OK;          // => FICHIER
205            if (isset($data['nom_fichier'])) {
206                $this->metier_instance->valF['fichier'] = $this->filename_prefix.$data['nom_fichier'];
207            }
208    
209            // => MOTIVATION
210            if (isset($data['motivation'])) {
211                $this->metier_instance->valF['motivation'] = $data['motivation'];
212            }
213    
214            // => LU
215            $this->metier_instance->valF['lu'] = false;
216    
217            // Exécution du traitement
218            $ret = parent::modifier($this->metier_instance->valF,
219                "L'avis de la consultation $id a été pris en compte",
220                "Erreur pendant le traitemande de la demande pour la consultation $id");
221    
222            // XXX vérifier ce retour car filename n'est jamais rempli
223            if ($ret != $this->OK) {
224                // delete the file on disk
225                if (isset($data['nom_fichier'])) {
226                    shell_exec("rm -f $this->filename");
227                }
228            }
229            return $ret;
230    
231      }      }
232        
233  }  }
234    
235  ?>  ?>

Legend:
Removed from v.515  
changed lines
  Added in v.778

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26