From fe9305e2fc9c64edf9708b51d870d1c159cf41d8 Mon Sep 17 00:00:00 2001
From: Bertrand GAUTHIER <bertrand.gauthier@unicaen.fr>
Date: Wed, 2 Mar 2022 18:17:17 +0100
Subject: [PATCH] =?UTF-8?q?[FIX]=20Import=20:=20seules=20les=20donn=C3=A9e?=
 =?UTF-8?q?s=20issues=20de=20la=20source=20concern=C3=A9e=20doivent=20?=
 =?UTF-8?q?=C3=AAtre=20pr=C3=A9alablement=20purg=C3=A9es,=20pas=20toute=20?=
 =?UTF-8?q?la=20table.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 CHANGELOG.md                                          |  4 ++++
 .../Service/Database/DatabaseService.php              | 11 +++++++++++
 2 files changed, 15 insertions(+)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 32bb62a..503a728 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,10 @@
 Changelog
 =========
 
+5.1.1
+-----
+- [FIX] Import : seules les données issues de la source concernée doivent être préalablement purgées, pas toute la table. 
+
 5.1.0
 -----
 - Import : le SOURCE_ID peut être fourni dans les données à importer ou en dur dans la config via l'attribut 'code' de la 'source' ; 
diff --git a/src/UnicaenDbImport/Service/Database/DatabaseService.php b/src/UnicaenDbImport/Service/Database/DatabaseService.php
index 37ddf14..eb76d93 100644
--- a/src/UnicaenDbImport/Service/Database/DatabaseService.php
+++ b/src/UnicaenDbImport/Service/Database/DatabaseService.php
@@ -344,7 +344,18 @@ class DatabaseService
      */
     public function truncateDestinationTable()
     {
+        // détermination de l'id de la source des données à insérer, pour n'effacer que les données de cette source
+        // (si aucune donnée à insérer, basta)
+        $data = $this->source->getData();
+        if (empty($data)) {
+            return;
+        }
+        $row1 = reset($data);
+        $preparedRow1 = $this->prepareSourceData($row1);
+        $sourceId = $preparedRow1['source_id'] ?? $preparedRow1['SOURCE_ID'];
+
         $sql = $this->codeGenerator->generateSQLForClearTable($table = $this->destination->getTable());
+        $sql .= " WHERE source_id = (SELECT id FROM source WHERE code = '$sourceId')";
         try {
             $this->queryExecutor->exec($sql, $this->destination->getConnection());
         } catch (Exception $e) {
-- 
GitLab