From fcc2c00d86bf6b5f8acc5822b5987066f67fdc32 Mon Sep 17 00:00:00 2001
From: Robert Goldmann <deadlocker@gmx.de>
Date: Wed, 28 Apr 2021 22:50:48 +0200
Subject: [PATCH] #576 - show errors from import process on results page

---
 .../database/DatabaseParser_v4.java           |  1 -
 .../settings/SettingsController.java          |  1 +
 .../resources/languages/base_de.properties    |  1 +
 .../resources/languages/base_en.properties    |  1 +
 src/main/resources/static/js/charts.js        |  1 -
 src/main/resources/static/js/import.js        |  2 ++
 .../templates/settings/importResult.ftl       | 30 ++++++++++++++++++-
 .../templates/settings/importStepOne.ftl      |  4 +--
 8 files changed, 36 insertions(+), 5 deletions(-)

diff --git a/src/main/java/de/deadlocker8/budgetmaster/database/DatabaseParser_v4.java b/src/main/java/de/deadlocker8/budgetmaster/database/DatabaseParser_v4.java
index 8d42ca9ba..2f333ca43 100644
--- a/src/main/java/de/deadlocker8/budgetmaster/database/DatabaseParser_v4.java
+++ b/src/main/java/de/deadlocker8/budgetmaster/database/DatabaseParser_v4.java
@@ -51,7 +51,6 @@ public class DatabaseParser_v4 extends DatabaseParser_v3
 		{
 			final JsonObject transactionObject = currentTransaction.getAsJsonObject();
 
-
 			int amount = transactionObject.get("amount").getAsInt();
 			String name = transactionObject.get("name").getAsString();
 			String description = transactionObject.get("description").getAsString();
diff --git a/src/main/java/de/deadlocker8/budgetmaster/settings/SettingsController.java b/src/main/java/de/deadlocker8/budgetmaster/settings/SettingsController.java
index a5489c42b..9583bdc42 100644
--- a/src/main/java/de/deadlocker8/budgetmaster/settings/SettingsController.java
+++ b/src/main/java/de/deadlocker8/budgetmaster/settings/SettingsController.java
@@ -318,6 +318,7 @@ public class SettingsController extends BaseController
 
 		final List<ImportResultItem> importResultItems = importService.importDatabase(database, accountMatchList, importTemplates, importCharts);
 		model.addAttribute("importResultItems", importResultItems);
+		model.addAttribute("errorMessages", importService.getCollectedErrorMessages());
 
 		return "settings/importResult";
 	}
diff --git a/src/main/resources/languages/base_de.properties b/src/main/resources/languages/base_de.properties
index bb74c87f8..1d190da3a 100644
--- a/src/main/resources/languages/base_de.properties
+++ b/src/main/resources/languages/base_de.properties
@@ -129,6 +129,7 @@ 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.result.errors=Aufgetretene Fehler
 info.database.import.match.accounts=Konten zuordnen
 info.database.import.source=Buchungen aus
 info.database.import.destination=importieren in
diff --git a/src/main/resources/languages/base_en.properties b/src/main/resources/languages/base_en.properties
index b654fcc14..e98fdc8c7 100644
--- a/src/main/resources/languages/base_en.properties
+++ b/src/main/resources/languages/base_en.properties
@@ -129,6 +129,7 @@ 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.result.errors=Errors during import
 info.database.import.match.accounts=Assign accounts
 info.database.import.source=Import transactions from
 info.database.import.destination=to
diff --git a/src/main/resources/static/js/charts.js b/src/main/resources/static/js/charts.js
index d2103d41e..a832f062a 100644
--- a/src/main/resources/static/js/charts.js
+++ b/src/main/resources/static/js/charts.js
@@ -4,7 +4,6 @@ let chartPickerEndDate;
 
 $(document).ready(function()
 {
-
     if($("#chart-script").length)
     {
         let editor = CodeMirror.fromTextArea(document.getElementById('chart-script'), {
diff --git a/src/main/resources/static/js/import.js b/src/main/resources/static/js/import.js
index 5fff9ce76..9cdd9e330 100644
--- a/src/main/resources/static/js/import.js
+++ b/src/main/resources/static/js/import.js
@@ -23,6 +23,8 @@ $(document).ready(function()
         let modalInstance = M.Modal.getInstance(modalElement);
         modalInstance.open();
     });
+
+    $('.collapsible').collapsible();
 });
 
 function validateForm()
diff --git a/src/main/resources/templates/settings/importResult.ftl b/src/main/resources/templates/settings/importResult.ftl
index 3e6d1e1bc..586ac4c76 100644
--- a/src/main/resources/templates/settings/importResult.ftl
+++ b/src/main/resources/templates/settings/importResult.ftl
@@ -4,6 +4,7 @@
         <@header.globals/>
         <@header.header "BudgetMaster - ${locale.getString('settings.database.import')}"/>
         <#import "/spring.ftl" as s>
+        <@header.style "collapsible"/>
     </head>
     <@header.body>
         <#import "../helpers/navbar.ftl" as navbar>
@@ -26,7 +27,7 @@
                 <div class="container">
                     <div class="row">
                         <div class="col s10 offset-s1 m8 offset-m2 l6 offset-l3">
-                            <table>
+                            <table class="bordered">
                                 <#list importResultItems as item>
                                     <tr>
                                         <td><i class="material-icons left">${item.getEntityType().getIcon()}</i>
@@ -40,6 +41,33 @@
                     </div>
                 </div>
 
+                <#if errorMessages?has_content>
+                    <div class="container">
+                        <div class="row">
+                            <div class="col s12">
+                                <ul class="collapsible">
+                                    <li>
+                                        <div class="collapsible-header bold">
+                                            <i class="fas fa-exclamation-triangle text-red"></i>
+                                            ${locale.getString("info.database.import.result.errors")}
+                                        </div>
+                                        <div class="collapsible-body">
+                                            <table class="bordered">
+                                                <#list errorMessages as error>
+                                                    <tr>
+                                                        <td><i class="fas fa-exclamation-triangle text-red"></i></td>
+                                                        <td>${error}</td>
+                                                    </tr>
+                                                </#list>
+                                            </table>
+                                        </div>
+                                    </li>
+                                </ul>
+                            </div>
+                        </div>
+                    </div>
+                </#if>
+
                 <div class="container">
                     <div class="row">
                         <div class="col s12 center-align">
diff --git a/src/main/resources/templates/settings/importStepOne.ftl b/src/main/resources/templates/settings/importStepOne.ftl
index 6e33b7d88..46c030611 100644
--- a/src/main/resources/templates/settings/importStepOne.ftl
+++ b/src/main/resources/templates/settings/importStepOne.ftl
@@ -28,8 +28,8 @@
                         <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>
+                            <div class="col s12 m10 offset-m1 l10 offset-l1 xl8 offset-xl2">
+                                <table class="bordered">
                                     <#list database.getNumberOfEntitiesByType() as entityType, numberOfItems>
                                         <tr>
                                             <td>
-- 
GitLab