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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 874 - (show annotations)
Wed Nov 28 23:56:26 2012 UTC (12 years, 2 months ago) by fmichon
File size: 9866 byte(s)
Correction de notices + Correction d'envoi de mauvais retour d'erreur + Traduction des commentaires en anglais + Mise en cohérence des commentaires avec les sections commentées + Optimisation de la requête de vérification de l'existence du dossier pour ne pas boucler sur tous les dossiers de la table dossier + Mise à jour du README en fonction du nouveau format de date + Ajout de commentaires

1 <?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 // 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 {
25
26 /**
27 *
28 */
29 var $metier_instance = null;
30 var $filename_prefix = null;
31 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 $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 // => 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 ?>

Properties

Name Value
svn:keywords Id

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26