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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1659 - (show annotations)
Fri Apr 12 16:34:57 2013 UTC (11 years, 9 months ago) by nhaye
File size: 11182 byte(s)
Ajout de la ressource REST permettant de mettre à jour les dossiers ayant un evenement tacite prevu et une date limite inférieur à la date du jour,
amélioration du metiermanager.php
corrections apportées dans instruction.class.php

1 <?php
2 /**
3 * Ce fichier permet de déclarer la classe MaintenanceManager, qui effectue les
4 * traitements pour la ressource 'maintenance'.
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 /**
14 * Cette classe hérite de la classe MetierManager. Elle permet d'effectuer des
15 * traitements pour la ressource 'maintenance' qui ont vocation à être
16 * déclenché de manière automatique ou par une application externe. Par
17 * exemple, un cron permet chaque soir d'exécuter la synchronisation des
18 * utilisateurs de l'application avec l'annuaire LDAP.
19 */
20 class MaintenanceManager extends MetierManager {
21
22 /**
23 * @var mixed Ce tableau permet d'associer un module a une méthode,
24 * le module (key) est celui reçu dans la requête REST, la méthode (value)
25 * est la méthode de cette classe qui va exécuter le traitement
26 */
27 var $fptrs = array(
28 'user' => 'synchronizeUsers',
29 'consultation' => 'updateConsultationsStates',
30 'instruction' => 'updateDossierTacite',
31 );
32
33 /**
34 * Cette méthode permet de gérer l'appel aux différentes méthodes
35 * correspondantes au module appelé.
36 *
37 * @param string $module Le module à exécuter reçu dans la requête
38 * @param mixed $data Les données reçues dans la requête
39 * @return string Le résultat du traitement
40 */
41 public function performMaintenance($module, $data) {
42
43 // Si le module n'existe pas dans la liste des modules disponibles
44 // alors on ajoute un message d'informations et on retourne un
45 // un résultat d'erreur
46 if (!in_array($module, array_keys($this->fptrs))) {
47 $this->setMessage("Le module demandé n'existe pas");
48 return $this->BAD_DATA;
49 }
50
51 // Si le module existe dans la liste des modules disponibles
52 // alors on appelle la méthode en question et on retourne son résultat
53 return call_user_func(array($this, $this->fptrs[$module]), $data);
54
55 }
56
57 /**
58 * Cette méthode permet d'effectuer la synchronisation des utilisateurs
59 * de l'application avec l'annuaire LDAP paramétré dans l'application.
60 *
61 * @param mixed $data Les données reçues dans la requête
62 * @return string Le résultat du traitement
63 *
64 * @todo XXX Faire une getsion des erreurs dans om_application pour
65 * permettre d'avoir un retour sur le nombre d'utilisateurs synchronisés
66 */
67 public function synchronizeUsers($data) {
68
69 // Initialisation de la synchronisation des utilisateurs LDAP
70 $results = $this->f->initSynchronization();
71
72 // Si l'initialisation ne se déroule pas correctement alors on retourne
73 // un résultat d'erreur
74 if (is_null($results) || $results == false) {
75 $this->setMessage("Erreur interne");
76 return $this->KO;
77 }
78
79 // Application du traitement de synchronisation
80 $ret = $this->f->synchronizeUsers($results);
81
82 // Si l'a synchronisation ne se déroule pas correctement alors on
83 // retourne un résultat d'erreur
84 if ($ret == false) {
85 $this->setMessage("Erreur interne");
86 return $this->KO;
87 }
88
89 // Si l'a synchronisation ne se déroule correctement alors on
90 // retourne un résultat OK
91 $this->setMessage("Synchronisation terminée.");
92 return $this->OK;
93
94 }
95
96 /**
97 * Cette méthode permet d'effectuer le traitement de gestion des avis
98 * tacites sur les consultations qui ont atteint leur date limite de
99 * retour.
100 *
101 * @param mixed $data Les données reçues dans la requête
102 * @return string Le résultat du traitement
103 *
104 * @todo Vérifier si il est possible de déplacer la méthode dans
105 * l'application
106 */
107 public function updateConsultationsStates($data) {
108
109 // Nom de la table
110 $table_name = 'consultation';
111
112 // Récupération de la référence vers un avis_consultation correspondant
113 // au libellé 'Tacite'
114 $sql = "SELECT avis_consultation FROM ".DB_PREFIXE."avis_consultation ";
115 $sql .= " WHERE libelle = 'Tacite' ";
116 $sql .= " AND ((avis_consultation.om_validite_debut IS NULL ";
117 $sql .= " AND (avis_consultation.om_validite_fin IS NULL ";
118 $sql .= " OR avis_consultation.om_validite_fin > CURRENT_DATE)) ";
119 $sql .= " OR (avis_consultation.om_validite_debut <= CURRENT_DATE ";
120 $sql .= " AND (avis_consultation.om_validite_fin IS NULL ";
121 $sql .= " OR avis_consultation.om_validite_fin > CURRENT_DATE))) ";
122 $res = $this->db->query($sql);
123 // Logger
124 $this->addToLog("updateConsultationsStates(): db->query(\"".$sql."\"", VERBOSE_MODE);
125 // Si une erreur de base de données se produit sur cette requête
126 // alors on retourne un résultat d'erreur
127 if ($this->f->isDatabaseError($res, true)) {
128 $this->setMessage("Erreur de base de données.");
129 return $this->KO;
130 }
131
132 // Récupération de la référence vers un avis_consultation correspondant
133 // au libellé 'Tacite'
134 $tacite = NULL;
135 while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
136 $tacite = $row["avis_consultation"];
137 }
138 $res->free();
139
140 // Si la décision n'existe pas dans la base de données alors on ajoute
141 // un message d'informations et on retourne un résultat d'erreur
142 if (is_null($tacite)) {
143 $this->setMessage("L'avis n'existe pas.");
144 return $this->KO;
145 }
146
147 // Récupération de la liste des consultations correspondantes aux
148 // critères du traitement
149 $sql = "SELECT consultation FROM ".DB_PREFIXE."$table_name ";
150 $sql .= " WHERE date_limite < CURRENT_DATE" ;
151 $sql .= " AND date_retour IS NULL AND avis_consultation IS NULL ";
152 $res = $this->db->query($sql);
153 // Logger
154 $this->addToLog("updateConsultationsStates(): db->query(\"".$sql."\"", VERBOSE_MODE);
155 // Si une erreur de base de données se produit sur cette requête
156 // alors on retourne un résultat d'erreur
157 if ($this->f->isDatabaseError($res, true)) {
158 $this->setMessage("Erreur de base de données.");
159 return $this->KO;
160 }
161
162 // Récupération de la liste des consultations correspondantes aux
163 // critères du traitement
164 $ids = array();
165 while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
166 $ids[] = $row["consultation"];
167 }
168 $res->free();
169
170 // Si aucune consultation n'est concernée par le traitement alors on
171 // ajoute un message d'informations et on retourne un résultat 'OK'
172 if (count($ids) == 0) {
173 $this->setMessage("Aucune mise a jour.");
174 return $this->OK;
175 }
176
177 // Exécution du traitement
178 // On met à jour toutes les consultation avec le retour d'avis
179 $fields = array(
180 'avis_consultation' => $tacite,
181 );
182 $res = $this->db->autoExecute(DB_PREFIXE.$table_name,
183 $fields,
184 DB_AUTOQUERY_UPDATE,
185 'consultation IN ('.implode(',', $ids).')');
186 // Logger
187 $this->addToLog("updateConsultationsStates(): db->autoExecute(\"".DB_PREFIXE.$table_name."\", ".print_r($fields, true).", DB_AUTOQUERY_UPDATE, \"consultation IN (\"".implode(',', $ids)."\")", VERBOSE_MODE);
188 // Si une erreur de base de données se produit sur cette requête
189 // alors on retourne un résultat d'erreur
190 if ($this->f->isDatabaseError($res, true)) {
191 $this->setMessage("Erreur de base de données.");
192 return $this->KO;
193 }
194
195 // Tout s'est déroulé correctement alors on ajoute un message
196 // d'informations et on retourne le résultat 'OK'
197 $this->setMessage(count($ids)." consultations mise(s) à jour.");
198 return $this->OK;
199
200 }
201
202 /**
203 * Cette méthode permet d'ajouter une instruction défini dans l'événement
204 * du dernier événement de chaque dossier d'instruction qui a une date limite (tacite)
205 * et qui peut être tacite
206 */
207 public function updateDossierTacite() {
208 $sql_dossier_tacite = "SELECT dossier FROM ".DB_PREFIXE."dossier
209 WHERE dossier.date_limite < now() AND dossier.accord_tacite = 'Oui'";
210
211 $res_dossier_tacite = $this->db->query($sql_dossier_tacite);
212 if ($this->f->isDatabaseError($res_dossier_tacite, true)) {
213 $this->setMessage("Erreur de base de données.");
214 return $this->KO;
215 }// Inclusion de la classe de base MetierManager
216 $nb_maj = 0;
217 while ($row_dossier_tacite =& $res_dossier_tacite->fetchRow(DB_FETCHMODE_ASSOC)) {
218 // Récupération du champ evenement_suivant_tacite du dernier événement
219 // d'instruction du dossier d'instruction
220 $sql_get_event = "SELECT evenement.evenement_suivant_tacite FROM ".DB_PREFIXE."instruction
221 LEFT JOIN ".DB_PREFIXE."evenement ON instruction.evenement = evenement.evenement
222 WHERE instruction.dossier = '".$row_dossier_tacite["dossier"].
223 "' ORDER BY instruction.instruction DESC";
224 $event = $this->db->getOne($sql_get_event);
225 if ($this->f->isDatabaseError($event, true)) {
226 $this->setMessage("Erreur de base de données.");
227 return $this->KO;
228 }
229 // Si un evenement est configuré suivant tacite
230 if($event != NULL) {
231 $valNewInstr = array();
232 require_once("../obj/instruction.class.php");
233 $instruction = new instruction("]", $this->db, 0);
234 // Création d'un tableau avec la liste des champs de l'instruction
235 foreach($instruction->champs as $champ) {
236 if($champ != "bible_auto") {
237 $valNewInstr[$champ] = "";
238 }
239 }
240
241 // Définition des valeurs de la nouvelle instruction
242 $valNewInstr["evenement"] = $event;
243 $valNewInstr["dossier"] = $row_dossier_tacite['dossier'];
244 $valNewInstr["date_evenement"] = date("d/m/Y");
245 $instruction->valF = array();
246 $res_ajout = $instruction->ajouter($valNewInstr, $this->db, $this->DEBUG);
247 if ($this->f->isDatabaseError($res_ajout, true)) {
248 $this->setMessage("Erreur de base de données.");
249 return $this->KO;
250 } else {
251 $nb_maj++;
252 }
253 }
254 }
255 // Tout s'est déroulé correctement alors on ajoute un message
256 // d'informations et on retourne le résultat 'OK'
257 $this->setMessage($nb_maj." dossier(s) mis à jour.");
258 return $this->OK;
259 }
260
261 }
262
263 ?>

Properties

Name Value
svn:keywords Id

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26