diff --git a/module/forms/configuration/configuration_vitis_configuration_extractionConfig.json b/module/forms/configuration/configuration_vitis_configuration_extractionConfig.json
new file mode 100644
index 0000000000000000000000000000000000000000..f25d20c9b7b577b5afc23a8b5b42b768efc9d7cd
--- /dev/null
+++ b/module/forms/configuration/configuration_vitis_configuration_extractionConfig.json
@@ -0,0 +1 @@
+{"insert":{"rows":[],"tabs":{"position":"top","list":[{"label":"Tab 0","elements":[]}]}},"search":{"rows":[]},"display":{"rows":[]},"update":{"name":"configuration_extraction_module-form","title":"","input_size":"xxs","nb_cols":7,"javascript":false,"rows":[{"fields":[{"name":"color_mutualized","type":"text","label":"CONFIGURATION_VITIS_CONFIGURATION_EXTRACTIONCONFIG_FORM_COLOR_MUTUALIZED","nb_cols":12,"id":"color_mutualized","default_value":"green"}]},{"fields":[{"name":"color_no_mutualized","type":"text","label":"CONFIGURATION_VITIS_CONFIGURATION_EXTRACTIONCONFIG_FORM_COLOR_NO_MUTUALIZED","nb_cols":12,"id":"color_no_mutualized","default_value":"red"}]},{"fields":[{"name":"sig","type":"text","label":"CONFIGURATION_VITIS_CONFIGURATION_EXTRACTIONCONFIG_FORM_SIG","nb_cols":12,"id":"sig","default_value":"*.shp|*.*"}]},{"fields":[{"name":"dao","type":"text","label":"CONFIGURATION_VITIS_CONFIGURATION_EXTRACTIONCONFIG_FORM_DAO","nb_cols":12,"id":"dao","default_value":"*.dao"}]},{"fields":[{"type":"button","name":"form_submit","class":"btn-ungroup btn-group-sm","nb_cols":12,"buttons":[{"type":"submit","name":"form_submit","label":"FORM_UPDATE","class":"btn-primary"}],"id":"form_submit_6_1"}]}],"event":"updateProperties('extraction')","afterEvent":"editSectionForm()","tabs":{"position":"top","list":[{"label":"Tab 0","elements":["color_mutualized","color_no_mutualized","sig","dao","form_submit"]}]}},"datasources":{}}
\ No newline at end of file
diff --git a/module/forms/extraction/extraction_extraction_extraction.js b/module/forms/extraction/extraction_extraction_extraction.js
index 63009cb49219f78083750e264acbee437bfece67..d83bebed77076de627a373d23da07dd8ebf5b03e 100755
--- a/module/forms/extraction/extraction_extraction_extraction.js
+++ b/module/forms/extraction/extraction_extraction_extraction.js
@@ -24,7 +24,7 @@ var constructor_form = function (scope, s_url) {
     //////////////////////////////////////////////////////////
     //Ne pas toucher
     console.log("Constructor");
-    
+
     oFormRequired.sUrl = s_url;
     oFormRequired.scope_ = scope;
     //console.log(scope);
@@ -36,8 +36,8 @@ var constructor_form = function (scope, s_url) {
     var oElemDefCt = formSrvc["getFormElementDefinition"]("id_conseil", envSrvc["sFormDefinitionName"], envSrvc["oFormDefinition"]);
     var oElemDefCom = formSrvc["getFormElementDefinition"]("id_com", envSrvc["sFormDefinitionName"], envSrvc["oFormDefinition"]);
     var oElemDefExtent = formSrvc["getFormElementDefinition"]("extent", envSrvc["sFormDefinitionName"], envSrvc["oFormDefinition"]);
-    
-    
+
+
     //Comportements différents selon le mode (insert, update, search, display) (GTF : accés uniquement au mode insert)
     //if (oFormRequired.scope_.sFormDefinitionName.indexOf("insert") > -1 || (oFormRequired.scope_.sFormDefinitionName.indexOf("update") > -1)) {
     oFormRequired.toDestructor.push(oFormRequired.scope_.$watch("oFormValues." + oFormRequired.scope_.sFormDefinitionName + ".extent_method.selectedOption", function (value) {
@@ -69,7 +69,7 @@ var constructor_form = function (scope, s_url) {
                 oElemDefCt["visible"] = false;
                 oElemDefCom["visible"] = false;
             }
-            
+
         }
     }));
     //Evènement lorsqu'on choisie un CT
@@ -90,9 +90,9 @@ var constructor_form = function (scope, s_url) {
                     "collapseIcon": "glyphicon glyphicon-folder-open",
                     "highlightSelected": false,
                     "multiSelect": true});
-                scope.$applyAsync();   
+                scope.$applyAsync();
             });
-            
+
             getStatsTree(oFormRequired.scope_.oFormValues[oFormRequired.scope_.sFormDefinitionName]).then( function(aNodes){
                 var oTreeview = $("#statistique_9_1_treeview")["treeview"](true);
                 $("statistique_9_1_treeview")["treeview"](true);
@@ -107,10 +107,10 @@ var constructor_form = function (scope, s_url) {
                     "collapseIcon": "glyphicon glyphicon-folder-open",
                     "highlightSelected": false,
                     "multiSelect": true});
-                scope.$applyAsync();   
+                scope.$applyAsync();
             });
         }
-        
+
     }));
     //Evènement lorsqu'on choisie une commune
     oFormRequired.toDestructor.push(oFormRequired.scope_.$watch("oFormValues." + oFormRequired.scope_.sFormDefinitionName + ".id_com.selectedOption", function (value) {
@@ -131,9 +131,9 @@ var constructor_form = function (scope, s_url) {
                     "highlightSelected": false,
                     "multiSelect": true});
                 scope.$applyAsync();
-                
+
             });
-            
+
             getStatsTree(oFormRequired.scope_.oFormValues[oFormRequired.scope_.sFormDefinitionName]).then( function(aNodes){
                 var oTreeview = $("#statistique_9_1_treeview")["treeview"](true);
                 $("statistique_9_1_treeview")["treeview"](true);
@@ -148,7 +148,7 @@ var constructor_form = function (scope, s_url) {
                     "collapseIcon": "glyphicon glyphicon-folder-open",
                     "highlightSelected": false,
                     "multiSelect": true});
-                scope.$applyAsync();   
+                scope.$applyAsync();
             });
         }
     }));
@@ -174,9 +174,9 @@ var constructor_form = function (scope, s_url) {
                     "highlightSelected": false,
                     "multiSelect": true});
                 scope.$applyAsync();
-                
+
             });
-            
+
             getStatsTree(oFormRequired.scope_.oFormValues[oFormRequired.scope_.sFormDefinitionName]).then( function(aNodes){
                 var oTreeview = $("#statistique_9_1_treeview")["treeview"](true);
                 $("statistique_9_1_treeview")["treeview"](true);
@@ -191,10 +191,10 @@ var constructor_form = function (scope, s_url) {
                     "collapseIcon": "glyphicon glyphicon-folder-open",
                     "highlightSelected": false,
                     "multiSelect": true});
-                scope.$applyAsync();   
+                scope.$applyAsync();
             });
-            
-            
+
+
         }
     }));
 };
