/[openfoncier]/trunk/app/geolocalisation_treatment.php
ViewVC logotype

Annotation of /trunk/app/geolocalisation_treatment.php

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2263 - (hide annotations)
Fri Sep 6 17:58:20 2013 UTC (11 years, 5 months ago) by softime
File size: 14422 byte(s)
- Modification de la gestion de la géolocalisation en cas de modification des parcelles dans le DI : affichage d'un message plus pertinent pour l'utilisateur, modification des boutons impactés demandant un autre traitement.
- Modification des tests
- Traductions

1 softime 2170 <?php
2     /**
3     *
4     *
5 softime 2178 * @package openfoncier
6     * @version SVN : $Id$
7 softime 2170 */
8    
9     // Fichires requis
10     require_once "../obj/utils.class.php";
11     require_once '../services/outgoing/MessageSenderSoap.class.php';
12     require_once "../obj/sig_elyx.class.php";
13     require_once "../obj/dossier.class.php";
14    
15     // Paramétres GET
16     $id = (isset($_GET['id']) ? $_GET['id'] : "" );
17     $fieldname = (isset($_GET['fieldname']) ? $_GET['fieldname'] : "" );
18    
19     // Vérifie les paramètres obligatoires
20     if (isset($id) && $id != ''
21     && isset($fieldname) && $fieldname != '') {
22    
23     // Instance de la classe utils
24     $f = new utils("nohtml");
25     $f->disableLog();
26    
27     /**
28     * Récupération des données de sig_elyx
29     * @param string $id Identifiant du dossier
30     * @param object $f instance de la class utils
31     * @return array Tableau de résultat
32     */
33     function get_sig_elyx($id, $f) {
34    
35     // Requête sql
36     $sqlDonneesSIG = "SELECT *
37     FROM ".DB_PREFIXE."sig_elyx
38     WHERE dossier = '$id'";
39     $resDonneesSIG = $f->db->query($sqlDonneesSIG);
40     $f->addToLog("app/geolocalisation_treatment.php : db->query(\"".$sqlDonneesSIG."\")", VERBOSE_MODE);
41     $f->isDatabaseError($resDonneesSIG);
42     $rowDonneesSIG = &$resDonneesSIG->fetchRow(DB_FETCHMODE_ASSOC);
43    
44     // Tableau de résultat retourné
45     return $rowDonneesSIG;
46     }
47    
48     // Récupération des données de sig_elyx
49     $rowDonneesSIG = get_sig_elyx($id, $f);
50    
51     // Récupération des données du dossier d'autorisation
52     $sqlDonneesDI = "SELECT *
53     FROM ".DB_PREFIXE."dossier
54     WHERE dossier = '$id'";
55     $resDonneesDI = $f->db->query($sqlDonneesDI);
56     $f->addToLog("app/geolocalisation_treatment.php : db->query(\"".$sqlDonneesDI."\")", VERBOSE_MODE);
57     $f->isDatabaseError($resDonneesDI);
58     $rowDonneesDI = &$resDonneesDI->fetchRow(DB_FETCHMODE_ASSOC);
59    
60     // Si l'enregistrement n'existe pas dans la table sig_elyx
61     if (count($rowDonneesSIG) == 0) {
62    
63     // Création de l'enregistrement
64     $sig_elyx = new sig_elyx(']', $f->db, DEBUG);
65     // Création d'un tableau avec la liste des champs de sig_elyx
66     foreach($sig_elyx->champs as $champ) {
67     $valF[$champ] = NULL;
68     }
69     $valF['dossier'] = $id;
70     $valF['terrain_references_cadastrales_archive'] = $rowDonneesDI['terrain_references_cadastrales'];
71     // Si l'ajout à réussi
72     if ($sig_elyx->ajouter($valF, $f->db, DEBUG)) {
73    
74     // On récupére les données de l'enregistrement
75     $rowDonneesSIG = get_sig_elyx($id, $f);
76     }
77     }
78    
79 softime 2263 // Formatage des parcelles pour l'envoi au webservice
80     $liste_parcelles = $f->parseParcelles($rowDonneesSIG['terrain_references_cadastrales_archive']);
81     $wParcelle = $f->formatParcelleToSend($liste_parcelles);
82     // Crée une chaîne de parcelle séparée par des ";"
83     $stringParcelles = implode(';', $wParcelle);
84    
85 softime 2170 // Configuration du soap
86 softime 2178 $conf = $f->config['sig_elyx'];
87 softime 2170
88     // Instance de la classe permettant d'envoyer des requête SOAP
89 softime 2179 $soap = new MessageSenderSoap($conf['url'], $conf['wsdl'], $conf['login'],
90     $conf['password']);
91 softime 2170
92     // Instance de sig_elyx
93     $sig_elyx = new sig_elyx($rowDonneesSIG['sig_elyx'], $f->db, DEBUG);
94     // Instance de dossier
95     $dossier = new dossier($id, $f->db, DEBUG);
96    
97 softime 2178 // Initialisation des variables
98     $message = "";
99 softime 2263 $message_diff_parcelle = _("Les parcelles ont ete modifiees.");
100 softime 2178 $execute = array();
101    
102 softime 2200 // Si les références cadastrales sont à changer dans sig_elyx
103     $flag_ref_cadastrales = false;
104 softime 2263 $diff_parcelle = false;
105 softime 2200
106 softime 2170 // Fait appele aux différents webservices selon le bouton cliqué
107     switch ($fieldname) {
108     //
109     case 'verif_parcelle':
110 softime 2263 // Données à envoyer au wsdl
111 softime 2200 $data = array(
112     "wParcelle" => $stringParcelles,
113     );
114     // Exécute le webservices
115     $execute = $soap->execute('getExistParcelle', $data);
116 softime 2170 break;
117     //
118     case 'calcul_emprise':
119 softime 2172 // Données à envoyer au wsdl
120     $data = array(
121 nhaye 2180 "wParcelle" => $stringParcelles,
122 softime 2172 "wId" => $id,
123     );
124     // Exécute le webservices
125     $execute = $soap->execute('getCalculEmprise', $data);
126 softime 2170 break;
127     //
128     case 'dessin_emprise':
129 softime 2179 // Permet de récupérer la première parcelle
130 nhaye 2180 $parcelle = $wParcelle[0];
131 softime 2179 // Construit le lien
132 softime 2178 $execute['return'] = "http://".$f->collectivite['sig_web_server']
133 softime 2233 ."?disabledAttributes=NUMERO_DE_DOSSIER&createObject="
134 softime 2178 .$f->collectivite['sig_couche_emprise_dossier']
135 softime 2233 ."&attributeValues.NUMERO_DE_DOSSIER=".$id."&KEY="
136 softime 2179 .$f->collectivite['sig_couche_affichage_parcelle']."*/"
137     .$parcelle."&SELECT=false";
138 softime 2170 break;
139     //
140     case 'calcul_centroide':
141     // Données à envoyer au wsdl
142     $data = array(
143     "wId" => $id,
144     );
145 softime 2172 // Exécute le webservice
146 softime 2170 $execute = $soap->execute('getCentroideDossier', $data);
147     break;
148     //
149     case 'recup_contrainte':
150 softime 2212 // Données à envoyer au wsdl
151     $data = array(
152     "wType" => "1",
153     "wId" => $id,
154     );
155     // Exécute le webservice
156     $execute = $soap->execute('getContrainteNRU', $data);
157 softime 2170 break;
158     }
159    
160     // Si le code HTTP retour est un '200'
161 softime 2200 // ou que le bouton cliqué est 'dessiner l'emprise'
162 softime 2178 if ($soap->getResponseCode() == '200'
163 softime 2227 || $fieldname == 'dessin_emprise') {
164 softime 2172 // Met l'état à vrai
165     $etat = 't';
166    
167 softime 2178 // Traitement selon le bouton cliqué
168 softime 2170 switch ($fieldname) {
169     //
170     case 'verif_parcelle':
171 softime 2200 // Traitement du message
172     $message = _("Les parcelles existent.");
173     // Initialise le tableau qui contiendra les parcelles qui
174     // n'existent pas
175     $list_error_parcelle = array();
176     // Vérifie l'existence des parcelles
177     foreach ($execute['return'] as $key => $ret) {
178     // Si c'est un tableau
179     if (is_array($execute['return'][$key])) {
180     //
181     if ($ret['existe'] != '0') {
182     $list_error_parcelle[] = $ret['id'];
183     }
184     } elseif ($key == 'existe' && $execute['return'][$key] == '1') {
185     $list_error_parcelle[] = $execute['return']['id'];
186     }
187     }
188     // Si des parcelles n'existent pas alors ont les affichent
189     // à l'utilisateur
190     if (count($list_error_parcelle) != 0) {
191     //
192     $etat = 'f';
193     //
194     $string_error_parcelle = implode(", ", $list_error_parcelle);
195     //
196 softime 2249 $message = _("Les parcelles n'existent pas.");
197 softime 2200 } else {
198     // Sinon ont met à jour le champ
199     // terrain_references_cadastrales_archive dans la table
200     // sig_elyx
201     $flag_ref_cadastrales = true;
202 softime 2263
203     // Si les deux champs sont différent
204     if (isset($rowDonneesSIG["terrain_references_cadastrales_archive"]) && $rowDonneesSIG["terrain_references_cadastrales_archive"] != $rowDonneesDI["terrain_references_cadastrales"]) {
205     $diff_parcelle = true;
206     }
207 softime 2200 }
208 softime 2170 break;
209     //
210     case 'calcul_emprise':
211 softime 2172 // Traitement du message
212     $message = _("L'emprise a ete calcule.");
213 softime 2170 break;
214     //
215 softime 2178 case 'dessin_emprise':
216     // Traitement du message
217 softime 2200 $message = _("Redirige vers ElyxWeb.");
218 softime 2178 break;
219     //
220 softime 2170 case 'calcul_centroide':
221 nhaye 2198 // Récupération du code de référentiel sig
222 nhaye 2205 if($f->getParameter("sig_referentiel") == "" OR
223     $f->getParameter("sig_referentiel") == NULL) {
224 nhaye 2198 $etat = 'f';
225     $message = _("Erreur de configuration. Contactez votre administrateur.");
226     } else {
227     $coord = $execute['return']['coordX']." ".$execute['return']['coordY'];
228    
229     // Traitement du message
230     $message = _("Le centroide a ete calcule")." : ".
231     $execute['return']['coordX'].", ".
232 softime 2263 $execute['return']['coordY'].".";
233 nhaye 2198
234     // Met à jour le centroide dans le dossier
235     $res = $f->db->query("UPDATE ".DB_PREFIXE."dossier ".
236     "SET geom = public.ST_GeomFromText('POINT(".$coord.")',".
237 nhaye 2205 $f->getParameter("sig_referentiel").") ".
238 nhaye 2198 "WHERE dossier = '".$id."'");
239     $f->addToLog("app/geolocalisation_treatment.php: db->query(\"UPDATE ".
240     DB_PREFIXE."dossier SET geom = public.ST_GeomFromText('POINT(".
241     $coord.")',".$f->getParameter("sig_referentiel").") WHERE dossier = '".$id."'", VERBOSE_MODE);
242     $f->isDatabaseError($res);
243     }
244 softime 2170 break;
245     //
246     case 'recup_contrainte':
247 softime 2212 // Traitement du message
248     $message = _("Les contraintes ont ete recuperees.");
249     // Liste des contraintes
250     $liste_contraintes = array();
251     foreach ($execute['return'] as $key => $ret) {
252     //
253     if (is_array($execute['return'][$key])) {
254 softime 2249 $liste_contraintes[] = "- ".$ret['libelle'];
255 softime 2212 } elseif ($key == "libelle") {
256 softime 2249 $liste_contraintes[] = "- ".$execute['return'][$key];
257 softime 2212 }
258     }
259     // Liste des contraintes dans une chaîne
260 softime 2249 $string_contraintes = implode(', <br/>', $liste_contraintes);
261 softime 2212 // Recrée le tableau de retour
262     unset($execute);
263     $execute['return']['servitude'] = $string_contraintes;
264     // Met à jour les servitudes dans le dossier
265     $valueDI = array();
266     $valueDI['servitude'] = $string_contraintes;
267     $res = $f->db->autoExecute(DB_PREFIXE."dossier", $valueDI, DB_AUTOQUERY_UPDATE, "dossier = '".$id."'");
268     $f->addToLog("app/geolocalisation_treatment.php: db->autoexecute(\"".DB_PREFIXE."dossier\", ".print_r($valueDI, true).", DB_AUTOQUERY_UPDATE, \"dossier = '".$id."'\");", VERBOSE_MODE);
269     $f->isDatabaseError($res);
270 softime 2170 break;
271     }
272     }
273    
274 softime 2225 // Si une erreur interne est retournée
275     if ($execute == -1) {
276     // Met l'état à false
277     $etat = 'f';
278 softime 2227 // Traitement du message d'erreur
279 softime 2233 $message = _("Une erreur s'est produite. Veuillez verifier les etapes precedentes ou contacter votre administrateur.");
280 softime 2227 // log le message d'erreur retourné par le webservice
281 softime 2249 $f->addToLog("app/geolocalisation_treatment.php: Traitement webservice SIG: ".$soap->getErrorMessage(), DEBUG_MODE);
282 softime 2225 // Redéfinit la variable utilisée pour le retour
283     unset($execute);
284 softime 2227 $execute= array();
285 softime 2225 }
286    
287 softime 2170 // Format de la date pour l'affichage
288     $date = date('d/m/Y H:i:s');
289     // Format de la date pour la BDD
290     $date_db = $f->formatTimestamp($date, false);
291    
292     // Valeur à modifier dans sig_elyx
293 softime 2200 $valueSIG = array();
294 softime 2170 foreach($sig_elyx->champs as $key => $champ) {
295     //
296     $valueSIG[$champ] = $sig_elyx->val[$key];
297    
298     // Pour les champs de type timestamp étant vide, il faut renvoyer NULL
299     $champ_split = explode("_", $champ);
300     if ($champ_split[0] == "date" && $valueSIG[$champ] == '') {
301     $valueSIG[$champ] = null;
302     }
303     }
304     $valueSIG['date_'.$fieldname] = $date_db;
305     $valueSIG['etat_'.$fieldname] = $etat;
306     $valueSIG['message_'.$fieldname] = $message;
307 softime 2200 // Si les références cadastrales ont été modifiées et vérifier
308     if ($flag_ref_cadastrales === true) {
309 softime 2263 // On met à jour le champ de la table sig_elyx
310 softime 2200 $valueSIG['terrain_references_cadastrales_archive'] = $rowDonneesDI['terrain_references_cadastrales'];
311     }
312 softime 2263 // Si les champs contenant la référence cadastrale dans le DI
313     // et dans la table sig_elyx sont différent
314     if ($diff_parcelle === true) {
315     // Met à jour le message des autres boutons
316     $valueSIG['message_calcul_emprise'] = $message_diff_parcelle;
317     $valueSIG['message_calcul_centroide'] = $message_diff_parcelle;
318     $valueSIG['message_recup_contrainte'] = $message_diff_parcelle;
319     // Met à jour l'état des autres boutons
320     $valueSIG['etat_calcul_emprise'] = 'f';
321     $valueSIG['etat_calcul_centroide'] = 'f';
322     $valueSIG['etat_recup_contrainte'] = 'f';
323     // Met à jour la date de traitement des autres boutons
324     $valueSIG['date_calcul_emprise'] = $date_db;
325     $valueSIG['date_calcul_centroide'] = $date_db;
326     $valueSIG['date_recup_contrainte'] = $date_db;
327    
328     // Message à affiché à l'utilisateur
329     $message_diff_parcelle = sprintf(_("Dernier traitement effectue le %s."), $date)." ".$message_diff_parcelle;
330     }
331 softime 2170 // Modification de l'enregistrement
332     $sig_elyx->modifier($valueSIG, $f->db, DEBUG);
333    
334     // Message affiché à l'utilisateur
335     $message = sprintf(_("Dernier traitement effectue le %s."), $date)." ".$message;
336    
337     // Tableau à retourner
338     $return = $execute;
339     // Ajoute les informations sur les traitements dans le tableau retourné
340     $return['log'] = array(
341     "date"=> $date,
342     "etat"=> $etat,
343     "message"=> $message,
344 softime 2263 "message_diff_parcelle"=> $message_diff_parcelle
345 softime 2170 );
346    
347     // Retourne le résultat dans un tableau json
348     echo json_encode($return);
349    
350     }
351    
352     ?>

Properties

Name Value
svn:executable *
svn:keywords Id

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26