diff --git a/CHANGELOG b/CHANGELOG
index acd5c6243c5b449b7b388c0eae2c1b1782b01c7c..d92aef6c08adb0ca4c9c3e75627e4dd9df816d8a 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -9,10 +9,16 @@ author: Laurent Lécluse - DSI - Unicaen
 
 ## Nouveautés
 
+* Possibilité de récupérer les libellés de labos dans les affectations de recherche
+
 ## Notes de mise à jour
 
 #OSE 7.0.4 (en développement)
 
+## Nouveautés
+
+* Possibilité d'éditer 1, 2 ou 3 exemplaires d'un contrat à partir d'un modèle
+
 ## Corrections de bugs
 
 * Les intervenants peuvent maintenant avoir un code composé de lettres, plus seulement de chiffres
@@ -20,6 +26,9 @@ author: Laurent Lécluse - DSI - Unicaen
 * Les plafonds bloquants ne peuvent plus être dépassés lors du report  du service prévisionnel de l'année dernière vers l'année actuelle
 * Les plafonds bloquants ne peuvent plus être dépassés lors de l'initialisation du réalisé à partir du prévisionnel
 * Lors de l'initialisation du service prévisionnel à partir de celui de l'année dernière, les heures portant sur des services précédemment historisés s'importent aussi dorénavant.
+* Lors de la génération de contrat, le bug "Uncaught TypeError: Return value of getVariables must be of the type array, null returned" qui se produisait si aucune variable n'était positionnée dans les en-têtes ou pieds de page a été résolu.
+* L'ergonomie du formulaire d'édition des modèles de contrats a été revue afin de mieux vous guider
+* Faille de sécurité corrigée : le sudo n'est plus obligatoire pour utiliser unoconv
 
 #OSE 7.0.3
 
diff --git a/composer.json b/composer.json
index 46d423bc9a1ede2c7c3c25d279cb7cedf42d3581..5c338db593549dd6f6e3159f33447f18e29e7d68 100755
--- a/composer.json
+++ b/composer.json
@@ -19,6 +19,6 @@
         "unicaen/code"              : "1.1.6",
         "unicaen/import"            : "1.1.6",
         "unicaen/tbl"               : "1.0.3",
-        "unicaen/open-document"     : "1.3"
+        "unicaen/open-document"     : "1.4"
     }
 }
diff --git a/composer.lock b/composer.lock
index 1f7b5c41c8d9b8f758bf48cc748a3a64755e1d4c..568201535b70ddfb6bd944ee6674fbd2ea121d9e 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
         "This file is @generated automatically"
     ],
-    "content-hash": "23dd9e4a05c10ee71c54b318c041638b",
+    "content-hash": "e0242f63ab7d625a4f4b2b15d3ad8d99",
     "packages": [
         {
             "name": "bjyoungblood/bjy-authorize",
@@ -1285,16 +1285,16 @@
         },
         {
             "name": "symfony/debug",
-            "version": "v3.4.15",
+            "version": "v3.4.17",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/debug.git",
-                "reference": "c4625e75341e4fb309ce0c049cbf7fb84b8897cd"
+                "reference": "0a612e9dfbd2ccce03eb174365f31ecdca930ff6"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/debug/zipball/c4625e75341e4fb309ce0c049cbf7fb84b8897cd",
-                "reference": "c4625e75341e4fb309ce0c049cbf7fb84b8897cd",
+                "url": "https://api.github.com/repos/symfony/debug/zipball/0a612e9dfbd2ccce03eb174365f31ecdca930ff6",
+                "reference": "0a612e9dfbd2ccce03eb174365f31ecdca930ff6",
                 "shasum": ""
             },
             "require": {
@@ -1337,7 +1337,7 @@
             ],
             "description": "Symfony Debug Component",
             "homepage": "https://symfony.com",
-            "time": "2018-08-03T10:42:44+00:00"
+            "time": "2018-10-02T16:33:53+00:00"
         },
         {
             "name": "symfony/polyfill-mbstring",
@@ -1400,16 +1400,16 @@
         },
         {
             "name": "symfony/process",
-            "version": "v2.8.45",
+            "version": "v2.8.46",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/process.git",
-                "reference": "4be278e19064c3492095de50c9e375caae569ae1"
+                "reference": "f09e21b7c5aba06c47bbfad9cbcf13ac7f0db0a6"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/process/zipball/4be278e19064c3492095de50c9e375caae569ae1",
-                "reference": "4be278e19064c3492095de50c9e375caae569ae1",
+                "url": "https://api.github.com/repos/symfony/process/zipball/f09e21b7c5aba06c47bbfad9cbcf13ac7f0db0a6",
+                "reference": "f09e21b7c5aba06c47bbfad9cbcf13ac7f0db0a6",
                 "shasum": ""
             },
             "require": {
@@ -1445,7 +1445,7 @@
             ],
             "description": "Symfony Process Component",
             "homepage": "https://symfony.com",
