From 5cd5ab0569175f139162a6a8c39340e1ab500902 Mon Sep 17 00:00:00 2001
From: ArmandBahi <armand.bahi@veremes.com>
Date: Thu, 18 Oct 2018 16:18:20 +0200
Subject: [PATCH] Squashed 'src/module_vmap/' changes from e7dabee..9804757

9804757 Merge branch 'master' of gitlab.veremes.net:Development/vitis_apps/sources/module_vmap
945b7ea Add storage from SVN
f982df2 add subtree
b7a4879 Squashed 'src/module_cadastre/' content from commit 0bb9b2fa9
52ebc13 add subtree
3f3d51c add subtree
41d5aec Squashed 'src/closure/' content from commit 622066db
91cd365 add subtree
7c3aef1 Squashed 'src/vitis/' content from commit 355b5f8b
e859747 Reset sources
8fe041e Merge branch 'master' into next_version
ce9e639 Merge branch 'master' into next_version
0bb9b2f pull subtree
1475871 Squashed 'src/module_cadastreV2/' changes from e678ee10..8158b9a2
a9b2699 pull subtree
c499cef Squashed 'src/module_anc/' changes from b55c5e85..4321adc4
d82d485 pull subtree
1ad8c84 Squashed 'src/module_vm4ms/' changes from 4f506db7..373ef426
6702c1f pull subtree
94998ed Squashed 'src/module_vmap/' changes from cf75b106..e7dabee0
3a2b6fe pull subtree
97c993d Squashed 'src/vitis/' changes from 01d199ce..7a1818a4
213795d Resolve require problems
0c3ac32 Change dependency.xml
c23b658 Rights on write folders
4ac589a Change __DIR__ by dirname($_SERVER['SCRIPT_FILENAME'])
bc0e083 Change __DIR__ by dirname($_SERVER['SCRIPT_FILENAME'])
b51e622 Change __DIR__ by dirname($_SERVER['SCRIPT_FILENAME'])
3bd1ab1 Change __DIR__ by dirname($_SERVER['SCRIPT_FILENAME'])
53d5453 Change __DIR__ by dirname($_SERVER['SCRIPT_FILENAME'])
2d9fd6a Get rights to vas/server
0602efd Compilation grunt
75c89c8 Try on push subtrees
246ebd0 Add pull.sh
2e026c1 Add pull.sh
37d37d0 Add grunt to the install
5b9cffc Update readme
3f86c34 Ignore properties files
02a3be3 gitignore
578f982 Ingore properties files
d1327b3 add subtree
59431f9 Squashed 'src/module_cadastre/' content from commit ee26cf16
950e5a1 Squashed 'src/module_cadastreV2/' content from commit e678ee10
c2e686c add subtree
92d769c Squashed 'src/module_anc/' content from commit b55c5e85
63a0562 add subtree
829e4cf Squashed 'src/module_vm4ms/' content from commit 4f506db7
3630a46 add subtree
8792eb7 Squashed 'src/module_vmap/' content from commit cf75b10
4fe41d6 add subtree
974b9dd add subtree
92032b6 Squashed 'src/closure/' content from commit 622066d
646709a Squashed 'src/vitis/' content from commit 01d199c
416c2c2 add subtree
06cc1a2 ignore properties files
192389a Get files from SVN
86c2aff Initial commit
f20764c Update from SVN

git-subtree-dir: src/module_vmap
git-subtree-split: 980475751e046766dd4756d1063361cadce7c2bf
---
 module/css/vmap.less                          |   5 +
 .../vmap_admin_map_vmap_admin_map.json        |   0
 .../vmap_admin_map_vmap_layers.json           |   0
 ...ap_business_object_vmap_business_object.js |   0
 ..._business_object_vmap_business_object.json |   0
 .../app/modules/Cadastre/cadastre.js          |   7 +-
 module/javascript/app/vmap/map/map.js         |  15 +-
 .../app/vmap/mapmanager/layerstree.js         |  15 +-
 .../app/vmap/mapmanager/maplegend.js          |   0
 .../app/vmap/mapmanager/mapmanager.js         |   0
 .../app/vmap/mapmanager/mapmodal/maplist.js   |   0
 .../vmap/mapmanager/mapmodal/maplistlitle.js  |   0
 .../javascript/app/vmap/tools/basictools.js   |   2 +
 .../app/vmap/tools/infocontainer.js           |   0
 module/javascript/app/vmap/tools/insert.js    |   8 +-
 module/javascript/app/vmap/tools/location.js  |  95 +++
 module/javascript/app/vmap/tools/print.js     |   0
 .../app/vmap/tools/select/advancedselect.js   |   0
 .../javascript/app/vmap/tools/urlexporter.js  | 140 ++++
 module/javascript/app/vmap/vmap.js            |  45 +-
 module/javascript/vitis/script_module.js      |   0
 module/lang/lang-en.json                      |   0
 module/lang/lang-fr.json                      |   0
 module/template/layers/layertree.html         |   0
 module/template/layers/mapmodal/maplist.html  |   0
 .../layers/mapmodal/maplistlitle.html         |   0
 module/template/modules/cadastre.html         |   0
 module/template/tools/basicselect.html        |   0
 module/template/tools/basictools.html         |  15 +
 module/template/tools/infocontainer.html      |   0
 module/template/tools/insert.html             |   0
 module/template/tools/location.html           |  16 +
 module/template/tools/print.html              |   0
 module/template/tools/select.html             |   0
 module/template/tools/urlexporter.html        |  11 +
 storage/veremes_demo_dessin/forms/custom.json | 629 ++++++++++++++++++
 .../veremes_demo_dessin/forms/default.json    | 629 ++++++++++++++++++
 .../veremes_demo_dessin/forms/published.json  | 629 ++++++++++++++++++
 .../forms/ressources/custom.js                | 109 +++
 .../forms/ressources/default.js               | 109 +++
 .../forms/ressources/published.js             | 109 +++
 .../json/business_object.json                 |  20 +
 storage/veremes_demo_dessin/json/event.json   |   4 +
 .../json/mapserver_layers.json                |  65 ++
 storage/veremes_demo_dessin/package.json      |   5 +
 .../veremes_demo_dessin/sql/structure.json    |   6 +
 storage/veremes_demo_dessin/sql/table.sql     | 282 ++++++++
 .../veremes_oads_dossier/forms/custom.json    | 175 +++++
 .../veremes_oads_dossier/forms/default.json   | 259 ++++++++
 .../veremes_oads_dossier/forms/published.json | 175 +++++
 .../json/business_object.json                 |  20 +
 storage/veremes_oads_dossier/json/event.json  |   1 +
 .../json/mapserver_layers.json                |  45 ++
 storage/veremes_oads_dossier/package.json     |   5 +
 .../veremes_oads_dossier/sql/structure.json   |   6 +
 storage/veremes_oads_dossier/sql/table.sql    | 194 ++++++
 .../json/business_object.json                 |  20 +
 storage/veremes_oads_parcelle/json/event.json |   1 +
 .../json/mapserver_layers.json                |  23 +
 storage/veremes_oads_parcelle/package.json    |   5 +
 .../veremes_oads_parcelle/sql/structure.json  |   6 +
 storage/veremes_oads_parcelle/sql/table.sql   |   0
 web_service/conf/properties_server.inc        |   1 +
 web_service/conf/selected_properties.inc      |   6 +-
 web_service/ws/BusinessObject.class.inc       |   0
 web_service/ws/BusinessObjects.class.inc      |  11 -
 web_service/ws/Layers.class.inc               |   0
 web_service/ws/Querys.class.inc               |   0
 web_service/ws/UserModules.class.inc          |   0
 web_service/ws/UserPrintStyles.class.inc      |   0
 web_service/ws/UserPrintTemplates.class.inc   |   0
 web_service/ws/VexExport.class.inc            |   0
 72 files changed, 3893 insertions(+), 30 deletions(-)
 mode change 100755 => 100644 module/css/vmap.less
 mode change 100755 => 100644 module/forms/vmap_admin_map/vmap_admin_map_vmap_admin_map.json
 mode change 100755 => 100644 module/forms/vmap_admin_map/vmap_admin_map_vmap_layers.json
 mode change 100755 => 100644 module/forms/vmap_business_object/vmap_business_object_vmap_business_object.js
 mode change 100755 => 100644 module/forms/vmap_business_object/vmap_business_object_vmap_business_object.json
 mode change 100755 => 100644 module/javascript/app/modules/Cadastre/cadastre.js
 mode change 100755 => 100644 module/javascript/app/vmap/map/map.js
 mode change 100755 => 100644 module/javascript/app/vmap/mapmanager/layerstree.js
 mode change 100755 => 100644 module/javascript/app/vmap/mapmanager/maplegend.js
 mode change 100755 => 100644 module/javascript/app/vmap/mapmanager/mapmanager.js
 mode change 100755 => 100644 module/javascript/app/vmap/mapmanager/mapmodal/maplist.js
 mode change 100755 => 100644 module/javascript/app/vmap/mapmanager/mapmodal/maplistlitle.js
 mode change 100755 => 100644 module/javascript/app/vmap/tools/basictools.js
 mode change 100755 => 100644 module/javascript/app/vmap/tools/infocontainer.js
 mode change 100755 => 100644 module/javascript/app/vmap/tools/location.js
 mode change 100755 => 100644 module/javascript/app/vmap/tools/print.js
 mode change 100755 => 100644 module/javascript/app/vmap/tools/select/advancedselect.js
 create mode 100644 module/javascript/app/vmap/tools/urlexporter.js
 mode change 100755 => 100644 module/javascript/app/vmap/vmap.js
 mode change 100755 => 100644 module/javascript/vitis/script_module.js
 mode change 100755 => 100644 module/lang/lang-en.json
 mode change 100755 => 100644 module/lang/lang-fr.json
 mode change 100755 => 100644 module/template/layers/layertree.html
 mode change 100755 => 100644 module/template/layers/mapmodal/maplist.html
 mode change 100755 => 100644 module/template/layers/mapmodal/maplistlitle.html
 mode change 100755 => 100644 module/template/modules/cadastre.html
 mode change 100755 => 100644 module/template/tools/basicselect.html
 mode change 100755 => 100644 module/template/tools/basictools.html
 mode change 100755 => 100644 module/template/tools/infocontainer.html
 mode change 100755 => 100644 module/template/tools/insert.html
 mode change 100755 => 100644 module/template/tools/location.html
 mode change 100755 => 100644 module/template/tools/print.html
 mode change 100755 => 100644 module/template/tools/select.html
 create mode 100644 module/template/tools/urlexporter.html
 create mode 100755 storage/veremes_demo_dessin/forms/custom.json
 create mode 100755 storage/veremes_demo_dessin/forms/default.json
 create mode 100755 storage/veremes_demo_dessin/forms/published.json
 create mode 100755 storage/veremes_demo_dessin/forms/ressources/custom.js
 create mode 100755 storage/veremes_demo_dessin/forms/ressources/default.js
 create mode 100755 storage/veremes_demo_dessin/forms/ressources/published.js
 create mode 100755 storage/veremes_demo_dessin/json/business_object.json
 create mode 100755 storage/veremes_demo_dessin/json/event.json
 create mode 100755 storage/veremes_demo_dessin/json/mapserver_layers.json
 create mode 100755 storage/veremes_demo_dessin/package.json
 create mode 100755 storage/veremes_demo_dessin/sql/structure.json
 create mode 100755 storage/veremes_demo_dessin/sql/table.sql
 create mode 100755 storage/veremes_oads_dossier/forms/custom.json
 create mode 100755 storage/veremes_oads_dossier/forms/default.json
 create mode 100755 storage/veremes_oads_dossier/forms/published.json
 create mode 100755 storage/veremes_oads_dossier/json/business_object.json
 create mode 100755 storage/veremes_oads_dossier/json/event.json
 create mode 100755 storage/veremes_oads_dossier/json/mapserver_layers.json
 create mode 100755 storage/veremes_oads_dossier/package.json
 create mode 100755 storage/veremes_oads_dossier/sql/structure.json
 create mode 100755 storage/veremes_oads_dossier/sql/table.sql
 create mode 100755 storage/veremes_oads_parcelle/json/business_object.json
 create mode 100755 storage/veremes_oads_parcelle/json/event.json
 create mode 100755 storage/veremes_oads_parcelle/json/mapserver_layers.json
 create mode 100755 storage/veremes_oads_parcelle/package.json
 create mode 100755 storage/veremes_oads_parcelle/sql/structure.json
 create mode 100755 storage/veremes_oads_parcelle/sql/table.sql
 mode change 100755 => 100644 web_service/conf/properties_server.inc
 mode change 100755 => 100644 web_service/conf/selected_properties.inc
 mode change 100755 => 100644 web_service/ws/BusinessObject.class.inc
 mode change 100644 => 100755 web_service/ws/BusinessObjects.class.inc
 mode change 100755 => 100644 web_service/ws/Layers.class.inc
 mode change 100755 => 100644 web_service/ws/Querys.class.inc
 mode change 100755 => 100644 web_service/ws/UserModules.class.inc
 mode change 100755 => 100644 web_service/ws/UserPrintStyles.class.inc
 mode change 100755 => 100644 web_service/ws/UserPrintTemplates.class.inc
 mode change 100755 => 100644 web_service/ws/VexExport.class.inc

diff --git a/module/css/vmap.less b/module/css/vmap.less
old mode 100755
new mode 100644
index 714bc72f..0afd13f1
--- a/module/css/vmap.less
+++ b/module/css/vmap.less
@@ -1482,6 +1482,11 @@ app-layertree button:hover {
     background-color: transparent;
     color: @color-text-1;
 }
+.basic-tools-element.inactive, .basic-tools-element.inactive:hover{
+    background-color: #838383 !important;
+    color: #A5A5A5 !important;
+    cursor : not-allowed !important;
+}
 .basic-tools-element.active{
     background-color: @basic-tool-active !important;
     color: @head-bar !important;
diff --git a/module/forms/vmap_admin_map/vmap_admin_map_vmap_admin_map.json b/module/forms/vmap_admin_map/vmap_admin_map_vmap_admin_map.json
old mode 100755
new mode 100644
diff --git a/module/forms/vmap_admin_map/vmap_admin_map_vmap_layers.json b/module/forms/vmap_admin_map/vmap_admin_map_vmap_layers.json
old mode 100755
new mode 100644
diff --git a/module/forms/vmap_business_object/vmap_business_object_vmap_business_object.js b/module/forms/vmap_business_object/vmap_business_object_vmap_business_object.js
old mode 100755
new mode 100644
diff --git a/module/forms/vmap_business_object/vmap_business_object_vmap_business_object.json b/module/forms/vmap_business_object/vmap_business_object_vmap_business_object.json
old mode 100755
new mode 100644
diff --git a/module/javascript/app/modules/Cadastre/cadastre.js b/module/javascript/app/modules/Cadastre/cadastre.js
old mode 100755
new mode 100644
index 6ec72c9e..91a57bf0
--- a/module/javascript/app/modules/Cadastre/cadastre.js
+++ b/module/javascript/app/modules/Cadastre/cadastre.js
@@ -269,7 +269,12 @@ nsVmap.nsToolsManager.nsModules.Cadastre.prototype.cadastreController = function
         return oVmap.isLink(sString, 'link');
     };
     $scope['getRenderedParsedLink'] = function (sString) {
-        sString = oVmap.parseLink(sString, 'link');
+
+        if(sString.indexOf('<a') === 0 && sString.indexOf('[') !== 0 ){
+            sString = oVmap.checkLink(sString);
+        }else{
+            sString = oVmap.parseLink(sString, 'link');
+        }        
         return $sce.trustAsHtml(sString);
     };
 };
diff --git a/module/javascript/app/vmap/map/map.js b/module/javascript/app/vmap/map/map.js
old mode 100755
new mode 100644
index a57f5921..7c0ba9a4
--- a/module/javascript/app/vmap/map/map.js
+++ b/module/javascript/app/vmap/map/map.js
@@ -26,7 +26,7 @@ goog.require('goog.async.AnimationDelay');
  * Class {@link nsVmap.Map}: initializes the map
  *
  * @constructor
