From 1393f324a0657981d046ef2043902982c872cf69 Mon Sep 17 00:00:00 2001 From: Robert Goldmann <deadlocker@gmx.de> Date: Mon, 9 Mar 2020 21:40:53 +0100 Subject: [PATCH] #388 - added button to create template from transaction (only for normal and transfer) --- .../transactions/TransactionController.java | 56 +++++++++++++------ .../transactions/TransactionSubmitAction.java | 27 +++++++++ src/main/resources/languages/_de.properties | 1 + src/main/resources/languages/_en.properties | 1 + src/main/resources/static/css/dark/style.css | 10 +++- src/main/resources/static/css/style.css | 10 +++- .../transactions/newTransactionMacros.ftl | 10 +++- .../transactions/newTransactionNormal.ftl | 1 + .../transactions/newTransactionTransfer.ftl | 1 + 9 files changed, 96 insertions(+), 21 deletions(-) create mode 100644 src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionSubmitAction.java diff --git a/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionController.java b/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionController.java index 5f808b024..8298996de 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionController.java +++ b/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionController.java @@ -126,21 +126,33 @@ public class TransactionController extends BaseController } @PostMapping(value = "/transactions/newTransaction/normal") - public String postNormal(Model model, @CookieValue("currentDate") String cookieDate, + public String postNormal(Model model, @RequestParam String action, + @CookieValue("currentDate") String cookieDate, @ModelAttribute("NewTransaction") Transaction transaction, BindingResult bindingResult, @RequestParam(value = "isPayment", required = false) boolean isPayment) { - DateTime date = dateService.getDateTimeFromCookie(cookieDate); + if(action.equals(TransactionSubmitAction.TEMPLATE.getActionName())) + { + LOGGER.debug("Received request to create template from existing normal transaction"); + return "redirect:/transactions"; + } - TransactionValidator transactionValidator = new TransactionValidator(); - transactionValidator.validate(transaction, bindingResult); + if(action.equals(TransactionSubmitAction.SAVE.getActionName())) + { + DateTime date = dateService.getDateTimeFromCookie(cookieDate); - handleAmount(transaction, isPayment); - handleTags(transaction); + TransactionValidator transactionValidator = new TransactionValidator(); + transactionValidator.validate(transaction, bindingResult); + + handleAmount(transaction, isPayment); + handleTags(transaction); - transaction.setRepeatingOption(null); + transaction.setRepeatingOption(null); - return handleRedirect(model, transaction, bindingResult, date, "transactions/newTransactionNormal", isPayment); + return handleRedirect(model, transaction, bindingResult, date, "transactions/newTransactionNormal", isPayment); + } + + return "redirect:/transactions"; } @SuppressWarnings("ConstantConditions") @@ -195,21 +207,33 @@ public class TransactionController extends BaseController } @PostMapping(value = "/transactions/newTransaction/transfer") - public String postTransfer(Model model, @CookieValue("currentDate") String cookieDate, + public String postTransfer(Model model, @RequestParam String action, + @CookieValue("currentDate") String cookieDate, @ModelAttribute("NewTransaction") Transaction transaction, BindingResult bindingResult, @RequestParam(value = "isPayment", required = false) boolean isPayment) { - DateTime date = dateService.getDateTimeFromCookie(cookieDate); + if(action.equals(TransactionSubmitAction.TEMPLATE.getActionName())) + { + LOGGER.debug("Received request to create template from existing transfer"); + return "redirect:/transactions"; + } - TransactionValidator transactionValidator = new TransactionValidator(); - transactionValidator.validate(transaction, bindingResult); + if(action.equals(TransactionSubmitAction.SAVE.getActionName())) + { + DateTime date = dateService.getDateTimeFromCookie(cookieDate); - handleAmount(transaction, isPayment); - handleTags(transaction); + TransactionValidator transactionValidator = new TransactionValidator(); + transactionValidator.validate(transaction, bindingResult); + + handleAmount(transaction, isPayment); + handleTags(transaction); - transaction.setRepeatingOption(null); + transaction.setRepeatingOption(null); - return handleRedirect(model, transaction, bindingResult, date, "transactions/newTransactionTransfer", isPayment); + return handleRedirect(model, transaction, bindingResult, date, "transactions/newTransactionTransfer", isPayment); + } + + return "redirect:/transactions"; } private void handleAmount(Transaction transaction, boolean isPayment) diff --git a/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionSubmitAction.java b/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionSubmitAction.java new file mode 100644 index 000000000..8923f459d --- /dev/null +++ b/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionSubmitAction.java @@ -0,0 +1,27 @@ +package de.deadlocker8.budgetmaster.transactions; + +public enum TransactionSubmitAction +{ + SAVE("save"), + TEMPLATE("template"); + + private String actionName; + + TransactionSubmitAction(String actionName) + { + this.actionName = actionName; + } + + public String getActionName() + { + return actionName; + } + + @Override + public String toString() + { + return "TransactionSubmitAction{" + + "actionName='" + actionName + '\'' + + '}'; + } +} diff --git a/src/main/resources/languages/_de.properties b/src/main/resources/languages/_de.properties index 646e92888..1f03635ca 100644 --- a/src/main/resources/languages/_de.properties +++ b/src/main/resources/languages/_de.properties @@ -63,6 +63,7 @@ tagfield.placeholder=Tag hier eingeben placeholder=Keine Daten verfügbar placeholder.seems.empty=Ganz schön leer hier... placeholder.advice=Füge {0} hinzu +save.as.template=Vorlage erzeugen # WEEK DAYS monday=Montag diff --git a/src/main/resources/languages/_en.properties b/src/main/resources/languages/_en.properties index d5c026f21..2b22384d2 100644 --- a/src/main/resources/languages/_en.properties +++ b/src/main/resources/languages/_en.properties @@ -63,6 +63,7 @@ tagfield.placeholder=Enter Tag here placeholder=No data available placeholder.seems.empty=It''s pretty empty here... placeholder.advice=Get started by adding {0} +save.as.template=Create template # WEEK DAYS monday=Monday diff --git a/src/main/resources/static/css/dark/style.css b/src/main/resources/static/css/dark/style.css index b0ff8c050..7a2c2d3a5 100644 --- a/src/main/resources/static/css/dark/style.css +++ b/src/main/resources/static/css/dark/style.css @@ -176,11 +176,13 @@ ul.sidenav.sidenav-fixed > li:last-child font-weight: 600; } -.btn:hover { +.btn:hover, +.btn-floating:hover { background-color: #70A3CF; } -.btn:focus { +.btn:focus, +.btn-floating:focus { background-color: #2E79B9; } @@ -614,6 +616,10 @@ input[type="radio"]:not(:checked) + span::before, [type="radio"]:not(:checked) + .budget { font-size: 2.5vmin; } + + .fixed-action-btn { + right: 53px; + } } @media all and (max-width: 959px) and (min-width: 600px) { diff --git a/src/main/resources/static/css/style.css b/src/main/resources/static/css/style.css index e740eb462..0f867bda3 100644 --- a/src/main/resources/static/css/style.css +++ b/src/main/resources/static/css/style.css @@ -158,11 +158,13 @@ ul.sidenav.sidenav-fixed > li:last-child font-weight: 600; } -.btn:hover { +.btn:hover, +.btn-floating:hover { background-color: #70A3CF; } -.btn:focus { +.btn:focus, +.btn-floating:focus { background-color: #2E79B9; } @@ -533,6 +535,10 @@ input[type="radio"]:checked + span::after, [type="radio"].with-gap:checked + spa .budget { font-size: 2.5vmin; } + + .fixed-action-btn { + right: 53px; + } } @media all and (max-width: 959px) and (min-width: 600px) { diff --git a/src/main/resources/templates/transactions/newTransactionMacros.ftl b/src/main/resources/templates/transactions/newTransactionMacros.ftl index 93c4d0af7..54bdd552c 100644 --- a/src/main/resources/templates/transactions/newTransactionMacros.ftl +++ b/src/main/resources/templates/transactions/newTransactionMacros.ftl @@ -362,7 +362,15 @@ </#macro> <#macro buttonSave> - <button class="btn waves-effect waves-light budgetmaster-blue" type="submit" name="action"> + <button class="btn waves-effect waves-light budgetmaster-blue" type="submit" name="action" value="save"> <i class="material-icons left">save</i>${locale.getString("save")} </button> +</#macro> + +<#macro buttonTemplate> + <div class="fixed-action-btn"> + <button class="btn-floating btn-large waves-effect waves-light budgetmaster-blue tooltipped" type="submit" name="action" value="template" data-position="left" data-tooltip="${locale.getString("save.as.template")}"> + <i class="material-icons left">file_copy</i>${locale.getString("save")} + </button> + </div> </#macro> \ No newline at end of file diff --git a/src/main/resources/templates/transactions/newTransactionNormal.ftl b/src/main/resources/templates/transactions/newTransactionNormal.ftl index d90a0f7fd..c613caad4 100644 --- a/src/main/resources/templates/transactions/newTransactionNormal.ftl +++ b/src/main/resources/templates/transactions/newTransactionNormal.ftl @@ -58,6 +58,7 @@ <br> <#-- buttons --> <@newTransactionMacros.buttons/> + <@newTransactionMacros.buttonTemplate/> </form> </div> </div> diff --git a/src/main/resources/templates/transactions/newTransactionTransfer.ftl b/src/main/resources/templates/transactions/newTransactionTransfer.ftl index f2a42f819..5b1268702 100644 --- a/src/main/resources/templates/transactions/newTransactionTransfer.ftl +++ b/src/main/resources/templates/transactions/newTransactionTransfer.ftl @@ -63,6 +63,7 @@ <br> <#-- buttons --> <@newTransactionMacros.buttons/> + <@newTransactionMacros.buttonTemplate/> </form> </div> </div> -- GitLab