-            "time": "2018-08-03T09:45:57+00:00"
+            "time": "2018-09-06T17:11:15+00:00"
         },
         {
             "name": "unicaen/app",
@@ -1584,11 +1584,11 @@
         },
         {
             "name": "unicaen/open-document",
-            "version": "1.3",
+            "version": "1.4",
             "source": {
                 "type": "git",
                 "url": "https://git.unicaen.fr/lib/unicaen/open-document.git",
-                "reference": "642d14ef4dc3a63687ffef2059549dbb759eff5e"
+                "reference": "b97160140ccb9c9f83a0ee6761ae857b090891ca"
             },
             "type": "library",
             "autoload": {
@@ -1600,7 +1600,7 @@
                 ]
             },
             "description": "Module Unicaen de traitement des fichiers au format OpenDocument",
-            "time": "2018-09-24T09:00:20+00:00"
+            "time": "2018-10-22T15:27:39+00:00"
         },
         {
             "name": "unicaen/oracle",
diff --git "a/data/D\303\251ploiement/Changements.pdf" "b/data/D\303\251ploiement/Changements.pdf"
index 0552ef465da7737ff89ab6d7cc8a6eae1e2cb5e6..4cbed64193d65ca9df869f3e8dbfe294e944608a 100644
Binary files "a/data/D\303\251ploiement/Changements.pdf" and "b/data/D\303\251ploiement/Changements.pdf" differ
diff --git "a/data/D\303\251ploiement/Connecteurs/Connecteurs OSE.sql" "b/data/D\303\251ploiement/Connecteurs/Connecteurs OSE.sql"
index 5c084bb04cef16a8a9bf8f1f25ab54c19046f874..f0236febf07cabdb706d0d46b9dad6b57707f4ee 100644
--- "a/data/D\303\251ploiement/Connecteurs/Connecteurs OSE.sql"	
+++ "b/data/D\303\251ploiement/Connecteurs/Connecteurs OSE.sql"	
@@ -494,29 +494,32 @@ WHERE
 
 -- SRC_AFFECTATION_RECHERCHE
 CREATE OR REPLACE FORCE VIEW SRC_AFFECTATION_RECHERCHE AS
-WITH harpege_query AS (
+  WITH harpege_query AS (
+      SELECT
+             to_char(ar.no_dossier_pers)  z_intervenant_id,
+             ar.c_structure               z_structure_id,
+             'Harpege'                    z_source_id,
+             to_char(ar.no_seq_affe_rech) source_code,
+             s.lc_structure               labo_libelle
+      FROM
+           affectation_recherche@harpprod ar
+             JOIN structure@harpprod s ON s.c_structure = ar.c_structure
+      WHERE
+          SYSDATE BETWEEN ar.d_deb_affe_rech AND COALESCE(ar.d_fin_affe_rech + 1,SYSDATE)
+  )
   SELECT
-    to_char(ar.no_dossier_pers)  z_intervenant_id,
-    ar.c_structure               z_structure_id,
-    'Harpege'                    z_source_id,
-    to_char(ar.no_seq_affe_rech) source_code
+         i.id                                                      intervenant_id,
+         s.id                                                      structure_id,
+         src.id                                                    source_id,
+         hq.source_code || '_' || unicaen_import.get_current_annee source_code,
+         hq.labo_libelle                                           labo_libelle
   FROM
-    affectation_recherche@harpprod ar
-  WHERE
-    SYSDATE BETWEEN ar.d_deb_affe_rech AND COALESCE(ar.d_fin_affe_rech + 1,SYSDATE)
-)
-SELECT
-  i.id                                                      intervenant_id,
-  s.id                                                      structure_id,
-  src.id                                                    source_id,
-  hq.source_code || '_' || unicaen_import.get_current_annee source_code
-FROM
-            harpege_query              hq
-       JOIN source                    src ON src.code = 'Harpege'
-  LEFT JOIN intervenant                 i ON i.source_code = hq.z_intervenant_id
-                                         AND i.annee_id = unicaen_import.get_current_annee
-  LEFT JOIN mv_unicaen_structure_codes sc ON sc.c_structure = hq.z_structure_id
-  LEFT JOIN structure                   s ON s.source_code = sc.c_structure_n2;
+       harpege_query              hq
+         JOIN source                    src ON src.code = 'Harpege'
+         LEFT JOIN intervenant                 i ON i.source_code = hq.z_intervenant_id
+                                                      AND i.annee_id = unicaen_import.get_current_annee
+         LEFT JOIN mv_unicaen_structure_codes sc ON sc.c_structure = hq.z_structure_id
+         LEFT JOIN structure                   s ON s.source_code = sc.c_structure_n2;
 
 
 
diff --git "a/data/D\303\251ploiement/Proc\303\251dure d'installation.pdf" "b/data/D\303\251ploiement/Proc\303\251dure d'installation.pdf"
index b8ca950315b7579c2b7620bf8775f58771996d1b..3c1230f5001e4c5970719959665889e1364ff472 100644
Binary files "a/data/D\303\251ploiement/Proc\303\251dure d'installation.pdf" and "b/data/D\303\251ploiement/Proc\303\251dure d'installation.pdf" differ
diff --git "a/data/D\303\251ploiement/Proc\303\251dure de mise \303\240 jour.pdf" "b/data/D\303\251ploiement/Proc\303\251dure de mise \303\240 jour.pdf"
index a2c4016eb9f8feb48053d13d16666210e9bc6be9..8cbf3188437f76e0af0e070471cf6ab392bd85eb 100644
Binary files "a/data/D\303\251ploiement/Proc\303\251dure de mise \303\240 jour.pdf" and "b/data/D\303\251ploiement/Proc\303\251dure de mise \303\240 jour.pdf" differ
diff --git "a/data/Mises \303\240 jour/08.0.sql" "b/data/Mises \303\240 jour/08.0.sql"
new file mode 100644
index 0000000000000000000000000000000000000000..0d9943ce752b663199e9e5d836ecb92071b035a9
--- /dev/null
+++ "b/data/Mises \303\240 jour/08.0.sql"	
@@ -0,0 +1,3 @@
+-- Script de migration de la version 7.x à la 8.0
+
+ALTER TABLE affectation_recherche ADD (labo_libelle   VARCHAR2(300 CHAR));
\ No newline at end of file
diff --git a/module/Application/src/Application/Service/ModeleContratService.php b/module/Application/src/Application/Service/ModeleContratService.php
index 634cb8c2ab8723d6730bfcfb74acfa060dd5ef14..ca0986c4d86d74c685785e1a4040a7d954783ba6 100755
--- a/module/Application/src/Application/Service/ModeleContratService.php
+++ b/module/Application/src/Application/Service/ModeleContratService.php
@@ -130,16 +130,20 @@ class ModeleContratService extends AbstractEntityService
                 $connection->fetchAll('SELECT * FROM V_CONTRAT_SERVICES WHERE CONTRAT_ID = :contrat', $params);
         }
 
-        $data[1] = $data[0];
-
-        if (isset($mainData['exemplaire1'])) {
+        if (isset($mainData['exemplaire1']) && $mainData['exemplaire1'] && 0 != $mainData['exemplaire1']) {
             $data[0]['exemplaire'] = $mainData['exemplaire1'];
             unset($mainData['exemplaire1']);
         }
-        if (isset($mainData['exemplaire2'])) {
+        if (isset($mainData['exemplaire2']) && $mainData['exemplaire2'] && 0 != $mainData['exemplaire2']) {
+            $data[1] = $data[0];
             $data[1]['exemplaire'] = $mainData['exemplaire2'];
             unset($mainData['exemplaire2']);
         }
+        if (isset($mainData['exemplaire3']) && $mainData['exemplaire3'] && 0 != $mainData['exemplaire3']) {
+            $data[2] = $data[0];
+            $data[2]['exemplaire'] = $mainData['exemplaire3'];
+            unset($mainData['exemplaire3']);
+        }
 
         return $data;
     }