From 104e92b7760d587b98a44f1e47f696187870080a Mon Sep 17 00:00:00 2001 From: Robert Goldmann <deadlocker@gmx.de> Date: Mon, 30 Jul 2018 13:05:42 +0200 Subject: [PATCH] #259 - started working on ui --- .../controller/SettingsController.java | 17 +++-- .../budgetmaster/database/AccountMatch.java | 43 ++++++++++++ .../budgetmaster/services/HelpersService.java | 12 ++++ src/main/resources/languages/_de.properties | 4 ++ src/main/resources/languages/_en.properties | 4 ++ src/main/resources/static/css/dark/style.css | 6 +- src/main/resources/static/css/style.css | 6 +- src/main/resources/templates/import.ftl | 66 +++++++++++++++++++ 8 files changed, 150 insertions(+), 8 deletions(-) create mode 100644 src/main/java/de/deadlocker8/budgetmaster/database/AccountMatch.java create mode 100644 src/main/resources/templates/import.ftl diff --git a/src/main/java/de/deadlocker8/budgetmaster/controller/SettingsController.java b/src/main/java/de/deadlocker8/budgetmaster/controller/SettingsController.java index 76d257470..7d6d657cb 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/controller/SettingsController.java +++ b/src/main/java/de/deadlocker8/budgetmaster/controller/SettingsController.java @@ -2,8 +2,10 @@ package de.deadlocker8.budgetmaster.controller; import de.deadlocker8.budgetmaster.authentication.User; import de.deadlocker8.budgetmaster.authentication.UserRepository; +import de.deadlocker8.budgetmaster.database.AccountMatch; import de.deadlocker8.budgetmaster.database.Database; import de.deadlocker8.budgetmaster.database.DatabaseParser; +import de.deadlocker8.budgetmaster.entities.Account; import de.deadlocker8.budgetmaster.entities.Settings; import de.deadlocker8.budgetmaster.repositories.AccountRepository; import de.deadlocker8.budgetmaster.repositories.SettingsRepository; @@ -32,6 +34,8 @@ import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.UnsupportedEncodingException; +import java.util.ArrayList; +import java.util.List; @Controller @@ -165,9 +169,8 @@ public class SettingsController extends BaseController } @RequestMapping(value = "/settings/database/delete", method = RequestMethod.POST) - public String deleteDatabase(Model model, - @RequestParam("verificationCode") String verificationCode, - @RequestParam("verificationUserInput") String verificationUserInput) + public String deleteDatabase(@RequestParam("verificationCode") String verificationCode, + @RequestParam("verificationUserInput") String verificationUserInput) { if(verificationUserInput.equals(verificationCode)) { @@ -203,15 +206,17 @@ public class SettingsController extends BaseController String jsonString = new String(file.getBytes()); DatabaseParser importer = new DatabaseParser(jsonString); Database database = importer.parseDatabaseFromJSON(); + + model.addAttribute("database", database); + model.addAttribute("availableAccounts", accountRepository.findAllByOrderByNameAsc()); + return "import"; } catch(Exception e) { e.printStackTrace(); + model.addAttribute("errorImportDatabase", e.getMessage()); return "settings"; } - - //TODO redirect to account combination page - return "redirect:/settings"; } } \ No newline at end of file diff --git a/src/main/java/de/deadlocker8/budgetmaster/database/AccountMatch.java b/src/main/java/de/deadlocker8/budgetmaster/database/AccountMatch.java new file mode 100644 index 000000000..57d9654fe --- /dev/null +++ b/src/main/java/de/deadlocker8/budgetmaster/database/AccountMatch.java @@ -0,0 +1,43 @@ +package de.deadlocker8.budgetmaster.database; + +import de.deadlocker8.budgetmaster.entities.Account; + +public class AccountMatch +{ + private Account accountSource; + private Account accountDestination; + + public AccountMatch(Account accountSource) + { + this.accountSource = accountSource; + } + + public Account getAccountSource() + { + return accountSource; + } + + public void setAccountSource(Account accountSource) + { + this.accountSource = accountSource; + } + + public Account getAccountDestination() + { + return accountDestination; + } + + public void setAccountDestination(Account accountDestination) + { + this.accountDestination = accountDestination; + } + + @Override + public String toString() + { + return "AccountMatch{" + + "accountSource=" + accountSource.getName() + + ", accountDestination=" + accountDestination.getName() + + '}'; + } +} \ No newline at end of file diff --git a/src/main/java/de/deadlocker8/budgetmaster/services/HelpersService.java b/src/main/java/de/deadlocker8/budgetmaster/services/HelpersService.java index 142b05359..61b76954f 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/services/HelpersService.java +++ b/src/main/java/de/deadlocker8/budgetmaster/services/HelpersService.java @@ -1,5 +1,6 @@ package de.deadlocker8.budgetmaster.services; +import de.deadlocker8.budgetmaster.database.AccountMatch; import de.deadlocker8.budgetmaster.entities.Account; import de.deadlocker8.budgetmaster.entities.Payment; import de.deadlocker8.budgetmaster.entities.Settings; @@ -254,4 +255,15 @@ public class HelpersService { return settingsService.getSettings(); } + + public List<AccountMatch> getAccountMatches(List<Account> accounts) + { + List<AccountMatch> accountMatches = new ArrayList<>(); + for(Account account : accounts) + { + accountMatches.add(new AccountMatch(account)); + } + + return accountMatches; + } } \ No newline at end of file diff --git a/src/main/resources/languages/_de.properties b/src/main/resources/languages/_de.properties index a636b3f4e..107a11711 100644 --- a/src/main/resources/languages/_de.properties +++ b/src/main/resources/languages/_de.properties @@ -87,6 +87,10 @@ info.title.database.delete=Datenbank l info.header.text.database.delete=Soll die Datenbank wirklich unwiderruflich gel�scht werden? 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.source=Buchungen aus +info.database.import.destination=importieren in +info.database.import.or=oder # WARNING warning.text.account.delete=Das Konto "{0}" kann nicht gel�scht werden, da mindestens ein Konto existieren muss. Um dieses Konto zu l�schen musst du zuerst ein neues anlegen. diff --git a/src/main/resources/languages/_en.properties b/src/main/resources/languages/_en.properties index f61310a23..87ebc8068 100644 --- a/src/main/resources/languages/_en.properties +++ b/src/main/resources/languages/_en.properties @@ -87,6 +87,10 @@ info.title.database.delete=Delete Database info.header.text.database.delete=Do you really want to delete the database? This can''t be undone. 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.source=Import payments from +info.database.import.destination=to +info.database.import.or=or # WARNING warning.text.account.delete=The account "{0}" could not be deleted, because at least one account must exist at all time. You have to create a new account in order to delete this one. diff --git a/src/main/resources/static/css/dark/style.css b/src/main/resources/static/css/dark/style.css index fd2fa5e2a..cdfb10063 100644 --- a/src/main/resources/static/css/dark/style.css +++ b/src/main/resources/static/css/dark/style.css @@ -130,7 +130,7 @@ main { color: rgba(255, 255, 255, 0.87); } -.btn { +.btn, .btn-flat { text-transform: capitalize; } @@ -452,6 +452,10 @@ input[type="radio"]:not(:checked) + label::before, [type="radio"]:not(:checked) color: #FFFFFF; } +.import-text { + color: #4CABD3; +} + .hidden { display: none; } diff --git a/src/main/resources/static/css/style.css b/src/main/resources/static/css/style.css index 2f8f21ac5..c87844eff 100644 --- a/src/main/resources/static/css/style.css +++ b/src/main/resources/static/css/style.css @@ -109,7 +109,7 @@ main { color: rgba(0, 0, 0, 0.87); } -.btn { +.btn, .btn-flat { text-transform: capitalize; } @@ -389,6 +389,10 @@ input[type="radio"]:checked + label::after, [type="radio"].with-gap:checked + la color: #AAAAAA !important; } +.import-text { + color: #2E79B9; +} + .hidden { display: none; } diff --git a/src/main/resources/templates/import.ftl b/src/main/resources/templates/import.ftl new file mode 100644 index 000000000..568921687 --- /dev/null +++ b/src/main/resources/templates/import.ftl @@ -0,0 +1,66 @@ +<html> + <head> + <#import "header.ftl" as header> + <@header.header "BudgetMaster"/> + </head> + <body class="budgetmaster-blue-light"> + <#import "navbar.ftl" as navbar> + <@navbar.navbar "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>${locale.getString("info.subtitle.database.import")}</div> + </div> + </div> + <div class="container"> + <#import "validation.ftl" as validation> + <form name="Import" action="/settings/database/import" method="post"> + <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/> + + <table class="bordered"> + <#list helpers.getAccountMatches(database.getAccounts()) as accountMatch> + <tr> + <td class="import-text">${locale.getString("info.database.import.source")}</td> + <td>${accountMatch.getAccountSource().getName()}</td> + <td class="import-text">${locale.getString("info.database.import.destination")}</td> + <td> + <select> + <#list availableAccounts as account> + <option value="${account.getName()}">${account.getName()}</option> + </#list> + </select> + </td> + <td class="import-text">${locale.getString("info.database.import.or")}</td> + <td> + <a href="/accounts/newAccount" class="btn waves-effect waves-light budgetmaster-blue"><i class="material-icons left">add</i>${locale.getString("title.account.new")}</a> + </td> + </tr> + </#list> + </table> + <#if availableAccounts?size == 0> + <div class="headline center-align">${locale.getString("placeholder")}</div> + </#if> + + <br> + + <#-- buttons --> + <div class="row"> + <div class="col s12 m12 l4 offset-l4 center-align"> + <button class="btn waves-effect waves-light budgetmaster-blue" type="submit" name="action"> + <i class="material-icons left">unarchive</i>${locale.getString("settings.database.import")} + </button> + </div> + </div> + </form> + </div> + </div> + </main> + + <!-- Scripts--> + <#import "scripts.ftl" as scripts> + <@scripts.scripts/> + </body> +</html> \ No newline at end of file -- GitLab