From 77cbfb3ca914ba5e6757bfb8078f57088e1c92c2 Mon Sep 17 00:00:00 2001
From: Armand Bahi <armand.bahi@veremes.com>
Date: Mon, 12 Nov 2018 16:03:51 +0100
Subject: [PATCH] Calcul des superpositions en update Fix #18

---
 .../javascript/app/vmap/tools/insert.js       | 20 ++++++++++++++++---
 .../app/vmap/tools/select/select.js           |  8 +++++---
 2 files changed, 22 insertions(+), 6 deletions(-)

diff --git a/src/module_vmap/module/javascript/app/vmap/tools/insert.js b/src/module_vmap/module/javascript/app/vmap/tools/insert.js
index 456136bc..ce07b268 100644
--- a/src/module_vmap/module/javascript/app/vmap/tools/insert.js
+++ b/src/module_vmap/module/javascript/app/vmap/tools/insert.js
@@ -317,6 +317,19 @@ nsVmap.nsToolsManager.Insert.prototype.inserttoolController = function ($scope,
     // Supprime du trou de la feature (si il existe) feature lors de la sélection sur l'interaction this.deleteHole_
     this.deleteHole_.on('select', this.deleteHole, this);
 
+    // Évite les superpositions à l'édition
+    this.modify_.on('modifyend', function (evt) {
+
+        // Récupère la feature ajoutée
+        var aFeatures = evt.features.getArray();
+
+        var j = 0;
+        for (var i = 0; i < aFeatures.length; i++) {
+            // Évite les superpositions avec les autres couches si besoin
+            this_.avoidSuperpositions(aFeatures[i]);
+        }
+    });
+
     // Lance updateInsertObjectFeature lors de chaque changement sur this.oOverlayFeatures_
     // si il n'y a pas eut de changements pendant 500ms
     var iTmpChanges = 0;
@@ -324,6 +337,7 @@ nsVmap.nsToolsManager.Insert.prototype.inserttoolController = function ($scope,
 
         // Retire les anciennes features si on est pas en mode multi
         var sGeomType = $scope['oInsertObject']['sGeomType'];
+
         // Si il ne s'agit pas d'une géométrie multiple
         if (goog.isDefAndNotNull(sGeomType)) {
             if (sGeomType.substr(0, 5) !== 'MULTI' && sGeomType !== 'GEOMETRYCOLLECTION') {
@@ -1244,7 +1258,7 @@ nsVmap.nsToolsManager.Insert.prototype.inserttoolController.prototype.setDiffGeo
             this_.setDiffGeom_(aSuperpositionBos, olFeature, opt_options);
         }
     }, function(err){
-        console.error('Cannot get the diff geom: ', err)
+        console.error('Cannot get the diff geom: ', err);
     });
 
 }
@@ -1282,11 +1296,11 @@ nsVmap.nsToolsManager.Insert.prototype.inserttoolController.prototype.getDiffGeo
                 return 0;
             }
             if (!goog.isDefAndNotNull(response['data'][0])) {
-                deferred.reject('response.data[0] not defined');
+                deferred.resolve(sEWKTGeom);
                 return 0;
             }
             if (!goog.isDefAndNotNull(response['data'][0]['diff_geom'])) {
-                deferred.reject('response.data[0].diff_geom not defined');
+                deferred.resolve(sEWKTGeom);
                 return 0;
             }
             deferred.resolve(response['data'][0]['diff_geom']);
diff --git a/src/module_vmap/module/javascript/app/vmap/tools/select/select.js b/src/module_vmap/module/javascript/app/vmap/tools/select/select.js
index 9c89bc22..0944cee5 100755
--- a/src/module_vmap/module/javascript/app/vmap/tools/select/select.js
+++ b/src/module_vmap/module/javascript/app/vmap/tools/select/select.js
@@ -539,13 +539,14 @@ nsVmap.nsToolsManager.Select.prototype.selectController = function ($scope, $tim
         // Récupère la feature ajoutée
         var aFeatures = evt.features.getArray();
 
-        // Évite les superpositions avec les autres couches si besoin
         var j = 0;
         for (var i = 0; i < aFeatures.length; i++) {
+            // Évite les superpositions avec les autres couches si besoin
             this_.avoidSuperpositions(aFeatures[i]).then(function(){
                 j++;
                 if (!j < aFeatures.length) {
                     setTimeout(function () {
+                        // Enregistre les changements
                         this_.putFeaturesOnTheElement(this_.oOverlayFeatures_.getArray());
                     });
                 }
@@ -556,6 +557,7 @@ nsVmap.nsToolsManager.Select.prototype.selectController = function ($scope, $tim
         setTimeout(function () {
             if (j === 0) {
                 console.error('avoidSuperpositions never sents callback');
+                // Enregistre les changements
                 this_.putFeaturesOnTheElement(this_.oOverlayFeatures_.getArray());
             }
         }, 3000);
@@ -2332,11 +2334,11 @@ nsVmap.nsToolsManager.Select.prototype.selectController.prototype.getDiffGeom_ =
                 return 0;
             }
             if (!goog.isDefAndNotNull(response['data'][0])) {
-                deferred.reject('response.data[0] not defined');
+                deferred.resolve(sEWKTGeom);
                 return 0;
             }
             if (!goog.isDefAndNotNull(response['data'][0]['diff_geom'])) {
-                deferred.reject('response.data[0].diff_geom not defined');
+                deferred.resolve(sEWKTGeom);
                 return 0;
             }
             deferred.resolve(response['data'][0]['diff_geom']);
-- 
GitLab