From 1c38698bc8465256f6f0970d8eb617bf2811830b Mon Sep 17 00:00:00 2001
From: Robert Goldmann <deadlocker@gmx.de>
Date: Fri, 23 Apr 2021 23:03:25 +0200
Subject: [PATCH] #576 - show how many items of each entity will be imported

---
 .../budgetmaster/database/Database.java       | 16 ++++++++++
 .../resources/languages/base_de.properties    |  3 +-
 .../resources/languages/base_en.properties    |  3 +-
 src/main/resources/static/css/reports.css     |  5 ----
 src/main/resources/static/css/style.css       |  9 ++++++
 .../resources/templates/settings/import.ftl   | 29 ++++++++++++++++++-
 6 files changed, 57 insertions(+), 8 deletions(-)

diff --git a/src/main/java/de/deadlocker8/budgetmaster/database/Database.java b/src/main/java/de/deadlocker8/budgetmaster/database/Database.java
index 6a10a749a..5baf21d55 100644
--- a/src/main/java/de/deadlocker8/budgetmaster/database/Database.java
+++ b/src/main/java/de/deadlocker8/budgetmaster/database/Database.java
@@ -5,10 +5,13 @@ import de.deadlocker8.budgetmaster.accounts.Account;
 import de.deadlocker8.budgetmaster.categories.Category;
 import de.deadlocker8.budgetmaster.charts.Chart;
 import de.deadlocker8.budgetmaster.images.Image;
+import de.deadlocker8.budgetmaster.services.EntityType;
 import de.deadlocker8.budgetmaster.templates.Template;
 import de.deadlocker8.budgetmaster.transactions.Transaction;
 
+import java.util.LinkedHashMap;
 import java.util.List;
+import java.util.Map;
 
 public class Database
 {
@@ -79,4 +82,17 @@ public class Database
 	{
 		return images;
 	}
+
+	public Map<EntityType, Integer> getNumberOfEntitiesByType()
+	{
+		final Map<EntityType, Integer> numberOfEntitiesByType = new LinkedHashMap<>();
+
+		numberOfEntitiesByType.put(EntityType.CATEGORY, categories.size());
+		numberOfEntitiesByType.put(EntityType.ACCOUNT, accounts.size());
+		numberOfEntitiesByType.put(EntityType.TRANSACTION, transactions.size());
+		numberOfEntitiesByType.put(EntityType.CHART, charts.size());
+		numberOfEntitiesByType.put(EntityType.IMAGE, images.size());
+		numberOfEntitiesByType.put(EntityType.TEMPLATE, templates.size());
+		return numberOfEntitiesByType;
+	}
 }
\ No newline at end of file
diff --git a/src/main/resources/languages/base_de.properties b/src/main/resources/languages/base_de.properties
index 5c1db78f0..386e2a641 100644
--- a/src/main/resources/languages/base_de.properties
+++ b/src/main/resources/languages/base_de.properties
@@ -127,7 +127,8 @@ info.title.database.delete=Datenbank löschen
 info.header.text.database.delete=Soll die Datenbank wirklich unwiderruflich gelöscht werden?<br>Hinweis: Beim Löschen der Datenbank werden alle Buchungen, Kategorien, Konten, Diagramme, Vorlagen und Bilder unwiderruflich gelöscht.
 info.text.database.delete=Zur Bestätigung gib folgenden Code ein:\t{0}
 info.title.database.import.dialog=Datenbank importieren
-info.subtitle.database.import=Konten zuordnen
+info.database.import=Folgende Daten werden importiert
+info.database.import.match.accounts=Konten zuordnen
 info.database.import.source=Buchungen aus
 info.database.import.destination=importieren in
 info.database.import.or=oder
diff --git a/src/main/resources/languages/base_en.properties b/src/main/resources/languages/base_en.properties
index 6f53a168a..cadacbdbc 100644
--- a/src/main/resources/languages/base_en.properties
+++ b/src/main/resources/languages/base_en.properties
@@ -127,7 +127,8 @@ info.title.database.delete=Delete Database
 info.header.text.database.delete=Do you really want to delete the database? This can''t be undone.<br>Note: Deleting the database will delete all transactions, categories, accounts, charts, templates and images permanently.
 info.text.database.delete=Please enter the following code for verification:\t{0}
 info.title.database.import.dialog=Import database
-info.subtitle.database.import=Assign accounts
+info.database.import=The following data will be imported
+info.database.import.match.accounts=Assign accounts
 info.database.import.source=Import transactions from
 info.database.import.destination=to
 info.database.import.or=or
diff --git a/src/main/resources/static/css/reports.css b/src/main/resources/static/css/reports.css
index 3e855247f..f3dc35b78 100644
--- a/src/main/resources/static/css/reports.css
+++ b/src/main/resources/static/css/reports.css
@@ -1,8 +1,3 @@
-.headline-small {
-    font-size: 1.5rem;
-    text-transform: initial;
-}
-
 .report-checkbox-container {
     margin-bottom: 0.5rem;
     display: table;
diff --git a/src/main/resources/static/css/style.css b/src/main/resources/static/css/style.css
index ad5768c8c..62d0b3c52 100644
--- a/src/main/resources/static/css/style.css
+++ b/src/main/resources/static/css/style.css
@@ -166,6 +166,11 @@ main {
     color: var(--color-text);
 }
 
+.headline-small {
+    font-size: 1.5rem;
+    text-transform: initial;
+}
+
 .headline-advice {
     color: var(--color-text);
     opacity: 0.7;
@@ -437,6 +442,10 @@ input[type="radio"]:checked + span::after, [type="radio"].with-gap:checked + spa
     height: 2.6rem;
 }
 
+.import-entity-name {
+    margin-left: 1rem;
+}
+
 .tooltipped:hover {
     cursor: pointer;
 }
diff --git a/src/main/resources/templates/settings/import.ftl b/src/main/resources/templates/settings/import.ftl
index 87ea2a556..e4f1b4351 100644
--- a/src/main/resources/templates/settings/import.ftl
+++ b/src/main/resources/templates/settings/import.ftl
@@ -14,9 +14,36 @@
                 <div class="container">
                     <div class="section center-align">
                         <div class="headline">${locale.getString("info.title.database.import.dialog")}</div>
-                        <div>${locale.getString("info.subtitle.database.import")}</div>
                     </div>
                 </div>
+
+                <div class="container">
+                    <div class="section center-align">
+                        <div class="headline-small">${locale.getString("info.database.import")}</div>
+                    </div>
+                </div>
+
+                <div class="container">
+                    <div class="row">
+                        <div class="col s10 offset-s1 m8 offset-m2 l6 offset-l3">
+                            <table>
+                                <#list database.getNumberOfEntitiesByType() as entityType, numberOfItems>
+                                    <tr>
+                                        <td class="valign-wrapper"><i class="material-icons">${entityType.getIcon()}</i><div class="import-entity-name">${locale.getString(entityType.getLocalizationKey())}</div></td>
+                                        <td>${numberOfItems}</td>
+                                    </tr>
+                                </#list>
+                            </table>
+                        </div>
+                    </div>
+                </div>
+
+                <div class="container">
+                    <div class="section center-align">
+                        <div class="headline-small">${locale.getString("info.database.import.match.accounts")}</div>
+                    </div>
+                </div>
+
                 <div class="container">
                     <#import "../helpers/validation.ftl" as validation>
                     <form name="Import" action="<@s.url '/settings/database/import'/>" method="post" onsubmit="return validateForm()">
-- 
GitLab