/[openfoncier]/branches/3.14.2/app/geolocalisation_treatment.php
ViewVC logotype

Diff of /branches/3.14.2/app/geolocalisation_treatment.php

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

revision 2180 by nhaye, Thu Aug 29 13:36:43 2013 UTC revision 3229 by vpihour, Fri Dec 19 17:00:24 2014 UTC
# Line 1  Line 1 
1  <?php  <?php
2  /**  /**
3   *   * Traitement sur les actions de la géolocalisation
4   *   *
5   * @package openfoncier   * @package openfoncier
6   * @version SVN : $Id$   * @version SVN : $Id$
# Line 13  require_once "../obj/sig_elyx.class.php" Line 13  require_once "../obj/sig_elyx.class.php"
13  require_once "../obj/dossier.class.php";  require_once "../obj/dossier.class.php";
14    
15  // Paramétres GET  // Paramétres GET
16  $id = (isset($_GET['id']) ? $_GET['id'] : "" );  $id = ($f->get_submitted_get_value('id')!==null ? $f->get_submitted_get_value('id') : "" );
17  $fieldname = (isset($_GET['fieldname']) ? $_GET['fieldname'] : "" );  $fieldname = ($f->get_submitted_get_value('fieldname')!==null ? $f->get_submitted_get_value('fieldname') : "" );
18    
19  // Vérifie les paramètres obligatoires  // Vérifie les paramètres obligatoires
20  if (isset($id) && $id != ''  if (isset($id) && $id != ''
# Line 45  if (isset($id) && $id != '' Line 45  if (isset($id) && $id != ''
45          return $rowDonneesSIG;          return $rowDonneesSIG;
46      }      }
47    
48        /**
49         * Récupérer la contrainte par le numéro de référence SIG
50         * @param  string $numero Identifiant de la contrainte du SIG
51         * @param  object $f      Instance de la classe Utils
52         * @return array          Tableau des résultats
53         */
54        function getContrainteByNumero($numero, $f) {
55    
56            // Initialisation du résultat
57            $contrainte = "";
58    
59            // Requête sql
60            $sqlContrainte = "SELECT contrainte
61                    FROM ".DB_PREFIXE."contrainte
62                    WHERE reference = 't'
63                    AND numero = '".$numero."'";
64            $contrainte = $f->db->getOne($sqlContrainte);
65            $f->addToLog("app/geolocalisation_treatment.php : db->getOne(\"".$sqlContrainte."\")", VERBOSE_MODE);
66            $f->isDatabaseError($contrainte);
67    
68            // Tableau de résultat retourné
69            return $contrainte;
70        }
71    
72        /**
73         * Récupération des contraintes récupérées depuis le SIG liées au dossier
74         * @param  string $id     Identifiant du dossier d'instruction
75         * @param  object $f      Instance de la classe Utils
76         * @return array          Tableau des résultats
77         */
78        function getDossierContrainteSIG($id, $f) {
79    
80            // Initialisation du tableau des résultats
81            $listeDossierContrainteSIG = array();
82    
83            // Requête SQL
84            $sqlDossierContrainte = "SELECT dossier_contrainte
85                    FROM ".DB_PREFIXE."dossier_contrainte
86                    WHERE dossier = '$id'
87                    AND reference IS TRUE";
88            $resDossierContrainte = $f->db->query($sqlDossierContrainte);
89            $f->addToLog("app/geolocalisation_treatment.php : db->query(\"".$sqlDossierContrainte."\")", VERBOSE_MODE);
90            $f->isDatabaseError($resDossierContrainte);
91    
92            // Pour chaque résultat
93            while ($rowDossierContrainte = &$resDossierContrainte->fetchRow(DB_FETCHMODE_ASSOC)) {
94                // Ajoute l'identifiant du lien dans le tableau des résultats
95                $listeDossierContrainteSIG[] = $rowDossierContrainte['dossier_contrainte'];
96            }
97    
98            // Tableau de résultat retourné
99            return $listeDossierContrainteSIG;
100        }
101    
102      // Récupération des données de sig_elyx      // Récupération des données de sig_elyx
103      $rowDonneesSIG = get_sig_elyx($id, $f);      $rowDonneesSIG = get_sig_elyx($id, $f);
104    
# Line 57  if (isset($id) && $id != '' Line 111  if (isset($id) && $id != ''
111      $f->isDatabaseError($resDonneesDI);      $f->isDatabaseError($resDonneesDI);
112      $rowDonneesDI = &$resDonneesDI->fetchRow(DB_FETCHMODE_ASSOC);      $rowDonneesDI = &$resDonneesDI->fetchRow(DB_FETCHMODE_ASSOC);
113    
     // Formatage des parcelles pour l'envoi au webservice  
     $liste_parcelles = $f->parseParcelles($rowDonneesDI['terrain_references_cadastrales']);  
     $wParcelle = $f->formatParcelleToSend($liste_parcelles);  
   
