From 98dfd5daa77c9e6bd3a507b75a497cf50b6be9cd Mon Sep 17 00:00:00 2001
From: Robert Goldmann <deadlocker@gmx.de>
Date: Sun, 25 Apr 2021 22:31:24 +0200
Subject: [PATCH] #576 - redirect to result page after import

---
 .../settings/SettingsController.java          | 13 +----
 .../resources/languages/base_de.properties    |  2 +-
 .../resources/languages/base_en.properties    |  2 +-
 .../templates/settings/importResult.ftl       | 58 +++++++++++++++++++
 4 files changed, 63 insertions(+), 12 deletions(-)
 create mode 100644 src/main/resources/templates/settings/importResult.ftl

diff --git a/src/main/java/de/deadlocker8/budgetmaster/settings/SettingsController.java b/src/main/java/de/deadlocker8/budgetmaster/settings/SettingsController.java
index 9f7e053d7..37e2b2f29 100644
--- a/src/main/java/de/deadlocker8/budgetmaster/settings/SettingsController.java
+++ b/src/main/java/de/deadlocker8/budgetmaster/settings/SettingsController.java
@@ -315,19 +315,12 @@ public class SettingsController extends BaseController
 		final Boolean importCharts = (Boolean) request.getAttribute("importCharts", RequestAttributes.SCOPE_SESSION);
 		request.removeAttribute("importCharts", RequestAttributes.SCOPE_SESSION);
 
-		final Map<EntityType, Integer> numberOfImportedEntitiesByType = importService.importDatabase(database, accountMatchList, importTemplates, importCharts);
 		prepareBasicModel(model, settingsService.getSettings());
 
-		final String message = Localization.getString("notification.settings.database.import.success",
-				numberOfImportedEntitiesByType.get(EntityType.ACCOUNT),
-				numberOfImportedEntitiesByType.get(EntityType.TRANSACTION),
-				numberOfImportedEntitiesByType.get(EntityType.CATEGORY),
-				numberOfImportedEntitiesByType.get(EntityType.TEMPLATE),
-				numberOfImportedEntitiesByType.get(EntityType.CHART),
-				numberOfImportedEntitiesByType.get(EntityType.IMAGE));
-		WebRequestUtils.putNotification(request, new Notification(message, NotificationType.SUCCESS));
+		final Map<EntityType, Integer> numberOfImportedEntitiesByType = importService.importDatabase(database, accountMatchList, importTemplates, importCharts);
+		model.addAttribute("numberOfImportedEntitiesByType", numberOfImportedEntitiesByType);
 
-		return "settings/settings";
+		return "settings/importResult";
 	}
 
 	@GetMapping("/updateSearch")
diff --git a/src/main/resources/languages/base_de.properties b/src/main/resources/languages/base_de.properties
index d7a4cf75a..bb74c87f8 100644
--- a/src/main/resources/languages/base_de.properties
+++ b/src/main/resources/languages/base_de.properties
@@ -128,6 +128,7 @@ info.header.text.database.delete=Soll die Datenbank wirklich unwiderruflich gel
 info.text.database.delete=Zur Bestätigung gib folgenden Code ein:\t{0}
 info.title.database.import.dialog=Datenbank importieren
 info.database.import=Folgende Daten werden importiert
+info.database.import.result=Import abgeschlossen
 info.database.import.match.accounts=Konten zuordnen
 info.database.import.source=Buchungen aus
 info.database.import.destination=importieren in
@@ -140,7 +141,6 @@ info.button.backup.reminder=Zu den Einstellungen
 notification.settings.saved=Einstellungen gespeichert
 notification.settings.update.available=BudgetMaster Update "{0}" verfügbar
 notification.settings.database.delete.success=Datenbank erfolgreich gelöscht
-notification.settings.database.import.success=Import erfolgreich: {0} Konten, {1} Buchungen, {2} Kategorien, {3} Vorlagen, {4} Diagramme und {5} Bilder
 upload.image.success=Erfolgreich hochgeladen
 upload.image.error=Fehler: {0}
 upload.image.error.no.file=Fehler: Keine Datei für Upload angegeben
diff --git a/src/main/resources/languages/base_en.properties b/src/main/resources/languages/base_en.properties
index 76cc271e2..b654fcc14 100644
--- a/src/main/resources/languages/base_en.properties
+++ b/src/main/resources/languages/base_en.properties
@@ -128,6 +128,7 @@ info.header.text.database.delete=Do you really want to delete the database? This
 info.text.database.delete=Please enter the following code for verification:\t{0}
 info.title.database.import.dialog=Import database
 info.database.import=The following data will be imported
+info.database.import.result=Import completed
 info.database.import.match.accounts=Assign accounts
 info.database.import.source=Import transactions from
 info.database.import.destination=to
@@ -140,7 +141,6 @@ info.button.backup.reminder=To the settings
 notification.settings.saved=Settings saved
 notification.settings.update.available=BudgetMaster update "{0}" available
 notification.settings.database.delete.success=Successfully deleted database
-notification.settings.database.import.success=Import successful: {0} accounts, {1} transactions, {2} categories, {3} templates, {4} charts and {5} images
 upload.image.success=Upload successful
 upload.image.error=Error: {0}
 upload.image.error.no.file=Error: No file provided for upload
diff --git a/src/main/resources/templates/settings/importResult.ftl b/src/main/resources/templates/settings/importResult.ftl
new file mode 100644
index 000000000..3b3aedd43
--- /dev/null
+++ b/src/main/resources/templates/settings/importResult.ftl
@@ -0,0 +1,58 @@
+<html>
+    <head>
+        <#import "../helpers/header.ftl" as header>
+        <@header.globals/>
+        <@header.header "BudgetMaster - ${locale.getString('settings.database.import')}"/>
+        <#import "/spring.ftl" as s>
+    </head>
+    <@header.body>
+        <#import "../helpers/navbar.ftl" as navbar>
+        <@navbar.navbar "settings" settings/>
+
+        <main>
+            <div class="card main-card background-color">
+                <div class="container">
+                    <div class="section center-align">
+                        <div class="headline">${locale.getString("info.title.database.import.dialog")}</div>
+                    </div>
+                </div>
+
+                <div class="container">
+                    <div class="section center-align">
+                        <div class="headline-small">${locale.getString("info.database.import.result")}</div>
+                    </div>
+                </div>
+
+                <div class="container">
+                        <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>
+
+                        <div class="row">
+                            <div class="col s10 offset-s1 m8 offset-m2 l6 offset-l3">
+                                <table>
+                                    <#list numberOfImportedEntitiesByType as entityType, numberOfItems>
+                                        <tr>
+                                            <td><i class="material-icons left">${entityType.getIcon()}</i>
+                                                <div class="import-entity-name">${locale.getString(entityType.getLocalizationKey())}</div>
+                                            </td>
+                                            <td>${numberOfItems}</td>
+                                        </tr>
+                                    </#list>
+                                </table>
+                            </div>
+                        </div>
+
+                        <div class="row">
+                            <div class="col m6 l4 offset-l2 right-align">
+                                <@header.buttonLink url='/settings' icon='done' localizationKey='ok'/>
+                            </div>
+                        </div>
+                </div>
+            </div>
+        </main>
+
+        <!-- Scripts-->
+        <#import "../helpers/scripts.ftl" as scripts>
+        <@scripts.scripts/>
+        <script src="<@s.url '/js/import.js'/>"></script>
+    </@header.body>
+</html>
\ No newline at end of file
-- 
GitLab