diff --git a/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionController.java b/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionController.java index 5f808b024aaaaab4711d8b7ac755900e7e0b0f55..8298996decca07899cc2a8152dfa4e5bc0bd16dd 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 0000000000000000000000000000000000000000..8923f459d03a29cef969ad7570e4566a5815a3c1 --- /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 646e92888fe5040e4182d7b5d56f6967517cc8ce..1f03635ca0381e67e7414d954e9140d6e1b76554 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 d5c026f21db07af7e83d50c2f2d2bd4eeab7ae59..2b22384d2c3e18a15f5d812811e11572cd1f8f94 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 b0ff8c050e29bca9d4efd82a83e1fba012c9dab4..7a2c2d3a5f81bb29f4515d5ac16ae9dab30eafb0 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 e740eb462678e53cd6b85444e787b34964172645..0f867bda3024681775cf341f1ecb96b84a3a67b0 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 93c4d0af7ec62fd5d700042596f00b72f939ba5a..54bdd552c01b3df9eae9145c7b576fb37358eeeb 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 d90a0f7fdb3b1d3cf2a99396f3c4a0fbbb248bfd..c613caad4222ddfc4dc62b82e2d5bea685a73ca7 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 f2a42f81914346b69aaeda161db4a2b52cd03eb4..5b1268702acefe74303ae5c7053e58aa72485a53 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>