114      // Si l'enregistrement n'existe pas dans la table sig_elyx      // Si l'enregistrement n'existe pas dans la table sig_elyx
115      if (count($rowDonneesSIG) == 0) {      if (count($rowDonneesSIG) == 0) {
116    
# Line 79  if (isset($id) && $id != '' Line 129  if (isset($id) && $id != ''
129              $rowDonneesSIG = get_sig_elyx($id, $f);              $rowDonneesSIG = get_sig_elyx($id, $f);
130          }          }
131      }      }
132        
133        // Si les deux champs sont différent
134        $diff_parcelle = false;
135        if (isset($rowDonneesSIG["terrain_references_cadastrales_archive"]) && $rowDonneesSIG["terrain_references_cadastrales_archive"] != $rowDonneesDI["terrain_references_cadastrales"]) {
136            $diff_parcelle = true;
137        }
138    
139        // Formatage des parcelles pour l'envoi au webservice
140        $liste_parcelles = $f->parseParcelles($rowDonneesSIG['terrain_references_cadastrales_archive']);
141        if ($diff_parcelle == true && $fieldname == 'verif_parcelle') {
142            $liste_parcelles = $f->parseParcelles($rowDonneesDI['terrain_references_cadastrales']);
143        }
144        $wParcelle = $f->formatParcelleToSend($liste_parcelles);
145        // Crée une chaîne de parcelle séparée par des ";"
146        $stringParcelles = implode(';', $wParcelle);
147    
148      // Configuration du soap      // Configuration du soap
149      $conf = $f->config['sig_elyx'];      $conf = $f->config['sig_elyx'];
150    
151      // Instance de la classe permettant d'envoyer des requête SOAP      // Instance de la classe permettant d'envoyer des requête SOAP
152      $soap = new MessageSenderSoap($conf['url'], $conf['wsdl'], $conf['login'],      $soap = new MessageSenderSoap($conf['wsdl'], $conf['login'],
153          $conf['password']);          $conf['password']);
154    
155      // Instance de sig_elyx      // Instance de sig_elyx
# Line 94  if (isset($id) && $id != '' Line 159  if (isset($id) && $id != ''
159    
160      // Initialisation des variables      // Initialisation des variables
161      $message = "";      $message = "";
162        $message_diff_parcelle = _("Les parcelles ont ete modifiees.");
163        $listeDossierContrainteSIGAfter = array();
164      $execute = array();      $execute = array();
165    
166        // Si les références cadastrales sont à changer dans sig_elyx
167        $flag_ref_cadastrales = false;
168    
169      // Fait appele aux différents webservices selon le bouton cliqué      // Fait appele aux différents webservices selon le bouton cliqué
170      switch ($fieldname) {      switch ($fieldname) {
171          //          //
172          case 'verif_parcelle':          case 'verif_parcelle':
173                // Données à envoyer au wsdl
174                $data = array(
175                    "wParcelle" => $stringParcelles,
176                );
177                // Exécute le webservices
178                $execute = $soap->execute('getExistParcelle', $data);
179              break;              break;
180          //          //
181          case 'calcul_emprise':          case 'calcul_emprise':
             $stringParcelles = implode(';', $wParcelle);  
182              // Données à envoyer au wsdl              // Données à envoyer au wsdl
183              $data = array(              $data = array(
184                  "wParcelle" => $stringParcelles,                  "wParcelle" => $stringParcelles,
185                  "wId" => $id,                  "wId" => $id,
186              );              );
             var_dump($data);  
187              // Exécute le webservices              // Exécute le webservices
188              $execute = $soap->execute('getCalculEmprise', $data);              $execute = $soap->execute('getCalculEmprise', $data);
189              break;              break;
# Line 119  if (isset($id) && $id != '' Line 193  if (isset($id) && $id != ''
193              $parcelle = $wParcelle[0];              $parcelle = $wParcelle[0];
194              // Construit le lien              // Construit le lien
195              $execute['return'] = "http://".$f->collectivite['sig_web_server']              $execute['return'] = "http://".$f->collectivite['sig_web_server']
196                  ."?disabledAttributes=IDENTIFIANT&createObject="                  ."?disabledAttributes=NUMERO_DE_DOSSIER&createObject="
197                  .$f->collectivite['sig_couche_emprise_dossier']                  .$f->collectivite['sig_couche_emprise_dossier']
198                  ."&attributeValues.IDENTIFIANT=".$id."&KEY="                  ."&attributeValues.NUMERO_DE_DOSSIER=".$id."&KEY="
199                  .$f->collectivite['sig_couche_affichage_parcelle']."*/"                  .$f->collectivite['sig_couche_affichage_parcelle']."*/"
200                  .$parcelle."&SELECT=false";                  .$parcelle."&SELECT=false";
201              break;              break;
# Line 136  if (isset($id) && $id != '' Line 210  if (isset($id) && $id != ''
210              break;              break;
211          //          //
212          case 'recup_contrainte':          case 'recup_contrainte':
213                // Données à envoyer au wsdl
214                $data = array(
215                    "wType" => "1",
216                    "wId" => $id,
217                );
218                // Exécute le webservice
219                $execute = $soap->execute('getContrainteNRU', $data);
220              break;              break;
221      }      }
222    
     // Si une erreur interne '500' est retournée  
     if ($soap->getResponseCode() == '500') {  
         // Met l'état à false  
         $etat = 'f';  
         // Traitement du message d'erreur  
         $message = explode(":", $execute['fault']['faultstring']);  
         $error_code = trim($message[0]);  
         $message = trim($message[1]);  
   
         // Traduction d'une erreur qui n'en est pas une pour l'utilisateur  
         // si le bouton cliqué est 'Calculer l'emprise' et que le code erreur  
         // est 'ORA-00001'  
         if ($fieldname == 'calcul_emprise' && $error_code == 'ORA-00001') {  
             // Met l'état à vrai  
             $etat = 't';  
             // MEssage pour l'utilisateur  
             $message = _("L'emprise a deja ete calcule.");  
         }  
     }  
   