- * @export 
+ * @export
  */
 nsVmap.Map = function () {
     oVmap.log("nsVmap.Map");
@@ -1246,7 +1246,7 @@ nsVmap.Map.prototype.startMobileDraw = function (sGeomType, callback) {
 
     var this_ = this;
 
-    // Géométrie multiple ? 
+    // Géométrie multiple ?
     this.mobileDrawMulti_ = false;
     if (sGeomType.substr(0, 5).toUpperCase() === 'MULTI') {
         this.mobileDrawMulti_ = true;
@@ -1373,11 +1373,11 @@ nsVmap.Map.prototype.getDrawOutput_ = function (aPoints) {
             return new ol.geom.LineString(aPoints);
             break;
         case 'POLYGON':
-            
+
             // Ajoute la même coord à la fin de la géométrie de manière à boucler le polygone
             var aTmpPoints = angular.copy(aPoints);
             aTmpPoints.push(aTmpPoints[0]);
-            
+
             return new ol.geom.Polygon([aTmpPoints]);
             break;
         case 'CIRCLE':
@@ -1420,7 +1420,7 @@ nsVmap.Map.prototype.displayDrawTmpFeature_ = function () {
 nsVmap.Map.prototype.finishMobileDraw = function () {
     oVmap.log('nsVmap.Map.prototype.finishMobileDraw');
 
-    // Géométrie multiple ? 
+    // Géométrie multiple ?
     var this_ = this;
     if (this.mobileDrawMulti_) {
         bootbox['dialog']({
@@ -1568,7 +1568,7 @@ nsVmap.Map.prototype.redoLastChange = function () {
 };
 
 /**
- * 
+ *
  * @private
  */
 nsVmap.Map.prototype.getMapMenuScope = function () {
@@ -1893,7 +1893,6 @@ nsVmap.Map.prototype.mapController.prototype.emptyLoadErrorsEvents = function ()
     oVmap.log('nsVmap.Map.prototype.emptyLoadErrorsEvents');
 
     for (var i = 0; i < this.loadErrorEventsContainer_.length; i++) {
-//        this.loadErrorEventsContainer_[i].layer.getSource().unByKey(this.loadErrorEventsContainer_[i].event);
         ol.Observable.unByKey(this.loadErrorEventsContainer_[i].event);
     }
 };
@@ -2372,4 +2371,4 @@ nsVmap.Map.prototype.getLayerById = function (layerId) {
 
     // Si aucun layer ne correspondait
     return null;
-};
\ No newline at end of file
+};
diff --git a/module/javascript/app/vmap/mapmanager/layerstree.js b/module/javascript/app/vmap/mapmanager/layerstree.js
old mode 100755
new mode 100644
index 137700c8..673cb4e0
--- a/module/javascript/app/vmap/mapmanager/layerstree.js
+++ b/module/javascript/app/vmap/mapmanager/layerstree.js
@@ -145,7 +145,11 @@ nsVmap.nsMapManager.LayersTree.prototype.LayertreeController = function ($scope,
         this['layerstree_collapsed'] = oVmap['properties']['vmap']['layerstree_collapsed'];
     }
 
-    this.loadTree();
+    if (goog.isDefAndNotNull(oUrlParams['extent'])){
+        var aExtent = decodeURI(oUrlParams['extent']).split("|");
+    }
+
+    this.loadTree(aExtent);
 
     // Événements sur les couches
     var keepLoadedTiles = true;
@@ -351,9 +355,10 @@ nsVmap.nsMapManager.LayersTree.prototype.LayertreeController.prototype.reloadTre
 
 /**
  * Load layers from the tree
+ * @param  {array|undefined} aExtent exent to fit on
  * @returns {undefined}
  */
-nsVmap.nsMapManager.LayersTree.prototype.LayertreeController.prototype.loadTree = function () {
+nsVmap.nsMapManager.LayersTree.prototype.LayertreeController.prototype.loadTree = function (aExtent) {
     oVmap.log('nsVmap.nsMapManager.LayersTree.prototype.LayertreeController.prototype.loadTree');
 
     if (this['map'].getLayers().getArray().length > 0)
@@ -413,6 +418,12 @@ nsVmap.nsMapManager.LayersTree.prototype.LayertreeController.prototype.loadTree
         this.addLayer(olLayers[i]);
     }
 
+    // Va à l'étendue fournie
+    if (goog.isDefAndNotNull(aExtent)) {
+        this['map'].getView().fit(aExtent, {
+            nearest : true
+        });
+    }
 };
 
 /**
diff --git a/module/javascript/app/vmap/mapmanager/maplegend.js b/module/javascript/app/vmap/mapmanager/maplegend.js
old mode 100755
new mode 100644
diff --git a/module/javascript/app/vmap/mapmanager/mapmanager.js b/module/javascript/app/vmap/mapmanager/mapmanager.js
old mode 100755
new mode 100644
diff --git a/module/javascript/app/vmap/mapmanager/mapmodal/maplist.js b/module/javascript/app/vmap/mapmanager/mapmodal/maplist.js
old mode 100755
new mode 100644
diff --git a/module/javascript/app/vmap/mapmanager/mapmodal/maplistlitle.js b/module/javascript/app/vmap/mapmanager/mapmodal/maplistlitle.js
old mode 100755
new mode 100644
diff --git a/module/javascript/app/vmap/tools/basictools.js b/module/javascript/app/vmap/tools/basictools.js
old mode 100755
new mode 100644
index abf0e9a4..f53955c4
--- a/module/javascript/app/vmap/tools/basictools.js
+++ b/module/javascript/app/vmap/tools/basictools.js
@@ -16,6 +16,7 @@ goog.require('nsVmap.nsToolsManager.Measure');
 goog.require('nsVmap.nsToolsManager.Select');
 goog.require('nsVmap.nsToolsManager.Insert');
 goog.require('nsVmap.nsToolsManager.Print');
+goog.require('nsVmap.nsToolsManager.Urlexporter');
 
 
 /**
@@ -34,6 +35,7 @@ nsVmap.nsToolsManager.BasicTools = function () {
     this.oInsert_ = new nsVmap.nsToolsManager.Insert();
     this.oPrint_ = new nsVmap.nsToolsManager.Print();
     this.oControls_ = new nsVmap.nsToolsManager.Controls();
+    this.oUrlExporter_ = new nsVmap.nsToolsManager.Urlexporter();
 };
 
 /**
diff --git a/module/javascript/app/vmap/tools/infocontainer.js b/module/javascript/app/vmap/tools/infocontainer.js
old mode 100755
new mode 100644
diff --git a/module/javascript/app/vmap/tools/insert.js b/module/javascript/app/vmap/tools/insert.js
index f016afe6..803d13ad 100644
--- a/module/javascript/app/vmap/tools/insert.js
+++ b/module/javascript/app/vmap/tools/insert.js
@@ -1434,9 +1434,9 @@ nsVmap.nsToolsManager.Insert.prototype.inserttoolController.prototype.getMobileB
 
     if (sGeomType === 'GEOMETRY' || sGeomType === 'GEOMETRYCOLLECTION') {
         bootbox.prompt({
-            'title': "Type de géométrie à insérer",
-            'inputType': 'select',
-            'inputOptions': [
+            title: "Type de géométrie à insérer",
+            inputType: 'select',
+            inputOptions: [
                 {
                     text: 'Point',
                     value: 'POINT'
@@ -1454,7 +1454,7 @@ nsVmap.nsToolsManager.Insert.prototype.inserttoolController.prototype.getMobileB
                     value: 'CIRCLE'
                 }
             ],
-            'callback': function (result) {
+            callback: function (result) {
                 deferred.resolve(result);
             }
         });
diff --git a/module/javascript/app/vmap/tools/location.js b/module/javascript/app/vmap/tools/location.js
old mode 100755
new mode 100644
index c4f32bfc..4cd96440
--- a/module/javascript/app/vmap/tools/location.js
+++ b/module/javascript/app/vmap/tools/location.js
@@ -127,6 +127,23 @@ nsVmap.nsToolsManager.Location.prototype.locationController = function ($scope,
      */
     this['oBusinessObjects'] = [];
 
+    /**
+     * @type {array}
+     */
+    this['aLocationHistory'] = [{
+		center: this_.map_.getView().getCenter(),
+		zoom: this_.map_.getView().getZoom()
+	}];
+    /**
+     * @type {integer}
+     */
+    this['iHistoryOffset'] = 0;
+    /**
+     * @type {integer}
+     */
+    this['iHistoryOffset_save'] = 0;
+
+
     /**
      * @tyle {number}
      */
@@ -169,8 +186,44 @@ nsVmap.nsToolsManager.Location.prototype.locationController = function ($scope,
         });
     });
 
+    // remplissage de l'historique des étendues
+    var fHistoryDelayHandler;
+    this_.map_.on("moveend", function(event){
+    	if(this_['iHistoryOffset'] === this_['iHistoryOffset_save']){
+    		//check wait
+	        if (goog.isDefAndNotNull(fHistoryDelayHandler)){
+	            $timeout.cancel(fHistoryDelayHandler);
+	        }
+
+	        fHistoryDelayHandler = $timeout(function () {
+	        	if(this_['iHistoryOffset'] === 0){
+	        		this_["aLocationHistory"].push({
+		        		center: this_.map_.getView().getCenter(),
+		        		zoom: this_.map_.getView().getZoom()
+		    		});
+	        	} else {
+	        		// splice 
+	        		var iHistoryPosition = this_['aLocationHistory'].length - (this_['iHistoryOffset']);
+	        		this_["aLocationHistory"].splice(iHistoryPosition, this_['iHistoryOffset'], {
+		        		center: this_.map_.getView().getCenter(),
+		        		zoom: this_.map_.getView().getZoom()
+		    		});
+
+		    		this_['iHistoryOffset'] = 0;
+	        	}
+	        }, oVmap['properties']['vmap_history_timer']);
+    	} else {
+    		this_['iHistoryOffset_save'] = this_['iHistoryOffset'];
+    	}
+    });
+
     // Vide les localisations quand on change de carte
     oVmap['scope'].$on('mapChanged', function () {
+    	// purge de l'historique des étendues
+    	this_['aLocationHistory'] = [{
+			center: this_.map_.getView().getCenter(),
+			zoom: this_.map_.getView().getZoom()
+		}];
         if (goog.isDef(this_.locationPopup)) {
             this_.locationPopup.remove();
         }
@@ -311,6 +364,48 @@ nsVmap.nsToolsManager.Location.prototype.locationController.prototype.goHome = f
     currentView.setResolution(originalPosition.resolution);
 };
 
+
+/**
+ * Go on the previous extent
+ * @export
+ */
+nsVmap.nsToolsManager.Location.prototype.locationController.prototype.nextHistoryExtent = function () {
+    oVmap.log("nsVmap.nsToolsManager.Location.prototype.locationController.nextHistoryExtent");
+
+    if(this['iHistoryOffset'] > 0){
+    	this['iHistoryOffset'] -= 1;
+    	this.selectHistoryExtent();
+    }
+};
+
+/**
+ * Go on the next extent
+ * @export
+ */
+nsVmap.nsToolsManager.Location.prototype.locationController.prototype.previousHistoryExtent = function () {
+    oVmap.log("nsVmap.nsToolsManager.Location.prototype.locationController.previousHistoryExtent");
+
+    if(this['iHistoryOffset'] < this['aLocationHistory'].length - 1){
+    	this['iHistoryOffset'] += 1;
+    	this.selectHistoryExtent();
+    }
+};
+
+/**
+ * Go on the selected extent in history
+ * @export
+ */
+nsVmap.nsToolsManager.Location.prototype.locationController.prototype.selectHistoryExtent = function () {
+    oVmap.log("nsVmap.nsToolsManager.Location.prototype.locationController.selectHistoryExtent");
+
+    var currentView = oVmap.getMap().getOLMap().getView();
+
+    var iHistoryPosition = this['aLocationHistory'].length - ( 1 + this['iHistoryOffset']);
+
+    currentView.setCenter(this['aLocationHistory'][iHistoryPosition].center);
+    currentView.setZoom(this['aLocationHistory'][iHistoryPosition].zoom);
+};
+
 /**
  * Localise the map on the entry position
  * @param {string} CoordX html id to the X value
diff --git a/module/javascript/app/vmap/tools/print.js b/module/javascript/app/vmap/tools/print.js
old mode 100755
new mode 100644
diff --git a/module/javascript/app/vmap/tools/select/advancedselect.js b/module/javascript/app/vmap/tools/select/advancedselect.js
old mode 100755
new mode 100644
diff --git a/module/javascript/app/vmap/tools/urlexporter.js b/module/javascript/app/vmap/tools/urlexporter.js
new file mode 100644
index 00000000..85e757f8
--- /dev/null
+++ b/module/javascript/app/vmap/tools/urlexporter.js
@@ -0,0 +1,140 @@
+/* global oVmap, nsVmap, goog, ol, vitisApp */
+
+/**
+ * @author: Anthony Borghi
+ * @Description: Fichier contenant la classe nsVmap.nsToolsManager.Urlexporter
+ * cette classe permet à l'utilisateur d'exporter une url pour un autre utilisateur
+ */
+goog.provide('nsVmap.nsToolsManager.Urlexporter');
+
+goog.require('oVmap');
+
+/**
+ * @classdesc
+ * Class {@link nsVmap.nsToolsManager.VmapUser}
+ * @constructor
+ * @export
+ */
+nsVmap.nsToolsManager.Urlexporter = function () {
+    oVmap.log('nsVmap.nsToolsManager.Urlexporter');
+};
+
+
+
+/**
+ * Directive
+ * @return {angular.Directive} The directive specs.
+ * @constructor
+ */
+nsVmap.nsToolsManager.Urlexporter.prototype.urlExporterDirective = function () {
+    oVmap.log("nsVmap.nsToolsManager.Urlexporter.prototype.urlExporterDirective");
+    return {
+        restrict: 'A',
+        scope: {
+            'map': '=appMap',
+            'lang': '=appLang'
+        },
+        controller: 'AppUrlExporterController',
+        controllerAs: 'ctrl',
+        bindToController: true,
+        templateUrl: oVmap['properties']['vmap_folder'] + '/' + 'template/tools/' + (oVmap['properties']['is_mobile'] ? 'urlexporter_mobile.html' : 'urlexporter.html')
+    };
+};
+
+/**
+ * Controler
+ * @constructor
+ * @param {object} $scope
+ * @returns {undefined}
+ * @ngInject
+ */
+nsVmap.nsToolsManager.Urlexporter.prototype.urlExporterController = function ($scope, $q, $element) {
+    oVmap.log("nsVmap.nsToolsManager.Urlexporter.prototype.urlExporterController");
+
+    var this_ = this;
+
+    this.$scope_ = $scope;
+
+    /**
+     * The current properties
+     */
+    this['properties'] = oVmap['properties'];
+
+    /**
+     * The current token
+     */
+    this['token'] = oVmap['properties']['token'];
+
+    /**
+     * @type {string}
+     */
+    this["urlToExport"] = "";
+    /**
+     * @type {boolean}
+     */
+    this["usePublicToken"] = false;
+
+    this["urlConstructor"]();
+
+    // Affiche les modales en plein écran pour la version mobile
+    //if (oVmap['properties']['is_mobile']) {
+    //    $element.find('.modal').on('shown.bs.modal', function () {
+    //        $('.modal-backdrop.fade.in').hide();
+    //        $('.modal.fade.in').find('.modal-dialog').addClass('mobile-full-modal');
+    //    });
+    //}
+
+    console.log(this['properties']);
+
+    // recalcule l'url quand on change de carte
+    oVmap['scope'].$on('mapChanged', function () {
+        this_["urlConstructor"]();
+    });
+
+    $scope.$watch("ctrl.usePublicToken", function(){
+        this_["urlConstructor"]();
+    })
+
+    oVmap.getMap().getOLMap().on("moveend", function(event){
+        this_["urlConstructor"]();
+    });
+};
+
+/**
+ * Display the user form in display mode
+ * @returns {undefined}
+ * @export
+ */
+nsVmap.nsToolsManager.Urlexporter.prototype.urlExporterController.prototype.urlConstructor = function () {
+    oVmap.log("nsVmap.nsToolsManager.Urlexporter.urlExporterController.urlConstructor");
+
+    var sUrl = this['properties']['web_server_name'] + "/" + this['properties']['application'];
+
+    if (goog.isDefAndNotNull(this['properties']['environment'])){
+        if (this['properties']['environment'] != ""){
+            sUrl += "_" + this['properties']['environment'];
+        }
+    }
+
+    sUrl += "?";
+
+    var oMapCatalog = oVmap.getMapManager().getMapCatalog();
+    var iMapId = oMapCatalog["maps"][oMapCatalog["usedMap"]]["map_id"];
+
+    sUrl += "map_id=" + iMapId;
+
+    // si public add token
+    if (this["usePublicToken"]){
+        sUrl += "&token=" + this['properties']['public_token'];
+    }
+
+    // get extent and add in url
+    var sExtent = oVmap.getMap().getOLMap().getView().calculateExtent(oVmap.getMap().getOLMap().getSize()).join("|");
+    sUrl += "&extent=" + encodeURI(sExtent);
+
+    this["urlToExport"] = sUrl;
+};
+
+// Définit la directive et le controller
+oVmap.module.directive('appUrlExporter', nsVmap.nsToolsManager.Urlexporter.prototype.urlExporterDirective);
+oVmap.module.controller('AppUrlExporterController', nsVmap.nsToolsManager.Urlexporter.prototype.urlExporterController);
\ No newline at end of file
diff --git a/module/javascript/app/vmap/vmap.js b/module/javascript/app/vmap/vmap.js
old mode 100755
new mode 100644
index 3c8347db..48dbc1ba
--- a/module/javascript/app/vmap/vmap.js
+++ b/module/javascript/app/vmap/vmap.js
@@ -1174,6 +1174,12 @@ oVmap.isLink = function (item, tagIdentifier) {
     if (item.indexOf('[' + tagIdentifier) !== -1 && item.indexOf('[/' + tagIdentifier + ']') !== -1) {
         return true;
     }
+
+    if (item.indexOf('<a') !== -1 && item.indexOf('</a>') !== -1) {
+        return true;
+    }
+
+
     return false;
 };
 
@@ -1211,18 +1217,53 @@ oVmap.parseLink = function (sString, tagIdentifier) {
     }
 };
 
+/**
+ * Parse a link and extract only good tags ex: <a href="https://www.google.fr" target="_blank">Lien</a>
+ * @param {String} sString
+ * @returns {String}
+ * @export
+ */
+oVmap.checkLink = function(sString){
+    if (!goog.isDefAndNotNull(sString)) {
+        return '';
+    }
+    if (!goog.isString(sString)) {
+        return '';
+    }
+    var sLink = sString.substr(sString.indexOf('<a'), sString.indexOf('</a>') - sString.indexOf('<a') + 10);
+    var sLinkFirstTag = oVmap.getFirstLinkTag_(sLink, '>');
+    var sLinkContent = oVmap.getLinkContent_(sLink, sLinkFirstTag, '</a>');
+    var oLinkArgs = oVmap.getLinkTagArguments_(sLinkFirstTag);
+    // extract only required tags (href and target)
+    var sHref = goog.isDefAndNotNull(oLinkArgs['href']) ? oLinkArgs['href'] : null;
+    var sTarget = goog.isDefAndNotNull(oLinkArgs['target']) ? oLinkArgs['target'] : '_blank';
+    var sContent = sLinkContent.length > 0 ? sLinkContent : sHref;
+
+    if (goog.isDefAndNotNull(sHref)) {
+        var sLink = '<a href="' + sHref + '" target="' + sTarget + '">' + sContent + '</a>';
+        return sLink;
+    } else {
+        console.error('cannot parse href');
+        // return empty string to avoid Javascript injection
+        return "";
+    }
+}
+
+
 /**
  * Get the first tag
  * @param {String} sLink
  * @returns {String}
  */
-oVmap.getFirstLinkTag_ = function (sLink) {
+oVmap.getFirstLinkTag_ = function (sLink, sLinkTagToFind) {
 
     var quoteIndex1 = null;
     var quoteIndex2 = null;
     var bInArgument = false;
     var sLinkFirstTag = '';
 
+    sLinkTagToFind = (goog.isDefAndNotNull(sLinkTagToFind)) ? sLinkTagToFind : ']';
+
     for (var i = 0; i < sLink.length; i++) {
         sLinkFirstTag += sLink[i];
         if (sLink[i] === '"') {
@@ -1252,7 +1293,7 @@ oVmap.getFirstLinkTag_ = function (sLink) {
             }
         }
 
-        if (!bInArgument && sLink[i] === ']') {
+        if (!bInArgument && sLink[i] === sLinkTagToFind) {
             break;
         }
     }
diff --git a/module/javascript/vitis/script_module.js b/module/javascript/vitis/script_module.js
old mode 100755
new mode 100644
diff --git a/module/lang/lang-en.json b/module/lang/lang-en.json
old mode 100755
new mode 100644
diff --git a/module/lang/lang-fr.json b/module/lang/lang-fr.json
old mode 100755
new mode 100644
diff --git a/module/template/layers/layertree.html b/module/template/layers/layertree.html
old mode 100755
new mode 100644
diff --git a/module/template/layers/mapmodal/maplist.html b/module/template/layers/mapmodal/maplist.html
old mode 100755
new mode 100644
diff --git a/module/template/layers/mapmodal/maplistlitle.html b/module/template/layers/mapmodal/maplistlitle.html
old mode 100755
new mode 100644
diff --git a/module/template/modules/cadastre.html b/module/template/modules/cadastre.html
old mode 100755
new mode 100644
diff --git a/module/template/tools/basicselect.html b/module/template/tools/basicselect.html
old mode 100755
new mode 100644
diff --git a/module/template/tools/basictools.html b/module/template/tools/basictools.html
old mode 100755
new mode 100644
index 5dc8dd2a..e85c7476
--- a/module/template/tools/basictools.html
+++ b/module/template/tools/basictools.html
@@ -4,6 +4,21 @@
             <ul class="nav nav-pills basic-tools-nav">
                 <!-- Outils de localisation -->
                 <div app-location app-lang="ctrl.lang" app-map="ctrl.map"></div>
+                <!-- Outil d'export d'url -->
+                <div>
+                    <li role="presentation" style="position: inherit" class="basic-tools-dropdown">
+                        <a class="basic-tools-element pointer"
+                           title="Générateur d'URL"
+                           onclick="oVmap.getToolsManager().getBasicTools().toggleTool(this)">
+                            <span class="icon-at" aria-hidden="true"></span>
+                        </a>
+                        <div app-url-exporter app-lang="ctrl.lang" app-map="ctrl.map"
+                             id="basic-tools-dropdown-urlexporter"
+                             class="dropdown-menu basic-tools-dropdown-element"
+                             style="margin: -10px -1px; width: 30%;">
+                        </div>
+                    </li>
+                </div>
                 <!-- Login de l'utilisateur -->
                 <div class="right">
                     <li role="presentation" style="position: inherit" class="basic-tools-dropdown">
diff --git a/module/template/tools/infocontainer.html b/module/template/tools/infocontainer.html
old mode 100755
new mode 100644
diff --git a/module/template/tools/insert.html b/module/template/tools/insert.html
old mode 100755
new mode 100644
diff --git a/module/template/tools/location.html b/module/template/tools/location.html
old mode 100755
new mode 100644
index 61a41368..a9f3e9bc
--- a/module/template/tools/location.html
+++ b/module/template/tools/location.html
@@ -168,6 +168,22 @@
     </div>
 </li>
 
+<!--Previous history-->
+<li role="presentation">
+    <a class="basic-tools-element pointer" title="Aller à l'étendue précédente"
+       ng-click="ctrl.previousHistoryExtent()" ng-class="{'inactive' : ctrl.iHistoryOffset >= ctrl.aLocationHistory.length - 1}">
+        <span class="glyphicon glyphicon-arrow-left" aria-hidden="true"></span>
+    </a>
+</li>
+
+<!--Next history-->
+<li role="presentation">
+    <a class="basic-tools-element pointer" title="Aller à l'étendue suivante"
+       ng-click="ctrl.nextHistoryExtent()" ng-class="{'inactive' : ctrl.iHistoryOffset === 0}">
+        <span class="glyphicon glyphicon-arrow-right" aria-hidden="true"></span>
+    </a>
+</li>
+
 <!-- Modal -->
 <div id="scale-modal" class="modal fade" role="dialog">
     <div class="modal-dialog">
diff --git a/module/template/tools/print.html b/module/template/tools/print.html
old mode 100755
new mode 100644
diff --git a/module/template/tools/select.html b/module/template/tools/select.html
old mode 100755
new mode 100644
diff --git a/module/template/tools/urlexporter.html b/module/template/tools/urlexporter.html
new file mode 100644
index 00000000..8219c051
--- /dev/null
+++ b/module/template/tools/urlexporter.html
@@ -0,0 +1,11 @@
+<!--UrlExporter-->
+<div class="row margin-sides-0 margin-10">
+    <div class="col-md-3" ng-show="ctrl.properties.allow_public_connection">
+        <input type="checkbox" ng-model="ctrl.usePublicToken" id="publicAccountCheckbox">
+        <label for="publicAccountCheckbox" class="control-label">Public</label>
+    </div>          
+    <div class="" ng-class="{'col-md-9' : ctrl.properties.allow_public_connection, 'col-md-12': !ctrl.properties.allow_public_connection}">
+        <label for="urlExporterField" class="control-label">URL</label>
+        <input type="text" class="form-control" ng-model="ctrl.urlToExport" id="urlExporterField">
+    </div>
+</div>
\ No newline at end of file
diff --git a/storage/veremes_demo_dessin/forms/custom.json b/storage/veremes_demo_dessin/forms/custom.json
new file mode 100755
index 00000000..40d59f8f
--- /dev/null
+++ b/storage/veremes_demo_dessin/forms/custom.json
@@ -0,0 +1,629 @@
+{
+  "display": {
+    "name": "custom-form",
+    "title": "Dessin",
+    "input_size": "xxs",
+    "nb_cols": 12,
+    "javascript": true,
+    "rows": [
+      {
+        "fields": [
+          {
+            "type": "label",
+            "name": "draw_id",
+            "label": "draw_id",
+            "disabled": false,
+            "required": false,
+            "nb_cols": 12,
+            "id": "draw_id_1_1"
+          }
+        ]
+      },
+      {
+        "fields": [
+          {
+            "type": "label",
+            "name": "description",
+            "label": "description",
+            "disabled": false,
+            "required": false,
+            "nb_cols": 12,
+            "id": "description_2_1"
+          }
+        ]
+      },
+      {
+        "fields": [
+          {
+            "type": "label",
+            "name": "text_size",
+            "label": "text_size",
+            "disabled": false,
+            "required": false,
+            "nb_cols": 12,
+            "id": "text_size_3_1"
+          }
+        ]
+      },
+      {
+        "fields": [
+          {
+            "type": "label",
+            "name": "geom_size",
+            "label": "geom_size",
+            "disabled": false,
+            "required": false,
+            "nb_cols": 12,
+            "id": "geom_size_4_1"
+          }
+        ]
+      },
+      {
+        "fields": [
+          {
+            "type": "label",
+            "name": "contour_color",
+            "label": "Couleur de contour",
+            "disabled": false,
+            "required": false,
+            "nb_cols": 12,
+            "id": "contour_color_5_1"
+          }
+        ]
+      },
+      {
+        "fields": [
+          {
+            "type": "label",
+            "name": "background_color",
+            "label": "Couleur de fond",
+            "disabled": false,
+            "required": false,
+            "nb_cols": 12,
+            "id": "background_color_6_1"
+          }
+        ]
+      },
+      {
+        "fields": [
+          {
+            "type": "label",
+            "name": "color_label",
+            "label": "couleur du texte",
+            "disabled": false,
+            "required": false,
+            "nb_cols": 12,
+            "id": "color_label_7_1"
+          }
+        ]
+      },
+      {
+        "fields": [
+          {
+            "type": "label",
+            "options": {
+              "choices": [
+                {
+                  "label": "oui",
+                  "value": true
+                },
+                {
+                  "label": "non",
+                  "value": false
+                }
+              ]
+            },
+            "name": "label",
+            "label": "label",
+            "disabled": false,
+            "required": false,
+            "nb_cols": 12,
+            "id": "label_8_1"
+          }
+        ]
+      },
+      {
+        "fields": [
+          {
+            "type": "label",
+            "options": {
+              "choices": [
+                {
+                  "label": "oui",
+                  "value": true
+                },
+                {
+                  "label": "non",
+                  "value": false
+                }
+              ]
+            },
+            "name": "graph",
+            "label": "graph",
+            "disabled": false,
+            "required": false,
+            "nb_cols": 12,
+            "id": "graph_9_1"
+          }
+        ]
+      },
+      {
+        "fields": [
+          {
+            "type": "label",
+            "name": "area",
+            "label": "area",
+            "disabled": false,
+            "required": false,
+            "nb_cols": 12,
+            "id": "area_10_1"
+          }
+        ]
+      },
+      {
+        "fields": [
+          {
+            "type": "label",
+            "options": {
+              "choices": [
+                {
+                  "label": "oui",
+                  "value": true
+                },
+                {
+                  "label": "non",
+                  "value": false
+                }
+              ]
+            },
+            "name": "area_label",
+            "label": "area_label",
+            "disabled": false,
+            "required": false,
+            "nb_cols": 12,
+            "id": "area_label_11_1"
+          }
+        ]
+      },
+      {
+        "fields": [
+          {
+            "type": "label",
+            "name": "perimeter",
+            "label": "perimeter",
+            "disabled": false,
+            "required": false,
+            "nb_cols": 12,
+            "id": "perimeter_12_1"
+          }
+        ]
+      },
+      {
+        "fields": [
+          {
+            "type": "label",
+            "options": {
+              "choices": [
+                {
+                  "label": "oui",
+                  "value": true
+                },
+                {
+                  "label": "non",
+                  "value": false
+                }
+              ]
+            },
+            "name": "perimeter_label",
+            "label": "perimeter_label",
+            "disabled": false,
+            "required": false,
+            "nb_cols": 12,
+            "id": "perimeter_label_13_1"
+          }
+        ]
+      },
+      {
+        "fields": [
+          {
+            "type": "label",
+            "name": "text_label",
+            "label": "text_label",
+            "disabled": false,
+            "required": false,
+            "nb_cols": 12,
+            "id": "text_label_14_1"
+          }
+        ]
+      },
+      {
+        "fields": [
+          {
+            "type": "label",
+            "name": "theme",
+            "label": "theme",
+            "disabled": false,
+            "required": false,
+            "nb_cols": 12,
+            "id": "theme_15_1"
+          }
+        ]
+      },
+      {
+        "fields": [
+          {
+            "type": "label",
+            "name": "comments",
+            "label": "comments",
+            "disabled": false,
+            "required": false,
+            "nb_cols": 12,
+            "id": "comments_16_1"
+          }
+        ]
+      }
+    ]
+},
+"search": {
+  "name": "custom-form",
+  "title": "Dessin",
+  "input_size": "xxs",
+  "nb_cols": 12,
+  "javascript": false,
+  "rows": []
+},
+"insert": {
+  "name": "custom-form",
+  "title": "Dessin",
+  "input_size": "xxs",
+  "nb_cols": 12,
+  "javascript": true,
+  "rows": [
+    {
+      "fields": [
+        {
+          "type": "text",
+          "name": "text_label",
+          "label": "Texte",
+          "disabled": false,
+          "required": false,
+          "nb_cols": 12,
+          "id": "label_text_14_1"
+        }
+      ]
+    },
+    {
+      "fields": [
+        {
+          "type": "text",
+          "name": "theme",
+          "label": "Thème / Projet",
+          "required": false,
+          "nb_cols": 12,
+          "id": "theme_15_1"
+        }
+      ]
+    },
+    {
+      "fields": [
+        {
+          "type": "textarea",
+          "name": "comments",
+          "label": "Commentaires",
+          "required": false,
+          "nb_cols": 6,
+          "id": "comments_16_1",
+          "size": 4
+        },
+        {
+          "type": "textarea",
+          "name": "description",
+          "label": "Etiquette",
+          "required": false,
+          "nb_cols": 6,
+          "id": "description_2_1",
+          "size": 4
+        }
+      ]
+    },
+    {
+      "fields": [
+        {
+          "type": "radio",
+          "options": {
+            "choices": [
+              {
+                "label": "Oui",
+                "value": true,
+                "$$hashKey": "object:2206"
+              },
+              {
+                "label": "Non",
+                "value": false,
+                "$$hashKey": "object:2207"
+              }
+            ]
+          },
+          "name": "label",
+          "label": "Afficher le texte",
+          "disabled": false,
+          "required": false,
+          "nb_cols": 6,
+          "id": "label_8_1",
+          "default_value": true
+        },
+        {
+          "type": "radio",
+          "options": {
+            "choices": [
+              {
+                "label": "Oui",
+                "value": true,
+                "$$hashKey": "object:2218"
+              },
+              {
+                "label": "Non",
+                "value": false,
+                "$$hashKey": "object:2219"
+              }
+            ]
+          },
+          "name": "graph",
+          "label": "Afficher la partie graph",
+          "disabled": false,
+          "required": false,
+          "nb_cols": 6,
+          "id": "graphique_9_1",
+          "default_value": true
+        }
+      ]
+    },
+    {
+      "fields": [
+        {
+          "type": "integer",
+          "name": "text_size",
+          "label": "Taille du texte",
+          "nb_cols": 6,
+          "id": "taille_text_3_1",
+          "default_value": 10,
+          "required": true
+        },
+        {
+          "type": "integer",
+          "name": "geom_size",
+          "label": "Épaisseur/taille",
+          "nb_cols": 6,
+          "id": "taille_geom_4_1",
+          "default_value": 15,
+          "required": true
+        }
+      ]
+    },
+    {
+      "fields": [
+        {
+          "type": "color_picker",
+          "name": "background_color_rgba",
+          "label": "Couleur de fond",
+          "nb_cols": 4,
+          "id": "couleur_fond_6_1",
+          "default_value": "0 0 0",
+          "required": true
+        },
+        {
+          "type": "color_picker",
+          "name": "contour_color_rgba",
+          "label": "Couleur de contour",
+          "nb_cols": 4,
+          "id": "couleur_contour_5_1",
+          "default_value": "0 0 0",
+          "required": true
+        },
+        {
+          "type": "color_picker",
+          "name": "color_label_rgba",
+          "label": "couleur du texte",
+          "nb_cols": 4,
+          "id": "couleur_label_7_1",
+          "default_value": "0 0 0",
+          "required": true
+        }
+      ]
+    }, {
+      "fields": [
+        {
+          "type": "hidden",
+          "name": "background_color",
+          "nb_cols": 12
+        },{
+          "type": "hidden",
+          "name": "contour_color",
+          "nb_cols": 12
+        },{
+          "type": "hidden",
+          "name": "color_label",
+          "nb_cols": 12
+        }
+      ]
+    }
+  ]
+},
+"update": {
+  "name": "custom-form",
+  "title": "Dessin",
+  "input_size": "xxs",
+  "nb_cols": 12,
+  "javascript": true,
+  "rows": [
+    {
+      "fields": [
+        {
+          "type": "label",
+          "name": "draw_id",
+          "label": "Id",
+          "id": "id_dessin_1_1",
+          "nb_cols": 12
+        }
+      ]
+    },
+    {
+      "fields": [
+        {
+          "type": "text",
+          "name": "text_label",
+          "label": "Texte",
+          "disabled": false,
+          "required": false,
+          "nb_cols": 12,
+          "id": "label_text_14_1"
+        }
+      ]
+    },
+    {
+      "fields": [
+        {
+          "type": "text",
+          "name": "theme",
+          "label": "Thème / Projet",
+          "required": false,
+          "nb_cols": 12,
+          "id": "theme_15_1"
+        }
+      ]
+    },
+    {
+      "fields": [
+        {
+          "type": "textarea",
+          "name": "comments",
+          "label": "Commentaires",
+          "required": false,
+          "nb_cols": 6,
+          "id": "comments_16_1",
+          "size": 4
+        },
+        {
+          "type": "textarea",
+          "name": "description",
+          "label": "Etiquette",
+          "required": false,
+          "nb_cols": 6,
+          "id": "description_2_1",
+          "size": 4
+        }
+      ]
+    },
+    {
+      "fields": [
+        {
+          "type": "radio",
+          "options": {
+            "choices": [
+              {
+                "label": "Oui",
+                "value": true,
+                "$$hashKey": "object:2044"
+              },
+              {
+                "label": "Non",
+                "value": false,
+                "$$hashKey": "object:2045"
+              }
+            ]
+          },
+          "name": "label",
+          "label": "Afficher le texte",
+          "disabled": false,
+          "required": false,
+          "nb_cols": 6,
+          "id": "label_8_1"
+        },
+        {
+          "type": "radio",
+          "options": {
+            "choices": [
+              {
+                "label": "Oui",
+                "value": true,
+                "$$hashKey": "object:2056"
+              },
+              {
+                "label": "Non",
+                "value": false,
+                "$$hashKey": "object:2057"
+              }
+            ]
+          },
+          "name": "graph",
+          "label": "Afficher la partie graph",
+          "disabled": false,
+          "required": false,
+          "nb_cols": 6,
+          "id": "graphique_9_1"
+        }
+      ]
+    },
+    {
+      "fields": [
+        {
+          "type": "integer",
+          "name": "text_size",
+          "label": "Taille du texte",
+          "nb_cols": 6,
+          "id": "taille_text_3_1"
+        },
+        {
+          "type": "integer",
+          "name": "geom_size",
+          "label": "Épaisseur/taille",
+          "nb_cols": 6,
+          "id": "taille_geom_4_1"
+        }
+      ]
+    },
+    {
+      "fields": [
+        {
+          "type": "color_picker",
+          "name": "background_color_rgba",
+          "label": "Couleur de fond",
+          "nb_cols": 4,
+          "id": "couleur_fond_6_1"
+        },
+        {
+          "type": "color_picker",
+          "name": "contour_color_rgba",
+          "label": "Couleur de contour",
+          "nb_cols": 4,
+          "id": "couleur_contour_5_1"
+        },
+        {
+          "type": "color_picker",
+          "name": "color_label_rgba",
+          "label": "couleur du texte",
+          "nb_cols": 4,
+          "id": "couleur_label_7_1"
+        }
+      ]
+    }, {
+      "fields": [
+        {
+          "type": "hidden",
+          "name": "background_color",
+          "nb_cols": 12
+        },{
+          "type": "hidden",
+          "name": "contour_color",
+          "nb_cols": 12
+        },{
+          "type": "hidden",
+          "name": "color_label",
+          "nb_cols": 12
+        }
+      ]
+    }
+  ]
+},
+"datasources": {}
+}
diff --git a/storage/veremes_demo_dessin/forms/default.json b/storage/veremes_demo_dessin/forms/default.json
new file mode 100755
index 00000000..40d59f8f
--- /dev/null
+++ b/storage/veremes_demo_dessin/forms/default.json
@@ -0,0 +1,629 @@
+{
+  "display": {
+    "name": "custom-form",
+    "title": "Dessin",
+    "input_size": "xxs",
+    "nb_cols": 12,
+    "javascript": true,
+    "rows": [
+      {
+        "fields": [
+          {
+            "type": "label",
+            "name": "draw_id",
+            "label": "draw_id",
+            "disabled": false,
+            "required": false,
+            "nb_cols": 12,
+            "id": "draw_id_1_1"
+          }
+        ]
+      },
+      {
+        "fields": [
+          {
+            "type": "label",
+            "name": "description",
+            "label": "description",
+            "disabled": false,
+            "required": false,
+            "nb_cols": 12,
+            "id": "description_2_1"
+          }
+        ]
+      },
+      {
+        "fields": [
+          {
+            "type": "label",
+            "name": "text_size",
+            "label": "text_size",
+            "disabled": false,
+            "required": false,
+            "nb_cols": 12,
+            "id": "text_size_3_1"
+          }
+        ]
+      },
+      {
+        "fields": [
+          {
+            "type": "label",
+            "name": "geom_size",
+            "label": "geom_size",
+            "disabled": false,
+            "required": false,
+            "nb_cols": 12,
+            "id": "geom_size_4_1"
+          }
+        ]
+      },
+      {
+        "fields": [
+          {
+            "type": "label",
+            "name": "contour_color",
+            "label": "Couleur de contour",
+            "disabled": false,
+            "required": false,
+            "nb_cols": 12,
+            "id": "contour_color_5_1"
+          }
+        ]
+      },
+      {
+        "fields": [
+          {
+            "type": "label",
+            "name": "background_color",
+            "label": "Couleur de fond",
+            "disabled": false,
+            "required": false,
+            "nb_cols": 12,
+            "id": "background_color_6_1"
+          }
+        ]
+      },
+      {
+        "fields": [
+          {
+            "type": "label",
+            "name": "color_label",
+            "label": "couleur du texte",
+            "disabled": false,
+            "required": false,
+            "nb_cols": 12,
+            "id": "color_label_7_1"
+          }
+        ]
+      },
+      {
+        "fields": [
+          {
+            "type": "label",
+            "options": {
+              "choices": [
+                {
+                  "label": "oui",
+                  "value": true
+                },
+                {
+                  "label": "non",
+                  "value": false
+                }
+              ]
+            },
+            "name": "label",
+            "label": "label",
+            "disabled": false,
+            "required": false,
+            "nb_cols": 12,
+            "id": "label_8_1"
+          }
+        ]
+      },
+      {
+        "fields": [
+          {
+            "type": "label",
+            "options": {
+              "choices": [
+                {
+                  "label": "oui",
+                  "value": true
+                },
+                {
+                  "label": "non",
+                  "value": false
+                }
+              ]
+            },
+            "name": "graph",
+            "label": "graph",
+            "disabled": false,
+            "required": false,
+            "nb_cols": 12,
+            "id": "graph_9_1"
+          }
+        ]
+      },
+      {
+        "fields": [
+          {
+            "type": "label",
+            "name": "area",
+            "label": "area",
+            "disabled": false,
+            "required": false,
+            "nb_cols": 12,
+            "id": "area_10_1"
+          }
+        ]
+      },
+      {
+        "fields": [
+          {
+            "type": "label",
+            "options": {
+              "choices": [
+                {
+                  "label": "oui",
+                  "value": true
+                },
+                {
+                  "label": "non",
+                  "value": false
+                }
+              ]
+            },
+            "name": "area_label",
+            "label": "area_label",
+            "disabled": false,
+            "required": false,
+            "nb_cols": 12,
+            "id": "area_label_11_1"
+          }
+        ]
+      },
+      {
+        "fields": [
+          {
+            "type": "label",
+            "name": "perimeter",
+            "label": "perimeter",
+            "disabled": false,
+            "required": false,
+            "nb_cols": 12,
+            "id": "perimeter_12_1"
+          }
+        ]
+      },
+      {
+        "fields": [
+          {
+            "type": "label",
+            "options": {
+              "choices": [
+                {
+                  "label": "oui",
+                  "value": true
+                },
+                {
+                  "label": "non",
+                  "value": false
+                }
+              ]
+            },
+            "name": "perimeter_label",
+            "label": "perimeter_label",
+            "disabled": false,
+            "required": false,
+            "nb_cols": 12,
+            "id": "perimeter_label_13_1"
+          }
+        ]
+      },
+      {
+        "fields": [
+          {
+            "type": "label",
+            "name": "text_label",
+            "label": "text_label",
+            "disabled": false,
+            "required": false,
+            "nb_cols": 12,
+            "id": "text_label_14_1"
+          }
+        ]
+      },
+      {
+        "fields": [
+          {
+            "type": "label",
+            "name": "theme",
+            "label": "theme",
+            "disabled": false,
+            "required": false,
+            "nb_cols": 12,
+            "id": "theme_15_1"
+          }
+        ]
+      },
+      {
+        "fields": [
+          {
+            "type": "label",
+            "name": "comments",
+            "label": "comments",
+            "disabled": false,
+            "required": false,
+            "nb_cols": 12,
+            "id": "comments_16_1"
+          }
+        ]
+      }
+    ]
+},
+"search": {
+  "name": "custom-form",
+  "title": "Dessin",
+  "input_size": "xxs",
+  "nb_cols": 12,
+  "javascript": false,
+  "rows": []
+},
+"insert": {
+  "name": "custom-form",
+  "title": "Dessin",
+  "input_size": "xxs",
+  "nb_cols": 12,
+  "javascript": true,
+  "rows": [
+    {
+      "fields": [
+        {
+          "type": "text",
+          "name": "text_label",
+          "label": "Texte",
+          "disabled": false,
+          "required": false,
+          "nb_cols": 12,
+          "id": "label_text_14_1"
+        }
+      ]
+    },
+    {
+      "fields": [
+        {
+          "type": "text",
+          "name": "theme",
+          "label": "Thème / Projet",
+          "required": false,
+          "nb_cols": 12,
+          "id": "theme_15_1"
+        }
+      ]
+    },
+    {
+      "fields": [
+        {
+          "type": "textarea",
+          "name": "comments",
+          "label": "Commentaires",
+          "required": false,
+          "nb_cols": 6,
+          "id": "comments_16_1",
+          "size": 4
+        },
+        {
+          "type": "textarea",
+          "name": "description",
+          "label": "Etiquette",
+          "required": false,
+          "nb_cols": 6,
+          "id": "description_2_1",
+          "size": 4
+        }
+      ]
+    },
+    {
+      "fields": [
+        {
+          "type": "radio",
+          "options": {
+            "choices": [
+              {
+                "label": "Oui",
+                "value": true,
+                "$$hashKey": "object:2206"
+              },
+              {
+                "label": "Non",
+                "value": false,
+                "$$hashKey": "object:2207"
+              }
+            ]
+          },
+          "name": "label",
+          "label": "Afficher le texte",
+          "disabled": false,
+          "required": false,
+          "nb_cols": 6,
+          "id": "label_8_1",
+          "default_value": true
+        },
+        {
+          "type": "radio",
+          "options": {
+            "choices": [
+              {
+                "label": "Oui",
+                "value": true,
+                "$$hashKey": "object:2218"
+              },
+              {
+                "label": "Non",
+                "value": false,
+                "$$hashKey": "object:2219"
+              }
+            ]
+          },
+          "name": "graph",
+          "label": "Afficher la partie graph",
+          "disabled": false,
+          "required": false,
+          "nb_cols": 6,
+          "id": "graphique_9_1",
+          "default_value": true
+        }
+      ]
+    },
+    {
+      "fields": [
+        {
+          "type": "integer",
+          "name": "text_size",
+          "label": "Taille du texte",
+          "nb_cols": 6,
+          "id": "taille_text_3_1",
+          "default_value": 10,
+          "required": true
+        },
+        {
+          "type": "integer",
+          "name": "geom_size",
+          "label": "Épaisseur/taille",
+          "nb_cols": 6,
+          "id": "taille_geom_4_1",
+          "default_value": 15,
+          "required": true
+        }
+      ]
+    },
+    {
+      "fields": [
+        {
+          "type": "color_picker",
+          "name": "background_color_rgba",
+          "label": "Couleur de fond",
+          "nb_cols": 4,
+          "id": "couleur_fond_6_1",
+          "default_value": "0 0 0",
+          "required": true
+        },
+        {
+          "type": "color_picker",
+          "name": "contour_color_rgba",
+          "label": "Couleur de contour",
+          "nb_cols": 4,
+          "id": "couleur_contour_5_1",
+          "default_value": "0 0 0",
+          "required": true
+        },
+        {
+          "type": "color_picker",
+          "name": "color_label_rgba",
+          "label": "couleur du texte",
+          "nb_cols": 4,
+          "id": "couleur_label_7_1",
+          "default_value": "0 0 0",
+          "required": true
+        }
+      ]
+    }, {
+      "fields": [
+        {
+          "type": "hidden",
+          "name": "background_color",
+          "nb_cols": 12
+        },{
+          "type": "hidden",
+          "name": "contour_color",
+          "nb_cols": 12
+        },{
+          "type": "hidden",
+          "name": "color_label",
+          "nb_cols": 12
+        }
+      ]
+    }
+  ]
+},
+"update": {
+  "name": "custom-form",
+  "title": "Dessin",
+  "input_size": "xxs",
+  "nb_cols": 12,
+  "javascript": true,
+  "rows": [
+    {
+      "fields": [
+        {
+          "type": "label",
+          "name": "draw_id",
+          "label": "Id",
+          "id": "id_dessin_1_1",
+          "nb_cols": 12
+        }
+      ]
+    },
+    {
+      "fields": [
+        {
+          "type": "text",
+          "name": "text_label",
+          "label": "Texte",
+          "disabled": false,
+          "required": false,
+          "nb_cols": 12,
+          "id": "label_text_14_1"
+        }
+      ]
+    },
+    {
+      "fields": [
+        {
+          "type": "text",
+          "name": "theme",
+          "label": "Thème / Projet",
+          "required": false,
+          "nb_cols": 12,
+          "id": "theme_15_1"
+        }
+      ]
+    },
+    {
+      "fields": [
+        {
+          "type": "textarea",
+          "name": "comments",
+          "label": "Commentaires",
+          "required": false,
+          "nb_cols": 6,
+          "id": "comments_16_1",
+          "size": 4
+        },
+        {
+          "type": "textarea",
+          "name": "description",
+          "label": "Etiquette",
+          "required": false,
+          "nb_cols": 6,
+          "id": "description_2_1",
+          "size": 4
+        }
+      ]
+    },
+    {
+      "fields": [
+        {
+          "type": "radio",
+          "options": {
+            "choices": [
+              {
+                "label": "Oui",
+                "value": true,
+                "$$hashKey": "object:2044"
+              },
+              {
+                "label": "Non",
+                "value": false,
+                "$$hashKey": "object:2045"
+              }
+            ]
+          },
+          "name": "label",
+          "label": "Afficher le texte",
+          "disabled": false,
+          "required": false,
+          "nb_cols": 6,
+          "id": "label_8_1"
+        },
+        {
+          "type": "radio",
+          "options": {
+            "choices": [
+              {
+                "label": "Oui",
+                "value": true,
+                "$$hashKey": "object:2056"
+              },
+              {
+                "label": "Non",
+                "value": false,
+                "$$hashKey": "object:2057"
+              }
+            ]
+          },
+          "name": "graph",
+          "label": "Afficher la partie graph",
+          "disabled": false,
+          "required": false,
+          "nb_cols": 6,
+          "id": "graphique_9_1"
+        }
+      ]
+    },
+    {
+      "fields": [
+        {
+          "type": "integer",
+          "name": "text_size",
+          "label": "Taille du texte",
+          "nb_cols": 6,
+          "id": "taille_text_3_1"
+        },
+        {
+          "type": "integer",
+          "name": "geom_size",
+          "label": "Épaisseur/taille",
+          "nb_cols": 6,
+          "id": "taille_geom_4_1"
+        }
+      ]
+    },
+    {
+      "fields": [
+        {
+          "type": "color_picker",
+          "name": "background_color_rgba",
+          "label": "Couleur de fond",
+          "nb_cols": 4,
+          "id": "couleur_fond_6_1"
+        },
+        {
+          "type": "color_picker",
+          "name": "contour_color_rgba",
+          "label": "Couleur de contour",
+          "nb_cols": 4,
+          "id": "couleur_contour_5_1"
+        },
+        {
+          "type": "color_picker",
+          "name": "color_label_rgba",
+          "label": "couleur du texte",
+          "nb_cols": 4,
+          "id": "couleur_label_7_1"
+        }
+      ]
+    }, {
+      "fields": [
+        {
+          "type": "hidden",
+          "name": "background_color",
+          "nb_cols": 12
+        },{
+          "type": "hidden",
+          "name": "contour_color",
+          "nb_cols": 12
+        },{
+          "type": "hidden",
+          "name": "color_label",
+          "nb_cols": 12
+        }
+      ]
+    }
+  ]
+},
+"datasources": {}
+}
diff --git a/storage/veremes_demo_dessin/forms/published.json b/storage/veremes_demo_dessin/forms/published.json
new file mode 100755
index 00000000..40d59f8f
--- /dev/null
+++ b/storage/veremes_demo_dessin/forms/published.json
@@ -0,0 +1,629 @@
+{
+  "display": {
+    "name": "custom-form",
+    "title": "Dessin",
+    "input_size": "xxs",
+    "nb_cols": 12,
+    "javascript": true,
+    "rows": [
+      {
+        "fields": [
+          {
+            "type": "label",
+            "name": "draw_id",
+            "label": "draw_id",
+            "disabled": false,
+            "required": false,
+            "nb_cols": 12,
+            "id": "draw_id_1_1"
+          }
+        ]
+      },
+      {
+        "fields": [
+          {
+            "type": "label",
+            "name": "description",
+            "label": "description",
+            "disabled": false,
+            "required": false,
+            "nb_cols": 12,
+            "id": "description_2_1"
+          }
+        ]
+      },
+      {
+        "fields": [
+          {
+            "type": "label",
+            "name": "text_size",
+            "label": "text_size",
+            "disabled": false,
+            "required": false,
+            "nb_cols": 12,
+            "id": "text_size_3_1"
+          }
+        ]
+      },
+      {
+        "fields": [
+          {
+            "type": "label",
+            "name": "geom_size",
+            "label": "geom_size",
+            "disabled": false,
+            "required": false,
+            "nb_cols": 12,
+            "id": "geom_size_4_1"
+          }
+        ]
+      },
+      {
+        "fields": [
+          {
+            "type": "label",
+            "name": "contour_color",
+            "label": "Couleur de contour",
+            "disabled": false,
+            "required": false,
+            "nb_cols": 12,
+            "id": "contour_color_5_1"
+          }
+        ]
+      },
+      {
+        "fields": [
+          {
+            "type": "label",
+            "name": "background_color",
+            "label": "Couleur de fond",
+            "disabled": false,
+            "required": false,
+            "nb_cols": 12,
+            "id": "background_color_6_1"
+          }
+        ]
+      },
+      {
+        "fields": [
+          {
+            "type": "label",
+            "name": "color_label",
+            "label": "couleur du texte",
+            "disabled": false,
+            "required": false,
+            "nb_cols": 12,
+            "id": "color_label_7_1"
+          }
+        ]
+      },
+      {
+        "fields": [
+          {
+            "type": "label",
+            "options": {
+              "choices": [
+                {
+                  "label": "oui",
+                  "value": true
+                },
+                {
+                  "label": "non",
+                  "value": false
+                }
+              ]
+            },
+            "name": "label",
+            "label": "label",
+            "disabled": false,
+            "required": false,
+            "nb_cols": 12,
+            "id": "label_8_1"
+          }
+        ]
+      },
+      {
+        "fields": [
+          {
+            "type": "label",
+            "options": {
+              "choices": [
+                {
+                  "label": "oui",
+                  "value": true
+                },
+                {
+                  "label": "non",
+                  "value": false
+                }
+              ]
+            },
+            "name": "graph",
+            "label": "graph",
+            "disabled": false,
+            "required": false,
+            "nb_cols": 12,
+            "id": "graph_9_1"
+          }
+        ]
+      },
+      {
+        "fields": [
+          {
+            "type": "label",
+            "name": "area",
+            "label": "area",
+            "disabled": false,
+            "required": false,
+            "nb_cols": 12,
+            "id": "area_10_1"
+          }
+        ]
+      },
+      {
+        "fields": [
+          {
+            "type": "label",
+            "options": {
+              "choices": [
+                {
+                  "label": "oui",
+                  "value": true
+                },
+                {
+                  "label": "non",
+                  "value": false
+                }
+              ]
+            },
+            "name": "area_label",
+            "label": "area_label",
+            "disabled": false,
+            "required": false,
+            "nb_cols": 12,
+            "id": "area_label_11_1"
+          }
+        ]
+      },
+      {
+        "fields": [
+          {
+            "type": "label",
+            "name": "perimeter",
+            "label": "perimeter",
+            "disabled": false,
+            "required": false,
+            "nb_cols": 12,
+            "id": "perimeter_12_1"
+          }
+        ]
+      },
+      {
+        "fields": [
+          {
+            "type": "label",
+            "options": {
+              "choices": [
+                {
+                  "label": "oui",
+                  "value": true
+                },
+                {
+                  "label": "non",
+                  "value": false
+                }
+              ]
+            },
+            "name": "perimeter_label",
+            "label": "perimeter_label",
+            "disabled": false,
+            "required": false,
+            "nb_cols": 12,
+            "id": "perimeter_label_13_1"
+          }
+        ]
+      },
+      {
+        "fields": [
+          {
+            "type": "label",
+            "name": "text_label",
+            "label": "text_label",
+            "disabled": false,
+            "required": false,
+            "nb_cols": 12,
+            "id": "text_label_14_1"
+          }
+        ]
+      },
+      {
+        "fields": [
+          {
+            "type": "label",
+            "name": "theme",
+            "label": "theme",
+            "disabled": false,
+            "required": false,
+            "nb_cols": 12,
+            "id": "theme_15_1"
+          }
+        ]
+      },
+      {
+        "fields": [
+          {
+            "type": "label",
+            "name": "comments",
+            "label": "comments",
+            "disabled": false,
+            "required": false,
+            "nb_cols": 12,
+            "id": "comments_16_1"
+          }
+        ]
+      }
+    ]
+},
+"search": {
+  "name": "custom-form",
+  "title": "Dessin",
+  "input_size": "xxs",
+  "nb_cols": 12,
+  "javascript": false,
+  "rows": []
+},
+"insert": {
+  "name": "custom-form",
+  "title": "Dessin",
+  "input_size": "xxs",
+  "nb_cols": 12,
+  "javascript": true,
+  "rows": [
+    {
+      "fields": [
+        {
+          "type": "text",
+          "name": "text_label",
+          "label": "Texte",
+          "disabled": false,
+          "required": false,
+          "nb_cols": 12,
+          "id": "label_text_14_1"
+        }
+      ]
+    },
+    {
+      "fields": [
+        {
+          "type": "text",
+          "name": "theme",
+          "label": "Thème / Projet",
+          "required": false,
+          "nb_cols": 12,
+          "id": "theme_15_1"
+        }
+      ]
+    },
+    {
+      "fields": [
+        {
+          "type": "textarea",
+          "name": "comments",
+          "label": "Commentaires",
+          "required": false,
+          "nb_cols": 6,
+          "id": "comments_16_1",
+          "size": 4
+        },
+        {
+          "type": "textarea",
+          "name": "description",
+          "label": "Etiquette",
+          "required": false,
+          "nb_cols": 6,
+          "id": "description_2_1",
+          "size": 4
+        }
+      ]
+    },
+    {
+      "fields": [
+        {
+          "type": "radio",
+          "options": {
+            "choices": [
+              {
+                "label": "Oui",
+                "value": true,
+                "$$hashKey": "object:2206"
+              },
+              {
+                "label": "Non",
+                "value": false,
+                "$$hashKey": "object:2207"
+              }
+            ]
+          },
+          "name": "label",
+          "label": "Afficher le texte",
+          "disabled": false,
+          "required": false,
+          "nb_cols": 6,
+          "id": "label_8_1",
+          "default_value": true
+        },
+        {
+          "type": "radio",
+          "options": {
+            "choices": [
+              {
+                "label": "Oui",
+                "value": true,
+                "$$hashKey": "object:2218"
+              },
+              {
+                "label": "Non",
+                "value": false,
+                "$$hashKey": "object:2219"
+              }
+            ]
+          },
+          "name": "graph",
+          "label": "Afficher la partie graph",
+          "disabled": false,
+          "required": false,
+          "nb_cols": 6,
+          "id": "graphique_9_1",
+          "default_value": true
+        }
+      ]
+    },
+    {
+      "fields": [
+        {
+          "type": "integer",
+          "name": "text_size",
+          "label": "Taille du texte",
+          "nb_cols": 6,
+          "id": "taille_text_3_1",
+          "default_value": 10,
+          "required": true
+        },
+        {
+          "type": "integer",
+          "name": "geom_size",
+          "label": "Épaisseur/taille",
+          "nb_cols": 6,
+          "id": "taille_geom_4_1",
+          "default_value": 15,
+          "required": true
+        }
+      ]
+    },
+    {
+      "fields": [
+        {
+          "type": "color_picker",
+          "name": "background_color_rgba",
+          "label": "Couleur de fond",
+          "nb_cols": 4,
+          "id": "couleur_fond_6_1",
+          "default_value": "0 0 0",
+          "required": true
+        },
+        {
+          "type": "color_picker",
+          "name": "contour_color_rgba",
+          "label": "Couleur de contour",
+          "nb_cols": 4,
+          "id": "couleur_contour_5_1",
+          "default_value": "0 0 0",
+          "required": true
+        },
+        {
+          "type": "color_picker",
+          "name": "color_label_rgba",
+          "label": "couleur du texte",
+          "nb_cols": 4,
+          "id": "couleur_label_7_1",
+          "default_value": "0 0 0",
+          "required": true
+        }
+      ]
+    }, {
+      "fields": [
+        {
+          "type": "hidden",
+          "name": "background_color",
+          "nb_cols": 12
+        },{
+          "type": "hidden",
+          "name": "contour_color",
+          "nb_cols": 12
+        },{
+          "type": "hidden",
+          "name": "color_label",
+          "nb_cols": 12
+        }
+      ]
+    }
+  ]
+},
+"update": {
+  "name": "custom-form",
+  "title": "Dessin",
+  "input_size": "xxs",
+  "nb_cols": 12,
+  "javascript": true,
+  "rows": [
+    {
+      "fields": [
+        {
+          "type": "label",
+          "name": "draw_id",
+          "label": "Id",
+          "id": "id_dessin_1_1",
+          "nb_cols": 12
+        }
+      ]
+    },
+    {
+      "fields": [
+        {
+          "type": "text",
+          "name": "text_label",
+          "label": "Texte",
+          "disabled": false,
+          "required": false,
+          "nb_cols": 12,
+          "id": "label_text_14_1"
+        }
+      ]
+    },
+    {
+      "fields": [
+        {
+          "type": "text",
+          "name": "theme",
+          "label": "Thème / Projet",
+          "required": false,
+          "nb_cols": 12,
+          "id": "theme_15_1"
+        }
+      ]
+    },
+    {
+      "fields": [
+        {
+          "type": "textarea",
+          "name": "comments",
+          "label": "Commentaires",
+          "required": false,
+          "nb_cols": 6,
+          "id": "comments_16_1",
+          "size": 4
+        },
+        {
+          "type": "textarea",
+          "name": "description",
+          "label": "Etiquette",
+          "required": false,
+          "nb_cols": 6,
+          "id": "description_2_1",
+          "size": 4
+        }
+      ]
+    },
+    {
+      "fields": [
+        {
+          "type": "radio",
+          "options": {
+            "choices": [
+              {
+                "label": "Oui",
+                "value": true,
+                "$$hashKey": "object:2044"
+              },
+              {
+                "label": "Non",
+                "value": false,
+                "$$hashKey": "object:2045"
+              }
+            ]
+          },
+          "name": "label",
+          "label": "Afficher le texte",
+          "disabled": false,
+          "required": false,
+          "nb_cols": 6,
+          "id": "label_8_1"
+        },
+        {
+          "type": "radio",
+          "options": {
+            "choices": [
+              {
+                "label": "Oui",
+                "value": true,
+                "$$hashKey": "object:2056"
+              },
+              {
+                "label": "Non",
+                "value": false,
+                "$$hashKey": "object:2057"
+              }
+            ]
+          },
+          "name": "graph",
+          "label": "Afficher la partie graph",
+          "disabled": false,
+          "required": false,
+          "nb_cols": 6,
+          "id": "graphique_9_1"
+        }
+      ]
+    },
+    {
+      "fields": [
+        {
+          "type": "integer",
+          "name": "text_size",
+          "label": "Taille du texte",
+          "nb_cols": 6,
+          "id": "taille_text_3_1"
+        },
+        {
+          "type": "integer",
+          "name": "geom_size",
+          "label": "Épaisseur/taille",
+          "nb_cols": 6,
+          "id": "taille_geom_4_1"
+        }
+      ]
+    },
+    {
+      "fields": [
+        {
+          "type": "color_picker",
+          "name": "background_color_rgba",
+          "label": "Couleur de fond",
+          "nb_cols": 4,
+          "id": "couleur_fond_6_1"
+        },
+        {
+          "type": "color_picker",
+          "name": "contour_color_rgba",
+          "label": "Couleur de contour",
+          "nb_cols": 4,
+          "id": "couleur_contour_5_1"
+        },
+        {
+          "type": "color_picker",
+          "name": "color_label_rgba",
+          "label": "couleur du texte",
+          "nb_cols": 4,
+          "id": "couleur_label_7_1"
+        }
+      ]
+    }, {
+      "fields": [
+        {
+          "type": "hidden",
+          "name": "background_color",
+          "nb_cols": 12
+        },{
+          "type": "hidden",
+          "name": "contour_color",
+          "nb_cols": 12
+        },{
+          "type": "hidden",
+          "name": "color_label",
+          "nb_cols": 12
+        }
+      ]
+    }
+  ]
+},
+"datasources": {}
+}
diff --git a/storage/veremes_demo_dessin/forms/ressources/custom.js b/storage/veremes_demo_dessin/forms/ressources/custom.js
new file mode 100755
index 00000000..de066e6f
--- /dev/null
+++ b/storage/veremes_demo_dessin/forms/ressources/custom.js
@@ -0,0 +1,109 @@
+/* global angular, goog */
+// CUSTOM
+//bloque les delete du destructeur à éviter
+//'use strict';
+
+/***********************************************************************************
+ vmap_dessin Javascript
+ ***********************************************************************************/
+
+var oFormRequired = {
+    "sUrl": "",
+    "scope_": {},
+    "toDestructor": []
+};
+/**
+ * constructor_form
+ * Fonction appelé à l'initialisation du formulaire si dans la structure json javascript vaut "true"
+ * @param {type} scope
+ * @param {type} s_url
+ * @returns {undefined}
+ */
+var constructor_form = function (scope, s_url) {
+    //////////////////////////////////////////////////////////
+    //Ne pas toucher
+    console.log("constructor_form");
+
+    oFormRequired.sUrl = s_url;
+    oFormRequired.scope_ = scope;
+        
+    var parseColorFromRGBA = function (rgba) {
+        if (isRGBA(rgba)) {
+            var matchColors = /rgba\((\d{1,3}),(\d{1,3}),(\d{1,3}),(\d{1,3})\)/;
+            var match = matchColors.exec(rgba);
+            var color = match[1] + ' ' + match[2] + ' ' + match[3];
+        } else {
+            color = rgba;
+        }
+        return color;
+    };
+
+    var parseColorToRGBA = function (color) {
+        if (isRGBA(color))
+            var rgba = color;
+        else
+            var rgba = 'rgba(' + color.replace(/ /g, ',') + ',1)';
+        return rgba;
+    };
+
+    var isRGBA = function (color) {
+        if (color.substring(0, 4) === 'rgba')
+            return true;
+        else
+            return false;
+    };
+
+    var beforeEvent = function (sMode) {
+        console.log('beforeEvent !!!')
+        scope['oFormValues'][sMode]['background_color'] = parseColorFromRGBA(scope['oFormValues'][sMode]['background_color_rgba']);
+        scope['oFormValues'][sMode]['contour_color'] = parseColorFromRGBA(scope['oFormValues'][sMode]['contour_color_rgba']);
+        scope['oFormValues'][sMode]['color_label'] = parseColorFromRGBA(scope['oFormValues'][sMode]['color_label_rgba']);
+    };
+    
+    if (angular.isDefined(scope['oFormValues']['update'])) {
+        scope['oFormValues']['update']['background_color_rgba'] = parseColorToRGBA(scope['oFormValues']['update']['background_color']);
+        scope['oFormValues']['update']['contour_color_rgba'] = parseColorToRGBA(scope['oFormValues']['update']['contour_color']);
+        scope['oFormValues']['update']['color_label_rgba'] = parseColorToRGBA(scope['oFormValues']['update']['color_label']);
+    }
+
+    // Ajoute BeforeEvent
+    scope['oFormDefinition']['update']['beforeEvent'] = function () {
+        beforeEvent('update');
+    };
+    scope['oFormDefinition']['insert']['beforeEvent'] = function () {
+        beforeEvent('insert');
+    };
+
+    //////////////////////////////////////////////////////////
+    // Ajouter vos Elément à détruire (variable, function, watcher) à oFormRequired.toDestructor
+};
+
+
+
+/**
+ * destructor_form
+ * Fonction appelé quand on quitte le formulaire nettoie toute les fonctions pour les rendres inutilisable en dehors du formulaire
+ * @returns {undefined}
+ */
+var destructor_form = function () {
+
+    for (var i = 0; i < oFormRequired.toDestructor.length; i++) {
+        oFormRequired.toDestructor[i] = undefined;
+        delete oFormRequired.toDestructor[i];
+    }
+
+    //supprimer la balise script du js pour pouvoir le recharger si on reviens sur le formulaire plus tard
+    angular.element('[src="' + oFormRequired.sUrl + '?version=' + oFormRequired.scope_["oProperties"]["build"] + '"]').remove();
+
+    oFormRequired = undefined;
+    delete oFormRequired;
+
+    constructor_form = undefined;
+    delete constructor_form;
+    destructor_form = undefined;
+    delete destructor_form;
+};
+
+/**********************************************************************************/
+
+
diff --git a/storage/veremes_demo_dessin/forms/ressources/default.js b/storage/veremes_demo_dessin/forms/ressources/default.js
new file mode 100755
index 00000000..de066e6f
--- /dev/null
+++ b/storage/veremes_demo_dessin/forms/ressources/default.js
@@ -0,0 +1,109 @@
+/* global angular, goog */
+// CUSTOM
+//bloque les delete du destructeur à éviter
+//'use strict';
+
+/***********************************************************************************
+ vmap_dessin Javascript
+ ***********************************************************************************/
+
+var oFormRequired = {
+    "sUrl": "",
+    "scope_": {},
+    "toDestructor": []
+};
+/**
+ * constructor_form
+ * Fonction appelé à l'initialisation du formulaire si dans la structure json javascript vaut "true"
+ * @param {type} scope
+ * @param {type} s_url
+ * @returns {undefined}
+ */
+var constructor_form = function (scope, s_url) {
+    //////////////////////////////////////////////////////////
+    //Ne pas toucher
+    console.log("constructor_form");
+
+    oFormRequired.sUrl = s_url;
+    oFormRequired.scope_ = scope;
+        
+    var parseColorFromRGBA = function (rgba) {
+        if (isRGBA(rgba)) {
+            var matchColors = /rgba\((\d{1,3}),(\d{1,3}),(\d{1,3}),(\d{1,3})\)/;
+            var match = matchColors.exec(rgba);
+            var color = match[1] + ' ' + match[2] + ' ' + match[3];
+        } else {
+            color = rgba;
+        }
+        return color;
+    };
+
+    var parseColorToRGBA = function (color) {
+        if (isRGBA(color))
+            var rgba = color;
+        else
+            var rgba = 'rgba(' + color.replace(/ /g, ',') + ',1)';
+        return rgba;
+    };
+
+    var isRGBA = function (color) {
+        if (color.substring(0, 4) === 'rgba')
+            return true;
+        else
+            return false;
+    };
+
+    var beforeEvent = function (sMode) {
+        console.log('beforeEvent !!!')
+        scope['oFormValues'][sMode]['background_color'] = parseColorFromRGBA(scope['oFormValues'][sMode]['background_color_rgba']);
+        scope['oFormValues'][sMode]['contour_color'] = parseColorFromRGBA(scope['oFormValues'][sMode]['contour_color_rgba']);
+        scope['oFormValues'][sMode]['color_label'] = parseColorFromRGBA(scope['oFormValues'][sMode]['color_label_rgba']);
+    };
+    
+    if (angular.isDefined(scope['oFormValues']['update'])) {
+        scope['oFormValues']['update']['background_color_rgba'] = parseColorToRGBA(scope['oFormValues']['update']['background_color']);
+        scope['oFormValues']['update']['contour_color_rgba'] = parseColorToRGBA(scope['oFormValues']['update']['contour_color']);
+        scope['oFormValues']['update']['color_label_rgba'] = parseColorToRGBA(scope['oFormValues']['update']['color_label']);
+    }
+
+    // Ajoute BeforeEvent
+    scope['oFormDefinition']['update']['beforeEvent'] = function () {
+        beforeEvent('update');
+    };
+    scope['oFormDefinition']['insert']['beforeEvent'] = function () {
+        beforeEvent('insert');
+    };
+
+    //////////////////////////////////////////////////////////
+    // Ajouter vos Elément à détruire (variable, function, watcher) à oFormRequired.toDestructor
+};
+
+
+
+/**
+ * destructor_form
+ * Fonction appelé quand on quitte le formulaire nettoie toute les fonctions pour les rendres inutilisable en dehors du formulaire
+ * @returns {undefined}
+ */
+var destructor_form = function () {
+
+    for (var i = 0; i < oFormRequired.toDestructor.length; i++) {
+        oFormRequired.toDestructor[i] = undefined;
+        delete oFormRequired.toDestructor[i];
+    }
+
+    //supprimer la balise script du js pour pouvoir le recharger si on reviens sur le formulaire plus tard
+    angular.element('[src="' + oFormRequired.sUrl + '?version=' + oFormRequired.scope_["oProperties"]["build"] + '"]').remove();
+
+    oFormRequired = undefined;
+    delete oFormRequired;
+
+    constructor_form = undefined;
+    delete constructor_form;
+    destructor_form = undefined;
+    delete destructor_form;
+};
+
+/**********************************************************************************/
+
+
diff --git a/storage/veremes_demo_dessin/forms/ressources/published.js b/storage/veremes_demo_dessin/forms/ressources/published.js
new file mode 100755
index 00000000..de066e6f
--- /dev/null
+++ b/storage/veremes_demo_dessin/forms/ressources/published.js
@@ -0,0 +1,109 @@
+/* global angular, goog */
+// CUSTOM
+//bloque les delete du destructeur à éviter
+//'use strict';
+
+/***********************************************************************************
+ vmap_dessin Javascript
+ ***********************************************************************************/
+
+var oFormRequired = {
+    "sUrl": "",
+    "scope_": {},
+    "toDestructor": []
+};
+/**
+ * constructor_form
+ * Fonction appelé à l'initialisation du formulaire si dans la structure json javascript vaut "true"
+ * @param {type} scope
+ * @param {type} s_url
+ * @returns {undefined}
+ */
+var constructor_form = function (scope, s_url) {
+    //////////////////////////////////////////////////////////
+    //Ne pas toucher
+    console.log("constructor_form");
+
+    oFormRequired.sUrl = s_url;
+    oFormRequired.scope_ = scope;
+        
+    var parseColorFromRGBA = function (rgba) {
+        if (isRGBA(rgba)) {
+            var matchColors = /rgba\((\d{1,3}),(\d{1,3}),(\d{1,3}),(\d{1,3})\)/;
+            var match = matchColors.exec(rgba);
+            var color = match[1] + ' ' + match[2] + ' ' + match[3];
+        } else {
+            color = rgba;
+        }
+        return color;
+    };
+
+    var parseColorToRGBA = function (color) {
+        if (isRGBA(color))
+            var rgba = color;
+        else
+            var rgba = 'rgba(' + color.replace(/ /g, ',') + ',1)';
+        return rgba;
+    };
+
+    var isRGBA = function (color) {
+        if (color.substring(0, 4) === 'rgba')
+            return true;
+        else
+            return false;
+    };
+
+    var beforeEvent = function (sMode) {
+        console.log('beforeEvent !!!')
+        scope['oFormValues'][sMode]['background_color'] = parseColorFromRGBA(scope['oFormValues'][sMode]['background_color_rgba']);
+        scope['oFormValues'][sMode]['contour_color'] = parseColorFromRGBA(scope['oFormValues'][sMode]['contour_color_rgba']);
+        scope['oFormValues'][sMode]['color_label'] = parseColorFromRGBA(scope['oFormValues'][sMode]['color_label_rgba']);
+    };
+    
+    if (angular.isDefined(scope['oFormValues']['update'])) {
+        scope['oFormValues']['update']['background_color_rgba'] = parseColorToRGBA(scope['oFormValues']['update']['background_color']);
+        scope['oFormValues']['update']['contour_color_rgba'] = parseColorToRGBA(scope['oFormValues']['update']['contour_color']);
+        scope['oFormValues']['update']['color_label_rgba'] = parseColorToRGBA(scope['oFormValues']['update']['color_label']);
+    }
+
+    // Ajoute BeforeEvent
+    scope['oFormDefinition']['update']['beforeEvent'] = function () {
+        beforeEvent('update');
+    };
+    scope['oFormDefinition']['insert']['beforeEvent'] = function () {
+        beforeEvent('insert');
+    };
+
+    //////////////////////////////////////////////////////////
+    // Ajouter vos Elément à détruire (variable, function, watcher) à oFormRequired.toDestructor
+};
+
+
+
+/**
+ * destructor_form
+ * Fonction appelé quand on quitte le formulaire nettoie toute les fonctions pour les rendres inutilisable en dehors du formulaire
+ * @returns {undefined}
+ */
+var destructor_form = function () {
+
+    for (var i = 0; i < oFormRequired.toDestructor.length; i++) {
+        oFormRequired.toDestructor[i] = undefined;
+        delete oFormRequired.toDestructor[i];
+    }
+
+    //supprimer la balise script du js pour pouvoir le recharger si on reviens sur le formulaire plus tard
+    angular.element('[src="' + oFormRequired.sUrl + '?version=' + oFormRequired.scope_["oProperties"]["build"] + '"]').remove();
+
+    oFormRequired = undefined;
+    delete oFormRequired;
+
+    constructor_form = undefined;
+    delete constructor_form;
+    destructor_form = undefined;
+    delete destructor_form;
+};
+
+/**********************************************************************************/
+
+
diff --git a/storage/veremes_demo_dessin/json/business_object.json b/storage/veremes_demo_dessin/json/business_object.json
new file mode 100755
index 00000000..6e193daf
--- /dev/null
+++ b/storage/veremes_demo_dessin/json/business_object.json
@@ -0,0 +1,20 @@
+{  
+   "business_object_id":"vmap_dessin",
+   "title":"Dessin",
+   "id_field":"draw_id",
+   "database":"vmap_angular",
+   "schema":"[TABLE_SCHEMA]",
+   "table":"v_draw",
+   "sql_summary":"select draw_id, description, text_label from [TABLE_SCHEMA].v_draw",
+   "sql_list":"select draw_id as \"Id\", text_label as \"Nom\" , area,  perimeter from [TABLE_SCHEMA].v_draw",
+   "sorted_by":"draw_id",
+   "geom_column":"geom",
+   "search_field":"draw_id",
+   "result_field":"draw_id",
+   "search_use_strict":"left",
+   "event_id":null,
+   "index":0,
+   "add_form_size":1,
+   "edit_form_size":1,
+   "display_form_size":1
+}
diff --git a/storage/veremes_demo_dessin/json/event.json b/storage/veremes_demo_dessin/json/event.json
new file mode 100755
index 00000000..b1cc925b
--- /dev/null
+++ b/storage/veremes_demo_dessin/json/event.json
@@ -0,0 +1,4 @@
+{
+	"event_id":"veremes_demo_dessin_event",
+	"description":"Événement appelé lorsque veremes_demo_dessin change"
+}
diff --git a/storage/veremes_demo_dessin/json/mapserver_layers.json b/storage/veremes_demo_dessin/json/mapserver_layers.json
new file mode 100755
index 00000000..5155634a
--- /dev/null
+++ b/storage/veremes_demo_dessin/json/mapserver_layers.json
@@ -0,0 +1,65 @@
+[{  
+   "ms_layer_id":30,
+   "name":"Dessin_Point",
+   "title":"Dessin Point",
+   "coordsys_id":2154,
+   "coordsys_label":"[EPSG:2154]-RGF93\/Lambert-93",
+   "source_id":null,
+   "connection_id":2,
+   "tableschema":"[TABLE_SCHEMA]",
+   "tablename":"v_draw_point",
+   "tableidfield":"draw_id",
+   "definition":"LAYER\r\n\tNAME \"{LAYER_NAME}\"\r\n\tTYPE {LAYER_TYPE}\r\n\tSTATUS ON\r\n\t{CONNECTION}\r\n\tDATA \"geom from {TABLE_SCHEMA}.{TABLE_NAME} USING SRID={SRID} USING UNIQUE {TABLE_ID}\"\r\n\tOPACITY {LAYER_OPACITY}\r\n\t{COORDSYS}\r\n\r\n\tMETADATA\r\n\t\t\"wms_title\" \t\t\t\"{LAYER_NAME}\"\r\n\t\t\"wms_srs\" \t\t\t\t\"EPSG:2154 EPSG:3857\"\r\n\t\t\"wms_name\" \t\t\t\t\"{LAYER_NAME}\"\r\n\t\t\"wms_server_version\" \t\"1.3.0\"\r\n\t\t\"wms_format\" \t\t\t\"image\/png\"\r\n\tEND\r\n\r\n\tLABELITEM \"text_label\"\r\n\tCLASS\r\n\t\tNAME \"Dessin ponctuel\"\r\n\t\tEXPRESSION ('[graph]' eq \"t\" AND '[label]' eq \"t\")\r\n\t\tSTYLE\r\n\t\t\tSYMBOL \"circle\"\r\n\t\t\tOUTLINECOLOR [contour_color]\r\n\t\t\tCOLOR [background_color]\r\n\t\t\tSIZE [geom_size]\r\n\t\tEND\r\n\t\tLABEL\r\n\t\t\tTYPE TRUETYPE\r\n\t\t\tFONT \"Arial\"\r\n\t\t\tANGLE AUTO\r\n\t\t\tSIZE [text_size]\r\n\t\t\tPOSITION UC\r\n\t\t\tCOLOR [color_label]\r\n\t\tEND\r\n\tEND\r\n\tCLASS\r\n\t\tNAME \"Dessin ponctuel\"\r\n\t\tEXPRESSION ('[graph]' eq \"t\" AND '[label]' eq \"f\")\r\n\t\tSTYLE\r\n\t\t\tSYMBOL \"circle\"\r\n\t\t\tOUTLINECOLOR [contour_color]\r\n\t\t\tCOLOR [background_color]\r\n\t\t\tSIZE [geom_size]\r\n\t\tEND\r\n\tEND\r\n\tCLASS\r\n\t\tNAME \"Dessin ponctuel\"\r\n\t\tEXPRESSION ('[graph]' eq \"f\" AND '[label]' eq \"t\")\r\n\t\tSTYLE\r\n\t\tEND\r\n\t\tLABEL\r\n\t\t\tTYPE TRUETYPE\r\n\t\t\tFONT \"Arial\"\r\n\t\t\tANGLE AUTO\r\n\t\t\tSIZE [text_size]\r\n\t\t\tPOSITION UC\r\n\t\t\tCOLOR [color_label]\r\n\t\tEND\r\n\tEND\r\nEND\r\n\r\n",
+   "active":true,
+   "opacity":100,
+   "ms_layertype_id":"POINT",
+   "private_connection":true,
+   "connection_label":"Connexion privée",
+   "source_label":null,
+   "definitiontmp":null,
+   "database":null,
+   "wmsservices":"",
+   "wmsservices_label":""
+}, {  
+   "ms_layer_id":31,
+   "name":"Dessin_Ligne",
+   "title":"Dessin Ligne",
+   "coordsys_id":2154,
+   "coordsys_label":"[EPSG:2154]-RGF93\/Lambert-93",
+   "source_id":null,
+   "connection_id":2,
+   "tableschema":"[TABLE_SCHEMA]",
+   "tablename":"v_draw_line",
+   "tableidfield":"draw_id",
+   "definition":"LAYER\r\n\tNAME \"{LAYER_NAME}\"\r\n\tTYPE {LAYER_TYPE}\r\n\tSTATUS ON\r\n\t{CONNECTION}\r\n\tDATA \"geom from {TABLE_SCHEMA}.{TABLE_NAME} USING SRID={SRID} USING UNIQUE {TABLE_ID}\"\r\n\tOPACITY {LAYER_OPACITY}\r\n\t{COORDSYS}\r\n\r\n\tMETADATA\r\n\t\t\"wms_title\" \t\t\t\"{LAYER_NAME}\"\r\n\t\t\"wms_srs\" \t\t\t\t\"EPSG:2154 EPSG:3857\"\r\n\t\t\"wms_name\" \t\t\t\t\"{LAYER_NAME}\"\r\n\t\t\"wms_server_version\" \t\"1.3.0\"\r\n\t\t\"wms_format\" \t\t\t\"image\/png\"\r\n\tEND\r\n\r\n\tLABELITEM \"text_label\"\r\n\tCLASS\r\n\t\tNAME \"Dessin lin\u00e9aire\"\r\n\t\tEXPRESSION ('[graph]' eq \"t\" AND '[label]' eq \"t\")\r\n\t\tSTYLE\r\n\t\t\tOUTLINECOLOR [contour_color]\r\n\t\t\tCOLOR [background_color]\r\n\t\t\tWIDTH [geom_size]\r\n\t\tEND\r\n\t\tLABEL\r\n\t\t\tTYPE TRUETYPE\r\n\t\t\tFONT \"Arial\"\r\n\t\t\tANGLE AUTO\r\n\t\t\tSIZE [text_size]\r\n\t\t\tPOSITION UC\r\n\t\t\tCOLOR [color_label]\r\n\t\t\tWRAP \"|\"\r\n\t\tEND\r\n\tEND\r\n\tCLASS\r\n\t\tNAME \"Dessin lin\u00e9aire\"\r\n\t\tEXPRESSION ('[graph]' eq \"t\" AND '[label]' eq \"f\")\r\n\t\tSTYLE\r\n\t\t\tOUTLINECOLOR [contour_color]\r\n\t\t\tCOLOR [background_color]\r\n\t\t\tWIDTH [geom_size]\r\n\t\tEND\r\n\tEND\r\n\tCLASS\r\n\t\tNAME \"Dessin lin\u00e9aire\"\r\n\t\tEXPRESSION ('[graph]' eq \"f\" AND '[label]' eq \"t\")\r\n\t\tSTYLE\r\n\t\tEND\r\n\t\tLABEL\r\n\t\t\tTYPE TRUETYPE\r\n\t\t\tFONT \"Arial\"\r\n\t\t\tANGLE AUTO\r\n\t\t\tSIZE [text_size]\r\n\t\t\tPOSITION UC\r\n\t\t\tCOLOR [color_label]\r\n\t\t\tWRAP \"|\"\r\n\t\tEND\r\n\tEND\r\nEND",
+   "active":true,
+   "opacity":100,
+   "ms_layertype_id":"LINE",
+   "private_connection":true,
+   "connection_label":"Connexion privée",
+   "source_label":null,
+   "database":null,
+   "wmsservices":"",
+   "wmsservices_label":""
+}, {  
+   "ms_layer_id":32,
+   "name":"Dessin_Polygone",
+   "title":"Dessin Polygone",
+   "coordsys_id":2154,
+   "coordsys_label":"[EPSG:2154]-RGF93\/Lambert-93",
+   "source_id":null,
+   "connection_id":2,
+   "tableschema":"[TABLE_SCHEMA]",
+   "tablename":"v_draw_poly",
+   "tableidfield":"draw_id",
+   "definition":"LAYER\r\n\tNAME \"{LAYER_NAME}\"\r\n\tTYPE {LAYER_TYPE}\r\n\tSTATUS ON\r\n\t{CONNECTION}\r\n\tDATA \"geom from {TABLE_SCHEMA}.{TABLE_NAME} USING SRID={SRID} USING UNIQUE {TABLE_ID}\"\r\n\tOPACITY {LAYER_OPACITY}\r\n\t{COORDSYS}\r\n\t\r\n\tMETADATA\r\n\t\t\"wms_title\" \t\t\t\"{LAYER_NAME}\"\r\n\t\t\"wms_srs\" \t\t\t\t\"EPSG:2154 EPSG:3857\"\r\n\t\t\"wms_name\" \t\t\t\t\"{LAYER_NAME}\"\r\n\t\t\"wms_server_version\" \t\"1.1.0\"\r\n\t\t\"wms_format\" \t\t\t\"image\/png\"\r\n\tEND\r\n\r\n\tLABELITEM \"text_label\"\r\n\r\n\tCLASS\r\n\t\tNAME \"Dessin surfacique\"\r\n\t\tEXPRESSION ('[graph]' eq \"t\" AND '[label]' eq \"t\")\r\n\t\tSTYLE\r\n\t\t\tOUTLINECOLOR [contour_color]\r\n\t\t\tWIDTH [geom_size]\r\n\t\t\tCOLOR [background_color]\r\n\t\tEND\r\n\t\tLABEL\r\n\t\t\tTYPE TRUETYPE\r\n\t\t\tFONT \"Arial\"\r\n\t\t\tANGLE AUTO\r\n\t\t\tSIZE [text_size]\r\n\t\t\tPOSITION CC\r\n\t\t\tCOLOR [color_label]\r\n\t\t\tWRAP \"|\"\r\n\t\tEND\r\n\tEND\r\n\tCLASS\r\n\t\tNAME \"Dessin surfacique\"\r\n\t\tEXPRESSION ('[graph]' eq \"t\" AND '[label]' eq \"f\")\r\n\t\tSTYLE\r\n\t\t\tOUTLINECOLOR [contour_color]\r\n\t\t\tWIDTH [geom_size]\r\n\t\t\tCOLOR [background_color]\r\n\t\tEND\r\n\tEND\r\n\tCLASS\r\n\t\tNAME \"Dessin surfacique\"\r\n\t\tEXPRESSION ('[graph]' eq \"f\" AND '[label]' eq \"t\")\r\n\t\tSTYLE\r\n\t\tEND\r\n\t\tLABEL\r\n\t\t\tTYPE TRUETYPE\r\n\t\t\tFONT \"Arial\"\r\n\t\t\tANGLE AUTO\r\n\t\t\tSIZE [text_size]\r\n\t\t\tPOSITION CC\r\n\t\t\tCOLOR [color_label]\r\n\t\t\tWRAP \"|\"\r\n\t\tEND\r\n\tEND\r\nEND",
+   "active":true,
+   "opacity":100,
+   "ms_layertype_id":"POLYGON",
+   "private_connection":true,
+   "connection_label":"Connexion privée",
+   "source_label":null,
+   "database":null,
+   "wmsservices":"",
+   "wmsservices_label":""
+}]
\ No newline at end of file
diff --git a/storage/veremes_demo_dessin/package.json b/storage/veremes_demo_dessin/package.json
new file mode 100755
index 00000000..9bf4d6f5
--- /dev/null
+++ b/storage/veremes_demo_dessin/package.json
@@ -0,0 +1,5 @@
+{
+	"author": "Armand",
+	"mame": "veremes_demo_dessin",
+	"description": "Objet métier permettant la visualisation des dessins"
+}
diff --git a/storage/veremes_demo_dessin/sql/structure.json b/storage/veremes_demo_dessin/sql/structure.json
new file mode 100755
index 00000000..f475b453
--- /dev/null
+++ b/storage/veremes_demo_dessin/sql/structure.json
@@ -0,0 +1,6 @@
+{
+	"schema": "s_draw",
+	"srid": "2154",
+	"tables": ["draw, v_draw, v_draw_line, v_draw_poly, v_draw_point"],
+	"sequences": ["seq_draw"]
+}
\ No newline at end of file
diff --git a/storage/veremes_demo_dessin/sql/table.sql b/storage/veremes_demo_dessin/sql/table.sql
new file mode 100755
index 00000000..1b037df8
--- /dev/null
+++ b/storage/veremes_demo_dessin/sql/table.sql
@@ -0,0 +1,282 @@
+--
+-- PostgreSQL database dump
+--
+
+-- Dumped from database version 9.3.14
+-- Dumped by pg_dump version 9.5.6
+
+-- Started on 2017-06-07 09:12:15 CEST
+
+SET statement_timeout = 0;
+SET lock_timeout = 0;
+SET client_encoding = 'UTF8';
+SET standard_conforming_strings = on;
+SET check_function_bodies = false;
+SET client_min_messages = warning;
+-- SET row_security = off;
+
+SET search_path = [TABLE_SCHEMA], pg_catalog;
+
+--
+-- TOC entry 452 (class 1259 OID 67429)
+-- Name: seq_draw; Type: SEQUENCE; Schema: [TABLE_SCHEMA]; Owner: -
+--
+
+CREATE SEQUENCE seq_draw
+    START WITH 1
+    INCREMENT BY 1
+    NO MINVALUE
+    NO MAXVALUE
+    CACHE 1;
+
+
+SET default_tablespace = '';
+
+SET default_with_oids = true;
+
+--
+-- TOC entry 453 (class 1259 OID 67620)
+-- Name: draw; Type: TABLE; Schema: [TABLE_SCHEMA]; Owner: -
+--
+
+CREATE TABLE draw (
+    draw_id integer DEFAULT nextval('seq_draw'::regclass) NOT NULL,
+    theme character varying(50),
+    comments text,
+    description character varying(255),
+    text_size integer,
+    geom_size integer,
+    user_id integer,
+    label boolean DEFAULT true,
+    graph boolean DEFAULT true,
+    contour_color character varying(50),
+    background_color character varying(50),
+    color_label character varying(50),
+    area character varying(30),
+    area_label boolean,
+    perimeter character varying(30),
+    perimeter_label boolean,
+    text_label character varying(255),
+    geom public.geometry(Geometry,[SRID]),
+    CONSTRAINT enforce_dims_geom CHECK ((public.st_ndims(geom) = 2)),
+    CONSTRAINT enforce_srid_geom CHECK ((public.st_srid(geom) = [SRID]))
+);
+
+
+--
+-- TOC entry 490 (class 1259 OID 68425)
+-- Name: v_draw; Type: VIEW; Schema: [TABLE_SCHEMA]; Owner: -
+--
+
+CREATE VIEW v_draw AS
+ SELECT draw.draw_id,
+    draw.theme,
+    draw.comments,
+    draw.description,
+    draw.text_size,
+    draw.geom_size,
+    draw.contour_color,
+    draw.background_color,
+    draw.color_label,
+    draw.user_id,
+    draw.label,
+    draw.graph,
+    draw.area,
+    draw.area_label,
+    draw.perimeter,
+    draw.perimeter_label,
+    draw.text_label,
+    "substring"(public.st_astext(draw.geom), 1, ("position"(public.st_astext(draw.geom), '('::text) - 1)) AS geom_type,
+    draw.geom,
+    "user".login
+   FROM (draw
+     JOIN s_vitis."user" ON ((draw.user_id = "user".user_id)))
+  WHERE (("user".login)::name = "current_user"())
+  ORDER BY draw.draw_id DESC;
+
+
+--
+-- TOC entry 454 (class 1259 OID 67686)
+-- Name: v_draw_line; Type: VIEW; Schema: [TABLE_SCHEMA]; Owner: -
+--
+
+CREATE VIEW v_draw_line AS
+ SELECT draw.draw_id,
+    draw.theme,
+    draw.comments,
+    draw.description,
+    draw.text_size,
+    draw.geom_size,
+    draw.contour_color,
+    draw.background_color,
+    draw.color_label,
+    draw.user_id,
+    draw.label,
+    draw.graph,
+    draw.area,
+    draw.area_label,
+    draw.perimeter,
+    draw.perimeter_label,
+    draw.text_label,
+    "substring"(public.st_astext(draw.geom), 1, ("position"(public.st_astext(draw.geom), '('::text) - 1)) AS geom_type,
+    draw.geom,
+    "user".login
+   FROM (draw
+     JOIN s_vitis."user" ON ((draw.user_id = "user".user_id)))
+  WHERE ((public.st_geometrytype(draw.geom) ~~ '%Line%'::text) AND (("user".login)::name = "current_user"()));
+
+
+--
+-- TOC entry 455 (class 1259 OID 67691)
+-- Name: v_draw_point; Type: VIEW; Schema: [TABLE_SCHEMA]; Owner: -
+--
+
+CREATE VIEW v_draw_point AS
+ SELECT draw.draw_id,
+    draw.theme,
+    draw.comments,
+    draw.description,
+    draw.text_size,
+    draw.geom_size,
+    draw.contour_color,
+    draw.background_color,
+    draw.color_label,
+    draw.user_id,
+    draw.label,
+    draw.graph,
+    draw.area,
+    draw.area_label,
+    draw.perimeter,
+    draw.perimeter_label,
+    draw.text_label,
+    "substring"(public.st_astext(draw.geom), 1, ("position"(public.st_astext(draw.geom), '('::text) - 1)) AS geom_type,
+    draw.geom,
+    "user".login
+   FROM (draw
+     JOIN s_vitis."user" ON ((draw.user_id = "user".user_id)))
+  WHERE ((public.st_geometrytype(draw.geom) ~~ '%Point%'::text) AND (("user".login)::name = "current_user"()));
+
+
+--
+-- TOC entry 456 (class 1259 OID 67696)
+-- Name: v_draw_poly; Type: VIEW; Schema: [TABLE_SCHEMA]; Owner: -
+--
+
+CREATE VIEW v_draw_poly AS
+ SELECT draw.draw_id,
+    draw.theme,
+    draw.comments,
+    draw.description,
+    draw.text_size,
+    draw.geom_size,
+    draw.contour_color,
+    draw.background_color,
+    draw.color_label,
+    draw.user_id,
+    draw.label,
+    draw.graph,
+    draw.area,
+    draw.area_label,
+    draw.perimeter,
+    draw.perimeter_label,
+    draw.text_label,
+    "substring"(public.st_astext(draw.geom), 1, ("position"(public.st_astext(draw.geom), '('::text) - 1)) AS geom_type,
+    draw.geom,
+    "user".login
+   FROM (draw
+     JOIN s_vitis."user" ON ((draw.user_id = "user".user_id)))
+  WHERE ((public.st_geometrytype(draw.geom) ~~ '%Polygon%'::text) AND (("user".login)::name = "current_user"()));
+
+
+--
+-- TOC entry 3985 (class 2606 OID 67632)
+-- Name: pk_draw; Type: CONSTRAINT; Schema: [TABLE_SCHEMA]; Owner: -
+--
+
+ALTER TABLE ONLY draw
+    ADD CONSTRAINT pk_draw PRIMARY KEY (draw_id);
+
+
+--
+-- TOC entry 3983 (class 1259 OID 67677)
+-- Name: dessin_geom; Type: INDEX; Schema: [TABLE_SCHEMA]; Owner: -
+--
+
+CREATE INDEX dessin_geom ON draw USING gist (geom);
+
+
+--
+-- TOC entry 4211 (class 2618 OID 68430)
+-- Name: delete_v_draw; Type: RULE; Schema: [TABLE_SCHEMA]; Owner: -
+--
+
+CREATE RULE delete_v_draw AS
+    ON DELETE TO v_draw DO INSTEAD  DELETE FROM draw
+  WHERE (draw.draw_id = old.draw_id);
+
+
+--
+-- TOC entry 4212 (class 2618 OID 68431)
+-- Name: insert_v_draw; Type: RULE; Schema: [TABLE_SCHEMA]; Owner: -
+--
+
+CREATE RULE insert_v_draw AS
+    ON INSERT TO v_draw DO INSTEAD  INSERT INTO draw (theme, comments, description, text_size, user_id, label, contour_color, background_color, color_label, geom, graph, geom_size, area, area_label, perimeter, perimeter_label, text_label)
+  VALUES (new.theme, new.comments, new.description, new.text_size, ( SELECT "user".user_id
+           FROM s_vitis."user"
+          WHERE (("user".login)::name = "current_user"())), new.label, new.contour_color, new.background_color, new.color_label, new.geom, new.graph, new.geom_size, new.area, new.area_label, new.perimeter, new.perimeter_label, new.text_label)
+  RETURNING draw.draw_id,
+    draw.theme,
+    draw.comments,
+    draw.description,
+    draw.text_size,
+    draw.geom_size,
+    draw.contour_color,
+    draw.background_color,
+    draw.color_label,
+    draw.user_id,
+    draw.label,
+    draw.graph,
+    draw.area,
+    draw.area_label,
+    draw.perimeter,
+    draw.perimeter_label,
+    draw.text_label,
+    "substring"(public.st_astext(draw.geom), 1, ("position"(public.st_astext(draw.geom), '('::text) - 1)) AS geom_type,
+    draw.geom,
+    ''::character varying AS "varchar";
+
+
+--
+-- TOC entry 4213 (class 2618 OID 68433)
+-- Name: update_v_draw; Type: RULE; Schema: [TABLE_SCHEMA]; Owner: -
+--
+
+CREATE RULE update_v_draw AS
+    ON UPDATE TO v_draw DO INSTEAD  UPDATE draw SET draw_id = new.draw_id, theme = new.theme, comments = new.comments, description = new.description, text_size = new.text_size, user_id = new.user_id, label = new.label, contour_color = new.contour_color, background_color = new.background_color, color_label = new.color_label, geom = new.geom, graph = new.graph, geom_size = new.geom_size, area = new.area, area_label = new.area_label, perimeter = new.perimeter, perimeter_label = new.perimeter_label, text_label = new.text_label
+  WHERE (draw.draw_id = new.draw_id);
+
+
+--
+-- TOC entry 3986 (class 2606 OID 67633)
+-- Name: fk_user_login; Type: FK CONSTRAINT; Schema: [TABLE_SCHEMA]; Owner: -
+--
+
+ALTER TABLE ONLY draw
+    ADD CONSTRAINT fk_user_login FOREIGN KEY (user_id) REFERENCES s_vitis."user"(user_id) ON DELETE CASCADE;
+
+
+GRANT USAGE ON SCHEMA [TABLE_SCHEMA] TO vmap_user;
+GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE [TABLE_SCHEMA].v_draw TO vmap_user;
+GRANT SELECT ON TABLE [TABLE_SCHEMA].v_draw_point TO vmap_user;
+GRANT SELECT ON TABLE [TABLE_SCHEMA].v_draw_line TO vmap_user;
+GRANT SELECT ON TABLE [TABLE_SCHEMA].v_draw_poly TO vmap_user;
+GRANT SELECT, UPDATE ON SEQUENCE [TABLE_SCHEMA].seq_draw TO vmap_user;
+
+
+-- Completed on 2017-06-07 09:12:21 CEST
+
+--
+-- PostgreSQL database dump complete
+--
+
diff --git a/storage/veremes_oads_dossier/forms/custom.json b/storage/veremes_oads_dossier/forms/custom.json
new file mode 100755
index 00000000..ae1448e7
--- /dev/null
+++ b/storage/veremes_oads_dossier/forms/custom.json
@@ -0,0 +1,175 @@
+{
+  "display": {
+    "name": "custom-form",
+    "title": "veremes_soads_dossier",
+    "input_size": "xxs",
+    "nb_cols": 12,	
+    "javascript": false,
+    "rows": [
+      {
+        "fields": [
+          {
+            "type": "label",
+            "name": "dossier_num",
+            "label": "dossier_num",
+            "disabled": false,
+            "required": false,
+            "nb_cols": 12,
+            "id": "dossier_num_2_1"
+          }
+        ]
+      },
+      {
+        "fields": [
+          {
+            "type": "label",
+            "name": "author",
+            "label": "author",
+            "disabled": false,
+            "required": false,
+            "nb_cols": 12,
+            "id": "author_3_1"
+          }
+        ]
+      },
+      {
+        "fields": [
+          {
+            "type": "label",
+            "name": "create_date",
+            "label": "create_date",
+            "disabled": false,
+            "required": false,
+            "nb_cols": 12,
+            "id": "create_date_4_1"
+          }
+        ]
+      },
+      {
+        "fields": [
+          {
+            "type": "label",
+            "name": "modifier",
+            "label": "modifier",
+            "disabled": false,
+            "required": false,
+            "nb_cols": 12,
+            "id": "modifier_5_1"
+          }
+        ]
+      },
+      {
+        "fields": [
+          {
+            "type": "label",
+            "name": "update_date",
+            "label": "update_date",
+            "disabled": false,
+            "required": false,
+            "nb_cols": 12,
+            "id": "update_date_6_1"
+          }
+        ]
+      }
+    ],
+    "tabs": {
+      "position": "top",
+      "list": [
+        {
+          "label": "Tab 0",
+          "elements": [
+            "dossier_num",
+            "author",
+            "create_date",
+            "modifier",
+            "update_date"
+          ]
+        }
+      ]
+    }
+  },
+  "search": {
+    "name": "custom-form",
+    "title": "veremes_soads_dossier",
+    "input_size": "xxs",
+    "nb_cols": 12,
+    "javascript": false,
+    "rows": [],
+    "tabs": {
+      "position": "top",
+      "list": [
+        {
+          "label": "Tab 0",
+          "elements": []
+        }
+      ]
+    }
+  },
+  "insert": {
+    "name": "custom-form",
+    "title": "veremes_soads_dossier",
+    "input_size": "xxs",
+    "nb_cols": 12,
+    "javascript": false,
+    "rows": [
+      {
+        "fields": [
+          {
+            "type": "text",
+            "name": "dossier_num",
+            "label": "dossier_num",
+            "disabled": false,
+            "required": false,
+            "nb_cols": 12,
+            "id": "dossier_num_2_1"
+          }
+        ]
+      }
+    ],
+    "tabs": {
+      "position": "top",
+      "list": [
+        {
+          "label": "Tab 0",
+          "elements": [
+            "dossier_num"
+          ]
+        }
+      ]
+    }
+  },
+  "update": {
+    "name": "custom-form",
+    "title": "veremes_soads_dossier",
+    "input_size": "xxs",
+    "nb_cols": 12,
+    "javascript": false,
+    "rows": [
+      {
+        "fields": [
+          {
+            "type": "text",
+            "name": "dossier_num",
+            "label": "dossier_num",
+            "disabled": false,
+            "required": false,
+            "nb_cols": 12,
+            "id": "dossier_num_2_1"
+          }
+        ]
+      }
+    ],
+    "tabs": {
+      "position": "top",
+      "list": [
+        {
+          "label": "Tab 0",
+          "elements": [
+            "dossier_num"
+          ]
+        }
+      ]
+    }
+  },
+  "datasources": {}
+}
\ No newline at end of file
diff --git a/storage/veremes_oads_dossier/forms/default.json b/storage/veremes_oads_dossier/forms/default.json
new file mode 100755
index 00000000..6c38ec46
--- /dev/null
+++ b/storage/veremes_oads_dossier/forms/default.json
@@ -0,0 +1,259 @@
+{
+  "display": {
+    "name": "custom-form",
+    "title": "veremes_soads_dossier",
+    "input_size": "xxs",
+    "nb_cols": 12,
+    "javascript": false,
+    "rows": [
+      {
+        "fields": [
+          {
+            "type": "label",
+            "name": "dossier_id",
+            "label": "dossier_id",
+            "disabled": false,
+            "required": false,
+            "nb_cols": 12
+          }
+        ]
+      },
+      {
+        "fields": [
+          {
+            "type": "label",
+            "name": "dossier_num",
+            "label": "dossier_num",
+            "disabled": false,
+            "required": false,
+            "nb_cols": 12
+          }
+        ]
+      },
+      {
+        "fields": [
+          {
+            "type": "label",
+            "name": "author",
+            "label": "author",
+            "disabled": false,
+            "required": false,
+            "nb_cols": 12
+          }
+        ]
+      },
+      {
+        "fields": [
+          {
+            "type": "label",
+            "name": "create_date",
+            "label": "create_date",
+            "disabled": false,
+            "required": false,
+            "nb_cols": 12
+          }
+        ]
+      },
+      {
+        "fields": [
+          {
+            "type": "label",
+            "name": "modifier",
+            "label": "modifier",
+            "disabled": false,
+            "required": false,
+            "nb_cols": 12
+          }
+        ]
+      },
+      {
+        "fields": [
+          {
+            "type": "label",
+            "name": "update_date",
+            "label": "update_date",
+            "disabled": false,
+            "required": false,
+            "nb_cols": 12
+          }
+        ]
+      }
+    ]
+  },
+  "search": {
+    "name": "custom-form",
+    "title": "veremes_soads_dossier",
+    "input_size": "xxs",
+    "nb_cols": 12,
+    "javascript": false,
+    "rows": []
+  },
+  "insert": {
+    "name": "custom-form",
+    "title": "veremes_soads_dossier",
+    "input_size": "xxs",
+    "nb_cols": 12,
+    "javascript": false,
+    "rows": [
+      {
+        "fields": [
+          {
+            "type": "integer",
+            "name": "dossier_id",
+            "label": "dossier_id",
+            "disabled": false,
+            "required": false,
+            "nb_cols": 12
+          }
+        ]
+      },
+      {
+        "fields": [
+          {
+            "type": "text",
+            "name": "dossier_num",
+            "label": "dossier_num",
+            "disabled": false,
+            "required": false,
+            "nb_cols": 12
+          }
+        ]
+      },
+      {
+        "fields": [
+          {
+            "type": "text",
+            "name": "author",
+            "label": "author",
+            "disabled": false,
+            "required": false,
+            "nb_cols": 12
+          }
+        ]
+      },
+      {
+        "fields": [
+          {
+            "type": "text",
+            "name": "create_date",
+            "label": "create_date",
+            "disabled": false,
+            "required": false,
+            "nb_cols": 12
+          }
+        ]
+      },
+      {
+        "fields": [
+          {
+            "type": "text",
+            "name": "modifier",
+            "label": "modifier",
+            "disabled": false,
+            "required": false,
+            "nb_cols": 12
+          }
+        ]
+      },
+      {
+        "fields": [
+          {
+            "type": "text",
+            "name": "update_date",
+            "label": "update_date",
+            "disabled": false,
+            "required": false,
+            "nb_cols": 12
+          }
+        ]
+      }
+    ]
+  },
+  "update": {
+    "name": "custom-form",
+    "title": "veremes_soads_dossier",
+    "input_size": "xxs",
+    "nb_cols": 12,
+    "javascript": false,
+    "rows": [
+      {
+        "fields": [
+          {
+            "type": "integer",
+            "name": "dossier_id",
+            "label": "dossier_id",
+            "disabled": false,
+            "required": false,
+            "nb_cols": 12,
+            "id": "dossier_id_1_1"
+          }
+        ]
+      },
+      {
+        "fields": [
+          {
+            "type": "text",
+            "name": "dossier_num",
+            "label": "dossier_num",
+            "disabled": false,
+            "required": false,
+            "nb_cols": 12,
+            "id": "dossier_num_2_1"
+          }
+        ]
+      },
+      {
+        "fields": [
+          {
+            "type": "text",
+            "name": "author",
+            "label": "author",
+            "disabled": false,
+            "required": false,
+            "nb_cols": 12,
+            "id": "author_3_1"
+          }
+        ]
+      },
+      {
+        "fields": [
+          {
+            "type": "text",
+            "name": "create_date",
+            "label": "create_date",
+            "disabled": false,
+            "required": false,
+            "nb_cols": 12,
+            "id": "create_date_4_1"
+          }
+        ]
+      },
+      {
+        "fields": [
+          {
+            "type": "text",
+            "name": "modifier",
+            "label": "modifier",
+            "disabled": false,
+            "required": false,
+            "nb_cols": 12,
+            "id": "modifier_5_1"
+          }
+        ]
+      },
+      {
+        "fields": [
+          {
+            "type": "text",
+            "name": "update_date",
+            "label": "update_date",
+            "disabled": false,
+            "required": false,
+            "nb_cols": 12,
+            "id": "update_date_6_1"
+          }
+        ]
+      }
+    ]
+  }
+}
\ No newline at end of file
diff --git a/storage/veremes_oads_dossier/forms/published.json b/storage/veremes_oads_dossier/forms/published.json
new file mode 100755
index 00000000..7dd25b34
--- /dev/null
+++ b/storage/veremes_oads_dossier/forms/published.json
@@ -0,0 +1,175 @@
+{
+  "display": {
+    "name": "custom-form",
+    "title": "veremes_soads_dossier",
+    "input_size": "xxs",
+    "nb_cols": 12,
+    "javascript": false,
+    "rows": [
+      {
+        "fields": [
+          {
+            "type": "label",
+            "name": "dossier_num",
+            "label": "dossier_num",
+            "disabled": false,
+            "required": false,
+            "nb_cols": 12,
+            "id": "dossier_num_2_1"
+          }
+        ]
+      },
+      {
+        "fields": [
+          {
+            "type": "label",
+            "name": "author",
+            "label": "author",
+            "disabled": false,
+            "required": false,
+            "nb_cols": 12,
+            "id": "author_3_1"
+          }
+        ]
+      },
+      {
+        "fields": [
+          {
+            "type": "label",
+            "name": "create_date",
+            "label": "create_date",
+            "disabled": false,
+            "required": false,
+            "nb_cols": 12,
+            "id": "create_date_4_1"
+          }
+        ]
+      },
+      {
+        "fields": [
+          {
+            "type": "label",
+            "name": "modifier",
+            "label": "modifier",
+            "disabled": false,
+            "required": false,
+            "nb_cols": 12,
+            "id": "modifier_5_1"
+          }
+        ]
+      },
+      {
+        "fields": [
+          {
+            "type": "label",
+            "name": "update_date",
+            "label": "update_date",
+            "disabled": false,
+            "required": false,
+            "nb_cols": 12,
+            "id": "update_date_6_1"
+          }
+        ]
+      }
+    ],
+    "tabs": {
+      "position": "top",
+      "list": [
+        {
+          "label": "Tab 0",
+          "elements": [
+            "dossier_num",
+            "author",
+            "create_date",
+            "modifier",
+            "update_date"
+          ]
+        }
+      ]
+    }
+  },
+  "search": {
+    "name": "custom-form",
+    "title": "veremes_soads_dossier",
+    "input_size": "xxs",
+    "nb_cols": 12,
+    "javascript": false,
+    "rows": [],
+    "tabs": {
+      "position": "top",
+      "list": [
+        {
+          "label": "Tab 0",
+          "elements": []
+        }
+      ]
+    }
+  },
+  "insert": {
+    "name": "custom-form",
+    "title": "veremes_soads_dossier",
+    "input_size": "xxs",
+    "nb_cols": 12,
+    "javascript": false,
+    "rows": [
+      {
+        "fields": [
+          {
+            "type": "text",
+            "name": "dossier_num",
+            "label": "dossier_num",
+            "disabled": false,
+            "required": false,
+            "nb_cols": 12,
+            "id": "dossier_num_2_1"
+          }
+        ]
+      }
+    ],
+    "tabs": {
+      "position": "top",
+      "list": [
+        {
+          "label": "Tab 0",
+          "elements": [
+            "dossier_num"
+          ]
+        }
+      ]
+    }
+  },
+  "update": {
+    "name": "custom-form",
+    "title": "veremes_soads_dossier",
+    "input_size": "xxs",
+    "nb_cols": 12,
+    "javascript": false,
+    "rows": [
+      {
+        "fields": [
+          {
+            "type": "text",
+            "name": "dossier_num",
+            "label": "dossier_num",
+            "disabled": false,
+            "required": false,
+            "nb_cols": 12,
+            "id": "dossier_num_2_1"
+          }
+        ]
+      }
+    ],
+    "tabs": {
+      "position": "top",
+      "list": [
+        {
+          "label": "Tab 0",
+          "elements": [
+            "dossier_num"
+          ]
+        }
+      ]
+    }
+  },
+  "datasources": {}
+}
\ No newline at end of file
diff --git a/storage/veremes_oads_dossier/json/business_object.json b/storage/veremes_oads_dossier/json/business_object.json
new file mode 100755
index 00000000..77975551
--- /dev/null
+++ b/storage/veremes_oads_dossier/json/business_object.json
@@ -0,0 +1,20 @@
+{  
+	"business_object_id":"veremes_oads_dossier",
+	"title":"veremes_oads_dossier",
+	"id_field":"dossier_num",
+	"database":"vmap",
+	"schema":"[TABLE_SCHEMA]",
+	"table":"dossier",
+	"sql_summary":"SELECT commune as \"Commune\", code_insee as \"Code INSEE\", type_dossier as \"Type du dossier\", dossier_num as \"Numéro du dossier\", author as \"Créateur\", create_date as \"Date de création\", modifier as \"Mise à jour\", update_date as \"Date de màj\"  FROM veremes_oads.v_dossier",
+	"sql_list":"SELECT dossier_num, code_insee, commune, division, annee_dossier, type_dossier, creation_automatique,author, create_date, modifier, update_date  FROM [TABLE_SCHEMA].v_dossier",
+	"sorted_by":"dossier_num",
+	"geom_column":"geom",
+	"search_field":"dossier_num",
+	"result_field":"dossier_num",
+	"search_use_strict":"left",
+	"event_id":null,
+	"index":2,
+	"add_form_size":1,
+	"edit_form_size":1,
+	"display_form_size":1
+}
\ No newline at end of file
diff --git a/storage/veremes_oads_dossier/json/event.json b/storage/veremes_oads_dossier/json/event.json
new file mode 100755
index 00000000..9e26dfee
--- /dev/null
+++ b/storage/veremes_oads_dossier/json/event.json
@@ -0,0 +1 @@
+{}
\ No newline at end of file
diff --git a/storage/veremes_oads_dossier/json/mapserver_layers.json b/storage/veremes_oads_dossier/json/mapserver_layers.json
new file mode 100755
index 00000000..aeae16f8
--- /dev/null
+++ b/storage/veremes_oads_dossier/json/mapserver_layers.json
@@ -0,0 +1,45 @@
+[{  
+	"ms_layer_id":80,
+	"name":"Oads_dossier",
+	"title":"Oads_dossier",
+	"coordsys_id":2154,
+	"coordsys_label":"[EPSG:2154]-RGF93/Lambert-93",
+	"source_id":null,
+	"connection_id":6,
+	"tableschema":"veremes_oads",
+	"tablename":"v_dossier",
+	"tableidfield":"dossier_num",
+	"definition":"LAYER\r\n\tNAME \"{LAYER_NAME}\"\r\n\tTYPE {LAYER_TYPE}\r\n\tSTATUS DEFAULT\r\n\t{CONNECTION}\r\n\tDATA \"geom from {TABLE_SCHEMA}.{TABLE_NAME} USING SRID={SRID} USING UNIQUE {TABLE_ID}\"\r\n\tOPACITY {LAYER_OPACITY}\r\n\t{COORDSYS}\r\n\r\n\tMETADATA\r\n\t\t\"wms_title\" \t\t\t\"{LAYER_NAME}\"\r\n\t\t\"wms_srs\" \t\t\t\t\"EPSG:2154 EPSG:3857\"\r\n\t\t\"wms_name\" \t\t\t\t\"{LAYER_NAME}\"\r\n\t\t\"wms_server_version\" \t\"1.3.0\"\r\n\t\t\"wms_format\" \t\t\t\"image\/png\"\r\n\tEND\r\n\r\n\tCLASS\r\n\t\tNAME \"Dossier\"\r\n\t\tSTYLE\r\n\t\t\tCOLOR \"#FF9896\"\r\n\t\t\tOUTLINECOLOR \"#A553A5\"\r\n\t\t\tSIZE 1\r\n\t\tEND\r\n\tEND\r\nEND",
+	"active":true,
+	"opacity":70,
+	"ms_layertype_id":"POLYGON",
+	"private_connection":true,
+	"connection_label":"Connexion privée",
+	"source_label":null,
+	"definitiontmp":null,
+	"database":"vmap",
+	"wmsservices":"",
+   "wmsservices_label":""
+},{  
+	"ms_layer_id":90,
+	"name":"Oads_dossier_type",
+	"title":"Oads_dossier_type",
+	"coordsys_id":2154,
+	"coordsys_label":"[EPSG:2154]-RGF93/Lambert-93",
+	"source_id":null,
+	"connection_id":6,
+	"tableschema":"veremes_oads",
+	"tablename":"v_dossier",
+	"tableidfield":"dossier_num",
+	"definition":"LAYER\r\n\tNAME \"{LAYER_NAME}\"\r\n\tTYPE {LAYER_TYPE}\r\n\tSTATUS DEFAULT\r\n\t{CONNECTION}\r\n\tDATA \"geom from {TABLE_SCHEMA}.{TABLE_NAME} USING SRID={SRID} USING UNIQUE {TABLE_ID}\"\r\n\tOPACITY {LAYER_OPACITY}\r\n\tMAXSCALEDENOM 10000\r\n\t{COORDSYS}\r\n\tMETADATA\r\n\t\t\"wms_title\" \t\t\t\"{LAYER_NAME}\"\r\n\t\t\"wms_srs\" \t\t\t\t\"EPSG:2154\"\r\n\t\t\"wms_name\" \t\t\t\t\"{LAYER_NAME}\"\r\n\t\t\"wms_server_version\" \t\"1.3.0\"\r\n\t\t\"wms_format\" \t\t\t\"image/png\"\r\n\tEND\r\n\tFILTER ([type_dossier] = ''%type_dossier%'' or ''%type_dossier%'' = ''-1000000'')\r\n\tVALIDATION\r\n\t\t''type_dossier'' ''^[a-zA-Z0-9_|]*$''\r\n\t\t''default_type_dossier'' ''-1000000''\r\n\tEND\r\n\r\n\tCLASS\r\n\t\tNAME \"PC\"\r\n\t\tEXPRESSION (\"[type_dossier]\" = \"PC\")\r\n\t\tSTYLE\r\n\t\t\tGEOMTRANSFORM \"centroid\"\r\n\t\t\tSYMBOL 'circle'\r\n\t\t\tCOLOR \"#FFC240\"\r\n\t\t\tOUTLINECOLOR \"#FFFFFF\"\r\n\t\t\tSIZE 20\r\n\t\t\tWIDTH 1\r\n\t\tEND\r\n\tEND\r\n\tCLASS\r\n\t\tNAME \"AT\"\r\n\t\tEXPRESSION (\"[type_dossier]\" = \"AT\")\r\n\t\tSTYLE\r\n\t\t\tGEOMTRANSFORM \"centroid\"\r\n\t\t\tSYMBOL 'circle'\r\n\t\t\tCOLOR \"#4E7887\"\r\n\t\t\tOUTLINECOLOR \"#FFFFFF\"\r\n\t\t\tSIZE 20\r\n\t\t\tWIDTH 1\r\n\t\tEND\r\n\tEND\r\n\tCLASS\r\n\t\tNAME \"CU\"\r\n\t\tEXPRESSION (\"[type_dossier]\" = \"CU\")\r\n\t\tSTYLE\r\n\t\t\tGEOMTRANSFORM \"centroid\"\r\n\t\t\tSYMBOL 'circle'\r\n\t\t\tCOLOR \"#129E18\"\r\n\t\t\tOUTLINECOLOR \"#FFFFFF\"\r\n\t\t\tSIZE 20\r\n\t\t\tWIDTH 1\r\n\t\tEND\r\n\tEND\r\n\tCLASS\r\n\t\tNAME \"DIA\"\r\n\t\tEXPRESSION (\"[type_dossier]\" = \"DIA\")\r\n\t\tSTYLE\r\n\t\t\tGEOMTRANSFORM \"centroid\"\r\n\t\t\tSYMBOL 'circle'\r\n\t\t\tCOLOR \"#BDB300\"\r\n\t\t\tOUTLINECOLOR \"#FFFFFF\"\r\n\t\t\tSIZE 20\r\n\t\t\tWIDTH 1\r\n\t\tEND\r\n\tEND\r\n\tCLASS\r\n\t\tNAME \"DP\"\r\n\t\tEXPRESSION (\"[type_dossier]\" = \"DP\")\r\n\t\tSTYLE\r\n\t\t\tGEOMTRANSFORM \"centroid\"\r\n\t\t\tSYMBOL 'circle'\r\n\t\t\tCOLOR \"#2E9BE8\"\r\n\t\t\tOUTLINECOLOR \"#FFFFFF\"\r\n\t\t\tSIZE 20\r\n\t\t\tWIDTH 1\r\n\t\tEND\r\n\tEND\r\n\tCLASS\r\n\t\tNAME \"PA\"\r\n\t\tEXPRESSION (\"[type_dossier]\" = \"PA\")\r\n\t\tSTYLE\r\n\t\t\tGEOMTRANSFORM \"centroid\"\r\n\t\t\tSYMBOL 'circle'\r\n\t\t\tCOLOR \"#F200FF\"\r\n\t\t\tOUTLINECOLOR \"#FFFFFF\"\r\n\t\t\tSIZE 20\r\n\t\t\tWIDTH 1\r\n\t\tEND\r\n\tEND\r\n\tCLASS\r\n\t\tNAME \"PD\"\r\n\t\tEXPRESSION (\"[type_dossier]\" = \"PD\")\r\n\t\tSTYLE\r\n\t\t\tGEOMTRANSFORM \"centroid\"\r\n\t\t\tSYMBOL 'circle'\r\n\t\t\tCOLOR \"#FA2525\"\r\n\t\t\tOUTLINECOLOR \"#FFFFFF\"\r\n\t\t\tSIZE 20\r\n\t\t\tWIDTH 1\r\n\t\tEND\r\n\tEND\r\n\tEND",
+	"active":true,
+	"opacity":100,
+	"ms_layertype_id":"POLYGON",
+	"private_connection":true,
+	"connection_label":"Connexion privée",
+	"source_label":null,
+	"definitiontmp":null,
+	"database":"vmap",
+	"wmsservices":"",
+   "wmsservices_label":""
+}]
\ No newline at end of file
diff --git a/storage/veremes_oads_dossier/package.json b/storage/veremes_oads_dossier/package.json
new file mode 100755
index 00000000..e509782f
--- /dev/null
+++ b/storage/veremes_oads_dossier/package.json
@@ -0,0 +1,5 @@
+{
+	"author": "Laurent",
+	"mame": "veremes_oads_dossier",
+	"description": "Objet métier permettant la visualisation des dossiers OpenAds"
+}
diff --git a/storage/veremes_oads_dossier/sql/structure.json b/storage/veremes_oads_dossier/sql/structure.json
new file mode 100755
index 00000000..7dcd23b6
--- /dev/null
+++ b/storage/veremes_oads_dossier/sql/structure.json
@@ -0,0 +1,6 @@
+{
+	"schema": "veremes_oads",
+	"srid": "2154",
+	"tables": ["dossier, parcelle_dossier, parcelle_oads, v_dossier, v_parcelle_dossier"],
+	"sequences": [""]
+}
\ No newline at end of file
diff --git a/storage/veremes_oads_dossier/sql/table.sql b/storage/veremes_oads_dossier/sql/table.sql
new file mode 100755
index 00000000..463a9356
--- /dev/null
+++ b/storage/veremes_oads_dossier/sql/table.sql
@@ -0,0 +1,194 @@
+--
+-- PostgreSQL database dump
+--
+
+-- Dumped from database version 9.3.14
+-- Dumped by pg_dump version 9.5.6
+
+-- Started on 2017-06-07 09:12:15 CEST
+
+SET statement_timeout = 0;
+SET lock_timeout = 0;
+SET client_encoding = 'UTF8';
+SET standard_conforming_strings = on;
+SET check_function_bodies = false;
+SET client_min_messages = warning;
+-- SET row_security = off;
+
+SET search_path = [TABLE_SCHEMA], public, pg_catalog;
+
+--
+-- TOC entry 452 (class 1259 OID 67429)
+-- Name: seq_draw; Type: SEQUENCE; Schema: [TABLE_SCHEMA]; Owner: -
+--
+
+
+SET default_tablespace = '';
+
+SET default_with_oids = true;
+  
+select s_vitis.create_role_if_not_exists('oads_user', 'NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION'); 
+INSERT INTO s_vitis.privileges(rolname, description) VALUES ('oads_user', 'rôle utilisateur du module Open Ads de vMap"');
+
+CREATE TABLE [TABLE_SCHEMA].dossier
+(
+  dossier_num character varying(30) NOT NULL,
+  author character varying(50),
+  create_date date,
+  modifier character varying(50),
+  update_date date,
+  geom geometry(MultiPolygon,2154),
+  CONSTRAINT pk_dossier_num PRIMARY KEY (dossier_num),
+  CONSTRAINT enforce_dims_geom CHECK (st_ndims(geom) = 2),
+  CONSTRAINT enforce_srid_geom CHECK (st_srid(geom) = 2154)
+)
+WITH (
+  OIDS=FALSE
+);
+COMMENT ON COLUMN [TABLE_SCHEMA].dossier.author  IS 'Auteur de l''enregistrement';
+COMMENT ON COLUMN [TABLE_SCHEMA].dossier.create_date  IS 'Date de création de l''enregistrement';
+COMMENT ON COLUMN [TABLE_SCHEMA].dossier.modifier  IS 'Dernier modificateur de l''enregistrement';
+COMMENT ON COLUMN [TABLE_SCHEMA].dossier.update_date  IS 'Date de la dernière mise à jour de l''enregistrement';
+COMMENT ON COLUMN [TABLE_SCHEMA].dossier.geom  IS 'Emprise globale du dossier';
+
+
+CREATE TABLE [TABLE_SCHEMA].parcelle_dossier
+(
+  dossier_num character varying(30) NOT NULL,
+  id_par character(14) NOT NULL,
+  CONSTRAINT pk_dossier_num_id_par PRIMARY KEY (dossier_num, id_par)
+)
+WITH (
+  OIDS=FALSE
+);
+  
+   
+CREATE TABLE [TABLE_SCHEMA].parcelle_oads
+(
+  id_par character(14) NOT NULL,
+  geom geometry(MultiPolygon,2154),
+  CONSTRAINT pk_id_par PRIMARY KEY (id_par),
+  CONSTRAINT enforce_dims_geom CHECK (st_ndims(geom) = 2),
+  CONSTRAINT enforce_srid_geom CHECK (st_srid(geom) = 2154)
+)
+WITH (
+  OIDS=FALSE
+);
+COMMENT ON COLUMN [TABLE_SCHEMA].dossier.geom  IS 'geométrie de la parcelle ';
+
+CREATE TRIGGER insert_author_date_dossier
+  BEFORE INSERT
+  ON [TABLE_SCHEMA].dossier
+  FOR EACH ROW
+  EXECUTE PROCEDURE s_vitis.insert_author_date();
+
+CREATE TRIGGER update_modifier_date_dossier
+  BEFORE UPDATE
+  ON [TABLE_SCHEMA].dossier
+  FOR EACH ROW
+  EXECUTE PROCEDURE s_vitis.update_modifier_date();
+
+-- Index: [TABLE_SCHEMA].dossier_geom
+-- DROP INDEX [TABLE_SCHEMA].dossier_geom;
+
+CREATE INDEX dossier_geom
+  ON [TABLE_SCHEMA].dossier
+  USING gist
+  (geom);
+
+-- Index: [TABLE_SCHEMA].dossier_geom
+-- DROP INDEX [TABLE_SCHEMA].dossier_geom;
+
+CREATE INDEX parcelle_oads_geom
+  ON [TABLE_SCHEMA].parcelle_oads
+  USING gist
+  (geom);
+
+CREATE OR REPLACE VIEW [TABLE_SCHEMA].v_dossier AS   
+ SELECT dossier.dossier_num, 
+        CASE
+            WHEN length(dossier.dossier_num::text) = 15 OR length(dossier.dossier_num::text) = 17 THEN substr(dossier.dossier_num::text, 4, 5)
+            WHEN length(dossier.dossier_num::text) = 16 OR length(dossier.dossier_num::text) = 18 THEN substr(dossier.dossier_num::text, 5, 5)
+            ELSE '50'::text
+        END AS code_insee, 
+    v_vmap_commune.nom AS commune, 
+        CASE
+            WHEN length(dossier.dossier_num::text) = 15 OR length(dossier.dossier_num::text) = 17 THEN substr(dossier.dossier_num::text, 11, 1)
+            WHEN length(dossier.dossier_num::text) = 16 OR length(dossier.dossier_num::text) = 18 THEN substr(dossier.dossier_num::text, 12, 1)
+            ELSE NULL::text
+        END AS division, 
+        CASE
+            WHEN length(dossier.dossier_num::text) = 15 OR length(dossier.dossier_num::text) = 17 THEN substr(dossier.dossier_num::text, 9, 2)
+            WHEN length(dossier.dossier_num::text) = 16 OR length(dossier.dossier_num::text) = 18 THEN substr(dossier.dossier_num::text, 10, 2)
+            ELSE NULL::text
+        END AS annee_dossier, 
+        CASE
+            WHEN length(dossier.dossier_num::text) = 15 OR length(dossier.dossier_num::text) = 17 THEN substr(dossier.dossier_num::text, 1, 2)
+            WHEN length(dossier.dossier_num::text) = 16 OR length(dossier.dossier_num::text) = 18 THEN substr(dossier.dossier_num::text, 1, 3)
+            ELSE NULL::text
+        END AS type_dossier, 
+        CASE
+            WHEN dossier.author::text IS NULL THEN 'Oui'::text
+            ELSE 'Non'::text
+        END AS creation_automatique, 
+    dossier.author, dossier.create_date, dossier.modifier, dossier.update_date, 
+    dossier.geom
+   FROM [TABLE_SCHEMA].dossier
+   LEFT JOIN s_cadastre.v_vmap_commune ON 
+   CASE
+       WHEN length(dossier.dossier_num::text) = 15 OR length(dossier.dossier_num::text) = 17 THEN substr(dossier.dossier_num::text, 4, 5)
+       WHEN length(dossier.dossier_num::text) = 16 OR length(dossier.dossier_num::text) = 18 THEN substr(dossier.dossier_num::text, 5, 5)
+       ELSE NULL::text
+   END = v_vmap_commune.id_com::text
+  WHERE 
+   CASE
+       WHEN length(dossier.dossier_num::text) = 15 OR length(dossier.dossier_num::text) = 17 THEN substr(dossier.dossier_num::text, 4, 5)
+       WHEN length(dossier.dossier_num::text) = 16 OR length(dossier.dossier_num::text) = 18 THEN substr(dossier.dossier_num::text, 5, 5)
+       ELSE NULL::text
+   END ~ similar_escape(( SELECT "user".restriction
+      FROM s_vitis."user"
+     WHERE "user".login::name = "current_user"()), NULL::text)
+  ORDER BY dossier.dossier_num DESC;
+
+-- Rule: delete_v_dossier ON [TABLE_SCHEMA].v_dossier
+
+-- DROP RULE delete_v_dossier ON [TABLE_SCHEMA].v_dossier;
+
+CREATE OR REPLACE RULE delete_v_dossier AS
+    ON DELETE TO [TABLE_SCHEMA].v_dossier DO INSTEAD  DELETE FROM [TABLE_SCHEMA].dossier
+  WHERE dossier.dossier_num = old.dossier_num;
+
+-- Rule: insert_v_dossier ON [TABLE_SCHEMA].v_dossier
+
+-- DROP RULE insert_v_dossier ON [TABLE_SCHEMA].v_dossier;
+
+CREATE OR REPLACE RULE insert_v_dossier AS
+    ON INSERT TO [TABLE_SCHEMA].v_dossier DO INSTEAD  INSERT INTO [TABLE_SCHEMA].dossier ( dossier_num, author, create_date, geom)
+  VALUES (new.dossier_num, "current_user"()::text, 'now'::text::date, new.geom);
+
+-- Rule: update_v_dossier ON [TABLE_SCHEMA].v_dossier
+-- DROP RULE update_v_dossier ON [TABLE_SCHEMA].v_dossier;
+
+CREATE OR REPLACE RULE update_v_dossier AS
+    ON UPDATE TO [TABLE_SCHEMA].v_dossier DO INSTEAD  UPDATE [TABLE_SCHEMA].dossier SET geom = new.geom
+  WHERE dossier.dossier_num = new.dossier_num;
+  
+
+ALTER TABLE [TABLE_SCHEMA].dossier OWNER TO u_vitis;
+GRANT ALL ON TABLE [TABLE_SCHEMA].dossier TO u_vitis;
+GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE [TABLE_SCHEMA].dossier TO oads_user;
+
+ALTER TABLE [TABLE_SCHEMA].parcelle_dossier OWNER TO u_vitis;
+GRANT ALL ON TABLE [TABLE_SCHEMA].parcelle_dossier TO u_vitis;
+GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE [TABLE_SCHEMA].parcelle_dossier TO oads_user;
+
+ALTER TABLE [TABLE_SCHEMA].parcelle_oads OWNER TO u_vitis;
+GRANT ALL ON TABLE [TABLE_SCHEMA].parcelle_oads TO u_vitis;
+GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE [TABLE_SCHEMA].parcelle_oads TO oads_user;
+
+ALTER TABLE [TABLE_SCHEMA].v_dossier OWNER TO u_vitis;
+GRANT ALL ON TABLE [TABLE_SCHEMA].v_dossier TO u_vitis;
+GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE [TABLE_SCHEMA].v_dossier TO oads_user;
+	
+	
+	
diff --git a/storage/veremes_oads_parcelle/json/business_object.json b/storage/veremes_oads_parcelle/json/business_object.json
new file mode 100755
index 00000000..0b13c041
--- /dev/null
+++ b/storage/veremes_oads_parcelle/json/business_object.json
@@ -0,0 +1,20 @@
+{  
+	"business_object_id":"veremes_oads_parcelle",
+	"title":"veremes_oads_parcelle",
+	"id_field":"id_par",
+	"database":"vitis_angular_vmap",
+	"schema":"veremes_oads",
+	"table":"v_parcelle_dossier",
+	"sql_summary":"select id_par as \"Parcelle\", dossier as \"Dossier\", '[bo_link href=\"{{getPropertie(''serveur_oads'')}}'||lien_dossier||'\" target=\"_blank\"]Lien vers OpenAds[/bo_link]' as \"OpenAds\" from veremes_oads.v_parcelle_dossier",
+	"sql_list":"select id_par from veremes_oads.v_parcelle_dossier",
+	"sorted_by":"id_par",
+	"geom_column":"geom",
+	"search_field":"id_par",
+	"result_field":"id_par",
+	"search_use_strict":"false",
+	"event_id":"",
+	"index":1,
+	"add_form_size":1,
+	"edit_form_size":1,
+	"display_form_size":1
+}
\ No newline at end of file
diff --git a/storage/veremes_oads_parcelle/json/event.json b/storage/veremes_oads_parcelle/json/event.json
new file mode 100755
index 00000000..9e26dfee
--- /dev/null
+++ b/storage/veremes_oads_parcelle/json/event.json
@@ -0,0 +1 @@
+{}
\ No newline at end of file
diff --git a/storage/veremes_oads_parcelle/json/mapserver_layers.json b/storage/veremes_oads_parcelle/json/mapserver_layers.json
new file mode 100755
index 00000000..3fcc08f1
--- /dev/null
+++ b/storage/veremes_oads_parcelle/json/mapserver_layers.json
@@ -0,0 +1,23 @@
+[{  
+	"ms_layer_id":91,
+	"name":"Oads_parcelle",
+	"title":"Oads_parcelle",
+	"coordsys_id":2154,
+	"coordsys_label":"[EPSG:2154]-RGF93/Lambert-93",
+	"source_id":null,
+	"connection_id":6,
+	"tableschema":"veremes_oads",
+	"tablename":"parcelle_oads",
+	"tableidfield":"id_par",
+	"definition":"LAYER\r\n\tNAME \"{LAYER_NAME}\"\r\n\tTYPE {LAYER_TYPE}\r\n\tSTATUS DEFAULT\r\n\t{CONNECTION}\r\n\tDATA \"geom from {TABLE_SCHEMA}.{TABLE_NAME} USING SRID={SRID} USING UNIQUE {TABLE_ID}\"\r\n\tOPACITY {LAYER_OPACITY}\r\n\t{COORDSYS}\r\n\tMETADATA\r\n\t\t\"wms_title\" \t\t\t\"{LAYER_NAME}\"\r\n\t\t\"wms_srs\" \t\t\t\t\"EPSG:2154\"\r\n\t\t\"wms_name\" \t\t\t\t\"{LAYER_NAME}\"\r\n\t\t\"wms_server_version\" \t\"1.3.0\"\r\n\t\t\"wms_format\" \t\t\t\"image/png\"\r\n\tEND\r\n\tCLASS\r\n\t\tNAME \"Dossier\"\r\n\t\tSTYLE\r\n\t\t\tCOLOR \"#FED4FE\"\r\n\tOPACITY 50\r\n\t\tEND\r\n\t\tSTYLE\r\n\t\t\tOUTLINECOLOR \"#FFFFFF\"\r\n\t\t\tWIDTH 5\r\n\t\tEND\r\n\t\tSTYLE\r\n\t\t\tOUTLINECOLOR \"#FF0000\"\r\n\t\t\tWIDTH 4\r\n\t\t\tLINECAP butt #[butt|round|square|triangle]\r\n\t\t\tLINEJOIN miter #[round|miter|bevel]\r\n\t\t\tLINEJOINMAXSIZE 2\r\n\t\t\tPATTERN 10 10 END\r\n\t\tEND\r\n\tEND\r\nEND",
+	"active":true,
+	"opacity":100,
+	"ms_layertype_id":"POLYGON",
+	"private_connection":true,
+	"connection_label":"Connexion privée",
+	"source_label":null,
+	"definitiontmp":"",
+	"database":"vmap",
+	"wmsservices":"",
+	"wmsservices_label":""
+}]
\ No newline at end of file
diff --git a/storage/veremes_oads_parcelle/package.json b/storage/veremes_oads_parcelle/package.json
new file mode 100755
index 00000000..461fcecd
--- /dev/null
+++ b/storage/veremes_oads_parcelle/package.json
@@ -0,0 +1,5 @@
+{
+	"author": "Laurent",
+	"mame": "veremes_oads_parcelle",
+	"description": "Objet métier permettant la visualisation des parcelles d'un dossier OpenAds"
+}
diff --git a/storage/veremes_oads_parcelle/sql/structure.json b/storage/veremes_oads_parcelle/sql/structure.json
new file mode 100755
index 00000000..5eb29353
--- /dev/null
+++ b/storage/veremes_oads_parcelle/sql/structure.json
@@ -0,0 +1,6 @@
+{
+	"schema": "",
+	"srid": "",
+	"tables": [""],
+	"sequences": [""]
+}
\ No newline at end of file
diff --git a/storage/veremes_oads_parcelle/sql/table.sql b/storage/veremes_oads_parcelle/sql/table.sql
new file mode 100755
index 00000000..e69de29b
diff --git a/web_service/conf/properties_server.inc b/web_service/conf/properties_server.inc
old mode 100755
new mode 100644
index 67e38fad..5daa0556
--- a/web_service/conf/properties_server.inc
+++ b/web_service/conf/properties_server.inc
@@ -14,4 +14,5 @@ $properties['vmap_log_dir'] = "{$properties['vas_home']}/log/vmap";
 $properties['vmap_map_log_file'] = $properties['vmap_log_dir'] . '/map/' . date($properties["log_period"]) . '/map.log';
 $properties['vmap_geocoders'] = '{"osm":{"title":"OpenStreetMap","url":"https://nominatim.openstreetmap.org/search?format=json&addressdetails=1&limit=[limit]&extratags=1&namedetails=1&polygon_geojson=1&countrycodes=fr&q=[search]","data_field":"data","title_field":"display_name","geojson_field":"geojson","summary_fields":[{"key":"address.country","label":"Pays"},{"key":"address.state","label":"Région"},{"key":"address.postcode","label":"Code postal"},{"key":"extratags.population","label":"Population"}]},"national_adresse":{"title":"Base nationale","url":"https://api-adresse.data.gouv.fr/search/?q=[search]&limit=[limit]","data_field":"data.features","title_field":"properties.label","geojson_field":"geometry","summary_fields":[{"key":"properties.context","label":"Département"},{"key":"properties.city","label":"Ville"},{"key":"properties.postcode","label":"Code postal"}]}}';
 $properties['vmap_default_geocoders'] = 'osm';
+$properties['vmap_history_timer'] = 0;
 ?>
diff --git a/web_service/conf/selected_properties.inc b/web_service/conf/selected_properties.inc
old mode 100755
new mode 100644
index 1de10c2e..51094a4a
--- a/web_service/conf/selected_properties.inc
+++ b/web_service/conf/selected_properties.inc
@@ -18,7 +18,8 @@ $aAdminFields = Array(
     'vmap_geocoders',
     'vmap_default_geocoders',
     'use_proxy_for_tiles',
-    'vmap_export.*'
+    'vmap_export.*',
+    'vmap_history_timer'
 );
 $aUserFields = Array(
     'phantomjs_root_path',
@@ -36,7 +37,8 @@ $aUserFields = Array(
     'vmap_geocoders',
     'vmap_default_geocoders',
     'use_proxy_for_tiles',
-    'vmap_export.*'
+    'vmap_export.*',
+    'vmap_history_timer'
 );
 
 $properties['aAdminFields'] = array_merge($properties['aAdminFields'], $aAdminFields);
diff --git a/web_service/ws/BusinessObject.class.inc b/web_service/ws/BusinessObject.class.inc
old mode 100755
new mode 100644
diff --git a/web_service/ws/BusinessObjects.class.inc b/web_service/ws/BusinessObjects.class.inc
old mode 100644
new mode 100755
index 4ab16f4a..413f93e4
--- a/web_service/ws/BusinessObjects.class.inc
+++ b/web_service/ws/BusinessObjects.class.inc
@@ -786,15 +786,6 @@ class BusinessObjects extends Vmap {
         $bo_id_field = $oBusinessObject->aFields['id_field'];
         $geom_column = $oBusinessObject->aFields['geom_column'];
 
-        $oVitisBase = $this->oConnection->oBd;
-
-        // Connexion à la base de donées
-        if (!empty($bo_database) && $bo_database != $this->oConnection->oBd->base) {
-            $sLogin = $this->oConnection->oBd->login;
-            $sPassword = $this->oConnection->oBd->mdp;
-            $this->oConnection->oBd = new Vm($sLogin, $sPassword, $bo_database, $this->oConnection->oBd->serveur, $this->oConnection->oBd->port, $this->oConnection->oBd->sgbd, $this->oConnection->oBd->sPageEncoding);
-        }
-
         $oForm = new Form($this->aProperties, $this->oConnection);
         $aTableColumns = $oForm->getTableColumns($bo_schema, $bo_table);
 
@@ -836,8 +827,6 @@ class BusinessObjects extends Vmap {
             fclose($formFile);
         }
 
-        $this->oConnection->oBd = $oVitisBase;
-
         return $JSONcontent;
     }
 
diff --git a/web_service/ws/Layers.class.inc b/web_service/ws/Layers.class.inc
old mode 100755
new mode 100644
diff --git a/web_service/ws/Querys.class.inc b/web_service/ws/Querys.class.inc
old mode 100755
new mode 100644
diff --git a/web_service/ws/UserModules.class.inc b/web_service/ws/UserModules.class.inc
old mode 100755
new mode 100644
diff --git a/web_service/ws/UserPrintStyles.class.inc b/web_service/ws/UserPrintStyles.class.inc
old mode 100755
new mode 100644
diff --git a/web_service/ws/UserPrintTemplates.class.inc b/web_service/ws/UserPrintTemplates.class.inc
old mode 100755
new mode 100644
diff --git a/web_service/ws/VexExport.class.inc b/web_service/ws/VexExport.class.inc
old mode 100755
new mode 100644
-- 
GitLab