From b7b8131c1d2515a1642ee582e3a7e66cb1b79bf0 Mon Sep 17 00:00:00 2001 From: Robert Goldmann <deadlocker@gmx.de> Date: Sat, 2 Oct 2021 16:46:35 +0200 Subject: [PATCH] #596 - eliminated special page for editing recurring transactions --- .../transactions/TransactionController.java | 60 ++++------- src/main/resources/static/js/transactions.js | 2 +- .../transactions/newTransactionNormal.ftl | 1 + .../transactions/newTransactionRepeating.ftl | 99 ------------------- .../transactions/transactionsMacros.ftl | 4 - 5 files changed, 23 insertions(+), 143 deletions(-) delete mode 100644 src/main/resources/templates/transactions/newTransactionRepeating.ftl diff --git a/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionController.java b/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionController.java index 6fc12e7d3..9411433f1 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionController.java +++ b/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionController.java @@ -132,10 +132,14 @@ public class TransactionController extends BaseController } @PostMapping(value = "/newTransaction/normal") - public String postNormal(Model model, - @CookieValue("currentDate") String cookieDate, - @ModelAttribute("NewTransaction") Transaction transaction, BindingResult bindingResult, - @RequestParam(value = "previousType", required = false) TransactionType previousType) + public String postRepeating(Model model, @CookieValue("currentDate") String cookieDate, + @ModelAttribute("NewTransaction") Transaction transaction, BindingResult bindingResult, + @RequestParam(value = "isRepeating", required = false) boolean isRepeating, + @RequestParam(value = "previousType", required = false) TransactionType previousType, + @RequestParam(value = "repeatingModifierNumber", required = false) int repeatingModifierNumber, + @RequestParam(value = "repeatingModifierType", required = false) String repeatingModifierType, + @RequestParam(value = "repeatingEndType", required = false) String repeatingEndType, + @RequestParam(value = "repeatingEndValue", required = false) String repeatingEndValue) { DateTime date = dateService.getDateTimeFromCookie(cookieDate); @@ -147,9 +151,17 @@ public class TransactionController extends BaseController transactionService.handleAmount(transaction); transactionService.handleTags(transaction); - transaction.setRepeatingOption(null); + if(isRepeating) + { + final RepeatingOption repeatingOption = createRepeatingOption(transaction.getDate(), repeatingModifierNumber, repeatingModifierType, repeatingEndType, repeatingEndValue); + transaction.setRepeatingOption(repeatingOption); + } + else + { + transaction.setRepeatingOption(null); + } - return handleRedirect(model, transaction.getID() != null, transaction, bindingResult, date, "transactions/newTransactionNormal"); + return handleRedirect(model, transaction.getID() != null, transaction, bindingResult, date, "transactions/newTransaction"); } private void handlePreviousType(TransactionType previousType, Transaction transaction) @@ -161,31 +173,8 @@ public class TransactionController extends BaseController } @SuppressWarnings("ConstantConditions") - @PostMapping(value = "/newTransaction/repeating") - public String postRepeating(Model model, @CookieValue("currentDate") String cookieDate, - @ModelAttribute("NewTransaction") Transaction transaction, BindingResult bindingResult, - @RequestParam(value = "isRepeating", required = false) boolean isRepeating, - @RequestParam(value = "previousType", required = false) TransactionType previousType, - @RequestParam(value = "repeatingModifierNumber", required = false) int repeatingModifierNumber, - @RequestParam(value = "repeatingModifierType", required = false) String repeatingModifierType, - @RequestParam(value = "repeatingEndType", required = false) String repeatingEndType, - @RequestParam(value = "repeatingEndValue", required = false) String repeatingEndValue) + private RepeatingOption createRepeatingOption(DateTime startDate, int repeatingModifierNumber, String repeatingModifierType, String repeatingEndType, String repeatingEndValue) { - DateTime date = dateService.getDateTimeFromCookie(cookieDate); - - // handle repeating transactions - if(transaction.getID() != null && isRepeating) - { - transactionService.deleteTransaction(transaction.getID()); - } - - TransactionValidator transactionValidator = new TransactionValidator(); - transactionValidator.validate(transaction, bindingResult); - - transactionService.handleAmount(transaction); - transactionService.handleTags(transaction); - - RepeatingOption repeatingOption; RepeatingModifierType type = RepeatingModifierType.getByLocalization(repeatingModifierType); RepeatingModifier repeatingModifier = RepeatingModifier.fromModifierType(type, repeatingModifierNumber); @@ -205,10 +194,7 @@ public class TransactionController extends BaseController break; } - repeatingOption = new RepeatingOption(transaction.getDate(), repeatingModifier, repeatingEnd); - transaction.setRepeatingOption(repeatingOption); - - return handleRedirect(model, transaction.getID() != null, transaction, bindingResult, date, "transactions/newTransactionRepeating"); + return new RepeatingOption(startDate, repeatingModifier, repeatingEnd); } @PostMapping(value = "/newTransaction/transfer") @@ -270,11 +256,6 @@ public class TransactionController extends BaseController DateTime date = dateService.getDateTimeFromCookie(cookieDate); transactionService.prepareModelNewOrEdit(model, true, date, null, transaction, accountService.getAllActivatedAccountsAsc()); - if(transaction.isRepeating()) - { - return "transactions/newTransactionRepeating"; - } - if(transaction.isTransfer()) { return "transactions/newTransactionTransfer"; @@ -355,6 +336,7 @@ public class TransactionController extends BaseController transactionCopy.setRepeatingOption(null); redirectUrl = "transactions/newTransactionNormal"; break; +// TODO case REPEATING: transactionCopy.setTransferAccount(null); redirectUrl = "transactions/newTransactionRepeating"; diff --git a/src/main/resources/static/js/transactions.js b/src/main/resources/static/js/transactions.js index 282bab801..0a566b1b9 100644 --- a/src/main/resources/static/js/transactions.js +++ b/src/main/resources/static/js/transactions.js @@ -410,7 +410,7 @@ function validateForm(allowEmptyAmount = false) } } - if(document.getElementsByName('isRepeating')[0].value === '1') + if(document.getElementsByName('isRepeating')[0].value) { if(!validateNumber($(transactionRepeatingModifierID).val(), transactionRepeatingModifierID.substr(1), "hidden-" + transactionRepeatingModifierID.substr(1), numberValidationMessage, REGEX_NUMBER)) { diff --git a/src/main/resources/templates/transactions/newTransactionNormal.ftl b/src/main/resources/templates/transactions/newTransactionNormal.ftl index 4dfcf5698..87de8e513 100644 --- a/src/main/resources/templates/transactions/newTransactionNormal.ftl +++ b/src/main/resources/templates/transactions/newTransactionNormal.ftl @@ -39,6 +39,7 @@ may then override an existing transactions if the ID is also already used in transactions table --> <input type="hidden" name="ID" value="<#if transaction.class.simpleName == "Transaction" && transaction.getID()??>${transaction.getID()?c}</#if>"> <input type="hidden" name="previousType" value="<#if previousType??>${previousType.name()}</#if>"> + <input type="hidden" name="isRepeating" value="${transaction.isRepeating()?c}"> <#-- isPayment switch --> <@newTransactionMacros.isExpenditureSwitch transaction/> diff --git a/src/main/resources/templates/transactions/newTransactionRepeating.ftl b/src/main/resources/templates/transactions/newTransactionRepeating.ftl deleted file mode 100644 index 8d1d12344..000000000 --- a/src/main/resources/templates/transactions/newTransactionRepeating.ftl +++ /dev/null @@ -1,99 +0,0 @@ -<html> - <head> - <#import "../helpers/header.ftl" as header> - <@header.globals/> - <#assign title = locale.getString("title.transaction.new.repeating.long")/> - <#if isEdit> - <#assign title=locale.getString("title.transaction.edit", title)/> - <#else> - <#assign title=locale.getString("title.transaction.new", title)/> - </#if> - - <@header.header "BudgetMaster - ${title}"/> - <@header.style "transactions"/> - <@header.style "datepicker"/> - <#import "/spring.ftl" as s> - </head> - <@header.body> - <#import "../helpers/navbar.ftl" as navbar> - <@navbar.navbar "transactions" settings/> - - <#import "newTransactionMacros.ftl" as newTransactionMacros> - <#import "../helpers/customSelectMacros.ftl" as customSelectMacros> - - <main> - <div class="card main-card background-color"> - <div class="container"> - <div class="section center-align"> - <div class="headline">${title}</div> - </div> - </div> - - <@header.content> - <div class="container"> - <#import "../helpers/validation.ftl" as validation> - <form name="NewTransaction" action="<@s.url '/transactions/newTransaction/repeating'/>" method="post" onsubmit="return validateForm()"> - <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/> - <input type="hidden" name="ID" value="<#if transaction.getID()??>${transaction.getID()?c}</#if>"> - <input type="hidden" name="isRepeating" value="${transaction.isRepeating()?c}"> - <input type="hidden" name="previousType" value="<#if previousType??>${previousType.name()}</#if>"> - - <#-- isPayment switch --> - <@newTransactionMacros.isExpenditureSwitch transaction/> - - <#assign hint=helpers.getHintByLocalizationKey("hint.transaction.save")/> - <@header.hint hint=hint/> - - <#-- name --> - <@newTransactionMacros.transactionName transaction suggestionsJSON/> - - <#-- amount --> - <@newTransactionMacros.transactionAmount transaction/> - - <#-- category --> - <@customSelectMacros.customCategorySelect categories transaction.getCategory() "col s12 m12 l8 offset-l2" locale.getString("transaction.new.label.category")/> - - <#-- date --> - <@newTransactionMacros.transactionStartDate transaction currentDate/> - - <#-- description --> - <@newTransactionMacros.transactionDescription transaction/> - - <#-- tags --> - <@newTransactionMacros.transactionTags transaction/> - - <#-- account --> - <#if transaction.getAccount()??> - <#assign selectedAccount = transaction.getAccount()/> - <#else> - <#assign selectedAccount = helpers.getCurrentAccountOrDefault()/> - </#if> - <@customSelectMacros.customAccountSelect "account-select-wrapper" "account" accounts selectedAccount "col s12 m12 l8 offset-l2" locale.getString("transaction.new.label.account") "transaction-account"/> - - <#-- repeating options --> - <@newTransactionMacros.transactionRepeating transaction currentDate/> - - <#-- buttons --> - <@newTransactionMacros.buttons "/transactions"/> - <@newTransactionMacros.buttonTransactionActions isEdit false previousType??/> - </form> - - <div id="changeTransactionTypeModalContainer"></div> - </div> - </@header.content> - </div> - </main> - - <!-- Pass localization to JS --> - <#import "../helpers/globalDatePicker.ftl" as datePicker> - <@datePicker.datePickerLocalization/> - - <!-- Scripts--> - <#import "../helpers/scripts.ftl" as scripts> - <@scripts.scripts/> - <script src="<@s.url '/js/libs/spectrum.js'/>"></script> - <script src="<@s.url '/js/helpers.js'/>"></script> - <script src="<@s.url '/js/transactions.js'/>"></script> - <script src="<@s.url '/js/transactionActions.js'/>"></script> - </@header.body> -</html> diff --git a/src/main/resources/templates/transactions/transactionsMacros.ftl b/src/main/resources/templates/transactions/transactionsMacros.ftl index 70c6acb1e..4d777d875 100644 --- a/src/main/resources/templates/transactions/transactionsMacros.ftl +++ b/src/main/resources/templates/transactions/transactionsMacros.ftl @@ -144,10 +144,6 @@ <a href="<@s.url '/transactions/newTransaction/transfer'/>" class="btn-floating btn background-green-dark"><i class="material-icons">swap_horiz</i></a> <a href="<@s.url '/transactions/newTransaction/transfer'/>" class="btn-floating btn mobile-fab-tip no-wrap">${locale.getString("title.transaction.new.transfer")}</a> </li> - <li> - <a href="<@s.url '/transactions/newTransaction/repeating'/>" class="btn-floating btn background-blue"><i class="material-icons">repeat</i></a> - <a href="<@s.url '/transactions/newTransaction/repeating'/>" class="btn-floating btn mobile-fab-tip no-wrap">${locale.getString("title.transaction.new.repeating")}</a> - </li> <li> <a href="<@s.url '/transactions/newTransaction/normal'/>" class="btn-floating btn background-orange"><i class="material-icons">payment</i></a> <a href="<@s.url '/transactions/newTransaction/normal'/>" class="btn-floating btn mobile-fab-tip no-wrap">${locale.getString("title.transaction.new.normal")}</a> -- GitLab