223      // Si le code HTTP retour est un '200'      // Si le code HTTP retour est un '200'
224      // Ou que le bouton cliqué est 'dessiner l'emprise'      // ou que le bouton cliqué est 'dessiner l'emprise'
225      if ($soap->getResponseCode() == '200'      if ($soap->getResponseCode() == '200'
226          || $fieldname = 'dessin_emprise') {          || $fieldname == 'dessin_emprise') {
227          // Met l'état à vrai          // Met l'état à vrai
228          $etat = 't';          $etat = 't';
229    
# Line 170  if (isset($id) && $id != '' Line 231  if (isset($id) && $id != ''
231          switch ($fieldname) {          switch ($fieldname) {
232              //              //
233              case 'verif_parcelle':              case 'verif_parcelle':
234                    // Traitement du message
235                    $message = _("Les parcelles existent.");
236                    // Initialise le tableau qui contiendra les parcelles qui
237                    // n'existent pas
238                    $list_error_parcelle = array();            
239                    // Vérifie l'existence des parcelles
240                    foreach ($execute['return'] as $key => $ret) {
241                        // Si c'est un tableau
242                        if (is_array($execute['return'][$key])) {
243                            //
244                            if ($ret['existe'] != '0') {
245                                $list_error_parcelle[] = $ret['id'];
246                            }
247                        } elseif ($key == 'existe' && $execute['return'][$key] == '1') {
248                            $list_error_parcelle[] = $execute['return']['id'];
249                        }
250                    }
251                    // Si des parcelles n'existent pas alors ont les affichent
252                    // à l'utilisateur
253                    if (count($list_error_parcelle) != 0) {
254                        //
255                        $etat = 'f';
256                        //
257                        $string_error_parcelle = implode(", ", $list_error_parcelle);
258                        //
259                        $message = _("Les parcelles n'existent pas.");
260                    } else {
261                        // Sinon ont met à jour le champ
262                        // terrain_references_cadastrales_archive dans la table
263                        // sig_elyx
264                        $flag_ref_cadastrales = true;
265    
266                    }
267                  break;                  break;
268              //              //
269              case 'calcul_emprise':              case 'calcul_emprise':
270                  // Traitement du message                  // Traitement du message
271                  $message = _("L'emprise a ete calcule.");                  $message = _("L'emprise a ete calculee.");
272                  break;                  break;
273              //              //
274              case 'dessin_emprise':              case 'dessin_emprise':
275                  // Traitement du message                  // Traitement du message
276                  $message = _("Redirection vers ElyxWeb.");                  $message = _("Redirige vers ElyxWeb.");
277                  break;                  break;
278              //              //
279              case 'calcul_centroide':              case 'calcul_centroide':
280                  // Traitement du message                  // Récupération du code de référentiel sig
281                  $message = _("Le centroide a ete calcule")." : ".$execute['return']['coordX'].", ".$execute['return']['coordY'];                  if($f->getParameter("sig_referentiel") == "" OR
282                  // Met à jour le centroide dans le dossier                      $f->getParameter("sig_referentiel") == NULL) {
283                  $valueDI = array();                      $etat = 'f';
284                  $valueDI['geom'] = $execute['return']['coordX'].", ".$execute['return']['coordY'];                      $message = _("Erreur de configuration. Contactez votre administrateur.");
285                  $res = $f->db->autoExecute(DB_PREFIXE."dossier", $valueDI, DB_AUTOQUERY_UPDATE, "dossier = '".$id."'");                  } else {
286                  $f->addToLog("app/geolocalisation_treatment.php: db->autoexecute(\"".DB_PREFIXE."dossier\", ".print_r($valueDI, true).", DB_AUTOQUERY_UPDATE, \"dossier = '".$id."'\");", VERBOSE_MODE);                      $coord = $execute['return']['coordX']." ".$execute['return']['coordY'];
287                  $f->isDatabaseError($res);  
288                        // Traitement du message
289                        $message = _("Le centroide a ete calcule")." : ".
290                                        $execute['return']['coordX'].", ".
291                                        $execute['return']['coordY'].".";
292    
293                        // Met à jour le centroide dans le dossier
294                        $res = $f->db->query("UPDATE ".DB_PREFIXE."dossier ".
295                                        "SET geom = public.ST_GeomFromText('POINT(".$coord.")',".
296                                            $f->getParameter("sig_referentiel").") ".
297                                        "WHERE dossier = '".$id."'");
298                        $f->addToLog("app/geolocalisation_treatment.php: db->query(\"UPDATE ".
299                            DB_PREFIXE."dossier SET geom = public.ST_GeomFromText('POINT(".
300                                $coord.")',".$f->getParameter("sig_referentiel").") WHERE dossier = '".$id."'", VERBOSE_MODE);
301                        $f->isDatabaseError($res);
302                    }
303                  break;                  break;
304              //              //
305              case 'recup_contrainte':              case 'recup_contrainte':
306                    // Traitement du message
307                    $message = _("Les contraintes ont ete recuperees.");
308                    // Initialisation des variables de comparaison
309                    $synchro = true;
310                    $ajouter = true;
311                    $supprimer = true;
312    
313                    // Récupère toutes les contraintes du dossier avant traitement
314                    $listeDossierContrainteSIG = getDossierContrainteSIG($id, $f);
315                    // Pour chaque contrainte;
316                    foreach ($execute['return'] as $key => $value) {                    
317                        // Vérifie que la contrainte est dans l'application
318                        $contrainte = getContrainteByNumero($value['idContrainte'], $f);
319                        // Si la contrainte est vide
320                        if ($contrainte == "") {
321                            // Nécessite une synchronisation
322                            $synchro = false;
323                        }
324                        // S'il y a une contrainte
325                        if ($contrainte != "") {
326                            // Instancie la classe dossier_contrainte
327                            require_once "../obj/dossier_contrainte.class.php";
328                            $dossier_contrainte_add = new dossier_contrainte("]", $f->db, DEBUG);
329                            // Définit les valeurs
330                            $val = array(
331                                'dossier_contrainte' => ']',
332                                'dossier' => $id,
333                                'contrainte' => $contrainte,
334                                'texte_complete' => $value['libelle'],
335                                'reference' => true,
336                            );
337                            // Ajoute l'enregistrement
338                            $ajouter = $dossier_contrainte_add->ajouter($val, $f->db, DEBUG);
339                        }
340                    }
341    
342                    // S'il n'y a aucune erreurs
343                    if ($ajouter == true && $synchro == true) {
344                        // Si la liste des contraintes n'est pas vide
345                        if (count($listeDossierContrainteSIG) > 0) {
346                            // Pour chaque contrainte
347                            foreach ($listeDossierContrainteSIG as $dossier_contrainte_id) {
348                                // Instancie la classe dossier_contrainte
349                                require_once "../obj/dossier_contrainte.class.php";
350                                $dossier_contrainte_del = new dossier_contrainte($dossier_contrainte_id, $f->db, DEBUG);
351                                // Valeurs de l'enregistrement
352                                $value = array();
353                                foreach($dossier_contrainte_del->champs as $key => $champ) {
354                                    // Terme à chercher
355                                    $search_field = 'contrainte_';
356                                    // Si dans le champ le terme est trouvé
357                                    if (strpos($champ, $search_field) !== false) {
358                                        // Supprime le champ
359                                        unset($dossier_contrainte_del->champs[$key]);
360                                    } else {
361                                        // Récupère la valeur du champ
362                                        $value[$champ] = $dossier_contrainte_del->val[$key];
363                                    }
364                                }
365                                // Supprime l'enregistrement
366                                $supprimer = $dossier_contrainte_del->supprimer($value, $f->db, DEBUG);
367                            }
368                        }
369                    }
370    
371                    // Si les contraintes ne sont pas synchronisées
372                    if ($synchro == false) {
373                        // Traitement du message
374                        $message = _("Les contraintes doivent etre synchronisees.");
375                        // État à false
376                        $etat = 'f';
377                    }
378    
379                    //
380                    if ($ajouter == false && $synchro == true) {
381                        // Traitement du message
382                        $message = _("Les contraintes n'ont pas ete ajoutees au dossier.");
383                        // État à false
384                        $etat = 'f';
385                    }
386    
387                    // Si les contraintes ne sont pas synchronisées
388                    if ($supprimer == false && $ajouter == true && $synchro == true) {
389                        // Traitement du message
390                        $message = _("Les anciennes contraintes n'ont pas ete supprimees.");
391                        // État à false
392                        $etat = 'f';
393                    }
394    
395                    // S'il il y a une erreur
396                    if ($synchro == false || $ajouter == false || $supprimer == false) {
397                        // Ajoute au message d'erreur
398                        $message .= " "._("Contactez votre administrateur.");
399                    }
400    
401                    // Récupère toutes les contraintes du dossier après traitement
402                    $listeDossierContrainteSIGAfter = getDossierContrainteSIG($id, $f);
403                  break;                  break;
404          }          }
405      }      }
406    
407        // Si une erreur interne est retournée
408        if ($execute == -1) {
409            // Met l'état à false
410            $etat = 'f';
411            // Traitement du message d'erreur
412            $message = _("Une erreur s'est produite. Veuillez verifier les etapes precedentes ou contacter votre administrateur.");
413            // log le message d'erreur retourné par le webservice
414            $f->addToLog("app/geolocalisation_treatment.php: Traitement webservice SIG: id dossier = ".$id.": ".$soap->getErrorMessage(), DEBUG_MODE);
415            // Redéfinit la variable utilisée pour le retour
416            unset($execute);
417            $execute= array();
418        }
419    
420      // Format de la date pour l'affichage      // Format de la date pour l'affichage
421      $date = date('d/m/Y H:i:s');      $date = date('d/m/Y H:i:s');
422      // Format de la date pour la BDD      // Format de la date pour la BDD
423      $date_db = $f->formatTimestamp($date, false);      $date_db = $f->formatTimestamp($date, false);
424    
425      // Valeur à modifier dans sig_elyx      // Valeur à modifier dans sig_elyx
426        $valueSIG = array();
427      foreach($sig_elyx->champs as $key => $champ) {      foreach($sig_elyx->champs as $key => $champ) {
428          //          //
429          $valueSIG[$champ] = $sig_elyx->val[$key];          $valueSIG[$champ] = $sig_elyx->val[$key];
# Line 217  if (isset($id) && $id != '' Line 437  if (isset($id) && $id != ''
437      $valueSIG['date_'.$fieldname] = $date_db;      $valueSIG['date_'.$fieldname] = $date_db;
438      $valueSIG['etat_'.$fieldname] = $etat;      $valueSIG['etat_'.$fieldname] = $etat;
439      $valueSIG['message_'.$fieldname] = $message;      $valueSIG['message_'.$fieldname] = $message;
440        // Si les références cadastrales ont été modifiées et vérifier
441        if ($flag_ref_cadastrales === true) {
442            // On met à jour le champ de la table sig_elyx
443            $valueSIG['terrain_references_cadastrales_archive'] = $rowDonneesDI['terrain_references_cadastrales'];
444        }
445        // Si les champs contenant la référence cadastrale dans le DI
446        // et dans la table sig_elyx sont différent
447        if ($flag_ref_cadastrales === true && $diff_parcelle === true) {
448            // Met à jour le message des autres boutons
449            $valueSIG['message_calcul_emprise'] = $message_diff_parcelle;
450            $valueSIG['message_calcul_centroide'] = $message_diff_parcelle;
451            $valueSIG['message_recup_contrainte'] = $message_diff_parcelle;
452            // Met à jour l'état des autres boutons
453            $valueSIG['etat_calcul_emprise'] = 'f';
454            $valueSIG['etat_calcul_centroide'] = 'f';
455            $valueSIG['etat_recup_contrainte'] = 'f';
456            // Met à jour la date de traitement des autres boutons
457            $valueSIG['date_calcul_emprise'] = $date_db;
458            $valueSIG['date_calcul_centroide'] = $date_db;
459            $valueSIG['date_recup_contrainte'] = $date_db;
460    
461            // Message à affiché à l'utilisateur
462            $message_diff_parcelle = sprintf(_("Dernier traitement effectue le %s."), $date)." ".$message_diff_parcelle;
463        }
464      // Modification de l'enregistrement      // Modification de l'enregistrement
465      $sig_elyx->modifier($valueSIG, $f->db, DEBUG);      $sig_elyx->modifier($valueSIG, $f->db, DEBUG);
466    
# Line 230  if (isset($id) && $id != '' Line 474  if (isset($id) && $id != ''
474          "date"=> $date,          "date"=> $date,
475          "etat"=> $etat,          "etat"=> $etat,
476          "message"=> $message,          "message"=> $message,
477            "message_diff_parcelle"=> $message_diff_parcelle
478        );
479        // Ajoute les informations concernant les contraintes récupérées
480        $return['dossier_contrainte'] = array(
481            "nb_contrainte_sig" => count($listeDossierContrainteSIGAfter),
482            "msg_contrainte_sig_empty" => _("Aucune contraintes ajoutees depuis l'application"),
483            "msg_contrainte_sig" => _("contrainte(s) ajoutee(s) depuis le SIG"),
484      );      );
485    
486      // Retourne le résultat dans un tableau json      // Retourne le résultat dans un tableau json

Legend:
Removed from v.2180  
changed lines
  Added in v.3229

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26