@@ -210,8 +210,8 @@ function getLayerTree(oFormValues) {
     var $q = angular.element(vitisApp.appHtmlFormDrtv).injector().get(["$q"]);
     //
     $log.info("getLayerTree");
-    // Charge la liste des couches.    
-    
+    // Charge la liste des couches.
+
     var deferred = $q.defer();
     var promise = deferred.promise;
     if (oFormValues.extent_method.selectedOption["value"] != "") {
@@ -228,7 +228,7 @@ function getLayerTree(oFormValues) {
                     var aLayers = response["data"]["layers"];
                     var aNodes = [];
                     var stats = true;
-                    
+
                     if (typeof(aLayers) != "undefined") {
                         var aCategories = Object.keys(aLayers);
                         for (var i in aCategories) {
@@ -247,7 +247,7 @@ function getLayerTree(oFormValues) {
                             stats = true;
                         }
                     }
-                    
+
                     this["setTreeviewNodesState"] = function (aNodes) {
                         for (var i in aNodes) {
                             if (typeof (aNodes[i]["nodes"]) != "undefined")
@@ -307,8 +307,8 @@ function getStatsTree(oFormValues) {
     var $q = angular.element(vitisApp.appHtmlFormDrtv).injector().get(["$q"]);
     //
     $log.info("getLayerTree");
-    // Charge la liste des couches.    
-    
+    // Charge la liste des couches.
+
     var deferred = $q.defer();
     var promise = deferred.promise;
     if (oFormValues.extent_method.selectedOption["value"] != "") {
@@ -325,7 +325,7 @@ function getStatsTree(oFormValues) {
                     var aLayers = response["data"]["layers"];
                     var aNodes = [];
                     var stats = false;
-                    
+
                     if (typeof(aLayers) != "undefined") {
                         var aCategories = Object.keys(aLayers);
                         for (var i in aCategories) {
@@ -344,7 +344,7 @@ function getStatsTree(oFormValues) {
                             stats = false;
                         }
                     }
-                    
+
                     this["setTreeviewNodesState"] = function (aNodes) {
                         for (var i in aNodes) {
                             if (typeof (aNodes[i]["nodes"]) != "undefined")
@@ -403,7 +403,7 @@ function getUrlParams() {
     var sColumn = "";
     var aValue = [];
     var aValeur = [];
-    
+
     if (oFormValues.extent_method.selectedOption["value"] == "id_conseil")
     {
         sTable = "ct";
@@ -418,7 +418,7 @@ function getUrlParams() {
         sCompare_operator = "IN";
         aValue = oFormValues.id_com.selectedOption;
     }
-    
+
     if (oFormValues.extent_method.selectedOption["value"] == "extent")
     {
         sTable = "ct";
@@ -431,8 +431,8 @@ function getUrlParams() {
     {
         if(aValue)
         {
-            for (var i = 0; i < aValue.length; i++) 
-            {     
+            for (var i = 0; i < aValue.length; i++)
+            {
                 //Si c'est une sélection vide
                 if(aValue[i]["value"] == "")
                 {
@@ -458,7 +458,7 @@ function getUrlParams() {
             aValeur[0] = "-1";
         }
     }
-    
+
     var oUrlParams = {
         "schema": propertiesSrvc["schema_extraction"],
         "table": sTable,
@@ -479,22 +479,22 @@ function getUrlParams() {
  */
 var destructor_form = function () {
     console.log("Destructor");
-    
+
     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;
 };
 
-/**********************************************************************************/
\ No newline at end of file
+/**********************************************************************************/
diff --git a/module/forms/extraction_depot/extraction_depot_extraction_extraction_depot.js b/module/forms/extraction_depot/extraction_depot_extraction_extraction_depot.js
index 4c00e00a7614a9773a887984e2d98b8b6723bf5e..4b6c36e388f708f89ea5ec7df7eb9addd21813f7 100755
--- a/module/forms/extraction_depot/extraction_depot_extraction_extraction_depot.js
+++ b/module/forms/extraction_depot/extraction_depot_extraction_extraction_depot.js
@@ -24,7 +24,7 @@ var constructor_form = function (scope, s_url) {
     //////////////////////////////////////////////////////////
     //Ne pas toucher
     console.log("Constructor");
-    
+
     oFormRequired.sUrl = s_url;
     oFormRequired.scope_ = scope;
     //console.log(scope);
@@ -33,11 +33,11 @@ var constructor_form = function (scope, s_url) {
     var envSrvc = angular.element(vitisApp.appWorkspaceListDrtv).injector().get(["envSrvc"]);
     var formSrvc = angular.element(vitisApp.appMainDrtv).injector().get(["formSrvc"]);
     var propertiesSrvc = angular.element(vitisApp.appMainDrtv).injector().get(["propertiesSrvc"]);
-    
+
     /*oFormRequired.toDestructor.push(oFormRequired.scope_.$watch("oFormValues." + oFormRequired.scope_.sFormDefinitionName + ".btn_refresh_treeview", function (value) {
         console.log("DJFHVHJCHSJCJH");
     }*/
-    
+
     /**
      * loadTreeview function.
      * Crée le treeview des fichiers du projet fme.
@@ -46,7 +46,7 @@ var constructor_form = function (scope, s_url) {
         var $log = angular.element(vitisApp.appMainDrtv).injector().get(["$log"]);
         //
         $log.info("loadTreeviewDepot");
-        
+
         // Charge l'arborescence des logs.
         ajaxRequest({
             "method": "GET",
@@ -59,7 +59,7 @@ var constructor_form = function (scope, s_url) {
                     scope["aSelectedWorkspaceFile"] = [];
                     scope["aTreeviewLogs"] = data;
                     // Crée l'arborescence dans l'élément.
-                    
+
                     for (var i in response["data"]["content"]) {
                         var aNode = {"text": response["data"]["content"][i]["filename"].split("/").pop(), "nodes": []}
                         for (var j in response["data"]["content"][i]["content"]) {
@@ -67,7 +67,7 @@ var constructor_form = function (scope, s_url) {
                         }
                         aNodes.push(aNode);
                     }
-                    
+
                     $("#Element_0_2_1_treeview")["treeview"]({
                         "showBorder": false,
                         "expandIcon": "glyphicon glyphicon-folder-close",
@@ -81,16 +81,16 @@ var constructor_form = function (scope, s_url) {
             }
         });
     };
-    
+
     scope["deleteFileDepot"] = function () {
         var $log = angular.element(vitisApp.appMainDrtv).injector().get(["$log"]);
         //
         $log.info("deleteFileDepot");
-        
+
         var aSelectedNode = $("#Element_0_2_1_treeview")["treeview"]('getSelected')
-        
+
         if (aSelectedNode.length > 0)
-        {       
+        {
             var aNodeParent = $("#Element_0_2_1_treeview")["treeview"]('getNode', aSelectedNode[0]["parentId"]);
             ajaxRequest({
                 "method": "DELETES",
@@ -117,15 +117,15 @@ var constructor_form = function (scope, s_url) {
             scope.$root["modalWindow"]("dialog", "EXTRACTION_DEPORT_DELETE_NO_SELECTED", oOptions);
             //$('#myModal').modal('hide');
         }
-        
+
     }
     scope["loadTreeviewDepot"]();
-    
+
     scope["downloadFileDepot"] = function () {
         var $log = angular.element(vitisApp.appMainDrtv).injector().get(["$log"]);
         //
         $log.info("downloadFileDepot");
-        
+
         var aSelectedNode = $("#Element_0_2_1_treeview")["treeview"]('getSelected');
         var sFileName = aSelectedNode[0]["text"];
         var aNodeParent = $("#Element_0_2_1_treeview")["treeview"]('getNode', aSelectedNode[0]["parentId"]);
@@ -163,7 +163,7 @@ var constructor_form = function (scope, s_url) {
         }
     }
     //var iMaxUploadFileSize = parseInt(propertiesSrvc["max_upload_file_size"]);
-    
+
     /**
      * beforeProjectDirectory function.
      * Traitement avant l'envoi du formulaire de la section "Répertoire Projet" (publication > Projet FME).
@@ -206,7 +206,7 @@ var constructor_form = function (scope, s_url) {
         //
         return promise;
     };
-    
+
     /**
      * afterProjectDirectory function.
      * Actions à effectuer après l'upload d'un fichier dans le répertoire d'un projet fme.
@@ -233,22 +233,22 @@ var constructor_form = function (scope, s_url) {
  */
 var destructor_form = function () {
     console.log("Destructor");
-    
+
     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;
 };
 
-/**********************************************************************************/
\ No newline at end of file
+/**********************************************************************************/
diff --git a/module/javascript/script_module.js b/module/javascript/script_module.js
index a654272f62d1fee6fbf8fd5b4f47e43f6e660011..512ddc9aa81c30066e88837b1822c7ce22144fe1 100755
--- a/module/javascript/script_module.js
+++ b/module/javascript/script_module.js
@@ -24,7 +24,28 @@ vitisApp.on('appMainDrtvLoaded', function () {
                 formScope["sendForm"]();
         }
     };
-    
+
+    /**
+     * loadExtractionConfig function.
+     * Chargement de la section "Configuration EXTRACTION" dans l''''onglet "Configuration".
+     * @expose
+     */
+    angular.element(vitisApp.appMainDrtv).scope()["loadExtractionConfig"] = function () {
+        // Injection des services.
+        var $log = angular.element(vitisApp.appMainDrtv).injector().get(["$log"]);
+        var envSrvc = angular.element(vitisApp.appWorkspaceListDrtv).injector().get(["envSrvc"]);
+        //
+        $log.info("loadExtractionConfig");
+        // Paramètres des properties dans les valeurs du formulaire de config de Extraction.
+        angular.element(vitisApp.appMainDrtv).scope()["setPropertiesFormValues"]();
+        // Surcharge l''''url du formulaire des properties de Extraction.
+        var scope = this;
+        var sTable = envSrvc["oSelectedObject"]["name"];
+        scope["oFormRequestParams"] = {
+            "sUrl": "modules/extraction/forms/" + envSrvc["oSelectedMode"]["mode_id"] + "/" + sTable + "_" + envSrvc["oSectionForm"][sTable]["sections"][envSrvc["oSectionForm"][sTable]["iSelectedSectionIndex"]]["name"] + ".json"
+        };
+    };
+
     /**
      * initExtractionExtractionForm function.
      * Traitements avant l'affichage du formulaire de l'onglet "Extraction".
@@ -74,7 +95,7 @@ vitisApp.on('appMainDrtvLoaded', function () {
             }
         });
     };
-    
+
     /**
      * getExtractionLayersTree function.
      * Retourne l'arborescence pour le champ treeview "layers".
@@ -118,7 +139,7 @@ vitisApp.on('appMainDrtvLoaded', function () {
                             stats = true;
                         }
                     }
-                    
+
                     this["setTreeviewNodesState"] = function (aNodes) {
                         for (var i in aNodes) {
                             if (typeof (aNodes[i]["nodes"]) != "undefined")
@@ -137,7 +158,7 @@ vitisApp.on('appMainDrtvLoaded', function () {
                         }
                     }
                     this["setTreeviewNodesState"](aNodes);
-                    
+
                     deferred.resolve(aNodes);
                 } else {
                     //
@@ -153,8 +174,8 @@ vitisApp.on('appMainDrtvLoaded', function () {
         });
         return promise;
     };
-    
-    
+
+
     /**
      * getExtractionLayersTree function.
      * Retourne l'arborescence pour le champ treeview "layers".
@@ -198,7 +219,7 @@ vitisApp.on('appMainDrtvLoaded', function () {
                             stats = false;
                         }
                     }
-                    
+
                     this["setTreeviewNodesState"] = function (aNodes) {
                         for (var i in aNodes) {
                             if (typeof (aNodes[i]["nodes"]) != "undefined")
@@ -217,7 +238,7 @@ vitisApp.on('appMainDrtvLoaded', function () {
                         }
                     }
                     this["setTreeviewNodesState"](aNodes);
-                    
+
                     deferred.resolve(aNodes);
                 } else {
                     //
@@ -233,7 +254,7 @@ vitisApp.on('appMainDrtvLoaded', function () {
         });
         return promise;
     };
-    
+
     /**
      * appExtractionLayersColumn directive.
      * Mise en forme de la colonne "layers" dans la liste de l'onglet "Extraction".
@@ -284,7 +305,7 @@ vitisApp.on('appMainDrtvLoaded', function () {
         }
     };
     vitisApp["compileProvider"].directive('appExtractionLayersColumn', vitisApp.appExtractionLayersColumnDrtv);
-    
+
     /**
      * appExtractionRefUnusedAttributesColumn directive.
      * Mise en forme de la colonne "unused_attributes" dans la liste de l'onglet "Extraction".
@@ -335,10 +356,10 @@ vitisApp.on('appMainDrtvLoaded', function () {
         }
     };
     vitisApp["compileProvider"].directive('appExtractionRefUnusedAttributesColumn', vitisApp.appExtractionRefUnusedAttributesColumnDrtv);
-    
+
     angular.element(vitisApp.appMainDrtv).scope()["showModalSignUp"] = function () {
         $("#modal_sign_up").modal('open');
-        
+
         var oFormValues = {};
         oFormValues["search"] = {};
         ajaxRequest({
@@ -346,7 +367,7 @@ vitisApp.on('appMainDrtvLoaded', function () {
             'url': propertiesSrvc["web_server_name"] + '/' + propertiesSrvc["application"] + "/modules/extraction/forms/sign_up.json",
             'success': function (response) {
                 hideAjaxLoader();
-                
+
                 var oFormReaderScope = angular.element($("#modal_sign_up_form_container").children()).scope();
                 oFormReaderScope.$evalAsync(function () {
                     oFormReaderScope['ctrl']['setDefinitionName']("search");
@@ -354,11 +375,11 @@ vitisApp.on('appMainDrtvLoaded', function () {
                     oFormReaderScope['ctrl']['setFormDefinition'](response["data"]);
                     oFormReaderScope['ctrl']['loadForm']();
                 });
-                
+
                 $this.$timeout_(function () {
                     //Materialize.updateTextFields();
                     $(".checkbox").removeClass("checkbox checkbox-margin");
-                    
+
                     //$this.cssSelectFormDefinitionListener(oFormReaderScope);
                 }, 100);
             },
@@ -388,4 +409,4 @@ vitisApp.on('appInitCtrlLoaded', function () {
         $translatePartialLoader["addPart"]("modules/extraction/lang");
         $translate["refresh"]();
     });
-});
\ No newline at end of file
+});
diff --git a/module/lang/lang-fr.json b/module/lang/lang-fr.json
index d5a02d2b416ca966cd0e818b7863b9b62059f4df..792ea68fc746e0212183148b9bce44d9e3013326 100755
--- a/module/lang/lang-fr.json
+++ b/module/lang/lang-fr.json
@@ -64,8 +64,8 @@
 		"EXTRACTION_REF_EXTRACTION_LAYER_LAYERS_TOOLTIP_TITLE" : "Couches",
 		"EXTRACTION_REF_EXTRACTION_LAYER_UNUSED_ATTRIBUTES_TOOLTIP_TITLE" : "Attributs inutilisés",
 		"CONFIGURATION_VITIS_CONFIGURATION_EXTRACTIONCONFIG_FORM_SCHEMA_EXTRACTION" : "",
-		"CONFIGURATION_VITIS_CONFIGURATION_EXTRACTIONCONFIG_FORM_COLOR_MUTUALIZED" : "",
-		"CONFIGURATION_VITIS_CONFIGURATION_EXTRACTIONCONFIG_FORM_COLOR_NO_MUTUALIZED" : "",
+		"CONFIGURATION_VITIS_CONFIGURATION_EXTRACTIONCONFIG_FORM_COLOR_MUTUALIZED" : "Couleur des couches mutualisées",
+		"CONFIGURATION_VITIS_CONFIGURATION_EXTRACTIONCONFIG_FORM_COLOR_NO_MUTUALIZED" : "Couleur des couches non mutualisées",
 		"TEXT_MODE_EXTRACTION_FORM" : "",
 		"TITLE_MODE_EXTRACTION_FORM" : "extraction_form",
 		"SIGN_UP_END_DATE" : "Date de fin de contrat",
@@ -115,5 +115,9 @@
 		"EXTRACTION_DEPOT_FILE_UPDATE": "Mettre à jour",
 		"ERROR_FILE_SIZE_EXTRACTION_LOAD_DEPOSIT_DIRECTORY" : "La taille du fichier est supérieure à la taille maximale autorisée.",
 		"EXTRACTION_EXTRACTION_EXTRACTION_FORM_DEPOSIT" : "Déposer",
-		"EXTRACTION_EXTRACTION_EXTRACTION_FORM_INPUT_DEPOSIT" : "Fichier à déposer"
-}
\ No newline at end of file
+		"EXTRACTION_EXTRACTION_EXTRACTION_FORM_INPUT_DEPOSIT" : "Fichier à déposer",
+		"EXTRACTION_EXTRACTION_EXTRACTION_FORM_FORMAT_EXTENSION" : "Format du fichier",
+		"EXTRACTION_EXTRACTION_EXTRACTION_FORM_SCHEMA_CONSTRAINT" : "Schéma des contraintes",
+		"CONFIGURATION_VITIS_CONFIGURATION_EXTRACTIONCONFIG_FORM_SIG" : "Extensions SIG (séparées par |)",
+		"CONFIGURATION_VITIS_CONFIGURATION_EXTRACTIONCONFIG_FORM_DAO" : "Extensions DAO (séparées par |)"
+}
diff --git a/storage/Accounts.class.mail.inc b/storage/Accounts.class.mail.inc
new file mode 100644
index 0000000000000000000000000000000000000000..bb977fddef9f8177b50895b88e5973253b4ce0b0
--- /dev/null
+++ b/storage/Accounts.class.mail.inc
@@ -0,0 +1,622 @@
+<?php
+
+$aMail["newUserTitle"] = "Un nouvel utilisateur vient juste de s'inscrire";
+$aMail["newUserTitleAutomated"] = "Vérification de votre adresse mail";
+$aMail["newUserBody"] = '<!-- 1 Column Text + Button : BEGIN -->
+    <tr>
+        <td bgcolor="#ffffff" style="padding: 0px; text-align: center;background-color:#8c8c8c; height:50px; margin-bottom:10px;">
+            <h1 style="margin: 0; font-family: sans-serif; font-size: 24px; line-height: 27px; color: #FFFFFF; font-weight: normal;">[TITLE]</h1>
+        </td>
+    </tr>
+    <tr>
+        <td bgcolor="#ffffff" style="padding: 10px 20px; font-family: sans-serif; font-size: 15px; line-height: 20px; color: #000000; text-align: center;">
+            <p style="width:100%; font-weight:bold; text-align: justify; font-size: 20px;">Bonjour [FULLNAME],</p>
+            <p style="width:100%; text-align: left;font-size: 18px;">Nous vous remercions d\'avoir créé votre compte sur <b>[HOSTNAME]</b>.</p>
+            <p style="width:100%; text-align: left;font-size: 18px;"><b>Informations sur votre compte :</b></p>
+            <p style="width:100%; text-align: left;font-size: 18px;">Identifiant : [USERNAME]</p>
+            <p style="width:100%; text-align: left;font-size: 18px;">Organisme : [COMPANY] </p>
+            <p style="width:100%; text-align: left;font-size: 18px;">Mail : [MAIL]</p>
+            <p style="width:100%; text-align: left;font-size: 18px;">Téléphone : [PHONE] </p>
+            <p style="width:100%; text-align: left;font-size: 18px;">Ip publique fixe : [PUBLIC_IP] </p>
+            <p style="width:100%; text-align: left;font-size: 18px;">Nom du demandeur : [DEMANDEUR] </p>
+            <p style="width:100%; text-align: left;font-size: 18px;">Adresse mail du demandeur : [MAIL_DEMANDEUR] </p>
+            <p style="width:100%; text-align: left;font-size: 18px;">Objet de l\'étude : [STUDY_OBJECT] </p>
+            <p style="width:100%; text-align: left;font-size: 18px;margin-top: 20px;">Cliquez sur le bouton ci-dessous pour finaliser votre inscription :</p>
+        </td>
+    </tr>
+    <tr>
+        <td bgcolor="#ffffff" style="padding: 10px 20px; font-family: sans-serif; font-size: 20px; line-height: 20px; color: #555555;">
+            <table role="presentation" aria-hidden="true" cellspacing="0" cellpadding="0" border="0" align="center" style="margin: auto">
+                <tr>
+                    <td style="border-radius: 3px; background: #5cb85c; text-align: center;" class="button-td">
+                        <a href="[URL]" style="background: #5cb85c; border: 15px solid #5cb85c; font-family: sans-serif; font-size: 18px; line-height: 1.1; text-align: center; text-decoration: none; display: block; border-radius: 0px; font-weight: bold;" class="button-a">
+                            &nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#ffffff;">Je confirme mon adresse mail</span>&nbsp;&nbsp;&nbsp;&nbsp;
+                        </a>
+                    </td>
+                </tr>
+            </table>
+            <!-- Button : END -->
+        </td>
+    </tr>
+    <tr>
+        <td bgcolor="#ffffff" style="padding: 10px 20px; font-family: sans-serif; line-height: 20px; color: #000000; text-align: center;">
+            <p style="width:100%; text-align: justify;font-size: 18px;">Si vous ne vous êtes pas inscrit(e) sur notre application <b>[HOSTNAME]</b>, ignorez simplement ce message.</p>
+        </td>
+    </tr>
+    <!-- 1 Column Text + Button : END -->';
+
+$aMail["confirmationSignUpTitle"] = "Confirmation d'inscription";
+$aMail["genericBody"] = '
+            <tr>
+                <td bgcolor="#ffffff" style="padding: 40px 40px 20px; text-align: center;">
+                    <h1 style="margin: 0; font-family: sans-serif; font-size: 24px; line-height: 27px; color: #333333; font-weight: normal;">[MESSAGE]</h1>
+                </td>
+            </tr>';
+
+$aMail["SignUpOk"] = '<tr>
+                <td bgcolor="#ffffff" style="padding: 40px 40px 20px; text-align: center;">
+                    <h1 style="margin: 0; font-family: sans-serif; font-size: 24px; line-height: 27px; color: #333333; font-weight: normal;">L\'utilisateur a été ajouté, connectez vous sur la base de données pour lui donner des droits (Defaut: [ROLES])</h1>
+                </td>
+            </tr>';
+$aMail["SignUpError"] = '<tr>
+                <td bgcolor="#ffffff" style="padding: 40px 40px 20px; text-align: center;">
+                    <h1 style="margin: 0; font-family: sans-serif; font-size: 24px; line-height: 27px; color: #333333; font-weight: normal;">L\'utilisateur n\'a pas pu être ajouté consultez les fichiers de log pour plus d\'informations</h1>
+                </td>
+            </tr>';
+
+$aMail["signUpConfirmation"] = '<tr>
+                <td bgcolor="#ffffff" style="padding: 40px 40px 20px; text-align: center;">
+                    <h1 style="margin: 0; font-family: sans-serif; font-size: 24px; line-height: 27px; color: #333333; font-weight: normal; margin-bottom: 15px;">Votre compte est maintenant activé, vous pouvez vous connecter. Pour avoir accès à plus de fonctionnalités contactez l\'administrateur</h1>
+                    <a style="margin: 0; font-family: sans-serif; font-size: 22px; font-weight: normal;" href="[REDIRECTION]"> Retourner vers l\'application </a>
+                </td>
+            </tr>';
+$aMail["fpwdTitle"] = "Changez votre mot de passe";
+$aMail["fpwdUpdateOk"] = '<tr>
+                <td bgcolor="#ffffff" style="padding: 40px 40px 20px; text-align: center;">
+                    <h1 style="margin: 0; font-family: sans-serif; font-size: 24px; line-height: 27px; color: #333333; font-weight: normal;">Le mot de passe a été mis à jour</h1>
+                </td>
+            </tr>';
+$aMail["fpwdUpdateError"] = '<tr>
+                <td bgcolor="#ffffff" style="padding: 40px 40px 20px; text-align: center;">
+                    <h1 style="margin: 0; font-family: sans-serif; font-size: 24px; line-height: 27px; color: #333333; font-weight: normal;">Le mot de passe n\'a pas pu être mis à jour</h1>
+                </td>
+            </tr>';
+$aMail["alreadyUpdate"] = '<tr>
+                <td bgcolor="#ffffff" style="padding: 40px 40px 20px; text-align: center;">
+                    <h1 style="margin: 0; font-family: sans-serif; font-size: 24px; line-height: 27px; color: #333333; font-weight: normal;">Le mot de passe à déjà été changé</h1>
+                </td>
+            </tr>';
+
+$aMail["fpwdBody"] = '<!-- 1 Column Text + Button : BEGIN -->
+            <tr>
+                <td bgcolor="#ffffff" style="padding: 0px; text-align: center;background-color:#8c8c8c; height:50px; margin-bottom:10px;">
+                    <h1 style="margin: 0; font-family: sans-serif; font-size: 24px; line-height: 27px; color: #FFFFFF; font-weight: normal;">Changez votre mot de passe</h1>
+                </td>
+            </tr>
+            <tr>
+                <td bgcolor="#ffffff" style="padding: 10px 20px; font-family: sans-serif; font-size: 15px; line-height: 20px; color: #000000; text-align: center;">
+                    <p style="width:100%; font-weight:bold; text-align: left; font-size: 20px;">Bonjour [LOGIN],</p>
+                    <p style="width:100%; text-align: left;font-size: 18px;">Une tentative de récupération de votre compte à été effectué sur le site <b>[HOSTNAME]</b>.</p>
+                    <p style="width:100%; text-align: left;font-size: 18px;margin-top: 10px;">Cliquez sur le bouton ci-dessous pour changer votre mot de passe :</p>
+                </td>
+            </tr>
+            <tr>
+                <td bgcolor="#ffffff" style="padding: 10px 20px; font-family: sans-serif; font-size: 15px; line-height: 20px; color: #555555;">
+                    <table role="presentation" aria-hidden="true" cellspacing="0" cellpadding="0" border="0" align="center" style="margin: auto">
+                        <tr>
+                            <td style="border-radius: 3px; background: #5cb85c; text-align: center;" class="button-td">
+                                <a href="[URL]" style="background: #5cb85c; border: 15px solid #5cb85c; font-family: sans-serif; font-size: 18px; line-height: 1.1; text-align: center; text-decoration: none; display: block; border-radius: 0px; font-weight: bold;" class="button-a">
+                                    &nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#ffffff;">Changer mon mot de passe</span>&nbsp;&nbsp;&nbsp;&nbsp;
+                                </a>
+                            </td>
+                        </tr>
+                    </table>
+                    <!-- Button : END -->
+                </td>
+            </tr>
+            <tr>
+                <td bgcolor="#ffffff" style="padding: 10px 20px; font-family: sans-serif; line-height: 20px; color: #000000; text-align: center;">
+                    <p style="width:100%; text-align: justify;font-size: 18px;">Si vous n\'avez pas perdu votre mot de passe pour vous connecter à notre application <b>[HOSTNAME]</b>, ignorez simplement ce message.</p>
+                </td>
+            </tr>
+            <!-- 1 Column Text + Button : END -->';
+
+$aMail["fpwdForm"] = '<!-- 1 Column Text + Button : BEGIN -->
+            <tr>
+                <td bgcolor="#ffffff" style="padding: 0px; text-align: center;background-color:#8c8c8c; height:50px; margin-bottom:10px;">
+                    <h1 style="margin: 0; font-family: sans-serif; font-size: 24px; line-height: 27px; color: #FFFFFF; font-weight: normal;">Saisissez votre nouveau mot de passe</h1>
+                </td>
+            </tr>
+            <tr>
+                <td bgcolor="#ffffff" style="padding: 20px 40px 40px; font-family: sans-serif; font-size: 15px; line-height: 20px; color: #555555; text-align: center;">
+                    <form style="text-align:-webkit-right;">
+                        <div style="text-align:left;">
+                            <label for="password" style="font-weight: bold;">Nouveau mot de passe</label>
+                            <input type="password" id="password" name="password" class="input-text-control" required/>
+                        </div>
+                        <div style="text-align:left;margin-top:10px;">
+                            <label for="password_confirm" style="font-weight: bold;">Confirmer votre nouveau mot de passe</label>
+                            <input type="password" id="password_confirm" name="password_confirm" class="input-text-control" required/>
+                        </div>
+                        <div style="margin-top:20px;">
+                            <input type="hidden" name="token" value="[TOKEN]"/>
+                            <input type="hidden" name="output" value="text/html"/>
+                            <button style="background: #5cb85c; border: 15px solid #5cb85c; font-family: sans-serif; font-size: 15px; line-height: 1.1; text-align: center; text-decoration: none; display: block; border-radius: 0px; font-weight: bold;" class="button-a" type="button" onclick="sendRequest(\'[URL]\')"><span style="color:#ffffff;">Envoi</span></button>
+                        </div>
+                    </form>
+                </td>
+            </tr>';
+
+$aMail["passwordScript"] = '<script>
+    var password = document.getElementById("password"), confirm_password = document.getElementById("password_confirm");
+
+        function validatePassword(){
+          if(password.value != confirm_password.value) {
+            confirm_password.setCustomValidity("Les deux mots de passe doivent être identique");
+          } else {
+            confirm_password.setCustomValidity(\'\');
+          }
+        }
+
+        password.onchange = validatePassword;
+        confirm_password.onkeyup = validatePassword;
+
+        function sendRequest (sUrl){
+            if(typeof(password.value)!== "undefined"){
+                if(password.value != ""){
+                    var xhr = new XMLHttpRequest();
+                    xhr.open("PUT", sUrl);
+                    sParams = JSON.stringify({"password": password.value});
+                    xhr.onreadystatechange = function (aEvt) {
+                        if (xhr.readyState == 4) {
+                            if (xhr.status == 200) {
+                                    var oJson = JSON.parse(xhr.responseText);
+                                    window.location.replace(oJson.sUrl);
+                            } else {
+                                    //xhr.responseText;
+                            }
+                        }
+                    }
+                    xhr.send(sParams);
+                }else{console.log("saisissez un mot de passe2")}
+            }else{console.log("saisissez un mot de passe")}
+        }
+    </script>';
+
+$aMail["mainBody"] = '<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8"> <!-- utf-8 works for most cases -->
+    <meta name="viewport" content="width=device-width"> <!-- Forcing initial-scale shouldn\'t be necessary -->
+    <meta http-equiv="X-UA-Compatible" content="IE=edge"> <!-- Use the latest (edge) version of IE rendering engine -->
+    <meta name="x-apple-disable-message-reformatting">  <!-- Disable auto-scale in iOS 10 Mail entirely -->
+    <title>VAM</title> <!-- The title tag shows in email notifications, like Android 4.4. -->
+    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
+    <!-- Web Font / @font-face : BEGIN -->
+    <!-- NOTE: If web fonts are not required, lines 10 - 27 can be safely removed. -->
+
+    <!-- Desktop Outlook chokes on web font references and defaults to Times New Roman, so we force a safe fallback font. -->
+    <!--[if mso]>
+        <style>
+            * {
+                font-family: sans-serif !important;
+            }
+        </style>
+    <![endif]-->
+
+    <!-- All other clients get the webfont reference; some will render the font and others will silently fail to the fallbacks. More on that here: http://stylecampaign.com/blog/2015/02/webfont-support-in-email/ -->
+    <!--[if !mso]><!-->
+  <!-- insert web font reference, eg: <link href="https://fonts.googleapis.com/css?family=Roboto:400,700" rel="stylesheet" type="text/css"> -->
+  <!--<![endif]-->
+
+  <!-- Web Font / @font-face : END -->
+
+  <!-- CSS Reset -->
+  <style>
+
+  /* What it does: Remove spaces around the email design added by some email clients. */
+  /* Beware: It can remove the padding / margin and add a background color to the compose a reply window. */
+  html,
+  body {
+     margin: 0 auto !important;
+     padding: 0 !important;
+     height: 100% !important;
+     width: 100% !important;
+     /*min-width: 600px;*/
+ }
+
+ /* What it does: Stops email clients resizing small text. */
+ * {
+    -ms-text-size-adjust: 100%;
+    -webkit-text-size-adjust: 100%;
+}
+
+/* What it does: Centers email on Android 4.4 */
+div[style*="margin: 16px 0"] {
+    margin:0 !important;
+}
+
+/* What it does: Stops Outlook from adding extra spacing to tables. */
+table,
+td {
+    mso-table-lspace: 0pt !important;
+    mso-table-rspace: 0pt !important;
+}
+
+/* What it does: Fixes webkit padding issue. Fix for Yahoo mail table alignment bug. Applies table-layout to the first 2 tables then removes for anything nested deeper. */
+table {
+    border-spacing: 0 !important;
+    border-collapse: collapse !important;
+    table-layout: fixed !important;
+    margin: 0 auto !important;
+}
+table table table {
+    table-layout: auto;
+}
+
+/* What it does: Uses a better rendering method when resizing images in IE. */
+img {
+    -ms-interpolation-mode:bicubic;
+}
+
+/* What it does: A work-around for iOS meddling in triggered links. */
+*[x-apple-data-detectors] {
+    color: inherit !important;
+    text-decoration: none !important;
+}
+
+/* What it does: A work-around for Gmail meddling in triggered links. */
+.x-gmail-data-detectors,
+.x-gmail-data-detectors *,
+.aBn {
+    border-bottom: 0 !important;
+    //cursor: default !important;
+}
+
+/* What it does: Prevents Gmail from displaying an download button on large, non-linked images. */
+.a6S {
+ display: none !important;
+ opacity: 0.01 !important;
+}
+/* If the above doesn\'t work, add a .g-img class to any image in question. */
+img.g-img + div {
+ display:none !important;
+}
+
+/* What it does: Prevents underlining the button text in Windows 10 */
+.button-link {
+    text-decoration: none !important;
+}
+
+blockquote {
+  font-style:normal;
+  text-align:left;
+  //margin-left: 32px!important;
+  margin: 5px 5px 0px 32px!important;
+  //padding-top:10px;
+  //font-family:"Segoe Print","Times New Roman", Verdana;
+  padding-left: 7px;
+  min-height: 30px;
+  //background-color: #EFEFEF;
+  border-left: 2px solid #8c8c8c;  
+}
+
+blockquote > p {
+   margin:4.5px;
+}
+
+.input-text-control{
+    display: block;
+    width: 100%;
+    height: 14px;
+    padding: 4px 5px;
+    font-size: 12px;
+    line-height: 1.5;
+    border-radius: 3px;
+    color: #555;
+    background-color: #fff;
+    background-image: none;
+    border: 1px solid #ccc;
+    -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075);
+    box-shadow: inset 0 1px 1px rgba(0,0,0,.075);
+    -webkit-transition: border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;
+    -o-transition: border-color ease-in-out .15s,box-shadow ease-in-out .15s;
+    transition: border-color ease-in-out .15s,box-shadow ease-in-out .15s;
+}
+
+/* What it does: Removes right gutter in Gmail iOS app: https://github.com/TedGoas/Cerberus/issues/89  */
+/* Create one of these media queries for each additional viewport size you\'d like to fix */
+/* Thanks to Eric Lepetit (@ericlepetitsf) for help troubleshooting */
+@media only screen and (min-device-width: 375px) and (max-device-width: 413px) { /* iPhone 6 and 6+ */
+    .email-container {
+        min-width: 375px !important;
+    }
+}
+
+</style>
+
+<!-- What it does: Makes background images in 72ppi Outlook render at correct size. -->
+    <!--[if gte mso 9]>
+    <xml>
+        <o:OfficeDocumentSettings>
+            <o:AllowPNG/>
+            <o:PixelsPerInch>96</o:PixelsPerInch>
+        </o:OfficeDocumentSettings>
+    </xml>
+<![endif]-->
+
+<!-- Progressive Enhancements -->
+<style>
+
+/* What it does: Hover styles for buttons */
+.button-td,
+.button-a {
+    transition: all 100ms ease-in;
+}
+.button-td:hover,
+.button-a:hover {
+    background: #449D44 !important;
+    border-color: #449D44 !important;
+}
+
+.bottom-strip{
+    width: 120px !important;
+    height: 10px !important;
+    float: left !important;
+}
+
+.square-logo-layout{
+    width: 40px;
+    float: left !important;
+    background-color: #FFF;//#24292E;
+    border-radius: 50%;
+    font-size: 30px;
+    padding: 7.5px;
+    margin-right: 0px;
+    //color: #FFF;
+    cursor:pointer !important;
+}
+
+.square-logo-layout > svg{
+    cursor:pointer!important;
+}
+
+
+/* Media Queries */
+@media screen and (max-width: 600px) {
+
+    .email-container {
+        width: 100% !important;
+        margin: auto !important;
+    }
+
+    /* What it does: Forces elements to resize to the full width of their container. Useful for resizing images beyond their max-width. */
+    .fluid {
+        max-width: 100% !important;
+        height: auto !important;
+        margin-left: auto !important;
+        margin-right: auto !important;
+    }
+
+    /* What it does: Forces table cells into full-width rows. */
+    .stack-column,
+    .stack-column-center {
+        display: block !important;
+        width: 100% !important;
+        max-width: 100% !important;
+        direction: ltr !important;
+    }
+    /* And center justify these ones. */
+    .stack-column-center {
+        text-align: center !important;
+    }
+
+    /* What it does: Generic utility class for centering. Useful for images, buttons, and nested tables. */
+    .center-on-narrow {
+        text-align: center !important;
+        display: block !important;
+        margin-left: auto !important;
+        margin-right: auto !important;
+        float: none !important;
+    }
+    table.center-on-narrow {
+        display: inline-block !important;
+    }
+
+    .input-text-control{
+        display: block;
+        width: 100%;
+        height: 14px;
+        padding: 4px 5px;
+        font-size: 12px;
+        line-height: 1.5;
+        border-radius: 3px;
+        color: #555;
+        background-color: #fff;
+        background-image: none;
+        border: 1px solid #ccc;
+        -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075);
+        box-shadow: inset 0 1px 1px rgba(0,0,0,.075);
+        -webkit-transition: border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;
+        -o-transition: border-color ease-in-out .15s,box-shadow ease-in-out .15s;
+        transition: border-color ease-in-out .15s,box-shadow ease-in-out .15s;
+    }
+
+    /* What it does: Adjust typography on small screens to improve readability */
+    .email-container p {
+        font-size: 17px !important;
+        line-height: 22px !important;
+    }
+
+}
+
+</style>
+
+</head>
+<body width="100%" bgcolor="#E5E5E5" style="margin: 0px; mso-line-height-rule: exactly;">
+    <center style="width: 600px; margin: auto; background: #FFFFFF; text-align: left;">
+        <!-- Email Header : BEGIN -->
+        <table role="presentation" aria-hidden="true" aria-hidden="true" cellspacing="0" cellpadding="0" border="0" align="center" width="600" style="margin: auto;" class="email-container">
+           <tr>
+            <td style="padding: 20px 0px; text-align: center">
+             <a href="http://www.veremes.com/" target="_blank">
+                <svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="335px" height="100px" viewBox="0 0 335 100" enable-background="new 0 0 335 100" xml:space="preserve">
+                    <g>
+                        <rect fill="#FFFFFF" width="335" height="100"/>
+                        <g>
+                            <path fill="#1A171B" d="M308.774,60.788c-0.99-1.493-2.537-2.688-4.64-3.589c-0.533-0.224-1.577-0.57-3.142-1.042
+                                        c-1.563-0.47-2.75-0.959-3.567-1.472c-0.893-0.547-1.532-1.161-1.916-1.841c-0.386-0.682-0.577-1.517-0.577-2.511
+                                        c0-1.4,0.466-2.572,1.398-3.516c0.933-0.944,2.098-1.417,3.498-1.417c1.561,0,2.793,0.437,3.695,1.308
+                                        c0.901,0.873,1.402,2.1,1.505,3.681h4.622c-0.12-2.909-1.026-5.178-2.72-6.806c-1.69-1.626-3.972-2.439-6.845-2.439
+                                        c-2.71,0-5.016,0.916-6.921,2.744c-1.904,1.831-2.856,4.057-2.856,6.678c0,2.319,0.569,4.168,1.714,5.551
+                                        c1.143,1.383,3.582,2.734,7.318,4.056c2.334,0.858,3.947,1.775,4.838,2.754c0.891,0.98,1.336,2.274,1.336,3.884
+                                        c0,1.612-0.561,2.947-1.682,4.007c-1.121,1.063-2.526,1.592-4.219,1.592c-1.772,0-3.262-0.69-4.463-2.071
+                                        c-1.202-1.379-1.802-3.12-1.802-5.228v-0.122h-4.502c0.103,3.535,1.114,6.344,3.039,8.431c1.922,2.085,4.466,3.127,7.637,3.127
+                                        c3.108,0,5.674-0.952,7.698-2.853c2.025-1.899,3.038-4.301,3.038-7.205C310.261,64.182,309.764,62.279,308.774,60.788z
+                                         M118.462,41.021c-5.17,0-9.417,1.679-12.739,5.035c-3.32,3.357-4.979,7.607-4.979,12.742c0,4.912,1.693,9.118,5.084,12.617
+                                        c3.389,3.502,7.535,5.252,12.438,5.252c3.694,0,6.947-0.998,9.756-2.988c2.808-1.994,4.988-4.849,6.542-8.569h-4.866
+                                        c-1.103,2.332-2.666,4.151-4.688,5.459c-2.023,1.308-4.302,1.962-6.834,1.962c-3.575,0-6.558-1.131-8.947-3.394
+                                        c-2.391-2.263-3.718-5.226-3.983-8.894h30.413v-0.318c0-5.604-1.601-10.154-4.797-13.655
+                                        C127.662,42.771,123.529,41.021,118.462,41.021z M105.366,56.472c0.509-3.468,1.901-6.219,4.17-8.258
+                                        c2.27-2.037,5.04-3.056,8.313-3.056c3.517,0,6.368,0.948,8.556,2.844c2.188,1.897,3.692,4.719,4.509,8.47H105.366z M99.054,31.046
+                                        L84.898,69.101L72.402,35.38l0.007-0.047l-0.079-0.217c-0.401-1.095-0.841-2.3-1.34-3.546l-0.194-0.523h-0.021
+                                        c-2.108-5.143-5.249-10.879-10.817-12.957c-5.541-2.069-12.762-0.675-17.169,3.314c-3.422,3.096-5.471,7.843-6.089,14.111
+                                        c0-0.002-0.117,1.154-0.117,1.154c-0.239,2.31-0.481,4.665-0.354,7.034l0.047,0.874l0.875-0.048l2.31-0.124l0.876-0.046
+                                        l-0.049-0.876c-0.113-2.069,0.115-4.268,0.335-6.396c0-0.001,0.12-1.172,0.12-1.172c0.517-5.235,2.121-9.103,4.771-11.499
+                                        c3.349-3.03,8.825-4.09,13.024-2.522c4.294,1.604,6.994,6.964,8.88,11.717l1.387,3.688l0.208,0.57l0.005-0.004L83.24,75.692h3.407
+                                        l16.788-44.646H99.054z M268.755,41.021c-5.171,0-9.418,1.679-12.738,5.035c-3.32,3.357-4.979,7.607-4.979,12.742
+                                        c0,4.912,1.692,9.118,5.084,12.617c3.389,3.502,7.535,5.252,12.438,5.252c3.695,0,6.947-0.998,9.758-2.988
+                                        c2.807-1.994,4.986-4.849,6.54-8.569h-4.866c-1.102,2.332-2.666,4.151-4.688,5.459c-2.022,1.308-4.302,1.962-6.835,1.962
+                                        c-3.574,0-6.557-1.131-8.945-3.394c-2.392-2.263-3.72-5.226-3.984-8.894h30.415v-0.318c0-5.604-1.603-10.154-4.8-13.655
+                                        C277.955,42.771,273.821,41.021,268.755,41.021z M255.658,56.472c0.51-3.468,1.901-6.219,4.171-8.258
+                                        c2.27-2.037,5.039-3.056,8.314-3.056c3.516,0,6.367,0.948,8.555,2.844c2.187,1.897,3.692,4.719,4.509,8.47H255.658z
+                                         M148.164,42.625c-1.253,0.705-2.409,1.808-3.465,3.315v-3.946h-4.074v33.698h4.379V55.395c0-3.099,0.583-5.334,1.754-6.711
+                                        c1.17-1.376,3.11-2.187,5.821-2.431l-0.032-4.744C150.878,41.549,149.417,41.922,148.164,42.625z M172.22,41.021
+                                        c-5.171,0-9.418,1.679-12.738,5.035c-3.321,3.357-4.981,7.607-4.981,12.742c0,4.912,1.694,9.118,5.085,12.617
+                                        c3.389,3.502,7.535,5.252,12.438,5.252c3.695,0,6.947-0.998,9.757-2.988c2.808-1.994,4.988-4.849,6.541-8.569h-4.866
+                                        c-1.102,2.332-2.665,4.151-4.688,5.459c-2.023,1.308-4.303,1.962-6.834,1.962c-3.574,0-6.557-1.131-8.947-3.394
+                                        c-2.391-2.263-3.718-5.226-3.984-8.894h30.414v-0.318c0-5.604-1.6-10.154-4.799-13.655
+                                        C181.419,42.771,177.286,41.021,172.22,41.021z M159.124,56.472c0.51-3.468,1.901-6.219,4.17-8.258
+                                        c2.271-2.037,5.04-3.056,8.313-3.056c3.517,0,6.369,0.948,8.556,2.844c2.188,1.897,3.692,4.719,4.51,8.47H159.124z
+                                         M232.864,41.264c-2.51,0-4.779,0.509-6.809,1.518c-2.03,1.012-3.73,2.49-5.097,4.43c-1.106-1.818-2.712-3.264-4.82-4.338
+                                        c-2.108-1.072-4.441-1.61-7-1.61c-2.212,0-4.191,0.379-5.941,1.134c-1.748,0.756-3.27,1.88-4.558,3.372v-3.776h-4.258v33.698
+                                        h4.258V59.274c0-2.927,0.105-4.978,0.321-6.154c0.215-1.177,0.586-2.227,1.119-3.147c0.856-1.473,2.026-2.604,3.509-3.391
+                                        c1.481-0.787,3.203-1.182,5.165-1.182c3.248,0,5.66,0.926,7.233,2.777c1.573,1.852,2.36,4.722,2.36,8.61v18.905h4.136V59.274
+                                        c0-2.927,0.112-4.978,0.338-6.154c0.223-1.177,0.59-2.227,1.1-3.147c0.854-1.473,2.012-2.604,3.467-3.391
+                                        c1.457-0.787,3.143-1.182,5.06-1.182c3.318,0,5.711,0.947,7.178,2.84c1.469,1.894,2.202,5.07,2.202,9.529v17.923h4.137V58.658
+                                        c0-6.093-1.043-10.516-3.122-13.268C240.76,42.64,237.436,41.264,232.864,41.264z"/>
+                            <g>
+                            <path fill="#1A171B" d="M36.791,43.727c4.5,3.508,3.856-8.518,5.095-10.445c-0.251,0.39,1.045-0.227,1.359-0.68
+                                                c0.714-1.033,0.78-1.304,1.783-0.467c0.685,0.57,4.073-2.156,5.011-2.76c-0.206-0.223,0.68,1.338,0.68,0.764
+                                                c0,4.354-0.253,0.671,2.42,1.401c1.206,0.329,2.179-0.847,3.269,0.893c-0.283,0.31-0.566,0.621-0.849,0.933
+                                                c4.111,1.071,3.139,4.072,7.134,6.029c-1.239,0.545-2.304,1.363-2.463,2.803c1.169,0.267,2.366,0.422,3.566,0.424
+                                                c-0.34,0.311-0.679,0.622-1.02,0.934c2.158,0.346,2.307,2.235,4.671,1.699c-0.891,1.669-4.83,4.51-1.274,5.094
+                                                c-0.198,0.085-0.396,0.171-0.594,0.255c0.745,0.477,1.172,1.362,1.868,1.868c-0.946,0.11-1.794,0.679-2.802,0.68
+                                                c0.04,1.611,1.581,1.87,2.717,2.124c-2.577,1.72,0.311,0.894,0.722,2.122c-0.165-0.493,1.154,1.254,0.807,0.977
+                                                c-0.173-0.139-1.318,0.596-0.807,1.062c0.174,0.158,4.875,0.583,1.98,1.482c-1.714,0.534-4.447,0.456-3.679,2.763
+                                                c-1.174-0.126-1.886,0.235-2.845-0.083c0.154,0.687-0.067,0.846,0.213,1.442c-1.335,0.382-2.595-0.269-3.695-1.061
+                                                c-0.042,0.268-0.084,0.537-0.127,0.806c-0.368-0.325-0.736-0.649-1.104-0.976c0.016,0.536-0.255,1.096-0.212,1.656
+                                                c-0.877-0.677-5.258-4.209-2.972-1.189c0.905,1.195,1.842,1.439,2.93,2.463c-1.363,0.366-0.2,5.027,1.91,4.627
+                                                c-1.045,1.709-3.151-0.414-4.289,1.828c1.419,0.304,0.683,0.515,1.826,1.146c-0.596-0.139-1.35,0.109-1.996-0.043
+                                                c0.058,0.606,1.302,2.911,1.104,3.185c-0.761,1.05-2.778-1.146-3.949-1.146c-0.209,0.18-0.252,0.392-0.126,0.636
+                                                c1.264,0.254,0.742,0.52,0.976,1.698c-2.448-0.878-0.467,0.231-0.467,1.104c0,3.686-2.677-0.092-2.548,2.505
+                                                c-0.269-0.014-0.537-0.027-0.806-0.041c0.263,2.893-2.243-0.257-2.845,3.056c0.048,0.018-3.298-0.522-3.333-0.488
+                                                c-1.136,1.135-1.402-0.027-2.174,0.598c-1.87,1.514-1.024-1.807-1.552-1.998c-0.694-0.253-2.246,1.984-2.455,0.573
+                                                c-0.207-1.396-0.55-3.131-1.463-1.656c-0.954-0.37-3.546,0.314-3.842-0.572c-0.223-0.67-2.252-3.619-0.871-4.078
+                                                c-0.407,0.137-1.347,0.543-1.719,0.765c0.857-2.833-1.515-2.188-3.185-1.146c0.104-1.69,0.899-3.521-1.083-3.247
+                                                c0.293-0.662,0.337-1.645,0.828-2.356c-0.382,0.084-0.764,0.17-1.146,0.254c0.059-0.477,4.984-10.382,5.223-10.382
+                                                c-0.199-0.062-0.369-0.169-0.51-0.318c-1.236,3.129-3.048,5.804-5.095,8.534c0.046-0.52-0.061-1.008-0.318-1.464
+                                                c-0.23,0-1.983,2.339-2.548,2.61c0-0.253,0-0.509,0-0.763c-0.231,0.366-1.444,2.675-1.783,2.675c-0.329,0,0.481-1.796-0.51-1.467
+                                                c-0.944,0.315-1.458,0.54-2.292,0.701c0.99-1.181,1.719-2.432-0.446-1.783c0.204-0.955-0.191-1.231-0.191-1.974
+                                                c-0.159,0.41-0.393,0.771-0.7,1.084c-0.23-1.254-0.242-6.138-0.383-6.138c-1.46,0,0.123-2.937,0.341-3.312
+                                                c-0.17-0.142-0.341-0.282-0.51-0.425c0.05,1.16-0.433,1.305-0.764,2.293c-1.08-1.767,1.521-3.314-0.764-3.99
+                                                c0.311-0.256,0.623-0.51,0.934-0.765c-0.199-0.198-0.396-0.396-0.595-0.595c-0.269,0.61-0.729,1.216-1.02,1.783
+                                                c-0.154-0.479,0.034-2.888,0.51-2.888c-0.313-0.017-0.624-0.044-0.935-0.084c0.723-0.973,0.495-1.264,1.444-1.699
+                                                c-0.17-0.51-0.339-1.019-0.509-1.529c0.17,0.058,0.339,0.114,0.509,0.171c0.149,0.083-0.41-0.829-0.68-0.424
+                                                c0.503-0.754,1.123-1.223,1.868-1.614c-0.283-0.17-0.566-0.34-0.849-0.51c0.664-0.432,1.176-1.357,2.038-1.698
+                                                c-0.566-1.104-0.674-1.464-1.868-1.784c-0.033-2.104,1.163-9.234,2.717-8.407c-0.049-0.578-0.062-0.699,0.509-0.765
+                                                c-0.087-1.145-0.637-0.797,0.595-1.104c-0.979-4.102,1.847-2.083,3.651-1.104c0-0.341,0-0.68,0-1.02
+                                                c0.534,0.116,1.853,0.641,2.177,0.085c0.109-0.188-0.92-0.513-1.073-0.594c1.126-0.569,0.975-1.844,0.17-3.143
+                                                c1.503,0.075,3.008,0.738,3.482-0.594c0.613,0.591,1.188,0.584,1.697,1.358c0.284-0.481,0.566-0.963,0.85-1.443
+                                                c0.53,0.646,1.549,2.504,2.59,1.983c0.223-0.111,1.486,0.661,1.486,0.394c0-1.159,0.588-2.121,1.529-2.717
+                                                C35.584,34.716,35.005,38.027,36.791,43.727"/>
+                            </g>
+                        </g>
+                    </g>
+                </svg>
+            </a>
+        </td>
+    </tr>
+</table>
+<!-- Email Header : END -->
+
+<!-- Email Body : BEGIN -->
+<table role="presentation" aria-hidden="true" cellspacing="0" cellpadding="0" border="0" align="center" width="600" style="margin: auto;" class="email-container">
+
+    [CONTENT]
+
+</table>
+<!-- Email Body : END -->
+
+<!-- Email Footer : BEGIN -->
+<table role="presentation" aria-hidden="true" cellspacing="0" cellpadding="0" border="0" align="center" width="600" style="margin: auto;" class="email-container">
+    <tr>
+        <td style="padding: 0px;width: 100%;" class="x-gmail-data-detectors">
+            <div class="bottom-strip" style="background-color: #39468A;"></div>
+            <div class="bottom-strip" style="background-color: #E74F23;"></div>
+            <div class="bottom-strip" style="background-color: #923288;"></div>
+            <div class="bottom-strip" style="background-color: #1C9DB2;"></div>
+            <div class="bottom-strip" style="background-color: #E10759;"></div>
+        </td>
+    </tr>
+</table>
+<table role="presentation" aria-hidden="true" cellspacing="0" cellpadding="0" border="0" align="center" width="600" style="margin: auto;" class="email-container">
+    <tr>
+        <td style="padding: 10px;width: 50%;font-size: 12px; font-family: sans-serif; line-height:18px; text-align: center; color: #888888; cursor:pointer;" class="x-gmail-data-detectors">
+            <a class="square-logo-layout" href="https://twitter.com/Veremes_Info" target="_blank" style="color: #24292E; cursor:pointer;">
+                <!--<i class="fa fa-twitter" style=""></i>-->
+                <svg id="Calque_1" data-name="Calque 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" style="fill: currentColor; cursor:pointer;">
+                        <title>Twitter</title>
+                        <path d="M50,0a50,50,0,1,0,50,50A50,50,0,0,0,50,0ZM75.28,37c0,.56,0,1.12,0,1.68C75.32,56,62.2,75.83,38.21,75.83h0a37,37,0,0,1-20-5.86,24.62,24.62,0,0,0,3.11.18,26.13,26.13,0,0,0,16.2-5.58,13,13,0,0,1-12.18-9.06,12.34,12.34,0,0,0,2.45.24,13,13,0,0,0,3.44-.46A13,13,0,0,1,20.77,42.5v-.16A13.11,13.11,0,0,0,26.68,44a13.05,13.05,0,0,1-4-17.42A37,37,0,0,0,49.52,40.18a13.19,13.19,0,0,1-.34-3,13.05,13.05,0,0,1,22.57-8.92A26.11,26.11,0,0,0,80,25.12a13.08,13.08,0,0,1-5.73,7.22,26.23,26.23,0,0,0,7.49-2.06A26.49,26.49,0,0,1,75.28,37Z"/>
+                </svg>
+            </a>
+            <a class="square-logo-layout" href="https://www.linkedin.com/company/veremes/" target="_blank" style="color: #24292E; cursor:pointer;">
+                <!--<i class="fa fa-linkedin" style=""></i>-->
+                <svg id="Calque_1" data-name="Calque 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" style="fill: currentColor; cursor:pointer;">
+                        <title>LinkedIn</title>
+                        <path d="M50,0a50,50,0,1,0,50,50A50,50,0,0,0,50,0ZM60.71,51a6.48,6.48,0,0,0-6.33,6.32V79.68H41.74V41.74H54.38v5a13.63,13.63,0,0,1,10.54-5.9A15,15,0,0,1,79.68,55.65v24H67V57.33A6.48,6.48,0,0,0,60.71,51ZM27,34.57A7.59,7.59,0,1,1,34.57,27,7.55,7.55,0,0,1,27,34.57Zm6.32,7.17V79.68H20.66V41.74Z"/>
+                </svg>
+            </a>
+            <a class="square-logo-layout" href="http://vm09.veremes.net/" target="_blank" style="color: #24292E; cursor:pointer;">
+                <!--<i class="fa fa-github" style=""></i>-->
+                <svg id="Calque_1" data-name="Calque 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" style="fill: currentColor; cursor:pointer;">
+                    <title>GitLab</title>
+                    <path d="M50,0a50,50,0,1,0,50,50A50,50,0,0,0,50,0ZM75.18,15.1a1,1,0,0,1,2,0l9,27.81h-20Zm-52.34,0a1,1,0,0,1,2,0l9,27.81h-20ZM9.85,61A2.63,2.63,0,0,1,8.9,58l4.35-13.4L47.16,88.07Zm4.33-17h20l14.3,44Zm21.19,0H64.63L50,89Zm30.42,0h20L51.49,88ZM90.15,61,52.84,88.07,86.75,44.62,91.1,58A2.63,2.63,0,0,1,90.15,61Z"/>
+                </svg>
+            </a>
+            <a class="square-logo-layout" href="http://www.veremes.com/" target="_blank" style="color: #24292E; cursor:pointer;">
+                <!--<i class="fa fa-globe" style=""></i>-->
+                <svg id="Calque_1" data-name="Calque 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" style="fill: currentColor; cursor:pointer;">
+                        <defs>
+                                <style>.cls-1{fill:none;}</style>
+                        </defs>
+                        <title>Veremes</title>
+                        <path class="cls-1" d="M60.17,18.09h0S60.15,18.05,60.17,18.09Z"/>
+                        <path class="cls-1" d="M48.39,26.38c.66-6.65,2.7-11.56,6.06-14.6a11.45,11.45,0,0,1,1.82-1.29A40.5,40.5,0,0,0,50,10l-1,0c-3.18,3.87-5.13,9.17-5.79,15.85l-.15,1.47c-.21,2.06-.42,4.16-.47,6.28-1.35-5.7-.83-9.69-1.1-15.87A4,4,0,0,0,39.6,21.2c0,.34-1.6-.64-1.88-.5-1.33.67-2.62-1.69-3.29-2.51L33.35,20c-.65-1-1.38-1-2.16-1.73-.6,1.69-2.51.85-4.42.76,1,1.65,1.21,3.26-.21,4,.19.1,1.5.51,1.36.75-.41.71-2.09,0-2.77-.11V25c-2.29-1.25-5.88-3.81-4.63,1.4-1.57.39-.87-.05-.76,1.4-.72.09-.71.24-.64,1-2-1.05-3.5,8-3.45,10.68,1.51.4,1.65.86,2.37,2.26-1.1.43-1.75,1.61-2.59,2.16l1.08.64a6,6,0,0,0-2.37,2c.34-.51,1.05.65.86.54l-.65-.22c.22.65.43,1.3.65,2-1.21.55-.92.92-1.83,2.15.39,0,.78.09,1.18.11-.6,0-.84,3.06-.65,3.67.37-.72,1-1.49,1.3-2.27l.75.76-1.18,1c2.9.86-.4,2.82,1,5.06.42-1.25,1-1.43,1-2.91l.65.54c-.28.48-2.29,4.21-.44,4.21.18,0,.2,6.2.49,7.79a4,4,0,0,0,.89-1.38c0,.95.5,1.3.24,2.51,2.75-.82,1.82.76.57,2.26a20.92,20.92,0,0,0,2.91-.89c1.26-.41.23,1.86.64,1.86s2-2.93,2.27-3.39v1c.72-.35,2.94-3.32,3.23-3.32a3.11,3.11,0,0,1,.41,1.86,46.51,46.51,0,0,0,6.47-10.83,1.46,1.46,0,0,0,.65.4c-.31,0-6.56,12.58-6.64,13.18l1.46-.32c-.63.9-.68,2.15-1,3,2.51-.35,1.5,2,1.37,4.13,2.12-1.33,5.14-2.15,4.05,1.45a15.73,15.73,0,0,1,2.18-1c-1.76.58.82,4.33,1.11,5.17.37,1.13,3.66.26,4.87.73,1.16-1.87,1.6.33,1.86,2.11s2.24-1,3.12-.73c.67.24-.4,4.46,2,2.53,1-.79,1.32.68,2.76-.75,0,0,4.29.64,4.23.62.77-4.21,3.94-.21,3.61-3.88l1,0c-.16-3.3,3.24,1.5,3.24-3.18,0-1.11-2.52-2.52.59-1.4-.29-1.5.37-1.84-1.24-2.16a.62.62,0,0,1,.16-.81c1.49,0,4,2.79,5,1.46.25-.35-1.33-3.28-1.4-4,.82.2,1.77-.12,2.53.06-1.45-.8-.52-1.07-2.32-1.46,1.45-2.84,4.12-.15,5.45-2.32C70.78,71.9,69.3,66,71,65.52c-1.38-1.3-2.57-1.61-3.72-3.13-2.9-3.83,2.66.65,3.78,1.51-.06-.71.28-1.42.27-2.1L72.76,63c0-.34.11-.69.16-1,1.4,1,3,1.83,4.69,1.35-.35-.76-.08-1-.27-1.83,1.22.4,2.12-.06,3.61.11-1-2.93,2.5-2.84,4.67-3.51,3.68-1.15-2.29-1.68-2.51-1.88-.65-.6.8-1.53,1-1.35.44.35-1.23-1.87-1-1.24-.52-1.56-4.19-.51-.92-2.7-1.44-.32-3.4-.65-3.45-2.69,1.28,0,2.36-.73,3.56-.87-.89-.64-1.43-1.76-2.37-2.37l.75-.32c-4.51-.74.49-4.35,1.62-6.47-3,.68-3.19-1.72-5.93-2.16l1.29-1.18a20.84,20.84,0,0,1-4.52-.54c.19-1.83,1.55-2.87,3.12-3.56-5.07-2.49-3.84-6.3-9.06-7.66L68.28,22c-1.38-2.21-2.62-.72-4.15-1.13-3.39-.93-3.07,3.75-3.07-1.78,0,.62-.81-.72-.89-1-1.22.8-5.47,4.21-6.34,3.49-1.27-1.06-1.35-.72-2.26.59-.4.58-2,1.36-1.73.87-.9,1.41-1,7.1-2.05,10.79,0-2,.25-4,.45-6Z"/>
+                        <path d="M99.94,47.71l0-.64c0-.61-.08-1.23-.14-1.84,0-.16,0-.31,0-.46-.08-.74-.17-1.47-.28-2.2,0-.19-.06-.38-.1-.57q-.13-.86-.3-1.68l-.12-.64c-.15-.7-.31-1.39-.48-2.08,0-.15-.09-.3-.13-.45-.14-.56-.3-1.11-.46-1.65-.08-.24-.15-.49-.23-.73-.16-.51-.34-1-.52-1.54-.06-.17-.12-.35-.19-.53-.23-.62-.47-1.24-.73-1.85-.11-.27-.22-.53-.34-.8s-.35-.78-.53-1.17l-.38-.81c-.27-.56-.56-1.11-.85-1.66-.16-.3-.33-.59-.49-.88s-.35-.61-.53-.92-.37-.63-.57-.94L92,22.86q-.55-.86-1.14-1.68l-.45-.62c-.25-.35-.51-.69-.77-1-.13-.18-.27-.35-.41-.52q-1.36-1.74-2.9-3.35L86,15.35q-1.66-1.72-3.48-3.29L82.46,12a51.79,51.79,0,0,0-5.4-4h0a49.56,49.56,0,0,0-4.42-2.54h0A49.59,49.59,0,0,0,63.94,2h0c-1.56-.45-3.16-.83-4.78-1.13L58.49.73,57.21.52C56.59.43,56,.35,55.33.29L54.54.21,53,.1l-.73,0C51.51,0,50.76,0,50,0a50,50,0,1,0,50,50C100,49.23,100,48.47,99.94,47.71ZM49.84,23c-.31.49,1.33-.29,1.73-.87.91-1.31,1-1.65,2.26-.59.87.72,5.12-2.69,6.34-3.49,0,0,0-.06,0,0h0c.08.24.89,1.58.89,1,0,5.53-.32.85,3.07,1.78,1.53.41,2.77-1.08,4.15,1.13L67.2,23.14c5.22,1.36,4,5.17,9.06,7.66-1.57.69-2.93,1.73-3.12,3.56a20.84,20.84,0,0,0,4.52.54l-1.29,1.18c2.74.44,2.92,2.84,5.93,2.16-1.13,2.12-6.13,5.73-1.62,6.47l-.75.32c.94.61,1.48,1.73,2.37,2.37-1.2.14-2.28.86-3.56.87.05,2,2,2.37,3.45,2.69-3.27,2.19.4,1.14.92,2.7-.21-.63,1.46,1.59,1,1.24-.22-.18-1.67.75-1,1.35.22.2,6.19.73,2.51,1.88-2.17.67-5.64.58-4.67,3.51-1.49-.17-2.39.29-3.61-.11.19.87-.08,1.07.27,1.83-1.7.48-3.29-.34-4.69-1.35,0,.34-.11.69-.16,1l-1.4-1.24c0,.68-.33,1.39-.27,2.1C70,63,64.41,58.56,67.31,62.39c1.15,1.52,2.34,1.83,3.72,3.13-1.73.46-.25,6.38,2.43,5.87-1.33,2.17-4-.52-5.45,2.32,1.8.39.87.66,2.32,1.46-.76-.18-1.71.14-2.53-.06.07.77,1.65,3.7,1.4,4-1,1.33-3.53-1.46-5-1.46a.62.62,0,0,0-.16.81c1.61.32,1,.66,1.24,2.16-3.11-1.12-.59.29-.59,1.4,0,4.68-3.4-.12-3.24,3.18l-1,0c.33,3.67-2.84-.33-3.61,3.88.06,0-4.19-.67-4.23-.62-1.44,1.43-1.78,0-2.76.75-2.37,1.93-1.3-2.29-2-2.53-.88-.32-2.86,2.52-3.12.73s-.7-4-1.86-2.11c-1.21-.47-4.5.4-4.87-.73-.29-.84-2.87-4.59-1.11-5.17a15.73,15.73,0,0,0-2.18,1c1.09-3.6-1.93-2.78-4.05-1.45.13-2.15,1.14-4.48-1.37-4.13.37-.84.42-2.09,1-3l-1.46.32c.08-.6,6.33-13.18,6.64-13.18a1.46,1.46,0,0,1-.65-.4,46.51,46.51,0,0,1-6.47,10.83A3.11,3.11,0,0,0,28,67.51c-.29,0-2.51,3-3.23,3.32v-1c-.3.46-1.83,3.39-2.27,3.39s.62-2.27-.64-1.86a20.92,20.92,0,0,1-2.91.89c1.25-1.5,2.18-3.08-.57-2.26.26-1.21-.24-1.56-.24-2.51a4,4,0,0,1-.89,1.38c-.29-1.59-.31-7.79-.49-7.79-1.85,0,.16-3.73.44-4.21l-.65-.54c.06,1.48-.55,1.66-1,2.91-1.37-2.24,1.93-4.2-1-5.06l1.18-1L15,52.47c-.34.78-.93,1.55-1.3,2.27-.19-.61,0-3.67.65-3.67-.4,0-.79-.06-1.18-.11.91-1.23.62-1.6,1.83-2.15-.22-.65-.43-1.3-.65-2l.65.22c.19.11-.52-1-.86-.54a6,6,0,0,1,2.37-2l-1.08-.64c.84-.55,1.49-1.73,2.59-2.16-.72-1.4-.86-1.86-2.37-2.26-.05-2.68,1.47-11.73,3.45-10.68-.07-.73-.08-.88.64-1-.11-1.45-.81-1,.76-1.4-1.25-5.21,2.34-2.65,4.63-1.4v-1.3c.68.15,2.36.82,2.77.11.14-.24-1.17-.65-1.36-.75,1.42-.73,1.23-2.34.21-4,1.91.09,3.82.93,4.42-.76C32,19,32.7,19,33.35,20l1.08-1.83c.67.82,2,3.18,3.29,2.51.28-.14,1.88.84,1.88.5a4,4,0,0,1,1.94-3.45c.27,6.18-.25,10.17,1.1,15.87,0-2.12.26-4.22.47-6.28l.15-1.47c.66-6.68,2.61-12,5.79-15.85l1,0a40.5,40.5,0,0,1,6.27.49,11.45,11.45,0,0,0-1.82,1.29c-3.36,3-5.4,8-6.06,14.6l-.15,1.49c-.2,2-.41,4-.45,6C48.82,30.14,48.94,24.45,49.84,23Z"/>
+                </svg>
+            </a>
+        </td>
+        <td style="padding: 10px;width: 50%;font-size: 20px; font-family: sans-serif; line-height:18px; text-align: center; color: #000000;" class="x-gmail-data-detectors">
+            <div style="margin-bottom:10px;">Pour toute question :</div>
+            <div>support@veremes.com</div>
+        </td>
+    </tr>
+</table>
+<!-- Email Footer : END -->
+
+</center>
+[SCRIPT]
+</body>
+</html>';
+?>
\ No newline at end of file
diff --git a/web_service/conf/properties.inc b/web_service/conf/properties.inc
index ccb5266aad9211923e07fe6716771150d0c400ae..ff2e872e55038e236e8d075f3d49e1edcfc40c6e 100755
--- a/web_service/conf/properties.inc
+++ b/web_service/conf/properties.inc
@@ -1,5 +1,7 @@
 <?php
-	$properties["schema_extraction"] = 's_extraction';
-        $properties['color_mutualized'] = 'green';
-        $properties['color_no_mutualized'] = 'red';
-?>
\ No newline at end of file
+$properties['color_mutualized'] = 'green';
+$properties['color_no_mutualized'] = 'red';
+$properties['sig'] = '*.shp';
+$properties['dao'] = '*.dao';
+$properties['shared_dir'] = 'D:/serveur/gtf/vas/shared';
+?>
diff --git a/web_service/conf/properties_server.inc b/web_service/conf/properties_server.inc
new file mode 100644
index 0000000000000000000000000000000000000000..1f67047d0d601b6ed6b6b417d8fb04f48b6d6ceb
--- /dev/null
+++ b/web_service/conf/properties_server.inc
@@ -0,0 +1,3 @@
+<?php
+    $properties['schema_extraction'] = 's_extraction';
+?>
\ No newline at end of file
diff --git a/web_service/conf/selected_properties.inc b/web_service/conf/selected_properties.inc
new file mode 100644
index 0000000000000000000000000000000000000000..90da243f98c3627294f8ffeace18aa019820f0ee
--- /dev/null
+++ b/web_service/conf/selected_properties.inc
@@ -0,0 +1,18 @@
+<?php
+
+$aAdminFields = Array(
+	'color_mutualized',
+	'color_no_mutualized',
+	'sig',
+	'dao'
+);
+$aUserFields = Array(
+	'color_mutualized',
+	'color_no_mutualized',
+	'sig',
+	'dao'
+);
+
+$properties['aAdminFields'] = array_merge($properties['aAdminFields'], $aAdminFields);
+$properties['aUserFields'] = array_merge($properties['aUserFields'], $aUserFields);
+?>
\ No newline at end of file
diff --git a/web_service/conf/version.inc b/web_service/conf/version.inc
index a812e4b55b8646a3e4a148d5b36662ce06943c5a..a8238eb5f7c4c4c6dd3aa8ac98592bf9ac868e5d 100755
--- a/web_service/conf/version.inc
+++ b/web_service/conf/version.inc
@@ -1,7 +1,7 @@
 <?php
-// Numéro de la version de [Module_name]
+// Numéro de la version de extraction
 define ("VM_VERSION", "20XX.XX.XX");
 define ("VM_BUILD", "XXXXX");
 define ("VM_MONTH_YEAR", "XX_20XX");
-define ("VM_STATUS", "UNSTABLE");
-?>
\ No newline at end of file
+define ("VM_STATUS", "STABLE");
+?>
diff --git a/web_service/sql/sqlQueries.xml b/web_service/sql/sqlQueries.xml
index 829255869f7ef6fa448b16739f5e7bf6b79f3c2a..8e670ca0bc49b68c16652a51c89d590d64b6aa17 100755
--- a/web_service/sql/sqlQueries.xml
+++ b/web_service/sql/sqlQueries.xml
@@ -7,10 +7,7 @@
 			<version>2017-01-00</version>
 			<code>
 				<![CDATA[
-					select s_vitis.create_role_if_not_exists('extraction_user', 'NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION');
-					select s_vitis.create_role_if_not_exists('extraction_admin', 'NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION');
-					INSERT INTO s_vitis.privileges(rolname, description) VALUES ('extraction_user', 'utilisateur extraction');
-					INSERT INTO s_vitis.privileges(rolname, description) VALUES ('extraction_admin', 'administrateur extraction');
+					--Partie pour le module extraction version 2017-01-00 généré par WAB le 22/05/2018 à 09:09:32
 					--Partie pour le module extraction version 2017-01-01 généré par WAB le 18/07/2017 à 09:52:00
 					CREATE SCHEMA s_extraction AUTHORIZATION u_vitis;
 					GRANT ALL ON SCHEMA s_extraction TO u_vitis;
@@ -34,19 +31,21 @@
 					ALTER TABLE s_extraction.rt_format OWNER TO u_vitis;
 					CREATE TABLE s_extraction.rt_layer (layer_id character varying(100) NOT NULL, layer character varying(255), category character varying(50), restriction character varying(50), unused_attributes text);
 					ALTER TABLE s_extraction.rt_layer OWNER TO u_vitis;
-					INSERT INTO s_extraction. rt_coordsys (coordsys_id, coordsys) VALUES ('EPSG:27572', 'Lambert 2 étendu');
-					INSERT INTO s_extraction. rt_coordsys (coordsys_id, coordsys) VALUES ('Lambert93', 'Lambert 93');
-					INSERT INTO s_extraction. rt_coordsys (coordsys_id, coordsys) VALUES ('EPSG:3944', 'Lambert 93 CC44');
-					INSERT INTO s_extraction. rt_coordsys (coordsys_id, coordsys) VALUES ('EPSG:4326', 'WGS 84');
-					INSERT INTO s_extraction. rt_format (format_id, format, use_for_raster, use_for_vector) VALUES ('ECW', 'Er Mapper ECW', true, false);
-					INSERT INTO s_extraction. rt_format (format_id, format, use_for_raster, use_for_vector) VALUES ('ACAD', 'Autocad DWG', false, true);
-					INSERT INTO s_extraction. rt_format (format_id, format, use_for_raster, use_for_vector) VALUES ('SHAPE', 'Esri Shapefile', false, true);
-					INSERT INTO s_extraction. rt_format (format_id, format, use_for_raster, use_for_vector) VALUES ('MAPINFO', 'Mapinfo Tab', false, true);
-					INSERT INTO s_extraction. rt_format (format_id, format, use_for_raster, use_for_vector) VALUES ('MIF', 'Mapinfo MIF/MID', false, true);
-					INSERT INTO s_extraction. rt_format (format_id, format, use_for_raster, use_for_vector) VALUES ('GML', 'GML', false, true);
-					INSERT INTO s_extraction. rt_format (format_id, format, use_for_raster, use_for_vector) VALUES ('OGCKML', 'KML', false, true);
-					INSERT INTO s_extraction. rt_format (format_id, format, use_for_raster, use_for_vector) VALUES ('GEOJSON', 'GEOJSON', false, true);
-					INSERT INTO s_extraction. rt_format (format_id, format, use_for_raster, use_for_vector) VALUES ('TIFF', 'TIFF', true, false);
+					CREATE TABLE s_extraction.version(version character varying(100) NOT NULL, build integer NOT NULL, date timestamp with time zone NOT NULL, active boolean NOT NULL, CONSTRAINT version_pkey PRIMARY KEY (version));
+					ALTER TABLE s_extraction.version OWNER TO u_vitis;
+					INSERT INTO s_extraction.rt_coordsys (coordsys_id, coordsys) VALUES ('EPSG:27572', 'Lambert 2 étendu');
+					INSERT INTO s_extraction.rt_coordsys (coordsys_id, coordsys) VALUES ('Lambert93', 'Lambert 93');
+					INSERT INTO s_extraction.rt_coordsys (coordsys_id, coordsys) VALUES ('EPSG:3944', 'Lambert 93 CC44');
+					INSERT INTO s_extraction.rt_coordsys (coordsys_id, coordsys) VALUES ('EPSG:4326', 'WGS 84');
+					INSERT INTO s_extraction.rt_format (format_id, format, use_for_raster, use_for_vector) VALUES ('ECW', 'Er Mapper ECW', true, false);
+					INSERT INTO s_extraction.rt_format (format_id, format, use_for_raster, use_for_vector) VALUES ('ACAD', 'Autocad DWG', false, true);
+					INSERT INTO s_extraction.rt_format (format_id, format, use_for_raster, use_for_vector) VALUES ('SHAPE', 'Esri Shapefile', false, true);
+					INSERT INTO s_extraction.rt_format (format_id, format, use_for_raster, use_for_vector) VALUES ('MAPINFO', 'Mapinfo Tab', false, true);
+					INSERT INTO s_extraction.rt_format (format_id, format, use_for_raster, use_for_vector) VALUES ('MIF', 'Mapinfo MIF/MID', false, true);
+					INSERT INTO s_extraction.rt_format (format_id, format, use_for_raster, use_for_vector) VALUES ('GML', 'GML', false, true);
+					INSERT INTO s_extraction.rt_format (format_id, format, use_for_raster, use_for_vector) VALUES ('OGCKML', 'KML', false, true);
+					INSERT INTO s_extraction.rt_format (format_id, format, use_for_raster, use_for_vector) VALUES ('GEOJSON', 'GEOJSON', false, true);
+					INSERT INTO s_extraction.rt_format (format_id, format, use_for_raster, use_for_vector) VALUES ('TIFF', 'TIFF', true, false);
 					INSERT INTO s_extraction.rt_feature_model (feature_type, attribute_name, attribute_data_type, geometry_type, "order") VALUES ('geofla.arrondissement', 'id_geofla', 'fme_real64', 'fme_no_geom;fme_point;fme_line;fme_area;fme_surface;fme_collection', 1);
 					INSERT INTO s_extraction.rt_feature_model (feature_type, attribute_name, attribute_data_type, geometry_type, "order") VALUES ('geofla.arrondissement', 'code_arr', 'fme_varchar(1)', '', 2);
 					INSERT INTO s_extraction.rt_feature_model (feature_type, attribute_name, attribute_data_type, geometry_type, "order") VALUES ('geofla.arrondissement', 'code_chf', 'fme_varchar(3)', '', 3);
@@ -288,40 +287,374 @@
 					GRANT ALL ON TABLE s_extraction.v_extraction TO u_vitis;
 					GRANT ALL ON TABLE s_extraction.v_extraction TO extraction_admin;
 					GRANT ALL ON TABLE s_extraction.v_extraction TO extraction_user;
-					INSERT INTO s_extraction.rt_extraction_status_group(status_id, group_id, extraction_status_group_id) VALUES ((select status_id from s_extraction.rt_extraction_status where name ='START') , (select group_id from s_vitis.group where name ='demandeur'), (select nextval('s_extraction.seq_common')));
-					INSERT INTO s_extraction.rt_extraction_status_group(status_id, group_id, extraction_status_group_id) VALUES ((select status_id from s_extraction.rt_extraction_status where name ='Nouveau') , (select group_id from s_vitis.group where name ='demandeur'), (select nextval('s_extraction.seq_common')));
-					INSERT INTO s_extraction.rt_extraction_status_group(status_id, group_id, extraction_status_group_id) VALUES ((select status_id from s_extraction.rt_extraction_status where name ='AE Demandé') , (select group_id from s_vitis.group where name ='demandeur'), (select nextval('s_extraction.seq_common')));
-					INSERT INTO s_extraction.rt_extraction_status_group(status_id, group_id, extraction_status_group_id) VALUES ((select status_id from s_extraction.rt_extraction_status where name ='AE Généré') , (select group_id from s_vitis.group where name ='demandeur'), (select nextval('s_extraction.seq_common')));
-					INSERT INTO s_extraction.rt_extraction_status_group(status_id, group_id, extraction_status_group_id) VALUES ((select status_id from s_extraction.rt_extraction_status where name ='AE Soumis') , (select group_id from s_vitis.group where name ='demandeur'), (select nextval('s_extraction.seq_common')));
-					INSERT INTO s_extraction.rt_extraction_status_group(status_id, group_id, extraction_status_group_id) VALUES ((select status_id from s_extraction.rt_extraction_status where name ='Autorisée') , (select group_id from s_vitis.group where name ='demandeur'), (select nextval('s_extraction.seq_common')));
-					INSERT INTO s_extraction.rt_extraction_status_group(status_id, group_id, extraction_status_group_id) VALUES ((select status_id from s_extraction.rt_extraction_status where name ='Refusée') , (select group_id from s_vitis.group where name ='demandeur'), (select nextval('s_extraction.seq_common')));
-					INSERT INTO s_extraction.rt_extraction_status_group(status_id, group_id, extraction_status_group_id) VALUES ((select status_id from s_extraction.rt_extraction_status where name ='Terminée') , (select group_id from s_vitis.group where name ='demandeur'), (select nextval('s_extraction.seq_common')));
-					INSERT INTO s_extraction.rt_extraction_status_group(status_id, group_id, extraction_status_group_id) VALUES ((select status_id from s_extraction.rt_extraction_status where name ='AE Soumis') , (select group_id from s_vitis.group where name ='controleur'), (select nextval('s_extraction.seq_common')));
-					INSERT INTO s_extraction.rt_extraction_status_group(status_id, group_id, extraction_status_group_id) VALUES ((select status_id from s_extraction.rt_extraction_status where name ='Autorisée') , (select group_id from s_vitis.group where name ='controleur'), (select nextval('s_extraction.seq_common')));
-					INSERT INTO s_extraction.rt_extraction_status_group(status_id, group_id, extraction_status_group_id) VALUES ((select status_id from s_extraction.rt_extraction_status where name ='Refusée') , (select group_id from s_vitis.group where name ='controleur'), (select nextval('s_extraction.seq_common')));
-					ALTER TABLE s_extraction."extraction" ADD COLUMN email character varying(100);
-
-                                        -- Frédéric le 05/09/2017 à 16h30
-                                        ALTER TABLE s_extraction.rt_extraction_status OWNER TO u_vitis;
-                                        REVOKE ALL ON TABLE s_extraction.rt_extraction_status FROM postgres;
-
-                                        GRANT ALL ON TABLE s_extraction.extraction TO extraction_admin;
-                                        GRANT ALL ON TABLE s_extraction.extraction TO extraction_user;
-
-                                        GRANT ALL ON TABLE s_extraction.rt_coordsys TO extraction_admin;
-                                        GRANT SELECT ON TABLE s_extraction.rt_coordsys TO extraction_user;
-
-                                        GRANT ALL ON TABLE s_extraction.rt_extraction_status TO extraction_admin;
-                                        GRANT SELECT ON TABLE s_extraction.rt_extraction_status TO extraction_user;
-
-                                        GRANT ALL ON TABLE s_extraction.rt_format TO extraction_admin;
-                                        GRANT SELECT ON TABLE s_extraction.rt_format TO extraction_user;
+					GRANT ALL ON TABLE s_extraction.extraction TO extraction_admin;
+					GRANT ALL ON TABLE s_extraction.extraction TO extraction_user;
+					GRANT ALL ON TABLE s_extraction.rt_coordsys TO extraction_admin;
+					GRANT SELECT ON TABLE s_extraction.rt_coordsys TO extraction_user;
+					GRANT ALL ON TABLE s_extraction.rt_extraction_status TO extraction_admin;
+					GRANT SELECT ON TABLE s_extraction.rt_extraction_status TO extraction_user;
+					GRANT ALL ON TABLE s_extraction.rt_format TO extraction_admin;
+					GRANT SELECT ON TABLE s_extraction.rt_format TO extraction_user;
+					GRANT ALL ON TABLE s_extraction.rt_layer TO extraction_admin;
+					GRANT SELECT ON TABLE s_extraction.rt_layer TO extraction_user;
+					GRANT SELECT ON TABLE s_extraction.rt_feature_model TO extraction_admin;
+					GRANT SELECT ON TABLE s_extraction.rt_feature_model TO extraction_user;
+					--Partie WABSQL générée par WAB le 04/05/2018 à 14:31:04
+					-- Ces tables sont normalement prévues dans votre fichier VisualParadigm et sont necessaires pour le fonctionnement de vos objets WAB
+					--CREATE TABLE s_extraction.rt_extraction_status (status_id integer NOT NULL DEFAULT nextval('s_vitis.seq_common'::regclass), name character varying(50)  NOT NULL, progress integer NOT NULL, CONSTRAINT rt_extraction_status_pkey PRIMARY KEY (status_id));
+					--CREATE TABLE s_extraction.rt_extraction_status_group (status_id integer NOT NULL, group_id integer NOT NULL, link_id integer NOT NULL DEFAULT nextval('s_vitis.seq_common'::regclass), CONSTRAINT rt_extraction_status_group_pkey PRIMARY KEY (link_id), CONSTRAINT fk_extraction_status_group FOREIGN KEY (status_id) REFERENCES s_extraction.rt_extraction_status (status_id) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION);
+					CREATE TABLE s_extraction.extraction_history (history_id integer NOT NULL DEFAULT nextval('s_extraction.seq_common'::regclass), date timestamp with time zone NOT NULL, login character varying(50) NOT NULL, comment text NOT NULL, bo_id integer NOT NULL, CONSTRAINT extraction_history_pkey PRIMARY KEY (history_id), CONSTRAINT fk_extraction_history FOREIGN KEY (bo_id) REFERENCES s_extraction.extraction (bo_id) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION);
+					-- Vue basique pour vos objets WAB tenant compte de la restriction groupe état
+					--CREATE OR REPLACE VIEW s_extraction.v_extraction AS SELECT extraction.* FROM s_extraction.extraction LEFT JOIN s_extraction.rt_extraction_status ON rt_extraction_status.status_id = extraction.status_id JOIN s_extraction.rt_extraction_status_group ON rt_extraction_status.status_id = rt_extraction_status_group.status_id WHERE (rt_extraction_status_group.group_id IN ( SELECT user_group.group_id FROM s_vitis.user_group LEFT JOIN s_vitis."user" ON user_group.user_id = "user".user_id WHERE "user".login::name = "current_user"()));
+					-- u_vitis est propriétaire de toutes vos tables
+					ALTER TABLE s_extraction.version OWNER TO u_vitis;
+					ALTER TABLE s_extraction.rt_feature_model OWNER TO u_vitis;
+					ALTER TABLE s_extraction.extraction OWNER TO u_vitis;
+					--ALTER TABLE s_extraction.ct OWNER TO u_vitis;
+					--ALTER TABLE s_extraction.commune OWNER TO u_vitis;
+					ALTER TABLE s_extraction.rt_coordsys OWNER TO u_vitis;
+					ALTER TABLE s_extraction.v_extraction OWNER TO u_vitis;
+					ALTER TABLE s_extraction.rt_format OWNER TO u_vitis;
+					ALTER TABLE s_extraction.rt_layer OWNER TO u_vitis;
+					ALTER TABLE s_extraction.rt_extraction_status OWNER TO u_vitis;
+					ALTER TABLE s_extraction.rt_extraction_status_group OWNER TO u_vitis;
+					ALTER TABLE s_extraction.extraction_history OWNER TO u_vitis;
+					-- u_vitis propriétaire sur les tables des objets WAB
+					--ALTER TABLE s_extraction.rt_extraction_status OWNER to u_vitis;
+					--ALTER TABLE s_extraction.rt_extraction_status_group OWNER to u_vitis;
+					--ALTER TABLE s_extraction.extraction_history OWNER to u_vitis;
+					-- Gestion des droits d'après les méthodes php saisies pour vos objets (annule et remplace)
+					REVOKE ALL ON TABLE s_extraction.rt_coordsys FROM extraction_admin;
+					REVOKE ALL ON TABLE s_extraction.v_extraction FROM extraction_user;
+					REVOKE ALL ON TABLE s_extraction.rt_format FROM extraction_admin;
+					REVOKE ALL ON TABLE s_extraction.rt_layer FROM extraction_admin;
+					GRANT SELECT, INSERT, UPDATE, DELETE ON TABLE s_extraction.rt_coordsys TO extraction_admin;
+					GRANT SELECT, INSERT, UPDATE, DELETE ON TABLE s_extraction.v_extraction TO extraction_user;
+					GRANT SELECT, INSERT, UPDATE, DELETE ON TABLE s_extraction.rt_format TO extraction_admin;
+					GRANT SELECT, INSERT, UPDATE, DELETE ON TABLE s_extraction.rt_layer TO extraction_admin;
+					-- Droits sur les tables des objets WAB
+					GRANT SELECT ON TABLE s_extraction.rt_extraction_status TO extraction_user;
+					GRANT SELECT ON TABLE s_extraction.rt_extraction_status_group TO extraction_user;
+					GRANT SELECT, INSERT ON TABLE s_extraction.extraction_history TO extraction_user;
+					INSERT INTO s_gtf.messageclass (messageclass, messageclass_type) VALUES ('AE Généré','action');
+					INSERT INTO s_gtf.messageclass (messageclass, messageclass_type) VALUES ('Extraction Aix','action');
+					INSERT INTO s_gtf.messageclass_action (messageclass_action_id, messageclass, actionclass, index, parameters) VALUES ((SELECT nextval('s_gtf.seq_common'::regclass)),'AE Généré','BoAction',0,'bo_id_attribute=''bo_id''|method=''trGenerer''|class=''Extractions''|module=''extraction''');
+					INSERT INTO s_gtf.messageclass_action (messageclass_action_id, messageclass, actionclass, index, parameters) VALUES ((SELECT nextval('s_gtf.seq_common'::regclass)),'AE Généré','EmailAction',1,'template_id = ' || (SELECT email_template_id FROM s_gtf.email_template WHERE name = 'Email demandeur AE généré'));
+					INSERT INTO s_gtf.messageclass_action (messageclass_action_id, messageclass, actionclass, index, parameters) VALUES ((SELECT nextval('s_gtf.seq_common'::regclass)),'Extraction Aix','EmailAction',1,'template_id = ' || (SELECT email_template_id FROM s_gtf.email_template WHERE name = 'Email controleur données extraites'));
+					INSERT INTO s_gtf.messageclass_action (messageclass_action_id, messageclass, actionclass, index, parameters) VALUES ((SELECT nextval('s_gtf.seq_common'::regclass)),'Extraction Aix','EmailAction',2,'template_id = ' || (SELECT email_template_id FROM s_gtf.email_template WHERE name = 'Email demandeur données extraites'));
+					INSERT INTO s_gtf.messageclass_action (messageclass_action_id, messageclass, actionclass, index, parameters) VALUES ((SELECT nextval('s_gtf.seq_common'::regclass)),'Extraction Aix','BoAction',0,'bo_id_attribute=''bo_id''|method=''trTerminerExtraction''|class=''Extractions''|module=''extraction''');
+					INSERT INTO s_gtf.email_template (name, subject, body, "to", cc, cci, code, use_advanced, rt_emailcontext_id, attachment) VALUES ('Email demandeur AE généré', NULL, NULL, NULL, NULL, NULL, '$logo = $this->aProperties[''ws_data_dir'']."/gtf/LOGO_AMP.jpg";' || chr(13) || '$base64 = base64_encode(file_get_contents($logo));' || chr(13) || '$image = ''<img src="data:image/png;base64,''.$base64.''">'';' || chr(13) || 'require_once("gtf_lib/gtf_object/Order.class.inc");' || chr(13) || 'require_once("gtf_lib/gtf_object/User.class.inc");' || chr(13) || '$iBoId = $this->aObjects["oMessage"]->getBody(''bo_id'');' || chr(13) || '$sRequest = "SELECT * from s_extraction.extraction where bo_id = ".$iBoId;' || chr(13) || '$oPDOresult = $this->oBd->executeWithParams($sRequest, array());' || chr(13) || '$aBo = $this->oBd->ligneSuivante ($oPDOresult);' || chr(13) || '$iOrderId = $this->aObjects["oMessage"]->getBody(''order_id'');' || chr(13) || '$this->aObjects["oOrder"]= new orderLib($oBd, $iOrderId, $this->aObjects["oMessage"]->aProperties, "v_order");' || chr(13) || 'error_log( print_r($this->aObjects[''oOrder''], true));' || chr(13) || '$this->aObjects[''oUser''] = new User($oBd, $this->aObjects[''oOrder'']->aFields[''user_id''], $this->aObjects["oMessage"]->aProperties);' || chr(13) || '$this->to = $aBo[''email''];' || chr(13) || '$this->cc = $this->aObjects["oOrder"]->aFields[''email_notifications''];' || chr(13) || '$this->cci = '''';' || chr(13) || '$this->subject = ''[PAYS D\''AIX - SIGAM] Demande N° ''.$aBo[''bo_id''].'' - Acte d\''Engagement pour l\''utilisation des données SIG'';' || chr(13) || '$this->body =  $image.''<p>Bonjour</p>' || chr(13) || '<p></p>' || chr(13) || '<p>Suite à votre demande n°''.$aBo[''bo_id''].'' en date du ''.date(''d/m/Y'',strtotime($aBo[''creation_date''])).'' pour l\''extraction des données, <u>merci de bien vouloir déposer l\''acte d\''engagement</u> ci-joint complété et signé, à l\''adresse suivante:<br/>' || chr(13) || '<A HREF="https://scpa430.cpa.fr/extraction">Application Extraction</A></p>' || chr(13) || '<p>Une fois réceptionné, l\''acte d\''engagement sera soumis à la validation du Territoire du Pays d\''Aix.<br/>' || chr(13) || 'Si celui-ci est validé, vous recevrez les données par mail (taille < 5Mo) ou par lien de téléchargement (taille > 5Mo).</p>' || chr(13) || '<p>Cordialement,</p>' || chr(13) || '<p>Le service d\''Information Géographique et Applicatifs Métiers (SIGAM)<br/>' || chr(13) || 'Territoire du Pays d\''Aix<br/>' || chr(13) || 'Tel : 04 42 93 83 50<br/>' || chr(13) || 'Mail : <a href="mailto:sig.paysdaix@ampmetropole.fr">sig.paysdaix@ampmetropole.fr</a>  </p>'';' || chr(13) || '// les résultats de moins de 5 Mo sont envoyés en pièce jointe' || chr(13) || '    if (filesize($this->aObjects["oOrder"]->aFields[''result_file''])> (5*1024*1024)){' || chr(13) || '        $this->body .= ''<p>Le résultat est disponible par téléchargement :<br/><a href="'' . $this->aObjects["oOrder"]->aFields[''result_url''] . ''">Télécharger le résultat</a></p>'';' || chr(13) || '    } else {' || chr(13) || '        $this->aAttachments[0] = $this->aObjects["oOrder"]->aFields[''result_file''];' || chr(13) || '    }' || chr(13) || 'error_log(print_r($this->aObjects["oOrder"]->aFields, true));', '1', 'gtf', NULL);
+					INSERT INTO s_gtf.email_template (name, subject, body, "to", cc, cci, code, use_advanced, rt_emailcontext_id, attachment) VALUES ('Email demandeur AE à resoumettre', NULL, NULL, NULL, NULL, NULL, 'require_once("gtf_lib/gtf_object/User.class.inc");' || chr(13) || 'require_once("vmlib/logUtil.inc");' || chr(13) || '$iBoId = $this->aObjects["oBusinessObject"]->aValues[''bo_id''];' || chr(13) || '$sUserLogin = $this->aObjects["oBusinessObject"]->aValues[''requestor''];' || chr(13) || '$sSql = ''SELECT user_id FROM s_framework.user WHERE login=\''''.$this->aObjects[''oBusinessObject'']->aValues[''requestor''].''\'''';' || chr(13) || '//writeToErrorLog($sSql);' || chr(13) || '$oResult = $oBd->execute($sSql);' || chr(13) || 'if(!$oBd->erreurRencontree) {' || chr(13) || '	if ($oBd->nombreLigne ($oResult) > 0) {' || chr(13) || '		$this->aObjects[''oUser''] = new User($oBd, $oBd->objetSuivant($oResult)->user_id, $this->aObjects["oBusinessObject"]->aProperties);' || chr(13) || '	}' || chr(13) || '}' || chr(13) || '//$this->to = ''sig@agglo-paysdaix.fr'';' || chr(13) || '$this->to = $this->aObjects[''oBusinessObject'']->aValues[''email''];' || chr(13) || '$this->cc = '''';' || chr(13) || '$this->cci = '''';' || chr(13) || '$this->subject = ''[PAYS D\''AIX- SIGAM] Demande N° ''.$this->aObjects[''oBusinessObject'']->aValues[''bo_id''].'' - Acte d\''engagement non valide'';' || chr(13) || '$this->body = ''<p>Bonjour,</p>' || chr(13) || '	<p>Suite à votre demande n°''.$this->aObjects[''oBusinessObject'']->aValues[''bo_id''].'' en date du ''.date(''d/m/Y'',strtotime($this->aObjects[''oBusinessObject'']->aValues[''creation_date''])).'' pour l\''extraction des données, votre demande n\''a pas encore été validée pour la ou les raisons suivantes :<br/>'';' || chr(13) || 'if($this->aObjects[''oBusinessObject'']->aValues[''signed''] == "false"){' || chr(13) || '	$this->body .= '' - L\''acte d\''engagement n\''est pas signé<br/>'';' || chr(13) || '}' || chr(13) || 'if($this->aObjects[''oBusinessObject'']->aValues[''identification_complete''] == "false"){' || chr(13) || '	$this->body .= ''  - Le cadre d\''identification du dépositaire est incomplet<br/>'';' || chr(13) || '}' || chr(13) || 'if($this->aObjects[''oBusinessObject'']->aValues[''definition_complete''] == "false"){' || chr(13) || '	$this->body .= '' - La définition des traitements pour l\''usage du cadastre est non renseignée<br/>'';' || chr(13) || '}' || chr(13) || 'error_log(print_r($this->aObjects[''oBusinessObject'']->aValues, true));' || chr(13) || '//$this->body .= ''<p>''.$this->aObjects[''oBusinessObject'']->aValues[''comment''].''</p>'';' || chr(13) || '$this->body .=''<p><u>Merci de bien vouloir déposer à nouveau l\''acte d\''engagement</u> à l\''adresse suivante :<br/>' || chr(13) || '<A HREF="https://scpa430.cpa.fr/extraction">Application Extraction</A></p>' || chr(13) || '<p>Une fois réceptionné, l\''acte d\''engagement sera soumis à la validation du Territoire du Pays d\''Aix.<br/>' || chr(13) || 'Si celui-ci est validé, vous recevrez les données par mail (taille < 5Mo) ou par lien de téléchargement (taille > 5Mo).</p>' || chr(13) || '<p>Cordialement,</p>' || chr(13) || '<p>Le service d\''Information Géographique et Applicatifs Métiers (SIGAM)<br/>' || chr(13) || 'Territoire du Pays d\''Aix<br/>' || chr(13) || 'Tel : 04 42 93 83 50<br/>' || chr(13) || 'Mail : <a href="mailto:sig.paysdaix@ampmetropole.fr">sig.paysdaix@ampmetropole.fr</a>  </p>'';' || chr(13) || '$this->aAttachments[0] = '''';' || chr(13) || '', '1', 'gtf', NULL);
+					INSERT INTO s_gtf.email_template (name, subject, body, "to", cc, cci, code, use_advanced, rt_emailcontext_id, attachment) VALUES ('Email controleur données extraites', NULL, NULL, NULL, NULL, NULL, 'require_once("gtf_lib/gtf_object/Order.class.inc");' || chr(13) || 'require_once("gtf_lib/gtf_object/User.class.inc");' || chr(13) || '$iBoId = $this->aObjects["oMessage"]->getBody(''bo_id'');' || chr(13) || '$sRequest = "SELECT * from s_extraction.extraction where bo_id = ".$iBoId;' || chr(13) || '$oPDOresult = $this->oBd->executeWithParams($sRequest, array());' || chr(13) || '$aBo = $this->oBd->ligneSuivante ($oPDOresult);' || chr(13) || '$iOrderId = $this->aObjects["oMessage"]->getBody(''order_id'');' || chr(13) || '$this->aObjects["oOrder"]= new OrderLib($oBd, $iOrderId, $this->aObjects["oMessage"]->aProperties, "v_order");' || chr(13) || '$this->aObjects[''oUser''] = new User($oBd, $this->aObjects[''oOrder'']->aFields[''user_id''], $this->aObjects["oMessage"]->aProperties);' || chr(13) || '$this->to = ''sig.paysdaix@ampmetropole.fr'';' || chr(13) || '$this->cc = '''';' || chr(13) || '$this->cci = '''';' || chr(13) || '$this->subject = ''[GTF] - Demande N° ''.$aBo[''bo_id''].'' - Extraction des données'';' || chr(13) || '$this->body = ''<p>Les données concernant la demande n°''.$aBo[''bo_id''].'' en date du ''.date(''d/m/Y'',strtotime($aBo[''creation_date''])).'' ont été envoyées au demandeur.</p>' || chr(13) || '<p>Cordialement,</p>' || chr(13) || '<p>L\''application d\''extraction de données de GTF</p>'';' || chr(13) || '', '1', 'gtf', NULL);
+					INSERT INTO s_gtf.email_template (name, subject, body, "to", cc, cci, code, use_advanced, rt_emailcontext_id, attachment) VALUES ('public', NULL, NULL, NULL, NULL, NULL, '$logo = $this->aProperties[''ws_data_dir'']."/gtf/LOGO_AMP.jpg";' || chr(13) || '$base64 = base64_encode(file_get_contents($logo));' || chr(13) || '$image = ''<img src="data:image/png;base64,''.$base64.''">'';' || chr(13) || 'if ($this->aObjects["oOrder"]->aFields[''order_status_id''] == 3) {' || chr(13) || '	$this->to = '''' . $this->aObjects["oOrder"]->getUser()->aFields[''email''] . '''';' || chr(13) || '	$this->cc = '''' . $this->aObjects["oOrder"]->aFields[''email_notifications''] . '''';' || chr(13) || '	$this->cci = '''';' || chr(13) || '	$this->subject = ''[Pays d\''Aix - SIGAM] - Données extraites'';' || chr(13) || '	$this->body = $image.''<p>Bonjour,</p>'';' || chr(13) || '	$this->body .=''<p></p><p>Les données correspondant à votre demande  en date du ''.date(''d/m/Y'',strtotime($this->aObjects["oOrder"]->aFields[''order_date''])).'' sont disponibles '';' || chr(13) || '	 if (filesize($this->aObjects["oOrder"]->aFields[''result_file''])> 5242880){' || chr(13) || '			$this->body .= ''sur le lien de téléchargement suivant :<br/><a href="''.$this->aObjects["oOrder"]->aFields[''result_url''] . ''">Télécharger le résultat</a></p>'';' || chr(13) || '		} else {' || chr(13) || '			 $this->body .= ''en pièce jointe.</p>'';' || chr(13) || '			$this->aAttachments[0] = $this->aObjects["oOrder"]->aFields[''result_file''];' || chr(13) || '		}' || chr(13) || '	$this->body .=''<p>Vous en souhaitant bonne réception,</p>' || chr(13) || '	<p>Cordialement,</p>' || chr(13) || '	<p>Le service d\''Information Géographique et Applicatifs Métiers (SIGAM)<br/>' || chr(13) || '	Conseil de Territoire du Pays d\''Aix<br/>' || chr(13) || '	Tel : 04 42 93 83 50<br/>' || chr(13) || '	Mail : <a href="mailto:sig.paysdaix@ampmetropole.fr">sig.paysdaix@ampmetropole.fr</a>  </p>' || chr(13) || '' || chr(13) || '	'';' || chr(13) || '}else{' || chr(13) || '	$this->to = '''' . $this->aObjects["oOrder"]->getUser()->aFields[''email''] . '''';' || chr(13) || '	$this->subject = ''[GTF]-'' . $this->aObjects["oOrder"]->getWorkspace()->aFields[''name''] . '' - Echec du traitement'';' || chr(13) || '	$this->body = $image.''<p>Bonjour,</p>'';' || chr(13) || '    $this->body .= ''<p>La demande n°'' . $this->aObjects["oOrder"]->aFields[''order_id''] . '' pour le traitement <strong>'' . $this->aObjects["oOrder"]->getWorkspace()->aFields[''name''] . ''</strong> n\''a pu être exécutée correctement suite à une erreur.<br/> Veuillez contactez votre administrateur.<br/>'';' || chr(13) || '    $this->aAttachments[0] = $this->aObjects["oOrder"]->aFields[''log_file''];' || chr(13) || '}', '1', 'gtf', NULL);
+					INSERT INTO s_gtf.email_template (name, subject, body, "to", cc, cci, code, use_advanced, rt_emailcontext_id, attachment) VALUES ('Email contrôleur AE soumis', NULL, NULL, NULL, NULL, NULL, 'require_once("gtf_lib/gtf_object/User.class.inc");' || chr(13) || 'require_once("vmlib/logUtil.inc");' || chr(13) || '$iBoId = $this->aObjects["oBusinessObject"]->aValues[''bo_id''];' || chr(13) || '' || chr(13) || '//$this->to = ''sig.paysdaix@ampmetropole.fr'';' || chr(13) || '$this->to = ''sofian.pujo@veremes.com'';' || chr(13) || '$this->cc = '''';' || chr(13) || '$this->cci = '''';' || chr(13) || '$this->subject = ''[GTF] - Demande N° ''.$this->aObjects[''oBusinessObject'']->aValues[''bo_id''].'' - Dépôt de l\''Acte d\''Engagement à valider'';' || chr(13) || '$this->body = ''<p>Bonjour,</p>' || chr(13) || '	<p> </p>' || chr(13) || '	<p>L\''acte d\''engagement correspondant à la demande n°''.$this->aObjects[''oBusinessObject'']->aValues[''bo_id''].'' en date du ''.date(''d/m/Y'',strtotime($this->aObjects[''oBusinessObject'']->aValues[''creation_date''])).'' a été déposé sur le serveur par le demandeur.</p>' || chr(13) || '	<p></p>' || chr(13) || '	<p>Cordialement,</p>' || chr(13) || '	<p> </p>' || chr(13) || '	<p>L\''application d\''extraction de données de GTF</p>'';' || chr(13) || 'error_log($this->body);' || chr(13) || '$this->aAttachments[0] = '''';' || chr(13) || '', '1', 'gtf', NULL);
+					INSERT INTO s_gtf.email_template (name, subject, body, "to", cc, cci, code, use_advanced, rt_emailcontext_id, attachment) VALUES ('Email demandeur Extraction refusée', NULL, NULL, NULL, NULL, NULL, 'require_once("gtf_lib/gtf_object/User.class.inc");' || chr(13) || 'require_once("vmlib/logUtil.inc");' || chr(13) || '$iBoId = $this->aObjects["oBusinessObject"]->aValues[''bo_id''];' || chr(13) || '$sUserLogin = $this->aObjects["oBusinessObject"]->aValues[''requestor''];' || chr(13) || '$sSql = ''SELECT user_id FROM s_vitis.user WHERE login=\''''.$this->aObjects[''oBusinessObject'']->aValues[''requestor''].''\'''';' || chr(13) || '//writeToErrorLog($sSql);' || chr(13) || '$oResult = $oBd->execute($sSql);' || chr(13) || '/*if(!$oBd->erreurRencontree) {' || chr(13) || '	if ($oBd->nombreLigne ($oResult) > 0) {' || chr(13) || '		$this->aObjects[''oUser''] = new User($oBd, $oBd->objetSuivant($oResult)->user_id, $this->aObjects["oBusinessObject"]->aProperties);' || chr(13) || '	}' || chr(13) || '}*/' || chr(13) || '//$this->to = ''sig.paysdaix@ampmetropole.fr'';' || chr(13) || 'error_log(print_r($this->aObjects[''oBusinessObject''], true));' || chr(13) || '//$this->to = $this->aObjects[''oBusinessObject'']->aValues[''email''];' || chr(13) || '$this->cc = '''';' || chr(13) || '$this->cci = '''';' || chr(13) || '$this->subject = ''[PAYS D\''AIX - SIGAM] Demande N° ''.$this->aObjects[''oBusinessObject'']->aValues[''bo_id''].'' - Rejet de votre demande d\''extraction de données'';' || chr(13) || '$this->body = ''<p>Bonjour,</p>' || chr(13) || '	<p>Suite à votre demande n°''.$this->aObjects[''oBusinessObject'']->aValues[''bo_id''].'' en date du ''.date(''d/m/Y'',strtotime($this->aObjects[''oBusinessObject'']->aValues[''creation_date''])).'' pour l\''extraction des données, votre demande a été rejetée pour la ou les raisons suivantes :<br/>'';' || chr(13) || 'if($this->aObjects[''oBusinessObject'']->aValues[''signed''] == "false"){' || chr(13) || '	$this->body .= '' - L\''acte d\''engagement n\''est pas signé<br/>'';' || chr(13) || '}' || chr(13) || 'if($this->aObjects[''oBusinessObject'']->aValues[''accepted_by_cpa''] == "false"){' || chr(13) || '	$this->body .= '' - La CPA ne valide pas l\''usage décrit pour les données du cadastre<br/>'';' || chr(13) || '}' || chr(13) || 'if($this->aObjects[''oBusinessObject'']->aValues[''identification_complete''] == "false"){' || chr(13) || '	$this->body .= '' - Le cadre d\''identification du dépositaire est incomplet</p>'';' || chr(13) || '}' || chr(13) || 'if($this->aObjects[''oBusinessObject'']->aValues[''definition_complete''] == "false"){' || chr(13) || '	$this->body .= '' - La définition des traitements pour l\''usage du cadastre est non renseignée<br/>'';' || chr(13) || '}' || chr(13) || '$this->body .= $this->aObjects[''oBusinessObject'']->aValues[''comment''].''<br/>'';' || chr(13) || '$this->body .=''<p>Cordialement,</p>' || chr(13) || '<p>Le service d\''Information Géographique et Applicatifs Métiers (SIGAM)<br/>' || chr(13) || 'Territoire du Pays d\''Aix<br/>' || chr(13) || 'Tel : 04 42 93 83 50<br/>' || chr(13) || 'Mail : <a href="mailto:sig.paysdaix@ampmetropole.fr">sig.paysdaix@ampmetropole.fr</a>  </p>'';' || chr(13) || '$this->aAttachments[0] = '''';' || chr(13) || '', '1', 'gtf', NULL);
+					INSERT INTO s_gtf.email_template (name, subject, body, "to", cc, cci, code, use_advanced, rt_emailcontext_id, attachment) VALUES ('Email demandeur données extraites', NULL, NULL, NULL, NULL, NULL, 'require_once("gtf_lib/gtf_object/Order.class.inc");' || chr(13) || 'require_once("gtf_lib/gtf_object/User.class.inc");' || chr(13) || '$iBoId = $this->aObjects["oMessage"]->getBody(''bo_id'');' || chr(13) || '$sRequest = "SELECT * from s_extraction.extraction where bo_id = ".$iBoId;' || chr(13) || '$oPDOresult = $this->oBd->executeWithParams($sRequest, array());' || chr(13) || '$aBo = $this->oBd->ligneSuivante ($oPDOresult);' || chr(13) || '$iOrderId = $this->aObjects["oMessage"]->getBody(''order_id'');' || chr(13) || '$this->aObjects["oOrder"]= new OrderLib($oBd, $iOrderId, $this->aObjects["oMessage"]->aProperties, "v_order");' || chr(13) || '$sUserLogin = $aBo[''requestor''];' || chr(13) || '$sSql = ''SELECT user_id FROM s_framework.user WHERE login=\''''.$this->aObjects[''oBusinessObject'']->aValues[''requestor''].''\'''';' || chr(13) || '$oResult = $oBd->execute($sSql);' || chr(13) || 'if(!$oBd->erreurRencontree) {' || chr(13) || '	if ($oBd->nombreLigne ($oResult) > 0) {' || chr(13) || '		$this->aObjects[''oUser''] = new User($oBd, $oBd->objetSuivant($oResult)->user_id, $this->aObjects["oMessage"]->aProperties);' || chr(13) || '	}' || chr(13) || '}' || chr(13) || '$this->to = $aBo[''email''];' || chr(13) || '$this->cc = $this->aObjects["oOrder"]->aFields[''email_notifications''];' || chr(13) || '$this->cci = '''';' || chr(13) || '$this->subject = ''[PAYS D\''AIX - SIGAM] Demande N° ''.$aBo[''bo_id''].'' - Données SIG extraites'';' || chr(13) || '$this->body = ''<p>Bonjour</p>' || chr(13) || '<p></p><p>Les données correspondant à votre demande n°''.$aBo[''bo_id''].'' en date du ''.date(''d/m/Y'',strtotime($aBo[''creation_date''])).'' sont disponibles '';' || chr(13) || ' if (filesize($this->aObjects["oOrder"]->aFields[''result_file''])> 5242880){' || chr(13) || '        $this->body .= ''sur le lien de téléchargement suivant :<br/><a href="https://sigdata.agglo-paysdaix.fr/public/gtf/''.$this->aObjects["oOrder"]->aFields[''result_url''] . ''">Télécharger le résultat</a></p>'';' || chr(13) || '    } else {' || chr(13) || '	 	 $this->body .= ''en pièce jointe.</p>'';' || chr(13) || '        $this->aAttachments[0] = $this->aObjects["oOrder"]->aFields[''result_file''];' || chr(13) || '    }' || chr(13) || '$this->body .=''<p>Vous en souhaitant bonne réception,</p>' || chr(13) || '<p>Cordialement,</p>' || chr(13) || '<p>Le service d\''Information Géographique et Applicatifs Métiers (SIGAM)<br/>' || chr(13) || 'Terriroire du Pays d\''Aix<br/>' || chr(13) || 'Tel : 04 42 93 83 50<br/>' || chr(13) || 'Mail : <a href="mailto:sig.paysdaix@ampmetropole.fr">sig.paysdaix@ampmetropole.fr</a>  </p>' || chr(13) || '' || chr(13) || ''';' || chr(13) || '// les résultats de moins de 5 Mo sont envoyés en pièce jointe' || chr(13) || '   ' || chr(13) || '', '1', 'gtf', NULL);
+					
+				]]>
+			</code>
+		</query>
+		<query>
+			<type>update</type>
+			<version>2018-00-00</version>
+			<code>
+				<![CDATA[
+					--Partie pour le module extraction version 2018-00-00 généré par WAB le 22/05/2018 à 09:09:32
+					ALTER TABLE s_extraction.rt_layer ADD COLUMN ct_id integer;
+										UPDATE s_extraction.rt_layer set ct_id = 2;	
+										ALTER TABLE s_extraction.rt_layer DROP CONSTRAINT pk_projet_type;
+										ALTER TABLE s_extraction.rt_layer ADD COLUMN layer_ct_id serial;
+										ALTER TABLE s_extraction.rt_layer ADD CONSTRAINT pk_layer_ct PRIMARY KEY (layer_ct_id);	
+										ALTER TABLE s_extraction.rt_layer ADD COLUMN mutualized boolean;	
+										ALTER TABLE s_extraction.rt_feature_model ADD COLUMN ct_id integer;
+										UPDATE s_extraction.rt_feature_model set ct_id = 2;	
+										ALTER TABLE s_extraction.rt_feature_model ADD COLUMN layer_ct_id integer;
+										UPDATE s_extraction.rt_feature_model SET layer_ct_id = s_extraction.rt_layer.layer_ct_id FROM s_extraction.rt_layer WHERE rt_feature_model.feature_type = s_extraction.rt_layer.layer_id and rt_feature_model.ct_id = s_extraction.rt_feature_model.ct_id;
+										ALTER TABLE s_extraction.rt_feature_model DROP COLUMN ct_id;
+										ALTER TABLE s_extraction.rt_feature_model ALTER COLUMN layer_ct_id SET NOT NULL;
+										ALTER TABLE s_extraction.rt_layer ADD CONSTRAINT rt_layer_layer_id_ct_id_key UNIQUE (layer_id, ct_id);
+										ALTER TABLE ONLY s_extraction.rt_feature_model  ADD CONSTRAINT fk_layer_ct_id FOREIGN KEY (layer_ct_id) REFERENCES s_extraction.rt_layer(layer_ct_id);
+										ALTER TABLE s_extraction.rt_feature_model ADD UNIQUE (feature_type, attribute_name, layer_ct_id);
+										ALTER TABLE s_extraction.extraction ADD COLUMN preco_tech boolean;
+										ALTER TABLE s_extraction.extraction ADD COLUMN chart_graph boolean;
+										ALTER TABLE s_extraction.extraction ADD COLUMN metadonnees boolean;
+										DROP VIEW s_extraction.v_extraction;
+										CREATE OR REPLACE VIEW s_extraction.v_extraction AS  SELECT DISTINCT extraction.bo_id,     extraction.status_id,     extraction.history,     extraction.creation_date,     extraction.requestor,     extraction.ae,     extraction.extent,     extraction.company,     extraction.layers,     extraction.vector_format_id,     extraction.vector_format_id AS format_id,     extraction.coordsys_id,     extraction.raster_format_id,     extraction.extent_method,     extraction.signed,     extraction.accepted_by_cpa,     extraction.identification_complete,     extraction.definition_complete,     extraction.priority_id,     extraction.id_com,     extraction.id_conseil,     extraction.email,     extraction.note,     extraction.preco_tech,     extraction.chart_graph,     extraction.metadonnees,     rt_extraction_status.progress AS progress_level,     rt_extraction_status.name AS status_name,     rt_extraction_status.name AS status    FROM s_extraction.extraction      LEFT JOIN s_extraction.rt_extraction_status ON extraction.status_id = rt_extraction_status.status_id      LEFT JOIN s_extraction.rt_extraction_status_group ON rt_extraction_status.status_id = rt_extraction_status_group.status_id      LEFT JOIN s_vitis.user_group ON rt_extraction_status_group.group_id = user_group.group_id      LEFT JOIN s_vitis."user" ON user_group.user_id = "user".user_id   WHERE "user".login::name = "current_user"() AND (extraction.requestor::name = "current_user"() OR rt_extraction_status_group.group_id = 12);  
+										ALTER TABLE s_extraction.v_extraction     OWNER TO u_vitis;  
+										GRANT ALL ON TABLE s_extraction.v_extraction TO extraction_user; 
+										GRANT ALL ON TABLE s_extraction.v_extraction TO u_vitis; 
+										GRANT ALL ON TABLE s_extraction.v_extraction TO extraction_admin;
+										COMMENT ON COLUMN s_extraction.extraction.history is 'deprecated';
+										COMMENT ON COLUMN s_extraction.extraction.status is 'deprecated';
+										CREATE SEQUENCE s_extraction.ct_ct_id_seq;
+										ALTER SEQUENCE s_extraction.ct_ct_id_seq OWNER TO u_vitis;
+										CREATE TABLE s_extraction.ct(     ct_id integer NOT NULL DEFAULT nextval('s_extraction.ct_ct_id_seq'::regclass),     name character varying(50) COLLATE pg_catalog."default" NOT NULL,     format character varying(255) COLLATE pg_catalog."default",     namedconnection character varying(255) COLLATE pg_catalog."default",     geom geometry(MultiPolygon,2154),     CONSTRAINT pk_ct PRIMARY KEY (ct_id) );  
+										ALTER TABLE s_extraction.ct     OWNER to u_vitis;  
+										GRANT SELECT ON TABLE s_extraction.ct TO extraction_admin;  
+										GRANT SELECT ON TABLE s_extraction.ct TO extraction_user;  
+										GRANT ALL ON TABLE s_extraction.ct TO u_vitis; 
+										CREATE INDEX ct_ct_id     ON s_extraction.ct USING btree     (ct_id);
+										CREATE TABLE s_extraction.commune (commune_id character(6) COLLATE pg_catalog."default" NOT NULL,ct_id integer, name varchar(255) COLLATE pg_catalog."default" NOT NULL,geom geometry(Polygon,2154) NOT NULL,CONSTRAINT pk_commune PRIMARY KEY (commune_id), CONSTRAINT fk_ct_id FOREIGN KEY (ct_id) REFERENCES s_extraction.ct (ct_id) MATCH SIMPLE ON UPDATE RESTRICT ON DELETE SET NULL);
+										ALTER TABLE s_extraction.commune OWNER to u_vitis;
+										GRANT SELECT ON TABLE s_extraction.commune TO extraction_admin;
+										GRANT SELECT ON TABLE s_extraction.commune TO extraction_user;
+										GRANT ALL ON TABLE s_extraction.commune TO u_vitis;
+					--Partie WABSQL générée par WAB le 04/05/2018 à 10:02:22
+					-- Ces tables sont normalement prévues dans votre fichier VisualParadigm et sont necessaires pour le fonctionnement de vos objets WAB
+					-- CREATE TABLE s_extraction.rt_extraction_status (status_id integer NOT NULL DEFAULT nextval('s_dtnet.seq_common'::regclass), name character varying(50)  NOT NULL, progress integer NOT NULL, CONSTRAINT rt_extraction_status_pkey PRIMARY KEY (status_id));
+					-- CREATE TABLE s_extraction.rt_extraction_status_group (status_id integer NOT NULL, group_id integer NOT NULL, link_id integer NOT NULL DEFAULT nextval('s_dtnet.seq_common'::regclass), CONSTRAINT rt_extraction_status_group_pkey PRIMARY KEY (link_id), CONSTRAINT fk_extraction_status_group FOREIGN KEY (status_id) REFERENCES s_extraction.rt_extraction_status (status_id) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION);
+					-- CREATE TABLE s_extraction.extraction_history (history_id integer NOT NULL DEFAULT nextval('s_extraction.seq_common'::regclass), date timestamp with time zone NOT NULL, login character varying(50) NOT NULL, comment text NOT NULL, bo_id integer NOT NULL, CONSTRAINT extraction_history_pkey PRIMARY KEY (history_id), CONSTRAINT fk_extraction_history FOREIGN KEY (bo_id) REFERENCES s_extraction.extraction (bo_id) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION);
+					-- Vue basique pour vos objets WAB tenant compte de la restriction groupe état
+					--CREATE VIEW s_extraction.v_extraction AS SELECT extraction.* FROM s_extraction.extraction LEFT JOIN s_extraction.rt_extraction_status ON rt_extraction_status.status_id = extraction.status_id JOIN s_extraction.rt_extraction_status_group ON rt_extraction_status.status_id = rt_extraction_status_group.status_id WHERE (rt_extraction_status_group.group_id IN ( SELECT user_group.group_id FROM s_vitis.user_group LEFT JOIN s_vitis."user" ON user_group.user_id = "user".user_id WHERE "user".login::name = "current_user"()));
+					-- u_vitis est propriétaire de toutes vos tables
+					ALTER TABLE s_extraction.rt_extraction_status_group OWNER TO u_vitis;
+					ALTER TABLE s_extraction.rt_format OWNER TO u_vitis;
+					ALTER TABLE s_extraction.v_extraction OWNER TO u_vitis;
+					ALTER TABLE s_extraction.rt_coordsys OWNER TO u_vitis;
+					ALTER TABLE s_extraction.rt_extraction_status OWNER TO u_vitis;
+					ALTER TABLE s_extraction.rt_layer OWNER TO u_vitis;
+					ALTER TABLE s_extraction.rt_feature_model OWNER TO u_vitis;
+					ALTER TABLE s_extraction.extraction OWNER TO u_vitis;
+					ALTER TABLE s_extraction.version OWNER TO u_vitis;
+					-- u_vitis propriétaire sur les tables des objets WAB
+					--ALTER TABLE s_extraction.rt_extraction_status OWNER to u_vitis;
+					--ALTER TABLE s_extraction.rt_extraction_status_group OWNER to u_vitis;
+					--ALTER TABLE s_extraction.extraction_history OWNER to u_vitis;
+					-- Gestion des droits d'après les méthodes php saisies pour vos objets (annule et remplace)
+					REVOKE ALL ON TABLE s_extraction.rt_coordsys FROM extraction_admin;
+					REVOKE ALL ON TABLE s_extraction.v_extraction FROM extraction_user;
+					REVOKE ALL ON TABLE s_extraction.rt_format FROM extraction_admin;
+					REVOKE ALL ON TABLE s_extraction.rt_layer FROM extraction_admin;
+					GRANT SELECT, INSERT, UPDATE, DELETE ON TABLE s_extraction.rt_coordsys TO extraction_admin;
+					GRANT SELECT, INSERT, UPDATE, DELETE ON TABLE s_extraction.v_extraction TO extraction_user;
+					GRANT SELECT, INSERT, UPDATE, DELETE ON TABLE s_extraction.rt_format TO extraction_admin;
+					GRANT SELECT, INSERT, UPDATE, DELETE ON TABLE s_extraction.rt_layer TO extraction_admin;
+					-- Droits sur les tables des objets WAB
+					GRANT SELECT ON TABLE s_extraction.rt_extraction_status TO extraction_user;
+					GRANT SELECT ON TABLE s_extraction.rt_extraction_status_group TO extraction_user;
+					GRANT SELECT, INSERT ON TABLE s_extraction.extraction_history TO extraction_user;
+					
 
-                                        GRANT ALL ON TABLE s_extraction.rt_layer TO extraction_admin;
-                                        GRANT SELECT ON TABLE s_extraction.rt_layer TO extraction_user;
+					UPDATE s_gtf.email_template SET subject=NULL, body=NULL, "to"=NULL, cc=NULL, cci=NULL, code='$logo = $this->aProperties[''ws_data_dir'']."/gtf/LOGO_AMP.jpg";' || chr(13) || '$base64 = base64_encode(file_get_contents($logo));' || chr(13) || '$image = ''<img src="data:image/png;base64,''.$base64.''">'';' || chr(13) || 'require_once("gtf_lib/gtf_object/Order.class.inc");' || chr(13) || 'require_once("gtf_lib/gtf_object/User.class.inc");' || chr(13) || '$iBoId = $this->aObjects["oMessage"]->getBody(''bo_id'');' || chr(13) || '$sRequest = "SELECT * from s_extraction.extraction where bo_id = ".$iBoId;' || chr(13) || '$oPDOresult = $this->oBd->executeWithParams($sRequest, array());' || chr(13) || '$aBo = $this->oBd->ligneSuivante ($oPDOresult);' || chr(13) || '$iOrderId = $this->aObjects["oMessage"]->getBody(''order_id'');' || chr(13) || '$this->aObjects["oOrder"]= new orderLib($oBd, $iOrderId, $this->aObjects["oMessage"]->aProperties, "v_order");' || chr(13) || 'error_log( print_r($this->aObjects[''oOrder''], true));' || chr(13) || '$this->aObjects[''oUser''] = new User($oBd, $this->aObjects[''oOrder'']->aFields[''user_id''], $this->aObjects["oMessage"]->aProperties);' || chr(13) || '$this->to = $aBo[''email''];' || chr(13) || '$this->cc = $this->aObjects["oOrder"]->aFields[''email_notifications''];' || chr(13) || '$this->cci = '''';' || chr(13) || '$this->subject = ''[PAYS D\''AIX - SIGAM] Demande N° ''.$aBo[''bo_id''].'' - Acte d\''Engagement pour l\''utilisation des données SIG'';' || chr(13) || '$this->body =  $image.''<p>Bonjour</p>' || chr(13) || '<p></p>' || chr(13) || '<p>Suite à votre demande n°''.$aBo[''bo_id''].'' en date du ''.date(''d/m/Y'',strtotime($aBo[''creation_date''])).'' pour l\''extraction des données, <u>merci de bien vouloir déposer l\''acte d\''engagement</u> ci-joint complété et signé, à l\''adresse suivante:<br/>' || chr(13) || '<A HREF="https://scpa430.cpa.fr/extraction">Application Extraction</A></p>' || chr(13) || '<p>Une fois réceptionné, l\''acte d\''engagement sera soumis à la validation du Territoire du Pays d\''Aix.<br/>' || chr(13) || 'Si celui-ci est validé, vous recevrez les données par mail (taille < 5Mo) ou par lien de téléchargement (taille > 5Mo).</p>' || chr(13) || '<p>Cordialement,</p>' || chr(13) || '<p>Le service d\''Information Géographique et Applicatifs Métiers (SIGAM)<br/>' || chr(13) || 'Territoire du Pays d\''Aix<br/>' || chr(13) || 'Tel : 04 42 93 83 50<br/>' || chr(13) || 'Mail : <a href="mailto:sig.paysdaix@ampmetropole.fr">sig.paysdaix@ampmetropole.fr</a>  </p>'';' || chr(13) || '// les résultats de moins de 5 Mo sont envoyés en pièce jointe' || chr(13) || '    if (filesize($this->aObjects["oOrder"]->aFields[''result_file''])> (5*1024*1024)){' || chr(13) || '        $this->body .= ''<p>Le résultat est disponible par téléchargement :<br/><a href="'' . $this->aObjects["oOrder"]->aFields[''result_url''] . ''">Télécharger le résultat</a></p>'';' || chr(13) || '    } else {' || chr(13) || '        $this->aAttachments[0] = $this->aObjects["oOrder"]->aFields[''result_file''];' || chr(13) || '    }' || chr(13) || 'error_log(print_r($this->aObjects["oOrder"]->aFields, true));', use_advanced='1', rt_emailcontext_id='gtf', attachment=NULL WHERE "name"='Email demandeur AE généré';
+					UPDATE s_gtf.email_template SET subject=NULL, body=NULL, "to"=NULL, cc=NULL, cci=NULL, code='require_once("gtf_lib/gtf_object/User.class.inc");' || chr(13) || 'require_once("vmlib/logUtil.inc");' || chr(13) || '$iBoId = $this->aObjects["oBusinessObject"]->aValues[''bo_id''];' || chr(13) || '$sUserLogin = $this->aObjects["oBusinessObject"]->aValues[''requestor''];' || chr(13) || '$sSql = ''SELECT user_id FROM s_framework.user WHERE login=\''''.$this->aObjects[''oBusinessObject'']->aValues[''requestor''].''\'''';' || chr(13) || '//writeToErrorLog($sSql);' || chr(13) || '$oResult = $oBd->execute($sSql);' || chr(13) || 'if(!$oBd->erreurRencontree) {' || chr(13) || '	if ($oBd->nombreLigne ($oResult) > 0) {' || chr(13) || '		$this->aObjects[''oUser''] = new User($oBd, $oBd->objetSuivant($oResult)->user_id, $this->aObjects["oBusinessObject"]->aProperties);' || chr(13) || '	}' || chr(13) || '}' || chr(13) || '//$this->to = ''sig@agglo-paysdaix.fr'';' || chr(13) || '$this->to = $this->aObjects[''oBusinessObject'']->aValues[''email''];' || chr(13) || '$this->cc = '''';' || chr(13) || '$this->cci = '''';' || chr(13) || '$this->subject = ''[PAYS D\''AIX- SIGAM] Demande N° ''.$this->aObjects[''oBusinessObject'']->aValues[''bo_id''].'' - Acte d\''engagement non valide'';' || chr(13) || '$this->body = ''<p>Bonjour,</p>' || chr(13) || '	<p>Suite à votre demande n°''.$this->aObjects[''oBusinessObject'']->aValues[''bo_id''].'' en date du ''.date(''d/m/Y'',strtotime($this->aObjects[''oBusinessObject'']->aValues[''creation_date''])).'' pour l\''extraction des données, votre demande n\''a pas encore été validée pour la ou les raisons suivantes :<br/>'';' || chr(13) || 'if($this->aObjects[''oBusinessObject'']->aValues[''signed''] == "false"){' || chr(13) || '	$this->body .= '' - L\''acte d\''engagement n\''est pas signé<br/>'';' || chr(13) || '}' || chr(13) || 'if($this->aObjects[''oBusinessObject'']->aValues[''identification_complete''] == "false"){' || chr(13) || '	$this->body .= ''  - Le cadre d\''identification du dépositaire est incomplet<br/>'';' || chr(13) || '}' || chr(13) || 'if($this->aObjects[''oBusinessObject'']->aValues[''definition_complete''] == "false"){' || chr(13) || '	$this->body .= '' - La définition des traitements pour l\''usage du cadastre est non renseignée<br/>'';' || chr(13) || '}' || chr(13) || 'error_log(print_r($this->aObjects[''oBusinessObject'']->aValues, true));' || chr(13) || '//$this->body .= ''<p>''.$this->aObjects[''oBusinessObject'']->aValues[''comment''].''</p>'';' || chr(13) || '$this->body .=''<p><u>Merci de bien vouloir déposer à nouveau l\''acte d\''engagement</u> à l\''adresse suivante :<br/>' || chr(13) || '<A HREF="https://scpa430.cpa.fr/extraction">Application Extraction</A></p>' || chr(13) || '<p>Une fois réceptionné, l\''acte d\''engagement sera soumis à la validation du Territoire du Pays d\''Aix.<br/>' || chr(13) || 'Si celui-ci est validé, vous recevrez les données par mail (taille < 5Mo) ou par lien de téléchargement (taille > 5Mo).</p>' || chr(13) || '<p>Cordialement,</p>' || chr(13) || '<p>Le service d\''Information Géographique et Applicatifs Métiers (SIGAM)<br/>' || chr(13) || 'Territoire du Pays d\''Aix<br/>' || chr(13) || 'Tel : 04 42 93 83 50<br/>' || chr(13) || 'Mail : <a href="mailto:sig.paysdaix@ampmetropole.fr">sig.paysdaix@ampmetropole.fr</a>  </p>'';' || chr(13) || '$this->aAttachments[0] = '''';' || chr(13) || '', use_advanced='1', rt_emailcontext_id='gtf', attachment=NULL WHERE "name"='Email demandeur AE à resoumettre';
+					UPDATE s_gtf.email_template SET subject=NULL, body=NULL, "to"=NULL, cc=NULL, cci=NULL, code='require_once("gtf_lib/gtf_object/Order.class.inc");' || chr(13) || 'require_once("gtf_lib/gtf_object/User.class.inc");' || chr(13) || '$iBoId = $this->aObjects["oMessage"]->getBody(''bo_id'');' || chr(13) || '$sRequest = "SELECT * from s_extraction.extraction where bo_id = ".$iBoId;' || chr(13) || '$oPDOresult = $this->oBd->executeWithParams($sRequest, array());' || chr(13) || '$aBo = $this->oBd->ligneSuivante ($oPDOresult);' || chr(13) || '$iOrderId = $this->aObjects["oMessage"]->getBody(''order_id'');' || chr(13) || '$this->aObjects["oOrder"]= new OrderLib($oBd, $iOrderId, $this->aObjects["oMessage"]->aProperties, "v_order");' || chr(13) || '$this->aObjects[''oUser''] = new User($oBd, $this->aObjects[''oOrder'']->aFields[''user_id''], $this->aObjects["oMessage"]->aProperties);' || chr(13) || '$this->to = ''sig.paysdaix@ampmetropole.fr'';' || chr(13) || '$this->cc = '''';' || chr(13) || '$this->cci = '''';' || chr(13) || '$this->subject = ''[GTF] - Demande N° ''.$aBo[''bo_id''].'' - Extraction des données'';' || chr(13) || '$this->body = ''<p>Les données concernant la demande n°''.$aBo[''bo_id''].'' en date du ''.date(''d/m/Y'',strtotime($aBo[''creation_date''])).'' ont été envoyées au demandeur.</p>' || chr(13) || '<p>Cordialement,</p>' || chr(13) || '<p>L\''application d\''extraction de données de GTF</p>'';' || chr(13) || '', use_advanced='1', rt_emailcontext_id='gtf', attachment=NULL WHERE "name"='Email controleur données extraites';
+					UPDATE s_gtf.email_template SET subject=NULL, body=NULL, "to"=NULL, cc=NULL, cci=NULL, code='$logo = $this->aProperties[''ws_data_dir'']."/gtf/LOGO_AMP.jpg";' || chr(13) || '$base64 = base64_encode(file_get_contents($logo));' || chr(13) || '$image = ''<img src="data:image/png;base64,''.$base64.''">'';' || chr(13) || 'if ($this->aObjects["oOrder"]->aFields[''order_status_id''] == 3) {' || chr(13) || '	$this->to = '''' . $this->aObjects["oOrder"]->getUser()->aFields[''email''] . '''';' || chr(13) || '	$this->cc = '''' . $this->aObjects["oOrder"]->aFields[''email_notifications''] . '''';' || chr(13) || '	$this->cci = '''';' || chr(13) || '	$this->subject = ''[Pays d\''Aix - SIGAM] - Données extraites'';' || chr(13) || '	$this->body = $image.''<p>Bonjour,</p>'';' || chr(13) || '	$this->body .=''<p></p><p>Les données correspondant à votre demande  en date du ''.date(''d/m/Y'',strtotime($this->aObjects["oOrder"]->aFields[''order_date''])).'' sont disponibles '';' || chr(13) || '	 if (filesize($this->aObjects["oOrder"]->aFields[''result_file''])> 5242880){' || chr(13) || '			$this->body .= ''sur le lien de téléchargement suivant :<br/><a href="''.$this->aObjects["oOrder"]->aFields[''result_url''] . ''">Télécharger le résultat</a></p>'';' || chr(13) || '		} else {' || chr(13) || '			 $this->body .= ''en pièce jointe.</p>'';' || chr(13) || '			$this->aAttachments[0] = $this->aObjects["oOrder"]->aFields[''result_file''];' || chr(13) || '		}' || chr(13) || '	$this->body .=''<p>Vous en souhaitant bonne réception,</p>' || chr(13) || '	<p>Cordialement,</p>' || chr(13) || '	<p>Le service d\''Information Géographique et Applicatifs Métiers (SIGAM)<br/>' || chr(13) || '	Conseil de Territoire du Pays d\''Aix<br/>' || chr(13) || '	Tel : 04 42 93 83 50<br/>' || chr(13) || '	Mail : <a href="mailto:sig.paysdaix@ampmetropole.fr">sig.paysdaix@ampmetropole.fr</a>  </p>' || chr(13) || '' || chr(13) || '	'';' || chr(13) || '}else{' || chr(13) || '	$this->to = '''' . $this->aObjects["oOrder"]->getUser()->aFields[''email''] . '''';' || chr(13) || '	$this->subject = ''[GTF]-'' . $this->aObjects["oOrder"]->getWorkspace()->aFields[''name''] . '' - Echec du traitement'';' || chr(13) || '	$this->body = $image.''<p>Bonjour,</p>'';' || chr(13) || '    $this->body .= ''<p>La demande n°'' . $this->aObjects["oOrder"]->aFields[''order_id''] . '' pour le traitement <strong>'' . $this->aObjects["oOrder"]->getWorkspace()->aFields[''name''] . ''</strong> n\''a pu être exécutée correctement suite à une erreur.<br/> Veuillez contactez votre administrateur.<br/>'';' || chr(13) || '    $this->aAttachments[0] = $this->aObjects["oOrder"]->aFields[''log_file''];' || chr(13) || '}', use_advanced='1', rt_emailcontext_id='gtf', attachment=NULL WHERE "name"='public';
+					UPDATE s_gtf.email_template SET subject=NULL, body=NULL, "to"=NULL, cc=NULL, cci=NULL, code='require_once("gtf_lib/gtf_object/User.class.inc");' || chr(13) || 'require_once("vmlib/logUtil.inc");' || chr(13) || '$iBoId = $this->aObjects["oBusinessObject"]->aValues[''bo_id''];' || chr(13) || '' || chr(13) || '//$this->to = ''sig.paysdaix@ampmetropole.fr'';' || chr(13) || '$this->to = ''sofian.pujo@veremes.com'';' || chr(13) || '$this->cc = '''';' || chr(13) || '$this->cci = '''';' || chr(13) || '$this->subject = ''[GTF] - Demande N° ''.$this->aObjects[''oBusinessObject'']->aValues[''bo_id''].'' - Dépôt de l\''Acte d\''Engagement à valider'';' || chr(13) || '$this->body = ''<p>Bonjour,</p>' || chr(13) || '	<p> </p>' || chr(13) || '	<p>L\''acte d\''engagement correspondant à la demande n°''.$this->aObjects[''oBusinessObject'']->aValues[''bo_id''].'' en date du ''.date(''d/m/Y'',strtotime($this->aObjects[''oBusinessObject'']->aValues[''creation_date''])).'' a été déposé sur le serveur par le demandeur.</p>' || chr(13) || '	<p></p>' || chr(13) || '	<p>Cordialement,</p>' || chr(13) || '	<p> </p>' || chr(13) || '	<p>L\''application d\''extraction de données de GTF</p>'';' || chr(13) || 'error_log($this->body);' || chr(13) || '$this->aAttachments[0] = '''';' || chr(13) || '', use_advanced='1', rt_emailcontext_id='gtf', attachment=NULL WHERE "name"='Email contrôleur AE soumis';
+					UPDATE s_gtf.email_template SET subject=NULL, body=NULL, "to"=NULL, cc=NULL, cci=NULL, code='require_once("gtf_lib/gtf_object/User.class.inc");' || chr(13) || 'require_once("vmlib/logUtil.inc");' || chr(13) || '$iBoId = $this->aObjects["oBusinessObject"]->aValues[''bo_id''];' || chr(13) || '$sUserLogin = $this->aObjects["oBusinessObject"]->aValues[''requestor''];' || chr(13) || '$sSql = ''SELECT user_id FROM s_vitis.user WHERE login=\''''.$this->aObjects[''oBusinessObject'']->aValues[''requestor''].''\'''';' || chr(13) || '//writeToErrorLog($sSql);' || chr(13) || '$oResult = $oBd->execute($sSql);' || chr(13) || '/*if(!$oBd->erreurRencontree) {' || chr(13) || '	if ($oBd->nombreLigne ($oResult) > 0) {' || chr(13) || '		$this->aObjects[''oUser''] = new User($oBd, $oBd->objetSuivant($oResult)->user_id, $this->aObjects["oBusinessObject"]->aProperties);' || chr(13) || '	}' || chr(13) || '}*/' || chr(13) || '//$this->to = ''sig.paysdaix@ampmetropole.fr'';' || chr(13) || 'error_log(print_r($this->aObjects[''oBusinessObject''], true));' || chr(13) || '//$this->to = $this->aObjects[''oBusinessObject'']->aValues[''email''];' || chr(13) || '$this->cc = '''';' || chr(13) || '$this->cci = '''';' || chr(13) || '$this->subject = ''[PAYS D\''AIX - SIGAM] Demande N° ''.$this->aObjects[''oBusinessObject'']->aValues[''bo_id''].'' - Rejet de votre demande d\''extraction de données'';' || chr(13) || '$this->body = ''<p>Bonjour,</p>' || chr(13) || '	<p>Suite à votre demande n°''.$this->aObjects[''oBusinessObject'']->aValues[''bo_id''].'' en date du ''.date(''d/m/Y'',strtotime($this->aObjects[''oBusinessObject'']->aValues[''creation_date''])).'' pour l\''extraction des données, votre demande a été rejetée pour la ou les raisons suivantes :<br/>'';' || chr(13) || 'if($this->aObjects[''oBusinessObject'']->aValues[''signed''] == "false"){' || chr(13) || '	$this->body .= '' - L\''acte d\''engagement n\''est pas signé<br/>'';' || chr(13) || '}' || chr(13) || 'if($this->aObjects[''oBusinessObject'']->aValues[''accepted_by_cpa''] == "false"){' || chr(13) || '	$this->body .= '' - La CPA ne valide pas l\''usage décrit pour les données du cadastre<br/>'';' || chr(13) || '}' || chr(13) || 'if($this->aObjects[''oBusinessObject'']->aValues[''identification_complete''] == "false"){' || chr(13) || '	$this->body .= '' - Le cadre d\''identification du dépositaire est incomplet</p>'';' || chr(13) || '}' || chr(13) || 'if($this->aObjects[''oBusinessObject'']->aValues[''definition_complete''] == "false"){' || chr(13) || '	$this->body .= '' - La définition des traitements pour l\''usage du cadastre est non renseignée<br/>'';' || chr(13) || '}' || chr(13) || '$this->body .= $this->aObjects[''oBusinessObject'']->aValues[''comment''].''<br/>'';' || chr(13) || '$this->body .=''<p>Cordialement,</p>' || chr(13) || '<p>Le service d\''Information Géographique et Applicatifs Métiers (SIGAM)<br/>' || chr(13) || 'Territoire du Pays d\''Aix<br/>' || chr(13) || 'Tel : 04 42 93 83 50<br/>' || chr(13) || 'Mail : <a href="mailto:sig.paysdaix@ampmetropole.fr">sig.paysdaix@ampmetropole.fr</a>  </p>'';' || chr(13) || '$this->aAttachments[0] = '''';' || chr(13) || '', use_advanced='1', rt_emailcontext_id='gtf', attachment=NULL WHERE "name"='Email demandeur Extraction refusée';
+					UPDATE s_gtf.email_template SET subject=NULL, body=NULL, "to"=NULL, cc=NULL, cci=NULL, code='require_once("gtf_lib/gtf_object/Order.class.inc");' || chr(13) || 'require_once("gtf_lib/gtf_object/User.class.inc");' || chr(13) || '$iBoId = $this->aObjects["oMessage"]->getBody(''bo_id'');' || chr(13) || '$sRequest = "SELECT * from s_extraction.extraction where bo_id = ".$iBoId;' || chr(13) || '$oPDOresult = $this->oBd->executeWithParams($sRequest, array());' || chr(13) || '$aBo = $this->oBd->ligneSuivante ($oPDOresult);' || chr(13) || '$iOrderId = $this->aObjects["oMessage"]->getBody(''order_id'');' || chr(13) || '$this->aObjects["oOrder"]= new OrderLib($oBd, $iOrderId, $this->aObjects["oMessage"]->aProperties, "v_order");' || chr(13) || '$sUserLogin = $aBo[''requestor''];' || chr(13) || '$sSql = ''SELECT user_id FROM s_framework.user WHERE login=\''''.$this->aObjects[''oBusinessObject'']->aValues[''requestor''].''\'''';' || chr(13) || '$oResult = $oBd->execute($sSql);' || chr(13) || 'if(!$oBd->erreurRencontree) {' || chr(13) || '	if ($oBd->nombreLigne ($oResult) > 0) {' || chr(13) || '		$this->aObjects[''oUser''] = new User($oBd, $oBd->objetSuivant($oResult)->user_id, $this->aObjects["oMessage"]->aProperties);' || chr(13) || '	}' || chr(13) || '}' || chr(13) || '$this->to = $aBo[''email''];' || chr(13) || '$this->cc = $this->aObjects["oOrder"]->aFields[''email_notifications''];' || chr(13) || '$this->cci = '''';' || chr(13) || '$this->subject = ''[PAYS D\''AIX - SIGAM] Demande N° ''.$aBo[''bo_id''].'' - Données SIG extraites'';' || chr(13) || '$this->body = ''<p>Bonjour</p>' || chr(13) || '<p></p><p>Les données correspondant à votre demande n°''.$aBo[''bo_id''].'' en date du ''.date(''d/m/Y'',strtotime($aBo[''creation_date''])).'' sont disponibles '';' || chr(13) || ' if (filesize($this->aObjects["oOrder"]->aFields[''result_file''])> 5242880){' || chr(13) || '        $this->body .= ''sur le lien de téléchargement suivant :<br/><a href="https://sigdata.agglo-paysdaix.fr/public/gtf/''.$this->aObjects["oOrder"]->aFields[''result_url''] . ''">Télécharger le résultat</a></p>'';' || chr(13) || '    } else {' || chr(13) || '	 	 $this->body .= ''en pièce jointe.</p>'';' || chr(13) || '        $this->aAttachments[0] = $this->aObjects["oOrder"]->aFields[''result_file''];' || chr(13) || '    }' || chr(13) || '$this->body .=''<p>Vous en souhaitant bonne réception,</p>' || chr(13) || '<p>Cordialement,</p>' || chr(13) || '<p>Le service d\''Information Géographique et Applicatifs Métiers (SIGAM)<br/>' || chr(13) || 'Terriroire du Pays d\''Aix<br/>' || chr(13) || 'Tel : 04 42 93 83 50<br/>' || chr(13) || 'Mail : <a href="mailto:sig.paysdaix@ampmetropole.fr">sig.paysdaix@ampmetropole.fr</a>  </p>' || chr(13) || '' || chr(13) || ''';' || chr(13) || '// les résultats de moins de 5 Mo sont envoyés en pièce jointe' || chr(13) || '   ' || chr(13) || '', use_advanced='1', rt_emailcontext_id='gtf', attachment=NULL WHERE "name"='Email demandeur données extraites';
+					DELETE FROM s_gtf.messageclass_action WHERE messageclass LIKE 'extraction_%';
+					INSERT INTO s_gtf.messageclass_action (messageclass_action_id, messageclass, actionclass, index, parameters) VALUES ((SELECT nextval('s_gtf.seq_common'::regclass)),'AE Généré','BoAction',0,'bo_id_attribute=''bo_id''|method=''trGenerer''|class=''Extractions''|module=''extraction''');
+					INSERT INTO s_gtf.messageclass_action (messageclass_action_id, messageclass, actionclass, index, parameters) VALUES ((SELECT nextval('s_gtf.seq_common'::regclass)),'AE Généré','EmailAction',1,'template_id = ' || (SELECT email_template_id FROM s_gtf.email_template WHERE name = 'Email demandeur AE généré'));
+					INSERT INTO s_gtf.messageclass_action (messageclass_action_id, messageclass, actionclass, index, parameters) VALUES ((SELECT nextval('s_gtf.seq_common'::regclass)),'Extraction Aix','EmailAction',1,'template_id = ' || (SELECT email_template_id FROM s_gtf.email_template WHERE name = 'Email controleur données extraites'));
+					INSERT INTO s_gtf.messageclass_action (messageclass_action_id, messageclass, actionclass, index, parameters) VALUES ((SELECT nextval('s_gtf.seq_common'::regclass)),'Extraction Aix','EmailAction',2,'template_id = ' || (SELECT email_template_id FROM s_gtf.email_template WHERE name = 'Email demandeur données extraites'));
+					INSERT INTO s_gtf.messageclass_action (messageclass_action_id, messageclass, actionclass, index, parameters) VALUES ((SELECT nextval('s_gtf.seq_common'::regclass)),'Extraction Aix','BoAction',0,'bo_id_attribute=''bo_id''|method=''trTerminerExtraction''|class=''Extractions''|module=''extraction''');
+					--Partie s_vitis généré par WAB le 22/05/2018 à 09:09:31
+					DELETE FROM s_vitis.vm_section WHERE label_id ~ '^extraction_([0-9]+)$';
+					DELETE FROM s_vitis.vm_table_field WHERE label_id ~ '^extraction_([0-9]+)$';
+					DELETE FROM s_vitis.vm_table_button WHERE label_id ~ '^extraction_([0-9]+)$';
+					DELETE FROM s_vitis.vm_module WHERE module_id='extraction';
+					DELETE FROM s_vitis.vm_string WHERE string_id ~ '^extraction_([0-9]+)$';
+					INSERT INTO s_vitis.vm_module (module_id, description, version, label) VALUES ('extraction','Module Extraction CG34',0.1,'Module Extraction');
+					INSERT INTO s_vitis.group (group_id, name) SELECT (SELECT nextval('s_vitis.seq_common'::regclass)), 'demandeur' WHERE NOT EXISTS (SELECT group_id FROM s_vitis.group WHERE name='demandeur');
+					INSERT INTO s_vitis.group (group_id, name) SELECT (SELECT nextval('s_vitis.seq_common'::regclass)), 'controleur' WHERE NOT EXISTS (SELECT group_id FROM s_vitis.group WHERE name='controleur');
+					INSERT INTO s_vitis.privileges (rolname, description) SELECT 'extraction_admin', 'administrateur extraction' WHERE NOT EXISTS (SELECT rolname FROM s_vitis.privileges WHERE rolname='extraction_admin');
+					INSERT INTO s_vitis.privileges (rolname, description) SELECT 'extraction_user', 'utilisateur extraction' WHERE NOT EXISTS (SELECT rolname FROM s_vitis.privileges WHERE rolname='extraction_user');
+					SELECT s_vitis.create_role_if_not_exists('extraction_admin', 'NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION');
+					SELECT s_vitis.create_role_if_not_exists('extraction_user', 'NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION');
+					INSERT INTO s_vitis.vm_string (string, string_id) VALUES ('Section General', 'extraction_1');
+					INSERT INTO s_vitis.vm_string (string, string_id) VALUES ('field bo_id', 'extraction_4');
+					INSERT INTO s_vitis.vm_string (string, string_id) VALUES ('field status', 'extraction_6');
+					INSERT INTO s_vitis.vm_string (string, string_id) VALUES ('objet extraction_extraction', 'extraction_0');
+					INSERT INTO s_vitis.vm_string (string, string_id) VALUES ('field progress_level', 'extraction_7');
+					INSERT INTO s_vitis.vm_string (string, string_id) VALUES ('Boutton Supprimer', 'extraction_2');
+					INSERT INTO s_vitis.vm_string (string, string_id) VALUES ('field company', 'extraction_8');
+					INSERT INTO s_vitis.vm_string (string, string_id) VALUES ('Boutton Ajout', 'extraction_3');
+					INSERT INTO s_vitis.vm_string (string, string_id) VALUES ('field requestor', 'extraction_5');
+					INSERT INTO s_vitis.vm_string (string, string_id) VALUES ('field layers', 'extraction_9');
+					INSERT INTO s_vitis.vm_string (string, string_id) VALUES ('objet extraction_coordsys', 'extraction_10');
+					INSERT INTO s_vitis.vm_string (string, string_id) VALUES ('Section General', 'extraction_11');
+					INSERT INTO s_vitis.vm_string (string, string_id) VALUES ('Boutton Supprimer', 'extraction_12');
+					INSERT INTO s_vitis.vm_string (string, string_id) VALUES ('Boutton Ajout', 'extraction_13');
+					INSERT INTO s_vitis.vm_string (string, string_id) VALUES ('objet extraction_format', 'extraction_14');
+					INSERT INTO s_vitis.vm_string (string, string_id) VALUES ('Section General', 'extraction_15');
+					INSERT INTO s_vitis.vm_string (string, string_id) VALUES ('Boutton Supprimer', 'extraction_16');
+					INSERT INTO s_vitis.vm_string (string, string_id) VALUES ('Boutton Ajout', 'extraction_17');
+					INSERT INTO s_vitis.vm_string (string, string_id) VALUES ('objet extraction_layer', 'extraction_18');
+					INSERT INTO s_vitis.vm_string (string, string_id) VALUES ('Section General', 'extraction_19');
+					INSERT INTO s_vitis.vm_string (string, string_id) VALUES ('Boutton Supprimer', 'extraction_20');
+					INSERT INTO s_vitis.vm_string (string, string_id) VALUES ('Boutton Ajout', 'extraction_21');
+					INSERT INTO s_vitis.vm_string (string, string_id) VALUES ('field coordsys_id', 'extraction_22');
+					INSERT INTO s_vitis.vm_string (string, string_id) VALUES ('field coordsys', 'extraction_23');
+					INSERT INTO s_vitis.vm_string (string, string_id) VALUES ('field format_id', 'extraction_24');
+					INSERT INTO s_vitis.vm_string (string, string_id) VALUES ('field format', 'extraction_25');
+					INSERT INTO s_vitis.vm_string (string, string_id) VALUES ('field use_for_raster', 'extraction_26');
+					INSERT INTO s_vitis.vm_string (string, string_id) VALUES ('field use_for_vector', 'extraction_27');
+					INSERT INTO s_vitis.vm_string (string, string_id) VALUES ('field layer_id', 'extraction_28');
+					INSERT INTO s_vitis.vm_string (string, string_id) VALUES ('field layer', 'extraction_29');
+					INSERT INTO s_vitis.vm_string (string, string_id) VALUES ('field category', 'extraction_30');
+					INSERT INTO s_vitis.vm_string (string, string_id) VALUES ('field restriction', 'extraction_31');
+					INSERT INTO s_vitis.vm_string (string, string_id) VALUES ('field unused_attributes', 'extraction_32');
+					INSERT INTO s_vitis.vm_string (string, string_id) VALUES ('Section General', 'extraction_33');
+					INSERT INTO s_vitis.vm_string (string, string_id) VALUES ('Boutton Supprimer', 'extraction_34');
+					INSERT INTO s_vitis.vm_string (string, string_id) VALUES ('Boutton Ajout', 'extraction_35');
+					INSERT INTO s_vitis.vm_string (string, string_id) VALUES ('Section General', 'extraction_36');
+					INSERT INTO s_vitis.vm_string (string, string_id) VALUES ('Boutton Supprimer', 'extraction_37');
+					INSERT INTO s_vitis.vm_string (string, string_id) VALUES ('Boutton Ajout', 'extraction_38');
+					INSERT INTO s_vitis.vm_string (string, string_id) VALUES ('Section General', 'extraction_39');
+					INSERT INTO s_vitis.vm_string (string, string_id) VALUES ('Boutton Supprimer', 'extraction_40');
+					INSERT INTO s_vitis.vm_string (string, string_id) VALUES ('Boutton Ajout', 'extraction_41');
+					INSERT INTO s_vitis.vm_string (string, string_id) VALUES ('Section General', 'extraction_42');
+					INSERT INTO s_vitis.vm_string (string, string_id) VALUES ('Boutton Supprimer', 'extraction_43');
+					INSERT INTO s_vitis.vm_string (string, string_id) VALUES ('Boutton Ajout', 'extraction_44');
+					INSERT INTO s_vitis.vm_string (string, string_id) VALUES ('field bo_id', 'extraction_45');
+					INSERT INTO s_vitis.vm_string (string, string_id) VALUES ('field status', 'extraction_46');
+					INSERT INTO s_vitis.vm_string (string, string_id) VALUES ('field requestor', 'extraction_47');
+					INSERT INTO s_vitis.vm_string (string, string_id) VALUES ('field company', 'extraction_48');
+					INSERT INTO s_vitis.vm_string (string, string_id) VALUES ('field layers', 'extraction_49');
+					INSERT INTO s_vitis.vm_string (string, string_id) VALUES ('field coordsys_id', 'extraction_50');
+					INSERT INTO s_vitis.vm_string (string, string_id) VALUES ('field coordsys', 'extraction_51');
+					INSERT INTO s_vitis.vm_string (string, string_id) VALUES ('field format_id', 'extraction_52');
+					INSERT INTO s_vitis.vm_string (string, string_id) VALUES ('field format', 'extraction_53');
+					INSERT INTO s_vitis.vm_string (string, string_id) VALUES ('field use_for_raster', 'extraction_54');
+					INSERT INTO s_vitis.vm_string (string, string_id) VALUES ('field use_for_vector', 'extraction_55');
+					INSERT INTO s_vitis.vm_string (string, string_id) VALUES ('field layer_id', 'extraction_56');
+					INSERT INTO s_vitis.vm_string (string, string_id) VALUES ('field layer', 'extraction_57');
+					INSERT INTO s_vitis.vm_string (string, string_id) VALUES ('field category', 'extraction_58');
+					INSERT INTO s_vitis.vm_string (string, string_id) VALUES ('field restriction', 'extraction_59');
+					INSERT INTO s_vitis.vm_string (string, string_id) VALUES ('field unused_attributes', 'extraction_60');
+					INSERT INTO s_vitis.vm_string (string, string_id) VALUES ('section extractionConfig', 'extraction_61');
+					INSERT INTO s_vitis.vm_translation (translation_id, lang, translation) VALUES ('extraction_1','fr','Informations générales');
+					INSERT INTO s_vitis.vm_translation (translation_id, lang, translation) VALUES ('extraction_1','en','General');
+					INSERT INTO s_vitis.vm_translation (translation_id, lang, translation) VALUES ('extraction_4','fr','ID');
+					INSERT INTO s_vitis.vm_translation (translation_id, lang, translation) VALUES ('extraction_4','en','ID');
+					INSERT INTO s_vitis.vm_translation (translation_id, lang, translation) VALUES ('extraction_6','en','Status');
+					INSERT INTO s_vitis.vm_translation (translation_id, lang, translation) VALUES ('extraction_6','fr','Etat');
+					INSERT INTO s_vitis.vm_translation (translation_id, lang, translation) VALUES ('extraction_0','en','Extraction');
+					INSERT INTO s_vitis.vm_translation (translation_id, lang, translation) VALUES ('extraction_0','fr','Extraction');
+					INSERT INTO s_vitis.vm_translation (translation_id, lang, translation) VALUES ('extraction_7','en','Progress level');
+					INSERT INTO s_vitis.vm_translation (translation_id, lang, translation) VALUES ('extraction_7','fr','Avancement');
+					INSERT INTO s_vitis.vm_translation (translation_id, lang, translation) VALUES ('extraction_2','en','Supprimer les plans');
+					INSERT INTO s_vitis.vm_translation (translation_id, lang, translation) VALUES ('extraction_2','fr','Supprimer les plans');
+					INSERT INTO s_vitis.vm_translation (translation_id, lang, translation) VALUES ('extraction_8','en','Company');
+					INSERT INTO s_vitis.vm_translation (translation_id, lang, translation) VALUES ('extraction_8','fr','Organisme');
+					INSERT INTO s_vitis.vm_translation (translation_id, lang, translation) VALUES ('extraction_3','en','Ajouter une extraction');
+					INSERT INTO s_vitis.vm_translation (translation_id, lang, translation) VALUES ('extraction_3','fr','Ajouter une extraction');
+					INSERT INTO s_vitis.vm_translation (translation_id, lang, translation) VALUES ('extraction_5','fr','Demandeur');
+					INSERT INTO s_vitis.vm_translation (translation_id, lang, translation) VALUES ('extraction_5','en','Demandeur');
+					INSERT INTO s_vitis.vm_translation (translation_id, lang, translation) VALUES ('extraction_9','en','Layers');
+					INSERT INTO s_vitis.vm_translation (translation_id, lang, translation) VALUES ('extraction_9','fr','Couches');
+					INSERT INTO s_vitis.vm_translation (translation_id, lang, translation) VALUES ('extraction_10','fr','Systèmes de coordonnées');
+					INSERT INTO s_vitis.vm_translation (translation_id, lang, translation) VALUES ('extraction_10','en','Coordinate systems');
+					INSERT INTO s_vitis.vm_translation (translation_id, lang, translation) VALUES ('extraction_11','fr','Informations générales');
+					INSERT INTO s_vitis.vm_translation (translation_id, lang, translation) VALUES ('extraction_11','en','General');
+					INSERT INTO s_vitis.vm_translation (translation_id, lang, translation) VALUES ('extraction_12','fr','Supprimer les systèmes de coordonnées');
+					INSERT INTO s_vitis.vm_translation (translation_id, lang, translation) VALUES ('extraction_12','en','Delete coordinate systems');
+					INSERT INTO s_vitis.vm_translation (translation_id, lang, translation) VALUES ('extraction_13','fr','Ajouter un système de coordonnées');
+					INSERT INTO s_vitis.vm_translation (translation_id, lang, translation) VALUES ('extraction_13','en','Add coordinate systems');
+					INSERT INTO s_vitis.vm_translation (translation_id, lang, translation) VALUES ('extraction_14','fr','Formats');
+					INSERT INTO s_vitis.vm_translation (translation_id, lang, translation) VALUES ('extraction_14','en','Formats');
+					INSERT INTO s_vitis.vm_translation (translation_id, lang, translation) VALUES ('extraction_15','fr','Informations générales');
+					INSERT INTO s_vitis.vm_translation (translation_id, lang, translation) VALUES ('extraction_15','en','General');
+					INSERT INTO s_vitis.vm_translation (translation_id, lang, translation) VALUES ('extraction_16','fr','Supprimer les formats');
+					INSERT INTO s_vitis.vm_translation (translation_id, lang, translation) VALUES ('extraction_16','en','Delete formats');
+					INSERT INTO s_vitis.vm_translation (translation_id, lang, translation) VALUES ('extraction_17','fr','Ajouter un format');
+					INSERT INTO s_vitis.vm_translation (translation_id, lang, translation) VALUES ('extraction_17','en','Add format');
+					INSERT INTO s_vitis.vm_translation (translation_id, lang, translation) VALUES ('extraction_18','fr','Couches');
+					INSERT INTO s_vitis.vm_translation (translation_id, lang, translation) VALUES ('extraction_18','en','Layers');
+					INSERT INTO s_vitis.vm_translation (translation_id, lang, translation) VALUES ('extraction_19','fr','Informations générales');
+					INSERT INTO s_vitis.vm_translation (translation_id, lang, translation) VALUES ('extraction_19','en','General');
+					INSERT INTO s_vitis.vm_translation (translation_id, lang, translation) VALUES ('extraction_20','fr','Supprimer les couches');
+					INSERT INTO s_vitis.vm_translation (translation_id, lang, translation) VALUES ('extraction_20','en','Delete layers');
+					INSERT INTO s_vitis.vm_translation (translation_id, lang, translation) VALUES ('extraction_21','fr','Ajouter une couche');
+					INSERT INTO s_vitis.vm_translation (translation_id, lang, translation) VALUES ('extraction_21','en','Add layer');
+					INSERT INTO s_vitis.vm_translation (translation_id, lang, translation) VALUES ('extraction_22','fr','ID');
+					INSERT INTO s_vitis.vm_translation (translation_id, lang, translation) VALUES ('extraction_22','en','ID');
+					INSERT INTO s_vitis.vm_translation (translation_id, lang, translation) VALUES ('extraction_23','fr','Nom');
+					INSERT INTO s_vitis.vm_translation (translation_id, lang, translation) VALUES ('extraction_23','en','Name');
+					INSERT INTO s_vitis.vm_translation (translation_id, lang, translation) VALUES ('extraction_24','en','ID');
+					INSERT INTO s_vitis.vm_translation (translation_id, lang, translation) VALUES ('extraction_24','fr','ID');
+					INSERT INTO s_vitis.vm_translation (translation_id, lang, translation) VALUES ('extraction_25','fr','Nom');
+					INSERT INTO s_vitis.vm_translation (translation_id, lang, translation) VALUES ('extraction_25','en','Name');
+					INSERT INTO s_vitis.vm_translation (translation_id, lang, translation) VALUES ('extraction_26','fr','Raster');
+					INSERT INTO s_vitis.vm_translation (translation_id, lang, translation) VALUES ('extraction_26','en','Raster');
+					INSERT INTO s_vitis.vm_translation (translation_id, lang, translation) VALUES ('extraction_27','fr','Vecteur');
+					INSERT INTO s_vitis.vm_translation (translation_id, lang, translation) VALUES ('extraction_27','en','Vector');
+					INSERT INTO s_vitis.vm_translation (translation_id, lang, translation) VALUES ('extraction_28','fr','ID');
+					INSERT INTO s_vitis.vm_translation (translation_id, lang, translation) VALUES ('extraction_28','en','ID');
+					INSERT INTO s_vitis.vm_translation (translation_id, lang, translation) VALUES ('extraction_29','fr','Nom');
+					INSERT INTO s_vitis.vm_translation (translation_id, lang, translation) VALUES ('extraction_29','en','Name');
+					INSERT INTO s_vitis.vm_translation (translation_id, lang, translation) VALUES ('extraction_30','fr','Catégorie');
+					INSERT INTO s_vitis.vm_translation (translation_id, lang, translation) VALUES ('extraction_30','en','Category');
+					INSERT INTO s_vitis.vm_translation (translation_id, lang, translation) VALUES ('extraction_31','fr','Restriction');
+					INSERT INTO s_vitis.vm_translation (translation_id, lang, translation) VALUES ('extraction_31','en','Restriction');
+					INSERT INTO s_vitis.vm_translation (translation_id, lang, translation) VALUES ('extraction_32','fr','Attributs inutilisés');
+					INSERT INTO s_vitis.vm_translation (translation_id, lang, translation) VALUES ('extraction_32','en','Unused attributes');
+					INSERT INTO s_vitis.vm_mode (mode_id, module_id) VALUES ('extraction','extraction');
+					INSERT INTO s_vitis.vm_mode (mode_id, module_id) VALUES ('extraction_ref','extraction');
+					INSERT INTO s_vitis.vm_mode_rolname (index,mode_id, rolname) VALUES (0,'extraction','extraction_user');
+					INSERT INTO s_vitis.vm_mode_rolname (index,mode_id, rolname) VALUES (1,'extraction_ref','extraction_admin');
+					INSERT INTO s_vitis.vm_tab (tab_id, event, index, mode_id, label_id, ressource_id, edit_column, show_column, sorted_by, sorted_dir, name) VALUES ((SELECT nextval('s_vitis.seq_vm'::regclass)),'loadList()', 1, 'extraction_ref', 'extraction_14', 'extraction/formats', 'editSectionForm', 'showSectionForm', 'format_id', 'ASC', 'extraction_format');
+					INSERT INTO s_vitis.vm_tab (tab_id, event, index, mode_id, label_id, ressource_id, edit_column, show_column, sorted_by, sorted_dir, name) VALUES ((SELECT nextval('s_vitis.seq_vm'::regclass)),'loadList()', 0, 'extraction_ref', 'extraction_10', 'extraction/coordsyss', 'editSectionForm', 'showSectionForm', 'coordsys_id', 'ASC', 'extraction_coordsys');
+					INSERT INTO s_vitis.vm_tab (tab_id, event, index, mode_id, label_id, ressource_id, edit_column, show_column, sorted_by, sorted_dir, name) VALUES ((SELECT nextval('s_vitis.seq_vm'::regclass)),'loadList()', 2, 'extraction_ref', 'extraction_18', 'extraction/layers', 'editSectionForm', 'showSectionForm', 'layer_id', 'ASC', 'extraction_layer');
+					INSERT INTO s_vitis.vm_tab (tab_id, event, index, mode_id, label_id, ressource_id, edit_column, show_column, sorted_by, sorted_dir, name) VALUES ((SELECT nextval('s_vitis.seq_vm'::regclass)),'loadList()', 0, 'extraction', 'extraction_0', 'extraction/extractions', 'editSectionForm', 'showSectionForm', 'bo_id', 'ASC', 'extraction_extraction');
+					INSERT INTO s_vitis.vm_table_button (button_class, table_button_id, event, label_id, ressource_id, tab_id) VALUES ('add_smallFlexigrid',(SELECT nextval('s_vitis.seq_vm'::regclass)), 'AddSectionForm', 'extraction_21', (SELECT ressource_id FROM s_vitis.vm_tab WHERE vm_tab.name = 'extraction_layer'), (SELECT tab_id FROM s_vitis.vm_tab WHERE vm_tab.name = 'extraction_layer'));
+					INSERT INTO s_vitis.vm_table_button (button_class, table_button_id, event, label_id, ressource_id, tab_id) VALUES ('deleteFlexigrid',(SELECT nextval('s_vitis.seq_vm'::regclass)), 'DeleteSelection', 'extraction_2', (SELECT ressource_id FROM s_vitis.vm_tab WHERE vm_tab.name = 'extraction_extraction'), (SELECT tab_id FROM s_vitis.vm_tab WHERE vm_tab.name = 'extraction_extraction'));
+					INSERT INTO s_vitis.vm_table_button (button_class, table_button_id, event, label_id, ressource_id, tab_id) VALUES ('add_smallFlexigrid',(SELECT nextval('s_vitis.seq_vm'::regclass)), 'AddSectionForm', 'extraction_3', (SELECT ressource_id FROM s_vitis.vm_tab WHERE vm_tab.name = 'extraction_extraction'), (SELECT tab_id FROM s_vitis.vm_tab WHERE vm_tab.name = 'extraction_extraction'));
+					INSERT INTO s_vitis.vm_table_button (button_class, table_button_id, event, label_id, ressource_id, tab_id) VALUES ('deleteFlexigrid',(SELECT nextval('s_vitis.seq_vm'::regclass)), 'DeleteSelection', 'extraction_12', (SELECT ressource_id FROM s_vitis.vm_tab WHERE vm_tab.name = 'extraction_coordsys'), (SELECT tab_id FROM s_vitis.vm_tab WHERE vm_tab.name = 'extraction_coordsys'));
+					INSERT INTO s_vitis.vm_table_button (button_class, table_button_id, event, label_id, ressource_id, tab_id) VALUES ('add_smallFlexigrid',(SELECT nextval('s_vitis.seq_vm'::regclass)), 'AddSectionForm', 'extraction_13', (SELECT ressource_id FROM s_vitis.vm_tab WHERE vm_tab.name = 'extraction_coordsys'), (SELECT tab_id FROM s_vitis.vm_tab WHERE vm_tab.name = 'extraction_coordsys'));
+					INSERT INTO s_vitis.vm_table_button (button_class, table_button_id, event, label_id, ressource_id, tab_id) VALUES ('deleteFlexigrid',(SELECT nextval('s_vitis.seq_vm'::regclass)), 'DeleteSelection', 'extraction_16', (SELECT ressource_id FROM s_vitis.vm_tab WHERE vm_tab.name = 'extraction_format'), (SELECT tab_id FROM s_vitis.vm_tab WHERE vm_tab.name = 'extraction_format'));
+					INSERT INTO s_vitis.vm_table_button (button_class, table_button_id, event, label_id, ressource_id, tab_id) VALUES ('add_smallFlexigrid',(SELECT nextval('s_vitis.seq_vm'::regclass)), 'AddSectionForm', 'extraction_17', (SELECT ressource_id FROM s_vitis.vm_tab WHERE vm_tab.name = 'extraction_format'), (SELECT tab_id FROM s_vitis.vm_tab WHERE vm_tab.name = 'extraction_format'));
+					INSERT INTO s_vitis.vm_table_button (button_class, table_button_id, event, label_id, ressource_id, tab_id) VALUES ('deleteFlexigrid',(SELECT nextval('s_vitis.seq_vm'::regclass)), 'DeleteSelection', 'extraction_20', (SELECT ressource_id FROM s_vitis.vm_tab WHERE vm_tab.name = 'extraction_layer'), (SELECT tab_id FROM s_vitis.vm_tab WHERE vm_tab.name = 'extraction_layer'));
+					INSERT INTO s_vitis.vm_table_field (table_field_id, name, sortable, resizeable, index, width, align, label_id, ressource_id, template, tab_id) VALUES ((SELECT nextval('s_vitis.seq_vm'::regclass)), 'bo_id', '1', '1', 0, 50, 'left', 'extraction_4', (SELECT ressource_id FROM s_vitis.vm_tab WHERE vm_tab.name = 'extraction_extraction'), NULL,(SELECT tab_id FROM s_vitis.vm_tab WHERE vm_tab.name = 'extraction_extraction'));
+					INSERT INTO s_vitis.vm_table_field (table_field_id, name, sortable, resizeable, index, width, align, label_id, ressource_id, template, tab_id) VALUES ((SELECT nextval('s_vitis.seq_vm'::regclass)), 'status', '1', '1', 2, 150, 'left', 'extraction_6', (SELECT ressource_id FROM s_vitis.vm_tab WHERE vm_tab.name = 'extraction_extraction'), NULL,(SELECT tab_id FROM s_vitis.vm_tab WHERE vm_tab.name = 'extraction_extraction'));
+					INSERT INTO s_vitis.vm_table_field (table_field_id, name, sortable, resizeable, index, width, align, label_id, ressource_id, template, tab_id) VALUES ((SELECT nextval('s_vitis.seq_vm'::regclass)), 'progress_level', '1', '1', 4, 150, 'center', 'extraction_7', (SELECT ressource_id FROM s_vitis.vm_tab WHERE vm_tab.name = 'extraction_extraction'), '<div data-app-navbar data-mode="info" data-hidevalue data-striped data-active></div>',(SELECT tab_id FROM s_vitis.vm_tab WHERE vm_tab.name = 'extraction_extraction'));
+					INSERT INTO s_vitis.vm_table_field (table_field_id, name, sortable, resizeable, index, width, align, label_id, ressource_id, template, tab_id) VALUES ((SELECT nextval('s_vitis.seq_vm'::regclass)), 'company', '1', '1', 3, 200, 'left', 'extraction_8', (SELECT ressource_id FROM s_vitis.vm_tab WHERE vm_tab.name = 'extraction_extraction'), NULL,(SELECT tab_id FROM s_vitis.vm_tab WHERE vm_tab.name = 'extraction_extraction'));
+					INSERT INTO s_vitis.vm_table_field (table_field_id, name, sortable, resizeable, index, width, align, label_id, ressource_id, template, tab_id) VALUES ((SELECT nextval('s_vitis.seq_vm'::regclass)), 'requestor', '1', '1', 1, 200, 'left', 'extraction_5', (SELECT ressource_id FROM s_vitis.vm_tab WHERE vm_tab.name = 'extraction_extraction'), NULL,(SELECT tab_id FROM s_vitis.vm_tab WHERE vm_tab.name = 'extraction_extraction'));
+					INSERT INTO s_vitis.vm_table_field (table_field_id, name, sortable, resizeable, index, width, align, label_id, ressource_id, template, tab_id) VALUES ((SELECT nextval('s_vitis.seq_vm'::regclass)), 'layers', '1', '1', 5, 60, 'left', 'extraction_9', (SELECT ressource_id FROM s_vitis.vm_tab WHERE vm_tab.name = 'extraction_extraction'), '<div data-app-extraction-layers-column="{{row.entity[col.field]}}"></div>',(SELECT tab_id FROM s_vitis.vm_tab WHERE vm_tab.name = 'extraction_extraction'));
+					INSERT INTO s_vitis.vm_table_field (table_field_id, name, sortable, resizeable, index, width, align, label_id, ressource_id, template, tab_id) VALUES ((SELECT nextval('s_vitis.seq_vm'::regclass)), 'coordsys_id', '1', '1', 0, 200, 'left', 'extraction_22', (SELECT ressource_id FROM s_vitis.vm_tab WHERE vm_tab.name = 'extraction_coordsys'), NULL,(SELECT tab_id FROM s_vitis.vm_tab WHERE vm_tab.name = 'extraction_coordsys'));
+					INSERT INTO s_vitis.vm_table_field (table_field_id, name, sortable, resizeable, index, width, align, label_id, ressource_id, template, tab_id) VALUES ((SELECT nextval('s_vitis.seq_vm'::regclass)), 'coordsys', '1', '1', 1, 200, 'left', 'extraction_23', (SELECT ressource_id FROM s_vitis.vm_tab WHERE vm_tab.name = 'extraction_coordsys'), NULL,(SELECT tab_id FROM s_vitis.vm_tab WHERE vm_tab.name = 'extraction_coordsys'));
+					INSERT INTO s_vitis.vm_table_field (table_field_id, name, sortable, resizeable, index, width, align, label_id, ressource_id, template, tab_id) VALUES ((SELECT nextval('s_vitis.seq_vm'::regclass)), 'format_id', '1', '1', 0, 100, 'left', 'extraction_24', (SELECT ressource_id FROM s_vitis.vm_tab WHERE vm_tab.name = 'extraction_format'), NULL,(SELECT tab_id FROM s_vitis.vm_tab WHERE vm_tab.name = 'extraction_format'));
+					INSERT INTO s_vitis.vm_table_field (table_field_id, name, sortable, resizeable, index, width, align, label_id, ressource_id, template, tab_id) VALUES ((SELECT nextval('s_vitis.seq_vm'::regclass)), 'format', '1', '1', 1, 200, 'left', 'extraction_25', (SELECT ressource_id FROM s_vitis.vm_tab WHERE vm_tab.name = 'extraction_format'), NULL,(SELECT tab_id FROM s_vitis.vm_tab WHERE vm_tab.name = 'extraction_format'));
+					INSERT INTO s_vitis.vm_table_field (table_field_id, name, sortable, resizeable, index, width, align, label_id, ressource_id, template, tab_id) VALUES ((SELECT nextval('s_vitis.seq_vm'::regclass)), 'use_for_raster', '1', '1', 2, 100, 'left', 'extraction_26', (SELECT ressource_id FROM s_vitis.vm_tab WHERE vm_tab.name = 'extraction_format'), '<div data-app-set-boolean-icon-column="{{row.entity[col.field]}}"></div>',(SELECT tab_id FROM s_vitis.vm_tab WHERE vm_tab.name = 'extraction_format'));
+					INSERT INTO s_vitis.vm_table_field (table_field_id, name, sortable, resizeable, index, width, align, label_id, ressource_id, template, tab_id) VALUES ((SELECT nextval('s_vitis.seq_vm'::regclass)), 'use_for_vector', '1', '1', 3, 100, 'left', 'extraction_27', (SELECT ressource_id FROM s_vitis.vm_tab WHERE vm_tab.name = 'extraction_format'), '<div data-app-set-boolean-icon-column="{{row.entity[col.field]}}"></div>',(SELECT tab_id FROM s_vitis.vm_tab WHERE vm_tab.name = 'extraction_format'));
+					INSERT INTO s_vitis.vm_table_field (table_field_id, name, sortable, resizeable, index, width, align, label_id, ressource_id, template, tab_id) VALUES ((SELECT nextval('s_vitis.seq_vm'::regclass)), 'layer_id', '1', '1', 0, 150, 'left', 'extraction_28', (SELECT ressource_id FROM s_vitis.vm_tab WHERE vm_tab.name = 'extraction_layer'), NULL,(SELECT tab_id FROM s_vitis.vm_tab WHERE vm_tab.name = 'extraction_layer'));
+					INSERT INTO s_vitis.vm_table_field (table_field_id, name, sortable, resizeable, index, width, align, label_id, ressource_id, template, tab_id) VALUES ((SELECT nextval('s_vitis.seq_vm'::regclass)), 'layer', '1', '1', 1, 150, 'left', 'extraction_29', (SELECT ressource_id FROM s_vitis.vm_tab WHERE vm_tab.name = 'extraction_layer'), NULL,(SELECT tab_id FROM s_vitis.vm_tab WHERE vm_tab.name = 'extraction_layer'));
+					INSERT INTO s_vitis.vm_table_field (table_field_id, name, sortable, resizeable, index, width, align, label_id, ressource_id, template, tab_id) VALUES ((SELECT nextval('s_vitis.seq_vm'::regclass)), 'category', '1', '1', 2, 150, 'left', 'extraction_30', (SELECT ressource_id FROM s_vitis.vm_tab WHERE vm_tab.name = 'extraction_layer'), NULL,(SELECT tab_id FROM s_vitis.vm_tab WHERE vm_tab.name = 'extraction_layer'));
+					INSERT INTO s_vitis.vm_table_field (table_field_id, name, sortable, resizeable, index, width, align, label_id, ressource_id, template, tab_id) VALUES ((SELECT nextval('s_vitis.seq_vm'::regclass)), 'restriction', '1', '1', 3, 100, 'left', 'extraction_31', (SELECT ressource_id FROM s_vitis.vm_tab WHERE vm_tab.name = 'extraction_layer'), NULL,(SELECT tab_id FROM s_vitis.vm_tab WHERE vm_tab.name = 'extraction_layer'));
+					INSERT INTO s_vitis.vm_table_field (table_field_id, name, sortable, resizeable, index, width, align, label_id, ressource_id, template, tab_id) VALUES ((SELECT nextval('s_vitis.seq_vm'::regclass)), 'unused_attributes', '1', '1', 4, 110, 'left', 'extraction_32', (SELECT ressource_id FROM s_vitis.vm_tab WHERE vm_tab.name = 'extraction_layer'), '<div data-app-extraction-ref-unused-attributes-column="{{row.entity[col.field]}}"></div>',(SELECT tab_id FROM s_vitis.vm_tab WHERE vm_tab.name = 'extraction_layer'));
+					INSERT INTO s_vitis.vm_section (label_id, name, index, event, tab_id, template, ressource_id, module) VALUES ('extraction_15', 'general', 1, 'Javascript:loadSectionForm', (SELECT tab_id FROM s_vitis.vm_tab WHERE vm_tab.name = 'extraction_format'), 'workspaceListTpl.html', (SELECT ressource_id FROM s_vitis.vm_tab WHERE vm_tab.name = 'extraction_format'), 'extraction');
+					INSERT INTO s_vitis.vm_section (label_id, name, index, event, tab_id, template, ressource_id, module) VALUES ('extraction_11', 'general', 1, 'Javascript:loadSectionForm', (SELECT tab_id FROM s_vitis.vm_tab WHERE vm_tab.name = 'extraction_coordsys'), 'workspaceListTpl.html', (SELECT ressource_id FROM s_vitis.vm_tab WHERE vm_tab.name = 'extraction_coordsys'), 'extraction');
+					INSERT INTO s_vitis.vm_section (label_id, name, index, event, tab_id, template, ressource_id, module) VALUES ('extraction_19', 'general', 1, 'Javascript:loadSectionForm', (SELECT tab_id FROM s_vitis.vm_tab WHERE vm_tab.name = 'extraction_layer'), 'workspaceListTpl.html', (SELECT ressource_id FROM s_vitis.vm_tab WHERE vm_tab.name = 'extraction_layer'), 'extraction');
+					INSERT INTO s_vitis.vm_section (label_id, name, index, event, tab_id, template, ressource_id, module) VALUES ('extraction_1', 'general', 1, 'Javascript:loadSectionForm', (SELECT tab_id FROM s_vitis.vm_tab WHERE vm_tab.name = 'extraction_extraction'), 'workspaceListTpl.html', (SELECT ressource_id FROM s_vitis.vm_tab WHERE vm_tab.name = 'extraction_extraction'), 'extraction');
+					SELECT s_vitis.wabInsertState('s_extraction', 'rt_extraction_status','START', 0);
+					SELECT s_vitis.wabInsertState('s_extraction', 'rt_extraction_status','Nouveau', 10);
+					SELECT s_vitis.wabInsertState('s_extraction', 'rt_extraction_status','AE Généré', 30);
+					SELECT s_vitis.wabInsertState('s_extraction', 'rt_extraction_status','AE Soumis', 40);
+					SELECT s_vitis.wabInsertState('s_extraction', 'rt_extraction_status','AE Demandé', 20);
+					SELECT s_vitis.wabInsertState('s_extraction', 'rt_extraction_status','Dépôt terminé', 100);
+					SELECT s_vitis.wabInsertState('s_extraction', 'rt_extraction_status','Fichier déposé', 90);
+					SELECT s_vitis.wabInsertState('s_extraction', 'rt_extraction_status','Autorisée', 60);
+					SELECT s_vitis.wabInsertState('s_extraction', 'rt_extraction_status','Fichier accepté', 100);
+					SELECT s_vitis.wabInsertState('s_extraction', 'rt_extraction_status','Fichier invalidé', 80);
+					SELECT s_vitis.wabInsertState('s_extraction', 'rt_extraction_status','Extraction terminée', 80);
+					SELECT s_vitis.wabInsertState('s_extraction', 'rt_extraction_status','Refusée', 100);
+					TRUNCATE s_extraction.rt_extraction_status_group;
+					INSERT INTO s_extraction.rt_extraction_status_group (status_id, group_id, link_id) VALUES ((SELECT status_id FROM s_extraction.rt_extraction_status WHERE "name"='START'), (SELECT group_id FROM s_vitis."group" WHERE "name"='demandeur'), 1);
+					INSERT INTO s_extraction.rt_extraction_status_group (status_id, group_id, link_id) VALUES ((SELECT status_id FROM s_extraction.rt_extraction_status WHERE "name"='Nouveau'), (SELECT group_id FROM s_vitis."group" WHERE "name"='demandeur'), 2);
+					INSERT INTO s_extraction.rt_extraction_status_group (status_id, group_id, link_id) VALUES ((SELECT status_id FROM s_extraction.rt_extraction_status WHERE "name"='AE Demandé'), (SELECT group_id FROM s_vitis."group" WHERE "name"='demandeur'), 3);
+					INSERT INTO s_extraction.rt_extraction_status_group (status_id, group_id, link_id) VALUES ((SELECT status_id FROM s_extraction.rt_extraction_status WHERE "name"='AE Généré'), (SELECT group_id FROM s_vitis."group" WHERE "name"='demandeur'), 4);
+					INSERT INTO s_extraction.rt_extraction_status_group (status_id, group_id, link_id) VALUES ((SELECT status_id FROM s_extraction.rt_extraction_status WHERE "name"='AE Soumis'), (SELECT group_id FROM s_vitis."group" WHERE "name"='controleur'), 5);
+					INSERT INTO s_extraction.rt_extraction_status_group (status_id, group_id, link_id) VALUES ((SELECT status_id FROM s_extraction.rt_extraction_status WHERE "name"='AE Soumis'), (SELECT group_id FROM s_vitis."group" WHERE "name"='demandeur'), 6);
+					INSERT INTO s_extraction.rt_extraction_status_group (status_id, group_id, link_id) VALUES ((SELECT status_id FROM s_extraction.rt_extraction_status WHERE "name"='Autorisée'), (SELECT group_id FROM s_vitis."group" WHERE "name"='demandeur'), 7);
+					INSERT INTO s_extraction.rt_extraction_status_group (status_id, group_id, link_id) VALUES ((SELECT status_id FROM s_extraction.rt_extraction_status WHERE "name"='Autorisée'), (SELECT group_id FROM s_vitis."group" WHERE "name"='controleur'), 8);
+					INSERT INTO s_extraction.rt_extraction_status_group (status_id, group_id, link_id) VALUES ((SELECT status_id FROM s_extraction.rt_extraction_status WHERE "name"='Refusée'), (SELECT group_id FROM s_vitis."group" WHERE "name"='controleur'), 9);
+					INSERT INTO s_extraction.rt_extraction_status_group (status_id, group_id, link_id) VALUES ((SELECT status_id FROM s_extraction.rt_extraction_status WHERE "name"='Refusée'), (SELECT group_id FROM s_vitis."group" WHERE "name"='demandeur'), 10);
+					INSERT INTO s_extraction.rt_extraction_status_group (status_id, group_id, link_id) VALUES ((SELECT status_id FROM s_extraction.rt_extraction_status WHERE "name"='Extraction terminée'), (SELECT group_id FROM s_vitis."group" WHERE "name"='controleur'), 11);
+					INSERT INTO s_extraction.rt_extraction_status_group (status_id, group_id, link_id) VALUES ((SELECT status_id FROM s_extraction.rt_extraction_status WHERE "name"='Fichier déposé'), (SELECT group_id FROM s_vitis."group" WHERE "name"='demandeur'), 12);
+					INSERT INTO s_extraction.rt_extraction_status_group (status_id, group_id, link_id) VALUES ((SELECT status_id FROM s_extraction.rt_extraction_status WHERE "name"='Fichier invalidé'), (SELECT group_id FROM s_vitis."group" WHERE "name"='demandeur'), 13);
+					INSERT INTO s_extraction.rt_extraction_status_group (status_id, group_id, link_id) VALUES ((SELECT status_id FROM s_extraction.rt_extraction_status WHERE "name"='Fichier accepté'), (SELECT group_id FROM s_vitis."group" WHERE "name"='demandeur'), 14);
+					INSERT INTO s_extraction.rt_extraction_status_group (status_id, group_id, link_id) VALUES ((SELECT status_id FROM s_extraction.rt_extraction_status WHERE "name"='Dépôt terminé'), (SELECT group_id FROM s_vitis."group" WHERE "name"='controleur'), 15);
 
-                                        GRANT SELECT ON TABLE s_extraction.rt_feature_model TO extraction_admin;
-                                        GRANT SELECT ON TABLE s_extraction.rt_feature_model TO extraction_user;
 				]]>
 			</code>
 		</query>
diff --git a/web_service/ws/Coordsys.class.inc b/web_service/ws/Coordsys.class.inc
index 9d472a5ff6057965f99e915189dd67f06d8f6f54..5b03fbd7320755ee7bf0e441f72ad3eefaac9f60 100755
--- a/web_service/ws/Coordsys.class.inc
+++ b/web_service/ws/Coordsys.class.inc
@@ -12,7 +12,7 @@ require_once dirname($_SERVER['SCRIPT_FILENAME']) . '/class/vitis_lib/Connection
  * 	\brief This file contains the Coordsys php class
  *
  * This class defines operation for one Coordsys
- * 
+ *
  */
 class Coordsys extends ExtractionExtraction {
 
@@ -87,4 +87,4 @@ class Coordsys extends ExtractionExtraction {
 
 }
 
-?>
\ No newline at end of file
+?>
diff --git a/web_service/ws/Coordsyss.class.inc b/web_service/ws/Coordsyss.class.inc
index f3160591aa04261ca425e80edfcb37d60197da14..848539189da12b83dba01a72cc9a167fa84a5ec5 100755
--- a/web_service/ws/Coordsyss.class.inc
+++ b/web_service/ws/Coordsyss.class.inc
@@ -9,7 +9,7 @@
  * 	\brief This file contains the Coordsyss php class
  *
  * This class defines Rest Api to Vitis Coordsyss
- * 
+ *
  */
 require_once __DIR__ . '/ExtractionExtraction.class.inc';
 require_once 'Coordsys.class.inc';
@@ -189,7 +189,7 @@ class Coordsyss extends ExtractionExtraction {
      */
     function PUT() {
         $aReturn = $this->genericPut($this->aProperties['schema_extraction'], 'rt_coordsys', 'coordsys_id');
-        
+
         return $aReturn['sMessage'];
     }
 
@@ -260,7 +260,7 @@ class Coordsyss extends ExtractionExtraction {
         return $aReturn['sMessage'];
     }
 
-    
+
 }
 
-?>
\ No newline at end of file
+?>
diff --git a/web_service/ws/Extraction.class.inc b/web_service/ws/Extraction.class.inc
index 162782d866f5bb1e9e93232475efae0fc060832f..a4eef6a4400d4809b3d9ea7c89e2e4558c3b628c 100755
--- a/web_service/ws/Extraction.class.inc
+++ b/web_service/ws/Extraction.class.inc
@@ -12,7 +12,7 @@ require_once dirname($_SERVER['SCRIPT_FILENAME']) . '/class/vitis_lib/Connection
  * 	\brief This file contains the Extraction php class
  *
  * This class defines operation for one Extraction
- * 
+ *
  */
 class Extraction extends ExtractionExtraction {
 
@@ -25,67 +25,76 @@ class Extraction extends ExtractionExtraction {
      * @param type $properties properties
      * @param type $oConnection connection object
      */
-    function __construct($aPath, $aValues, $properties, $bShortcut = false) {
-        parent::__construct($aPath, $aValues, $properties, $bShortcut);
+    public function __construct($aPath, $aValues, $properties, $bShortcut = false, $oConnection = false)
+    {
+        parent::__construct($aPath, $aValues, $properties, $bShortcut, $oConnection);
     }
 
-    /**
-     * @SWG\Get(path="/extractions/{id_extraction}", 
-     *   tags={"Extractions"},
-     *   summary="Get Extraction",
-     *   description="Request to get Extraction by id",
-     *   operationId="GET",
-     *   produces={"application/xml", "application/json"},
-     *   @SWG\Parameter(
-     *     name="token",
-     *     in="query",
-     *     description="user token",
-     *     required=true,
-     *     type="string"
-     *   ),
-     * @SWG\Parameter(
-     *     name="id_extraction",
-     *     in="path",
-     *     description="id_extraction",
-     *     required=true,
-     *     type="integer",
-     *   format="int32"
-     *   ),
-     * @SWG\Parameter(
-     *     name="attributs",
-     *     in="query",
-     *     description="list of attributs",
-     *     required=false,
-     *     type="string"
-     *   ),
-     *   @SWG\Response(
-     *         response=200,
-     *         description="Extraction Response",
-     *         @SWG\Schema(ref="#/definitions/extractions")
-     *     )
-     *  )
-     */
+/**
+ * @SWG\Get(path="/extractions/{id_extraction}",
+ *   tags={"Extractions"},
+ *   summary="Get Extraction",
+ *   description="Request to get Extraction by id",
+ *   operationId="GET",
+ *   produces={"application/xml", "application/json"},
+ *   @SWG\Parameter(
+ *     name="token",
+ *     in="query",
+ *     description="user token",
+ *     required=true,
+ *     type="string"
+ *   ),
+ * @SWG\Parameter(
+ *     name="id_extraction",
+ *     in="path",
+ *     description="id_extraction",
+ *     required=true,
+ *     type="integer",
+ *   format="int32"
+ *   ),
+ * @SWG\Parameter(
+ *     name="attributs",
+ *     in="query",
+ *     description="list of attributs",
+ *     required=false,
+ *     type="string"
+ *   ),
+ *   @SWG\Response(
+ *         response=200,
+ *         description="Extraction Response",
+ *         @SWG\Schema(ref="#/definitions/extractions")
+ *     )
+ *  )
+ */
 
     /**
      * get informations about mode
      */
-    function GET() {
+    public function GET()
+    {
         require $this->sRessourcesFile;
         $this->aFields = $this->getFields($this->aProperties['schema_extraction'], "extraction", "bo_id");
         // Url vers l'acte d'engagement.
-        if (!empty($this->aFields['ae']))
+        if (!empty($this->aFields['ae'])) {
             $this->aFields['ae'] = $this->aProperties['web_server_name'] . '/' . $this->aProperties['ws_data_alias'] . '/extraction/extraction_extraction_extraction/documents/' . $this->aValues["my_vitis_id"] . '/ae/' . $this->aFields['ae'];
-        
+        }
+
         // Date au format Français.
         if ($this->aProperties["language"] == 'fr') {
-            $oDate = new DateTime($this->aFields['creation_date']);
+            $oDate                          = new DateTime($this->aFields['creation_date']);
             $this->aFields['creation_date'] = $oDate->format('d/m/Y');
         }
-        
+
         // Libellés du champ "Commune".
         if (!empty($this->aFields['id_com'])) {
-            $sSql = str_replace('[id_com]', str_replace('|', ',', $this->aFields['id_com']), $aSql['getCommuneLabel']);
-            $oPDOresult = $this->oConnection->oBd->executeWithParams($sSql, array());
+            //On donne les paramètres à remplacer dans la requête
+            $aSQLParams = array(
+                'id_com' => array('value' => $this->aFields['id_com'], 'type' => 'group'),
+            );
+
+            $sSql = $aSql['getCommuneLabel'];
+
+            $oPDOresult = $this->oConnection->oBd->executeWithParams($sSql, $aSQLParams);
             if (!$this->oConnection->oBd->enErreur()) {
                 while ($aLine = $this->oConnection->oBd->ligneSuivante($oPDOresult)) {
                     $aCommune[] = $aLine['nom_com'];
@@ -93,20 +102,30 @@ class Extraction extends ExtractionExtraction {
                 $this->aFields['id_com_label'] = implode(',', $aCommune);
             }
         }
-        
+
         // Libellés du champ "Conseil de Territoire".
         if (!empty($this->aFields['id_conseil'])) {
-            $sSql = str_replace('[id_conseil]', str_replace('|', ',', $this->aFields['id_conseil']), $aSql['getConseilLabel']);
-            $oPDOresult = $this->oConnection->oBd->executeWithParams($sSql, array());
+
+            $aSQLParams = array(
+                'id_conseil' => array('value' => $this->aFields['id_conseil'], 'type' => 'group'),
+            );
+            //$sSql = str_replace('[id_conseil]', str_replace('|', ',', $this->aFields['id_conseil']), $aSql['getConseilLabel']);
+            $aConseil = [];
+            $sSql       = $aSql['getConseilLabel'];
+            $oPDOresult = $this->oConnection->oBd->executeWithParams($sSql, $aSQLParams);
             if (!$this->oConnection->oBd->enErreur()) {
                 while ($aLine = $this->oConnection->oBd->ligneSuivante($oPDOresult)) {
                     $aConseil[] = $aLine['nom_epci'];
                 }
-                $this->aFields['id_conseil_label'] = implode(',', $aConseil);
+                if (is_array($aConseil)) {
+                    $this->aFields['id_conseil_label'] = implode(',', $aConseil);
+                } else {
+                    $this->aFields['id_conseil_label'][0] = $aConseil;
+                }
             }
         }
-        
-        // Nom de l'état de l'extraction.
+
+        // Nom de l'état de l'extraction.
         $this->aFields['status_name'] = $this->aFields['status'];
     }
 
@@ -121,5 +140,5 @@ class Extraction extends ExtractionExtraction {
             $this->aFields["bo_id"] = $this->aValues["my_vitis_id"];
         }
     }
+
 }
-?>
\ No newline at end of file
diff --git a/web_service/ws/ExtractionExtraction.class.inc b/web_service/ws/ExtractionExtraction.class.inc
index b2cf23b422d168991986355482121ead3400e08e..a78555e5858c536431ffc68a6faf2e67ac9ff6ac 100755
--- a/web_service/ws/ExtractionExtraction.class.inc
+++ b/web_service/ws/ExtractionExtraction.class.inc
@@ -8,7 +8,7 @@ class ExtractionExtraction extends Vitis {
 
     //Chemin du fichier de ressources contenant les requêtes SQL
     var $sRessourcesFile = 'ws/extraction/ExtractionExtraction.class.sql.inc';
-    
+
     function __construct($aPath, $aValues, $properties, $bShortcut) {
         parent::__construct($aPath, $aValues, $properties, $bShortcut);
     }
@@ -18,28 +18,31 @@ class ExtractionExtraction extends Vitis {
      * @param type $sIndex
      * @param type $sFolder
      */
-    function uploadDocument($sIndex, $sFolder) {
+    public function uploadDocument($sIndex, $sFolder)
+    {
         // Crée le répertoire si inexistant.
         $sDirPath = $this->aProperties['ws_data_dir'] . '/extraction/' . $sFolder . '/documents/' . $this->aValues["my_vitis_id"] . '/' . $sIndex . '/';
-        if (!is_dir($sDirPath))
+        if (!is_dir($sDirPath)) {
             mkdir($sDirPath, 0777, true);
+        }
+
         // Ecrit le fichier.
         if (!empty($_FILES[$sIndex])) {
             $sErrorMessage = uploadFile($sIndex, "", $sDirPath . $_FILES[$sIndex]["name"], $_FILES[$sIndex]['size'] + 1);
-            if ($sErrorMessage != "")
+            if ($sErrorMessage != "") {
                 writeToErrorLog($sErrorMessage);
-        }
-        else {
+            }
+
+        } else {
             $sfileContentIndex = $sIndex . '_file';
-            $sfileNameIndex = $sIndex . '_name';
+            $sfileNameIndex    = $sIndex . '_name';
             if (!empty($this->aValues[$sfileContentIndex])) {
 
                 $this->aValues[$sIndex] = $this->aValues[$sfileNameIndex];
-                $fp = fopen($sDirPath . $this->aValues[$sfileNameIndex], "w");
+                $fp                     = fopen($sDirPath . $this->aValues[$sfileNameIndex], "w");
                 fwrite($fp, $this->aValues[$sfileContentIndex]);
                 fclose($fp);
             }
         }
     }
 }
-?>
\ No newline at end of file
diff --git a/web_service/ws/ExtractionExtraction.class.sql.inc b/web_service/ws/ExtractionExtraction.class.sql.inc
index a1e819a34e1998baa7902ed09ba4e06d1a270b24..6edd56aa67d8308105e2ba9079059d21a9b939c2 100755
--- a/web_service/ws/ExtractionExtraction.class.sql.inc
+++ b/web_service/ws/ExtractionExtraction.class.sql.inc
@@ -14,4 +14,6 @@ $aSql['getCommuneLabel'] = 'SELECT nom_com FROM public.ref_cpa_limadm_commune WH
 $aSql['getConseilLabel'] = 'SELECT nom_epci FROM public.ref_amp_lim_ct WHERE objectid IN([id_conseil])';
 $aSql['getRtLayer'] = 'SELECT layer_id, layer, category FROM [schema_extraction].rt_layer [sql_params] ORDER BY category, layer';
 $aSql['getUserGroups'] = 'SELECT name FROM [schema_framework]."group",[schema_framework].user_group WHERE "group".group_id = user_group.group_id AND user_group.user_id = [user_id]';
-?>
\ No newline at end of file
+
+$aSql['getFormat'] = 'SELECT id_format FROM q_control."format" WHERE "format".extensions like [extension]';
+?>
diff --git a/web_service/ws/Extraction_depots.class.inc b/web_service/ws/Extraction_depots.class.inc
new file mode 100755
index 0000000000000000000000000000000000000000..e424f2ce3af2e2606528fd45d84c2666d00bd2c0
--- /dev/null
+++ b/web_service/ws/Extraction_depots.class.inc
@@ -0,0 +1,440 @@
+<?php
+
+/**
+ * \file Extraction_depots.class.inc
+ * \class Extraction_depots
+ *
+ * \author WAB <support.wab@veremes.com>.
+ *
+ *     \brief This file contains the Extraction_depots php class
+ *
+ * This class defines Rest Api to Vitis Extraction_depots
+ *
+ */
+require_once __DIR__ . '/ExtractionExtraction.class.inc';
+require_once 'Extraction_depot.class.inc';
+require_once __DIR__ . '/../../class/wab_lib/BusinessObject.class.inc';
+require_once __DIR__ . '/Extractions.class.inc';
+
+class Extraction_depots extends ExtractionExtraction
+{
+    /**
+     * @SWG\Definition(
+     *   definition="/extraction_depots",
+     *   allOf={
+     *     @SWG\Schema(ref="#/definitions/extraction_depots")
+     *   }
+     * )
+     * * @SWG\Tag(
+     *   name="Extraction_depots",
+     *   description="Operations about Extraction_depots"
+     * )
+     */
+
+    /**
+     * construct
+     * @param type $aPath url of the request
+     * @param type $aValues parameters of the request
+     * @param type $properties properties
+     * @param type $bShortcut false to reinit variables
+     * @param type $oConnection connection object
+     */
+    public function __construct($aPath, $aValues, $properties, $bShortcut = false, $oConnection = false)
+    {
+        parent::__construct($aPath, $aValues, $properties, $bShortcut, $oConnection);
+    }
+
+    /**
+     * @SWG\Get(path="/extraction_depots",
+     *   tags={"Extraction_depots"},
+     *   summary="Get Extraction_depots",
+     *   description="Request to get Extraction_depots",
+     *   operationId="GET",
+     *   produces={"application/xml", "application/json", "application/x-vm-json"},
+     *   @SWG\Parameter(
+     *     name="token",
+     *     in="query",
+     *     description="user token",
+     *     required=true,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="order_by",
+     *     in="query",
+     *     description="list of ordering fields",
+     *     required=false,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="sort_order",
+     *     in="query",
+     *     description="sort_order",
+     *     required=false,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="limit",
+     *     in="query",
+     *     description="number of element",
+     *     required=false,
+     *     type="integer",
+     *     format="int32"
+     *   ),
+     * @SWG\Parameter(
+     *     name="offset",
+     *     in="query",
+     *     description="index of first element",
+     *     required=false,
+     *     type="string",
+     *     format="int32"
+     *   ),
+     * @SWG\Parameter(
+     *     name="attributs",
+     *     in="query",
+     *     description="list of attributs",
+     *     required=false,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="filter",
+     *     in="query",
+     *     description="filter results",
+     *     required=false,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="distinct",
+     *     in="query",
+     *     description="delete duplicates",
+     *     required=false,
+     *     type="boolean"
+     *   ),
+     *   @SWG\Response(
+     *         response=200,
+     *         description="extraction_depot Response",
+     *         @SWG\Schema(ref="#/definitions/extraction_depots")
+     *     )
+     *  )
+     */
+
+    /**
+     * get Extraction_depots
+     * @return  Extraction_depots
+     */
+    public function GET()
+    {
+        if (!empty($this->aPath[2])) {
+            if ($this->aPath[2] == "Tree") {
+                $sDirPath = $this->aProperties['ws_data_dir'] . '/extraction/extraction_depot';
+                //Création du dossier extraction_depot
+                if (!is_dir($sDirPath)) {
+                    //Création du dossier du demandeur
+                    if (!mkdir($sDirPath)) {
+                        //Mettre une erreur dans le log d'erreur
+                    }
+                }
+                $sDirPath = $this->aProperties['ws_data_dir'] . '/extraction/extraction_depot/' . $_SERVER["REMOTE_ADDR"];
+                if (!is_dir($sDirPath)) {
+                    if (!mkdir($sDirPath)) {
+                        //Mettre une erreur dans le log d'erreur
+                    }
+                }
+                $sDirPath = $this->aProperties['ws_data_dir'] . '/extraction/extraction_depot/' . $_SERVER["REMOTE_ADDR"] . "/Fichiers déposés";
+                if (!is_dir($sDirPath)) {
+                    if (!mkdir($sDirPath)) {
+                        //Mettre une erreur dans le log d'erreur
+                    }
+                }
+                $sDirPath = $this->aProperties['ws_data_dir'] . '/extraction/extraction_depot/' . $_SERVER["REMOTE_ADDR"] . "/Résultats";
+                if (!is_dir($sDirPath)) {
+                    if (!mkdir($sDirPath)) {
+                        //Mettre une erreur dans le log d'erreur
+                    }
+                }
+                $sDirPath = $this->aProperties['ws_data_dir'] . '/extraction/extraction_depot/' . $_SERVER["REMOTE_ADDR"];
+                return json_encode($this->getFolderInfos($sDirPath));
+            } elseif ($this->aPath[2] == "File") {
+                $this->getWorkspaceFile();
+            }
+        }
+    }
+
+    /**
+     * Get file.
+     */
+    public function getWorkspaceFile()
+    {
+        $aReturn   = array('status' => 1, 'message' => '');
+        $sFilePath = $this->aProperties['ws_data_dir'] . '/extraction/extraction_depot/' . $_SERVER["REMOTE_ADDR"] . "/" . $this->aValues['file_name'];
+        // Le fichier existe ?
+        if (file_exists($sFilePath)) {
+            header("Content-Type: application/octet-stream");
+            header("Content-Transfer-Encoding: Binary");
+            header("Content-disposition: attachment; filename=\"" . $this->aValues['file_name'] . "\"");
+            header('Content-Length: ' . filesize($sFilePath));
+            error_log(readfile($sFilePath));
+        }
+    }
+
+    /**
+     *
+     * @param string $sDirectoryPath
+     * @return array $aTree
+     */
+    public function getFolderInfos($sDirectoryPath)
+    {
+
+        if (is_dir($sDirectoryPath)) {
+            $aContentDir = scandir($sDirectoryPath);
+            $aTree       = $this->getFileInfos($sDirectoryPath);
+            $aDir        = array();
+            for ($i = 0; $i < count($aContentDir); $i++) {
+                if ($aContentDir[$i] !== "." && $aContentDir[$i] !== "..") {
+                    array_push($aDir, $this->getFolderInfos($sDirectoryPath . "/" . $aContentDir[$i]));
+                }
+            }
+
+            $aTree["content"] = $aDir;
+            $aTree["status"]  = 1;
+            return $aTree;
+        } else {
+            return $this->getFileInfos($sDirectoryPath);
+        }
+    }
+
+    /**
+     *
+     * @param string $sFilePath
+     * @return array
+     */
+    public function getFileInfos($sFilePath)
+    {
+        $iFileSize = filesize($sFilePath);
+
+        $sFileSize = $iFileSize . "octets";
+        if ($iFileSize > 1024) {
+            if ($iFileSize > 1024 * 1024) {
+                if ($iFileSize > 1024 * 1024 * 1024) {
+                    $sFileSize = "-";
+                } else {
+                    $sFileSize = (ceil($iFileSize / (1024 * 1024))) . "Mo";
+                }
+            } else {
+                $sFileSize = (ceil($iFileSize / 1024)) . "Ko";
+            }
+        }
+
+        $aFileName = explode(DIRECTORY_SEPARATOR, $sFilePath);
+
+        return array("filename" => $aFileName[count($aFileName) - 1], "size" => $sFileSize, "lastModification" => date("d/m/Y H:i:s", filemtime($sFilePath)));
+    }
+
+    /**
+     * @SWG\Delete(path="/[Class_name]s",
+     *   tags={"[Class_name_upper]s"},
+     *   summary="delete [Class_name_upper]s",
+     *   description="Request to delete [Class_name_upper]s",
+     *   operationId="DELETE",
+     *   produces={"application/xml", "application/json"},
+     *   @SWG\Parameter(
+     *     name="token",
+     *     in="query",
+     *     description="token",
+     *     required=true,
+     *     type="string"
+     *   ),
+     * * @SWG\Parameter(
+     *     name="idList",
+     *     in="query",
+     *     description="id of the [Class_name]",
+     *     required=true,
+     *     type="string"
+     *   ),
+     * @SWG\Response(
+     *         response=200,
+     *         description="[Class_name] Response",
+     *         @SWG\Schema(ref="#/definitions/[Class_name]s")
+     *     )
+     *  )
+     */
+    /**
+     * @SWG\Delete(path="/[Class_name]s/{id_[Class_name]}",
+     *   tags={"[Class_name_upper]s"},
+     *   summary="delete [Class_name_upper]s",
+     *   description="Request to delete [Class_name_upper]s",
+     *   operationId="DELETE",
+     *   produces={"application/xml", "application/json"},
+     *   @SWG\Parameter(
+     *     name="token",
+     *     in="query",
+     *     description="[Class_name_upper] token",
+     *     required=true,
+     *     type="string"
+     *   ),
+     * * @SWG\Parameter(
+     *     name="id_[Class_name]",
+     *     in="path",
+     *     description="id of the [Class_name_upper]s",
+     *     required=true,
+     *     type="integer",
+     *     format = "int32"
+     *   ),
+     * @SWG\Response(
+     *         response=200,
+     *         description="Poprerties Response",
+     *         @SWG\Schema(ref="#/definitions/[Class_name]s")
+     *     )
+     *  )
+     */
+
+    /**
+     * delete [Class_name]s
+     * @return id of [Class_name]s deleted or error object if a [Class_name]s is not deleted
+     */
+    public function DELETES()
+    {
+        $sDirPath = $this->aProperties['ws_data_dir'] . '/extraction/extraction_depot/' . $_SERVER["REMOTE_ADDR"];
+        //On supprime le fichier
+        $sMessage = unlink($sDirPath . "/" . $this->aValues['file_name']);
+        return $sMessage;
+    }
+
+    /**
+     * @SWG\Put(path="/[Class_name]s/{id_[Class_name]}",
+     *   tags={"[Class_name_upper]s"},
+     *   summary="update [Class_name_upper]s",
+     *   description="Request to update [Class_name_upper]s",
+     *   operationId="PUT",
+     *   produces={"application/xml", "application/json"},
+     *   @SWG\Parameter(
+     *     name="token",
+     *     in="query",
+     *     description="[Class_name_upper] token",
+     *     required=true,
+     *     type="string"
+     *   ),
+     * * @SWG\Parameter(
+     *     name="id_[Class_name]",
+     *     in="path",
+     *     description="id of the [Class_name_upper]s",
+     *     required=true,
+     *     type="integer",
+     *     format = "int32"
+     *   ),
+     * @SWG\Response(
+     *         response=200,
+     *         description="Poprerties Response",
+     *         @SWG\Schema(ref="#/definitions/[Class_name]s")
+     *     )
+     *  )
+     */
+
+    /**
+     * update [Class_name]s
+     * @return id of [Class_name]s updated or error object if a [Class_name]s is not updated
+     */
+    public function PUT()
+    {
+        if (!empty($this->aValues["action"]) && $this->aValues["action"] == "Metadata") {
+            $aReturn = $this->reintegrateMetadata();
+
+            $aXmlRacineAttribute['status'] = $aReturn['status'];
+            $sMessage                      = $this->asDocument('', 'vitis', $this->aValues['sEncoding'], true, $aXmlRacineAttribute, $this->aValues['sSourceEncoding'], $this->aValues['output']);
+        } else {
+            $sDirName      = $this->aProperties['ws_data_dir'] . '/extraction/extraction_depot/' . $_SERVER["REMOTE_ADDR"];
+            $error_message = "";
+
+            // Si le dossier {id} n'existe pas (Important pour gérer les erreurs)
+            if (!is_dir($sDirName)) {
+                $error_message .= $sDirName . " does not exist";
+                writeToErrorLog("WARNING: " . $error_message);
+
+                $aXmlRacineAttribute['status'] = 0;
+                $this->aFields                 = array();
+                $this->aFields['errorMessage'] = $error_message;
+                $sMessage                      = $this->asDocument('', 'vitis', $this->aValues['sEncoding'], true, $aXmlRacineAttribute, $this->aValues['sSourceEncoding'], $this->aValues['output']);
+                return $sMessage;
+            }
+            // Si le dossier {id}/Fichiers déposés n'existe pas (Important pour gérer les erreurs)
+            if (!is_dir($sDirName . "/Fichiers déposés")) {
+                $error_message .= $sDirName . "/Fichiers déposés does not exist";
+                writeToErrorLog("WARNING: " . $error_message);
+
+                $aXmlRacineAttribute['status'] = 0;
+                $this->aFields                 = array();
+                $this->aFields['errorMessage'] = $error_message;
+                $sMessage                      = $this->asDocument('', 'vitis', $this->aValues['sEncoding'], true, $aXmlRacineAttribute, $this->aValues['sSourceEncoding'], $this->aValues['output']);
+                return $sMessage;
+            }
+
+            // Si le dossier {id}/form n'existe pas il est crée
+            if (!is_dir($sDirName . "/Résultats")) {
+                writeToErrorLog("WARNING: " . $sDirName . "/Résultats");
+                @mkdir($sDirName . "/Résultats");
+            }
+
+            if (!empty($this->aValues["control_file_file"])) {
+                $this->aValues["control_file"] = $this->aValues["control_file_name"];
+            }
+            if (!empty($this->aValues["control_file_file"])) {
+                //if ($aReturn['sStatus'] == 1) {
+                $aXmlRacineAttribute['status'] = 1;
+                $sMessage                      = $this->asDocument('', 'vitis', $this->aValues['sEncoding'], true, $aXmlRacineAttribute, $this->aValues['sSourceEncoding'], $this->aValues['output']);
+                $sDirPath                      = $this->aProperties["upload_dir"] . "/" . getUniqRandomId();
+                while (is_dir($sDirPath)) {
+                    $sDirPath = $this->aProperties["upload_dir"] . "/" . getUniqRandomId();
+                }
+                if (!mkdir($sDirPath)) {
+                    return false;
+                }
+                // Sauvegarde le nouveau fichier.
+                $fp = fopen($sDirPath . '/' . utf8_decode($this->aValues["control_file_name"]), "w");
+                fwrite($fp, $this->aValues["control_file_file"]);
+                fclose($fp);
+
+                $sExtension = '*.' . end(explode(".", $this->aValues["control_file_name"]));
+                if (in_array($sExtension, explode("|", $this->aProperties['sig'])) or in_array($sExtension, explode("|", $this->aProperties['dao']))) {
+                    $sSchemaContrainte = "";
+                    if (in_array($sExtension, explode("|", $this->aProperties['sig']))) {
+                        $sSchemaContrainte = $this->aProperties["schema_sig"];
+                    } elseif (in_array($sExtension, explode("|", $this->aProperties['dao']))) {
+                        $sSchemaContrainte = $this->aProperties["schema_dao"];
+                    }
+
+                    $this->sRessourcesFile = "ExtractionExtraction.class.sql.inc";
+                    require $this->sRessourcesFile;
+                    $sSql       = $aSql['getFormat'];
+                    $aSQLParams = array(
+                        'extension' => array('type' => 'quoted_string', 'value' => '%' . $sExtension . '%'),
+                    );
+
+                    $oPDOresult = $this->oConnection->oBd->executeWithParams($sSql, $aSQLParams);
+                    $sFormat    = "";
+                    if (!$this->oConnection->oBd->enErreur()) {
+                        $aResult = $this->oConnection->oBd->getResultTableAssoc($oPDOresult);
+                        foreach ($aResult as $sFormats) {
+                            $sFormat = $sFormats['id_format'];
+                        }
+                    }
+
+                    $this->oBO = new WabBusinessObject($this->oConnection->oBd, array(), $this->aValues, $this->aProperties, 'extraction', $this->aValues['bo_id']);
+                    //$this->oBO->insertOrder('EM0160AYYTK48', 'bo_id=' . $this->aValues["bo_id"]  . '|sourceDir=' . end(explode("/", $sDirPath)) . '/' . $this->aValues["control_file_name"] . '|sourceMotif=' . $sExtension . '|schema=' . $sSchemaContrainte . '|format=ACAD|destDir=' . $this->aProperties['ws_data_dir'] . '/extraction/extraction_depot/' . $_SERVER["REMOTE_ADDR"] . "/Fichiers déposés");
+                    $this->oBO->insertOrder('EM0160AYYTK48', 'bo_id=' . $this->aValues["bo_id"] . '|sourceDir=' . $sDirPath . '/' . $this->aValues["control_file_name"] . '|sourceMotif=' . $sExtension . '|schema=' . $sSchemaContrainte . '|format='.$sFormat.'|depotDir=' . $this->aProperties['ws_data_dir'] . '/extraction/extraction_depot/' . $_SERVER["REMOTE_ADDR"] . '/Fichiers déposés/' . $this->aValues["control_file_name"]);
+                } else {
+                    //Si l'extension n'est pas bonne
+                    $error_message .= $this->aValues["control_file_name"] . " format is not authaurized (" . $sExtension . ")";
+                    writeToErrorLog("WARNING: " . $error_message);
+
+                    $aXmlRacineAttribute['status'] = 0;
+                    $this->aFields                 = array();
+                    $this->aFields['errorMessage'] = $error_message;
+                    $sMessage                      = $this->asDocument('', 'vitis', $this->aValues['sEncoding'], true, $aXmlRacineAttribute, $this->aValues['sSourceEncoding'], $this->aValues['output']);
+                    return $sMessage;
+                }
+            }
+        }
+
+        return $sMessage;
+    }
+
+}
diff --git a/web_service/ws/Extractions.class.inc b/web_service/ws/Extractions.class.inc
index 456c2aa73d065f0a3afeec6a6b03be3a2300704e..010fefce2439a952b017ace4c43ef113c654de47 100755
--- a/web_service/ws/Extractions.class.inc
+++ b/web_service/ws/Extractions.class.inc
@@ -6,16 +6,19 @@
  *
  * \author WAB <support.wab@veremes.com>.
  *
- * 	\brief This file contains the Extractions php class
+ *     \brief This file contains the Extractions php class
  *
  * This class defines Rest Api to Vitis Extractions
- * 
+ *
  */
 require_once __DIR__ . '/ExtractionExtraction.class.inc';
 require_once 'Extraction.class.inc';
 require_once(dirname($_SERVER['SCRIPT_FILENAME']) . '/class/wab_lib/BusinessObject.class.inc');
 
-class Extractions extends ExtractionExtraction {
+class Extractions extends ExtractionExtraction
+{
+
+    protected $iIdExtraction;
     /**
      * @SWG\Definition(
      *   definition="/extractions",
@@ -35,82 +38,83 @@ class Extractions extends ExtractionExtraction {
      * @param type $aValues parameters of the request
      * @param type $properties properties
      */
-    function __construct($aPath, $aValues, $properties, $bShortcut = false) {
-        parent::__construct($aPath, $aValues, $properties, $bShortcut);
+    public function __construct($aPath, $aValues, $properties, $bShortcut = false, $oConnection = false)
+    {
+        parent::__construct($aPath, $aValues, $properties, $bShortcut, $oConnection);
     }
 
-    /**
-     * @SWG\Get(path="/extractions",
-     *   tags={"Extractions"},
-     *   summary="Get Extractions",
-     *   description="Request to get Extractions",
-     *   operationId="GET",
-     *   produces={"application/xml", "application/json", "application/x-vm-json"},
-     *   @SWG\Parameter(
-     *     name="token",
-     *     in="query",
-     *     description="user token",
-     *     required=true,
-     *     type="string"
-     *   ),
-     * @SWG\Parameter(
-     *     name="order_by",
-     *     in="query",
-     *     description="list of ordering fields",
-     *     required=false,
-     *     type="string"
-     *   ),
-     * @SWG\Parameter(
-     *     name="sort_order",
-     *     in="query",
-     *     description="sort_order",
-     *     required=false,
-     *     type="string"
-     *   ),
-     * @SWG\Parameter(
-     *     name="limit",
-     *     in="query",
-     *     description="number of element",
-     *     required=false,
-     *     type="integer",
-     *     format="int32"
-     *   ),
-     * @SWG\Parameter(
-     *     name="offset",
-     *     in="query",
-     *     description="index of first element",
-     *     required=false,
-     *     type="string",
-     *     format="int32"
-     *   ),
-     * @SWG\Parameter(
-     *     name="attributs",
-     *     in="query",
-     *     description="list of attributs",
-     *     required=false,
-     *     type="string"
-     *   ),
-     * @SWG\Parameter(
-     *     name="filter",
-     *     in="query",
-     *     description="filter results",
-     *     required=false,
-     *     type="string"
-     *   ),
-     * @SWG\Parameter(
-     *     name="distinct",
-     *     in="query",
-     *     description="delete duplicates",
-     *     required=false,
-     *     type="boolean"
-     *   ),
-     *   @SWG\Response(
-     *         response=200,
-     *         description="extraction Response",
-     *         @SWG\Schema(ref="#/definitions/extractions")
-     *     )
-     *  )
-     */
+/**
+ * @SWG\Get(path="/extractions",
+ *   tags={"Extractions"},
+ *   summary="Get Extractions",
+ *   description="Request to get Extractions",
+ *   operationId="GET",
+ *   produces={"application/xml", "application/json", "application/x-vm-json"},
+ *   @SWG\Parameter(
+ *     name="token",
+ *     in="query",
+ *     description="user token",
+ *     required=true,
+ *     type="string"
+ *   ),
+ * @SWG\Parameter(
+ *     name="order_by",
+ *     in="query",
+ *     description="list of ordering fields",
+ *     required=false,
+ *     type="string"
+ *   ),
+ * @SWG\Parameter(
+ *     name="sort_order",
+ *     in="query",
+ *     description="sort_order",
+ *     required=false,
+ *     type="string"
+ *   ),
+ * @SWG\Parameter(
+ *     name="limit",
+ *     in="query",
+ *     description="number of element",
+ *     required=false,
+ *     type="integer",
+ *     format="int32"
+ *   ),
+ * @SWG\Parameter(
+ *     name="offset",
+ *     in="query",
+ *     description="index of first element",
+ *     required=false,
+ *     type="string",
+ *     format="int32"
+ *   ),
+ * @SWG\Parameter(
+ *     name="attributs",
+ *     in="query",
+ *     description="list of attributs",
+ *     required=false,
+ *     type="string"
+ *   ),
+ * @SWG\Parameter(
+ *     name="filter",
+ *     in="query",
+ *     description="filter results",
+ *     required=false,
+ *     type="string"
+ *   ),
+ * @SWG\Parameter(
+ *     name="distinct",
+ *     in="query",
+ *     description="delete duplicates",
+ *     required=false,
+ *     type="boolean"
+ *   ),
+ *   @SWG\Response(
+ *         response=200,
+ *         description="extraction Response",
+ *         @SWG\Schema(ref="#/definitions/extractions")
+ *     )
+ *  )
+ */
     /**
      * @SWG\Get(path="/extractions/Layers",
      *   tags={"Extractions"},
@@ -137,123 +141,191 @@ class Extractions extends ExtractionExtraction {
      * get Extractions
      * @return  Extractions
      */
-    function GET() {
-        if (!empty($this->aPath[2]) && $this->aPath[2] == "Layers")
+    public function GET()
+    {
+        if (!empty($this->aPath[2]) && $this->aPath[2] == "Layers") {
             $sMessage = $this->getLayers();
-        else {
-            $aReturn = $this->genericGet($this->aProperties['schema_extraction'], "v_extraction", "bo_id");
+        } else {
+            $aReturn  = $this->genericGet($this->aProperties['schema_extraction'], "v_extraction", "bo_id");
             $sMessage = $aReturn['sMessage'];
         }
         return $sMessage;
     }
 
-    /**
-     * @SWG\Post(path="/extractions",
-     *   tags={"Extractions"},
-     *   summary="Add extraction",
-     *   description="Request to add Extractions",
-     *   operationId="POST",
-     *   produces={"application/xml", "application/json"},
-     *   @SWG\Parameter(
-     *     name="token",
-     *     in="query",
-     *     description="user token",
-     *     required=true,
-     *     type="string"
-     *   ),
-     *   @SWG\Response(
-     *         response=200,
-     *         description="extraction Response",
-     *         @SWG\Schema(ref="#/definitions/extractions")
-     *     )
-     *  )
-     */
+/**
+ * @SWG\Post(path="/extractions",
+ *   tags={"Extractions"},
+ *   summary="Add extraction",
+ *   description="Request to add Extractions",
+ *   operationId="POST",
+ *   produces={"application/xml", "application/json"},
+ *   @SWG\Parameter(
+ *     name="token",
+ *     in="query",
+ *     description="user token",
+ *     required=true,
+ *     type="string"
+ *   ),
+ *   @SWG\Response(
+ *         response=200,
+ *         description="extraction Response",
+ *         @SWG\Schema(ref="#/definitions/extractions")
+ *     )
+ *  )
+ */
 
     /**
      * insert extraction
      * @return id of the extraction created
      */
-    function POST() {
-        $aReturn = $this->genericPost($this->aProperties['schema_extraction'], 'extraction', $this->aProperties['schema_extraction'].'.bo_id_extraction_seq', 'bo_id');
+    public function POST()
+    {
+        $aReturn                = $this->genericPost($this->aProperties['schema_extraction'], 'extraction', $this->aProperties['schema_extraction'] . '.bo_id_extraction_seq', 'bo_id');
         $this->aValues["bo_id"] = $this->aValues['my_vitis_id'];
-	eval('$this->' . $this->aValues['tr_status_method'] . '();');
+        eval('$this->' . $this->aValues['tr_status_method'] . '();');
         return $aReturn['sMessage'];
     }
 
-    /**
-     * @SWG\Put(path="/extractions/{id_extraction}",
-     *   tags={"Extractions"},
-     *   summary="update Extractions",
-     *   description="Request to update Extractions",
-     *   operationId="PUT",
-     *   produces={"application/xml", "application/json"},
-     *   @SWG\Parameter(
-     *     name="token",
-     *     in="query",
-     *     description="Extraction token",
-     *     required=true,
-     *     type="string"
-     *   ),
-     * * @SWG\Parameter(
-     *     name="id_extraction",
-     *     in="path",
-     *     description="id of the Extractions",
-     *     required=true,
-     *     type="integer",
-     *     format = "int32"
-     *   ),
-     * @SWG\Response(
-     *         response=200,
-     *         description="Poprerties Response",
-     *         @SWG\Schema(ref="#/definitions/extractions")
-     *     )
-     *  )
-     */
+/**
+ * @SWG\Put(path="/extractions/{id_extraction}",
+ *   tags={"Extractions"},
+ *   summary="update Extractions",
+ *   description="Request to update Extractions",
+ *   operationId="PUT",
+ *   produces={"application/xml", "application/json"},
+ *   @SWG\Parameter(
+ *     name="token",
+ *     in="query",
+ *     description="Extraction token",
+ *     required=true,
+ *     type="string"
+ *   ),
+ * * @SWG\Parameter(
+ *     name="id_extraction",
+ *     in="path",
+ *     description="id of the Extractions",
+ *     required=true,
+ *     type="integer",
+ *     format = "int32"
+ *   ),
+ * @SWG\Response(
+ *         response=200,
+ *         description="Poprerties Response",
+ *         @SWG\Schema(ref="#/definitions/extractions")
+ *     )
+ *  )
+ */
 
     /**
      * update extractions
      * @return id of extractions updated or error object if a extractions is not updated
      */
-    function PUT() {
+    public function PUT()
+    {
         // Upload l'acte d'engagement.
         $this->uploadDocument('ae', 'extraction_extraction_extraction');
         //
-        $aReturn = $this->genericPut($this->aProperties['schema_extraction'], 'extraction', 'bo_id');
+        $aReturn                = $this->genericPut($this->aProperties['schema_extraction'], 'extraction', 'bo_id');
         $this->aValues["bo_id"] = $this->aValues['my_vitis_id'];
-        // Méthode de transition.
-        if (!empty($this->aValues['tr_status_method']))
-            eval('$this->' . $this->aValues['tr_status_method'] . '();');
+
+        //On vérifie que le fichier existe et ne soit pas vide
+        if (!empty($this->aValues['input_deposit_file'])) {
+            //On va déplacer le fichier dans un dossier temporaire
+            $aXmlRacineAttribute['status'] = 1;
+            $sMessage                      = $this->asDocument('', 'vitis', $this->aValues['sEncoding'], true, $aXmlRacineAttribute, $this->aValues['sSourceEncoding'], $this->aValues['output']);
+            $sDirPath                      = $this->aProperties["upload_dir"] . "/" . getUniqRandomId();
+            //Récupération de sDirPath pour trDéposer
+            $this->sDirPath = $sDirPath;
+
+            $sExtension = '*.' . end(explode(".", $this->aValues["input_deposit_name"]));
+
+            //Si l'extension est autorisée
+            if (in_array($sExtension, explode("|", $this->aProperties['sig'])) || in_array($sExtension, explode("|", $this->aProperties['dao']))) {
+
+                // Méthode de transition.
+                if (!empty($this->aValues['tr_status_method'])) {
+                    eval('$this->' . $this->aValues['tr_status_method'] . '();');
+                }
+
+                $sSchemaContrainte = "";
+                if (in_array($sExtension, explode("|", $this->aProperties['sig']))) {
+                    $sSchemaContrainte = $this->aProperties["schema_sig"];
+                } elseif (in_array($sExtension, explode("|", $this->aProperties['dao']))) {
+                    $sSchemaContrainte = $this->aProperties["schema_dao"];
+                }
+
+                while (is_dir($sDirPath)) {
+                    $sDirPath = $this->aProperties["upload_dir"] . "/" . getUniqRandomId();
+                }
+                if (!mkdir($sDirPath)) {
+                    return false;
+                }
+                // Sauvegarde le nouveau fichier.
+                $fp = fopen($sDirPath . '/' . utf8_decode($this->aValues["input_deposit_name"]), "w");
+                fwrite($fp, $this->aValues["input_deposit_file"]);
+                fclose($fp);
+
+                $this->sRessourcesFile = "ExtractionExtraction.class.sql.inc";
+                require $this->sRessourcesFile;
+                $sSql       = $aSql['getFormat'];
+                $aSQLParams = array(
+                    'extension' => array('type' => 'quoted_string', 'value' => '%' . $sExtension . '%'),
+                );
+
+                $oPDOresult = $this->oConnection->oBd->executeWithParams($sSql, $aSQLParams);
+                $sFormat = "";
+                if (!$this->oConnection->oBd->enErreur()) {
+                    $aResult = $this->oConnection->oBd->getResultTableAssoc($oPDOresult);
+                    foreach ($aResult as $sFormats) {
+                        $sFormat = $sFormats['id_format'];
+                    }
+                }
+
+                //Demande GTF
+                $this->oBO->insertOrder('EM0160AYYTK48', 'bo_id=' . $this->aValues["bo_id"] . '|sourceDir=' . end(explode("/", $sDirPath)) . '/' . $this->aValues["input_deposit_name"] . '|sourceMotif=' . $sExtension . '|depotDir=' . $sSchemaContrainte . '|format=' . $sFormat . '|depotDir=' . $this->aProperties['ws_data_dir'] . '/extraction/extraction_depot/' . $_SERVER["REMOTE_ADDR"] . "/Fichiers déposés/" . $this->aValues["input_deposit_name"]);
+            } else {
+                //Si l'extension n'est pas bonne
+                $error_message .= $this->aValues["input_deposit_name"] . " format is not authaurized (" . $sExtension . ")";
+                writeToErrorLog("WARNING: " . $error_message);
+
+                $aXmlRacineAttribute['status'] = 0;
+                $this->aFields                 = array();
+                $this->aFields['errorMessage'] = $error_message;
+                $sMessage                      = $this->asDocument('', 'vitis', $this->aValues['sEncoding'], true, $aXmlRacineAttribute, $this->aValues['sSourceEncoding'], $this->aValues['output']);
+                return $sMessage;
+            }
+        }
         return $aReturn['sMessage'];
     }
 
-    /**
-     * @SWG\Delete(path="/extractions",
-     *   tags={"Extractions"},
-     *   summary="delete Extractions",
-     *   description="Request to delete Extractions",
-     *   operationId="DELETE",
-     *   produces={"application/xml", "application/json"},
-     *   @SWG\Parameter(
-     *     name="token",
-     *     in="query",
-     *     description="token",
-     *     required=true,
-     *     type="string"
-     *   ),
-     * * @SWG\Parameter(
-     *     name="idList",
-     *     in="query",
-     *     description="id of the extraction",
-     *     required=true,
-     *     type="string"
-     *   ),
-     * @SWG\Response(
-     *         response=200,
-     *         description="extraction Response",
-     *         @SWG\Schema(ref="#/definitions/extractions")
-     *     )
-     *  )
-     */
+/**
+ * @SWG\Delete(path="/extractions",
+ *   tags={"Extractions"},
+ *   summary="delete Extractions",
+ *   description="Request to delete Extractions",
+ *   operationId="DELETE",
+ *   produces={"application/xml", "application/json"},
+ *   @SWG\Parameter(
+ *     name="token",
+ *     in="query",
+ *     description="token",
+ *     required=true,
+ *     type="string"
+ *   ),
+ * * @SWG\Parameter(
+ *     name="idList",
+ *     in="query",
+ *     description="id of the extraction",
+ *     required=true,
+ *     type="string"
+ *   ),
+ * @SWG\Response(
+ *         response=200,
+ *         description="extraction Response",
+ *         @SWG\Schema(ref="#/definitions/extractions")
+ *     )
+ *  )
+ */
     /**
      * @SWG\Delete(path="/extractions/{id_extraction}",
      *   tags={"Extractions"},
@@ -293,143 +365,281 @@ class Extractions extends ExtractionExtraction {
         return $aReturn['sMessage'];
     }
 
-    
     /**
-    * Transition Method trGenerer
-    */
-    function trGenerer() {
+     * Liste des couches.
+     */
+    public function getLayers()
+    {
+        require $this->sRessourcesFile;
+        //On décode le json récupéré via le filtre
+        if (!empty($this->aValues["filter"])) {
+            $decode = $this->decodeJSONFilter($this->aValues["filter"], $this->aProperties['schema_extraction'], $this->aValues["table"]);
+        }
+
+        if (is_object($this->aValues) || is_array($this->aValues)) {
+            $sJSONFilter = json_encode($this->aValues);
+        }
+
+        if (!empty($sJSONFilter)) {
+            $aJSONFilter = json_decode($sJSONFilter, true);
+
+            if (!empty($aJSONFilter["filter"])) {
+                if (is_object($aJSONFilter["filter"]) || is_array($aJSONFilter["filter"])) {
+                    $sJSONFilter = json_encode($aJSONFilter["filter"]);
+                }
+            }
+        }
+        $aSQLParams = array(
+            'schema_framework' => array('value' => $this->aProperties['schema_framework'], 'type' => 'schema_name'),
+            'user_id'          => array('value' => $_SESSION['ses_user_id'], 'type' => 'string'),
+        );
+
+        $sSql       = $aSql['getUserGroups'];
+        $oPDOresult = $this->oConnection->oBd->executeWithParams($sSql, $aSQLParams);
+        if (!$this->oConnection->oBd->enErreur()) {
+            $aResult = $this->oConnection->oBd->getResultTableAssoc($oPDOresult);
+            foreach ($aResult as $aUserGroup) {
+                $aUserGroups[] = $aUserGroup['name'];
+            }
+
+            if (!empty($aValues["filter"])) {
+                $aSQLParams = array(
+                    'schema_extraction' => array('value' => $this->aProperties['schema_extraction'], 'type' => 'schema_name'),
+                );
+
+                $sSql = $aSql['getCtId'];
+                //On donne la condition
+                if ($decode["request"]) {
+                    $sSql .= " WHERE ";
+                    $sSql .= $decode["request"];
+                    $sSql .= 'ORDER BY ct_id;';
+                }
+                //error_log(print_r($sSql, true));
+                $merge = array_merge($aSQLParams, $decode["params"]);
+
+                $oPDOresult = $this->oConnection->oBd->executeWithParams($sSql, $merge);
+
+                $aCtResult = $this->oConnection->oBd->getResultTableAssoc($oPDOresult);
+            }
+            // Restriction de l'utilisateur suivant ses groupes.
+            if (in_array('interne', $aUserGroups)) {
+                $sSqlParams = " ORDER BY category, layer_id;";
+            } else if (in_array('restreint', $aUserGroups)) {
+                $sSqlParams = " AND restriction <> 'interne' ORDER BY category, layer_id;";
+            } else {
+                $sSqlParams = " AND restriction = 'public' ORDER BY category, layer_id;";
+            }
+
+            // Liste des cartes.
+            $this->aFields['treeview_layers'] = array();
+
+            //Requête pour récupérer les couches
+            if (!empty($aValues["filter"])) {
+                $sSql = $aSql['getRtLayerWithCtId'] . $sSqlParams;
+            } else {
+                $sSql = $aSql['getRtLayer'] . $sSqlParams;
+            }
+            $ct_id;
+            if (!empty($aCtResult)) {
+                for ($i = 0; $i < sizeof($aCtResult); $i++) {
+                    $ct_id .= $aCtResult[$i]["ct_id"] . "|";
+                }
+                //On retire la dernière pipe qui ne sert à rien
+                $ct_idToSend = substr($ct_id, 0, -1);
+            } else {
+                //On donne un id qui n'existe pas pour éviter une erreur dans la requête SQL
+                $ct_idToSend = -1;
+            }
+            //error_log(print_r($aCtResult[$i]["ct_id"], true));
+            $aSQLParams = array(
+                'schema_extraction' => array('value' => $this->aProperties['schema_extraction'], 'type' => 'schema_name'),
+                'aCtId'             => array('value' => $ct_idToSend, 'type' => 'group'),
+            );
+            $oPDOresult = $this->oConnection->oBd->executeWithParams($sSql, $aSQLParams);
+            if (!$this->oConnection->oBd->enErreur()) {
+                $aRtLayer = $this->oConnection->oBd->getResultTableAssoc($oPDOresult);
+                $aLayers  = array();
+                if (!empty($aRtLayer)) {
+                    foreach ($aRtLayer as $aLayer) {
+
+                        $aLayers[$aLayer['category']][] = array("text" => $aLayer['layer'], "value" => $aLayer['layer_id'], "mutualized" => $aLayer['mutualized'], "statistique" => $aLayer['statistique']);
+
+                    }
+                }
+                $this->aFields['layers']       = $aLayers;
+                $aXmlRacineAttribute['status'] = 1;
+                $sMessage                      = $this->asDocument('', 'vitis', $this->aValues['sEncoding'], true, $aXmlRacineAttribute, $this->aValues['sSourceEncoding'], $this->aValues['output']);
+            } else {
+                $aXmlRacineAttribute['status'] = 0;
+                $this->aFields['error']        = "Request error.";
+                $sMessage                      = $this->asDocument('', 'vitis', $this->aValues['sEncoding'], true, $aXmlRacineAttribute, $this->aValues['sSourceEncoding'], $this->aValues['output']);
+            }
+        } else {
+            $aXmlRacineAttribute['status'] = 0;
+            $this->aFields['error']        = "Request error.";
+            $sMessage                      = $this->asDocument('', 'vitis', $this->aValues['sEncoding'], true, $aXmlRacineAttribute, $this->aValues['sSourceEncoding'], $this->aValues['output']);
+        }
+        //error_log(print_r($sMessage, true));
+        return $sMessage;
+    }
+
+    /**
+     * Transition Method trNouveau
+     */
+    public function trNouveau()
+    {
+        $this->oBO = new WabBusinessObject($this->oConnection->oBd, array(), $this->aValues, $this->aProperties, 'extraction', $this->aValues['bo_id']);
+
+        // Check si la table existe si oui change l'état
+        $this->oBO->wabSetStatus($this->aProperties["schema_extraction"], "extraction", "bo_id", $this->aValues["bo_id"], "Nouveau");
+
+    }
+
+    /**
+     * Transition Method trGenerer
+     */
+    public function trGenerer()
+    {
         $this->oBO = new WabBusinessObject($this->oConnection->oBd, array(), $this->aValues, $this->aProperties, 'extraction', $this->aValues['bo_id']);
-        // Check si la table existe si oui change l'état 
+        // Check si la table existe si oui change l'état
         $this->oBO->wabSetStatus($this->aProperties["schema_extraction"], "extraction", "bo_id", $this->aValues["bo_id"], "AE Généré");
-        
+
     }
-		
+
     /**
-    * Transition Method trNouveau
-    */
-    function trNouveau() {
+     * Transition Method trResoumettre
+     */
+    public function trResoumettre()
+    {
         $this->oBO = new WabBusinessObject($this->oConnection->oBd, array(), $this->aValues, $this->aProperties, 'extraction', $this->aValues['bo_id']);
-        
-        // Check si la table existe si oui change l'état 
-        $this->oBO->wabSetStatus($this->aProperties["schema_extraction"], "extraction", "bo_id", $this->aValues["bo_id"], "Nouveau");
-        
+
+        // Check si la table existe si oui change l'état
+        $this->oBO->wabSetStatus($this->aProperties["schema_extraction"], "extraction", "bo_id", $this->aValues["bo_id"], "AE Généré");
+        //$this->sendmail(9904);
+        $this->sendmail(171);
     }
-		
+
     /**
-    * Transition Method trTerminer
-    */
-    function trTerminer() {
+     * Transition Method trSoumettre
+     */
+    public function trSoumettre()
+    {
         $this->oBO = new WabBusinessObject($this->oConnection->oBd, array(), $this->aValues, $this->aProperties, 'extraction', $this->aValues['bo_id']);
-        
-        // Check si la table existe si oui change l'état 
-        $this->oBO->wabSetStatus($this->aProperties["schema_extraction"], "extraction", "bo_id", $this->aValues["bo_id"], "Terminée");
-        
+
+        // Check si la table existe si oui change l'état
+        $this->oBO->wabSetStatus($this->aProperties["schema_extraction"], "extraction", "bo_id", $this->aValues["bo_id"], "AE Soumis");
+        //$this->oBO->sendmail(39);
+        $this->oBO->sendmail(174);
     }
-		
+
     /**
-    * Transition Method trAutoriser
-    */
-    function trAutoriser() {
+     * Transition Method trDemander
+     */
+    public function trDemander()
+    {
         $this->oBO = new WabBusinessObject($this->oConnection->oBd, array(), $this->aValues, $this->aProperties, 'extraction', $this->aValues['bo_id']);
-        $this->oBO->insertOrder('D16ECS75P', 'bo_id='.$this->aValues['bo_id'], $this->aValues['priority_id'], 2 );
-        // Check si la table existe si oui change l'état 
+        $this->oBO->insertOrder('832HZ8J2PTCSG', 'bo_id=' . $this->aValues['bo_id']);
+        // Check si la table existe si oui change l'état
+        $this->oBO->wabSetStatus($this->aProperties["schema_extraction"], "extraction", "bo_id", $this->aValues["bo_id"], "AE Demandé");
+
+    }
+
+    /**
+     * Transition Method trReception
+     */
+    public function trReception()
+    {
+        $this->oBO = new WabBusinessObject($this->oConnection->oBd, array(), $this->aValues, $this->aProperties, 'extraction', $this->aValues['bo_id']);
+
+        // Check si la table existe si oui change l'état
+        $this->oBO->wabSetStatus($this->aProperties["schema_extraction"], "extraction", "bo_id", $this->aValues["bo_id"], "Dépôt terminé");
+
+    }
+
+    /**
+     * Transition Method trDeposer
+     */
+    public function trDeposer()
+    {
+        $this->oBO = new WabBusinessObject($this->oConnection->oBd, array(), $this->aValues, $this->aProperties, 'extraction', $this->aValues['bo_id']);
+        // Check si la table existe si oui change l'état
+        $this->oBO->wabSetStatus($this->aProperties["schema_extraction"], "extraction", "bo_id", $this->aValues["bo_id"], "Fichier déposé");
+
+    }
+
+    /**
+     * Transition Method trAutoriser
+     */
+    public function trAutoriser()
+    {
+        $this->oBO = new WabBusinessObject($this->oConnection->oBd, array(), $this->aValues, $this->aProperties, 'extraction', $this->aValues['bo_id']);
+        $this->oBO->insertOrder('8BCP8WGIOW4KO', 'bo_id=' . $this->aValues['bo_id']);
+        // Check si la table existe si oui change l'état
         $this->oBO->wabSetStatus($this->aProperties["schema_extraction"], "extraction", "bo_id", $this->aValues["bo_id"], "Autorisée");
-        
+
     }
-		
+
     /**
-    * Transition Method trDemander
-    */
-    function trDemander() {
+     * Transition Method trAccepter
+     */
+    public function trAccepter()
+    {
         $this->oBO = new WabBusinessObject($this->oConnection->oBd, array(), $this->aValues, $this->aProperties, 'extraction', $this->aValues['bo_id']);
-        $this->oBO->insertOrder('D14RHVRJC', 'bo_id='.$this->aValues['bo_id'], 1, 2);
-        // Check si la table existe si oui change l'état 
-        $this->oBO->wabSetStatus($this->aProperties["schema_extraction"], "extraction", "bo_id", $this->aValues["bo_id"], "AE Demandé");
-        
+        // Check si la table existe si oui change l'état
+        $this->oBO->wabSetStatus($this->aProperties["schema_extraction"], "extraction", "bo_id", $this->aValues["bo_id"], "Fichier accepté");
+
+        //$this->oBO->sendmail(id_du_mail_pour_dire_que_le_fichier_est_accepté);
+        $this->trReception();
+
     }
-		
+
     /**
-    * Transition Method trResoumettre
-    */
-    function trResoumettre() {
+     * Transition Method trInvalider
+     */
+    public function trInvalider()
+    {
         $this->oBO = new WabBusinessObject($this->oConnection->oBd, array(), $this->aValues, $this->aProperties, 'extraction', $this->aValues['bo_id']);
-        
-        // Check si la table existe si oui change l'état 
-        $this->oBO->wabSetStatus($this->aProperties["schema_extraction"], "extraction", "bo_id", $this->aValues["bo_id"], "AE Généré");
-        //$this->sendmail(9904);
+
+        // Check si la table existe si oui change l'état
+        $this->oBO->wabSetStatus($this->aProperties["schema_extraction"], "extraction", "bo_id", $this->aValues["bo_id"], "Fichier invalidé");
+        $this->oBO->sendmail(1057);
+        $this->trRetour();
+
     }
-		
+
     /**
-    * Transition Method trSoumettre
-    */
-    function trSoumettre() {
+     * Transition Method trRetour
+     */
+    public function trRetour()
+    {
         $this->oBO = new WabBusinessObject($this->oConnection->oBd, array(), $this->aValues, $this->aProperties, 'extraction', $this->aValues['bo_id']);
-        
-        // Check si la table existe si oui change l'état 
-        $this->oBO->wabSetStatus($this->aProperties["schema_extraction"], "extraction", "bo_id", $this->aValues["bo_id"], "AE Soumis");
-        $this->oBO->sendmail(39);
+
+        // Check si la table existe si oui change l'état
+        $this->oBO->wabSetStatus($this->aProperties["schema_extraction"], "extraction", "bo_id", $this->aValues["bo_id"], "Extraction terminée");
+
     }
-		
+
     /**
-    * Transition Method trRefuser
-    */
-    function trRefuser() {
+     * Transition Method trTerminerExtraction
+     */
+    public function trTerminerExtraction()
+    {
         $this->oBO = new WabBusinessObject($this->oConnection->oBd, array(), $this->aValues, $this->aProperties, 'extraction', $this->aValues['bo_id']);
-        
-        // Check si la table existe si oui change l'état 
-        $this->oBO->wabSetStatus($this->aProperties["schema_extraction"], "extraction", "bo_id", $this->aValues["bo_id"], "Refusée");
-        //$this->sendmail(9902);
+        // Check si la table existe si oui change l'état
+        $this->oBO->wabSetStatus($this->aProperties["schema_extraction"], "extraction", "bo_id", $this->aValues["bo_id"], "Extraction terminée");
+
     }
-    
+
     /**
-     * Liste des couches.
+     * Transition Method trRefuser
      */
-    function getLayers() {
-        require $this->sRessourcesFile;
-        // Liste des groupes de l'utilisateur.
-        $sSql = str_replace('[schema_framework]', $this->aProperties['schema_framework'], $aSql['getUserGroups']);
-        $sSql = str_replace('[user_id]', $_SESSION['ses_user_id'], $sSql);
-        $oPDOresult = $this->oConnection->oBd->executeWithParams($sSql, array());
-        if (!$this->oConnection->oBd->enErreur()) {
-            $aResult = $this->oConnection->oBd->getResultTableAssoc($oPDOresult);
-            foreach($aResult as $aUserGroup) {
-                $aUserGroups[] = $aUserGroup['name'];
-            }
-            // Restriction de l'utilisateur suivant ses groupes.
-            if (in_array('interne', $aUserGroups))
-                $sSqlParams = '';
-            else if (in_array('restreint', $aUserGroups))
-                $sSqlParams = " WHERE restriction <> 'interne'";
-            else
-                $sSqlParams = " WHERE restriction = 'public'";
-            // Liste des cartes.
-            $this->aFields['treeview_layers'] = array();
-            $sSql = str_replace('[schema_extraction]', $this->aProperties['schema_extraction'], $aSql['getRtLayer']);
-            $sSql = str_replace('[sql_params]', $sSqlParams, $sSql);
-            $oPDOresult = $this->oConnection->oBd->executeWithParams($sSql, array());
-            if (!$this->oConnection->oBd->enErreur()) {
-                $aRtLayer = $this->oConnection->oBd->getResultTableAssoc($oPDOresult);
-                $aLayers = array();
-                if (!empty($aRtLayer)) {
-                    foreach($aRtLayer as $aLayer)
-                        $aLayers[$aLayer['category']][] = array("text" => $aLayer['layer'], "value" => $aLayer['layer_id']);
-                }
-                $this->aFields['layers'] = $aLayers;
-                $aXmlRacineAttribute['status']=1;
-                $sMessage = $this->asDocument('','vitis',$this->aValues['sEncoding'],True,$aXmlRacineAttribute,$this->aValues['sSourceEncoding'],$this->aValues['output']);
-            }
-            else {
-                $aXmlRacineAttribute['status']=0;
-                $this->aFields['error'] = "Request error.";
-                $sMessage = $this->asDocument('','vitis',$this->aValues['sEncoding'],True,$aXmlRacineAttribute,$this->aValues['sSourceEncoding'],$this->aValues['output']);
-            }
-        }
-        else {
-            $aXmlRacineAttribute['status']=0;
-            $this->aFields['error'] = "Request error.";
-            $sMessage = $this->asDocument('','vitis',$this->aValues['sEncoding'],True,$aXmlRacineAttribute,$this->aValues['sSourceEncoding'],$this->aValues['output']);
-        }
-        return $sMessage;
+    public function trRefuser()
+    {
+        $this->oBO = new WabBusinessObject($this->oConnection->oBd, array(), $this->aValues, $this->aProperties, 'extraction', $this->aValues['bo_id']);
+
+        // Check si la table existe si oui change l'état
+        $this->oBO->wabSetStatus($this->aProperties["schema_extraction"], "extraction", "bo_id", $this->aValues["bo_id"], "Refusée");
+        //$this->sendmail(9902);
     }
+
 }
-?>
\ No newline at end of file
diff --git a/web_service/ws/Format.class.inc b/web_service/ws/Format.class.inc
index 005eb0b210ef5af675d7c588047aeba96d481e07..385d4329c156277a0c02029b8fef483d2d5976cd 100755
--- a/web_service/ws/Format.class.inc
+++ b/web_service/ws/Format.class.inc
@@ -12,7 +12,7 @@ require_once dirname($_SERVER['SCRIPT_FILENAME']) . '/class/vitis_lib/Connection
  * 	\brief This file contains the Format php class
  *
  * This class defines operation for one Format
- * 
+ *
  */
 class Format extends ExtractionExtraction {
 
@@ -87,4 +87,4 @@ class Format extends ExtractionExtraction {
 
 }
 
-?>
\ No newline at end of file
+?>
diff --git a/web_service/ws/Formats.class.inc b/web_service/ws/Formats.class.inc
index fb2e5ec5ab03aa214c0bc4b767deaf7d2fd1043e..15d7aecc746aa1288dea1c826a942b7a47c3e51a 100755
--- a/web_service/ws/Formats.class.inc
+++ b/web_service/ws/Formats.class.inc
@@ -9,7 +9,7 @@
  * 	\brief This file contains the Formats php class
  *
  * This class defines Rest Api to Vitis Formats
- * 
+ *
  */
 require_once __DIR__ . '/ExtractionExtraction.class.inc';
 require_once 'Format.class.inc';
@@ -150,7 +150,7 @@ class Formats extends ExtractionExtraction {
      */
     function POST() {
         $aReturn = $this->genericPost($this->aProperties['schema_extraction'], 'rt_format', '', 'format_id');
-        
+
         return $aReturn['sMessage'];
     }
 
@@ -190,7 +190,7 @@ class Formats extends ExtractionExtraction {
      */
     function PUT() {
         $aReturn = $this->genericPut($this->aProperties['schema_extraction'], 'rt_format', 'format_id');
-        
+
         return $aReturn['sMessage'];
     }
 
@@ -261,7 +261,7 @@ class Formats extends ExtractionExtraction {
         return $aReturn['sMessage'];
     }
 
-    
+
 }
 
-?>
\ No newline at end of file
+?>
diff --git a/web_service/ws/Layer.class.inc b/web_service/ws/Layer.class.inc
index b9a17a3f9043317a8c5c93c4d5d8c0b04aec068b..1d5a36e90a214d425a185f3160102bee30bd6894 100755
--- a/web_service/ws/Layer.class.inc
+++ b/web_service/ws/Layer.class.inc
@@ -12,7 +12,7 @@ require_once dirname($_SERVER['SCRIPT_FILENAME']) . '/class/vitis_lib/Connection
  * 	\brief This file contains the Layer php class
  *
  * This class defines operation for one Layer
- * 
+ *
  */
 class Layer extends ExtractionExtraction {
 
@@ -87,4 +87,4 @@ class Layer extends ExtractionExtraction {
 
 }
 
-?>
\ No newline at end of file
+?>
diff --git a/web_service/ws/Layers.class.inc b/web_service/ws/Layers.class.inc
index f89ede1bd9d824b2a02c1b18e3471f9c37ffe6a0..8b11cd56f9b6b0a14a06ea1e689573570839ee09 100755
--- a/web_service/ws/Layers.class.inc
+++ b/web_service/ws/Layers.class.inc
@@ -9,7 +9,7 @@
  * 	\brief This file contains the Layers php class
  *
  * This class defines Rest Api to Vitis Layers
- * 
+ *
  */
 require_once __DIR__ . '/ExtractionExtraction.class.inc';
 require_once 'Layer.class.inc';
@@ -150,7 +150,7 @@ class Layers extends ExtractionExtraction {
      */
     function POST() {
         $aReturn = $this->genericPost($this->aProperties['schema_extraction'], 'rt_layer', '', 'layer_id');
-        
+
         return $aReturn['sMessage'];
     }
 
@@ -190,7 +190,7 @@ class Layers extends ExtractionExtraction {
      */
     function PUT() {
         $aReturn = $this->genericPut($this->aProperties['schema_extraction'], 'rt_layer', 'layer_id');
-        
+
         return $aReturn['sMessage'];
     }
 
@@ -261,7 +261,7 @@ class Layers extends ExtractionExtraction {
         return $aReturn['sMessage'];
     }
 
-    
+
 }
 
-?>
\ No newline at end of file
+?>