diff --git a/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/settings/SettingsController.java b/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/settings/SettingsController.java index 2fa7b19754ddfd7b4a796184aa49427908346ae9..229dcf038617f855e00dad8d2f9df274de808ea9 100644 --- a/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/settings/SettingsController.java +++ b/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/settings/SettingsController.java @@ -13,6 +13,7 @@ import de.deadlocker8.budgetmaster.services.ImportResultItem; import de.deadlocker8.budgetmaster.services.ImportService; import de.deadlocker8.budgetmaster.settings.containers.PersonalizationSettingsContainer; import de.deadlocker8.budgetmaster.settings.containers.SecuritySettingsContainer; +import de.deadlocker8.budgetmaster.settings.containers.TransactionsSettingsContainer; import de.deadlocker8.budgetmaster.update.BudgetMasterUpdateService; import de.deadlocker8.budgetmaster.utils.Mappings; import de.deadlocker8.budgetmaster.utils.WebRequestUtils; @@ -79,6 +80,7 @@ public class SettingsController extends BaseController public static final String IMPORT_DATABASE_RESULT = "settings/importResult"; public static final String CONTAINER_SECURITY = "settings/containers/settingsSecurity"; public static final String CONTAINER_PERSONALIZATION = "settings/containers/settingsPersonalization"; + public static final String CONTAINER_TRANSACTIONS = "settings/containers/settingsTransactions"; } private static class RequestAttributeNames @@ -193,6 +195,35 @@ public class SettingsController extends BaseController return ReturnValues.CONTAINER_PERSONALIZATION; } + @PostMapping(value = "/save/transactions") + public String saveContainerTransactions(Model model, + @ModelAttribute("TransactionsSettingsContainer") TransactionsSettingsContainer transactionsSettingsContainer, + BindingResult bindingResult) + { + transactionsSettingsContainer.fixBooleans(); + + final Settings settings = settingsService.getSettings(); + + if(bindingResult.hasErrors()) + { + model.addAttribute(ModelAttributes.ERROR, bindingResult); + + final JsonObject toastContent = getToastContent("notification.settings.transactions.error", NotificationType.ERROR); + model.addAttribute(ModelAttributes.TOAST_CONTENT, toastContent); + model.addAttribute(ModelAttributes.SETTINGS, settings); + return ReturnValues.CONTAINER_TRANSACTIONS; + } + + // update settings + settings.setRestActivated(transactionsSettingsContainer.getRestActivated()); + settingsService.updateSettings(settings); + + final JsonObject toastContent = getToastContent("notification.settings.transactions.saved", NotificationType.SUCCESS); + model.addAttribute(ModelAttributes.TOAST_CONTENT, toastContent); + model.addAttribute(ModelAttributes.SETTINGS, settings); + return ReturnValues.CONTAINER_TRANSACTIONS; + } + private JsonObject getToastContent(String localizationKey, NotificationType notificationType) { final JsonObject toastContent = new JsonObject(); diff --git a/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/settings/containers/TransactionsSettingsContainer.java b/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/settings/containers/TransactionsSettingsContainer.java new file mode 100644 index 0000000000000000000000000000000000000000..bfc801d224b84ea68d6f600ff8a898bb9622d888 --- /dev/null +++ b/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/settings/containers/TransactionsSettingsContainer.java @@ -0,0 +1,24 @@ +package de.deadlocker8.budgetmaster.settings.containers; + +public final class TransactionsSettingsContainer +{ + private Boolean restActivated; + + public TransactionsSettingsContainer(Boolean restActivated) + { + this.restActivated = restActivated; + } + + public Boolean getRestActivated() + { + return restActivated; + } + + public void fixBooleans() + { + if(restActivated == null) + { + restActivated = false; + } + } +} diff --git a/BudgetMasterServer/src/main/resources/languages/base_de.properties b/BudgetMasterServer/src/main/resources/languages/base_de.properties index 9cde9d2e91e8e6b1a07c9c567a07e90951a2644d..5d697f9809bf3ad9711f490e778d517bf49b5edf 100644 --- a/BudgetMasterServer/src/main/resources/languages/base_de.properties +++ b/BudgetMasterServer/src/main/resources/languages/base_de.properties @@ -173,6 +173,8 @@ notification.settings.security.warning=Passwort entspricht bereits gespeicherten notification.settings.security.error=Fehler beim Speichern des Passworts notification.settings.personalization.saved=Personalisierung gespeichert notification.settings.personalization.error=Fehler beim Speichern der Personalisierung +notification.settings.transactions.saved=Buchungseinstellungen gespeichert +notification.settings.transactions.error=Fehler beim Speichern der Buchungseinstellungen notification.settings.update.available=BudgetMaster Update "{0}" verfügbar notification.settings.database.delete.success=Datenbank erfolgreich gelöscht notification.settings.backup.run.success=Backup erfolgreich @@ -314,6 +316,7 @@ settings.category.circle.style.deactivated=Quadrate settings.category.circle.style.activated=Kreise settings.personalization=Personalisierung settings.personalization.reload.page=Zum Anwenden visueller Änderungen <a href="">Seite neu laden</a> +settings.transactions=Buchungen settings.database.import=Importieren settings.database.export=Exportieren diff --git a/BudgetMasterServer/src/main/resources/languages/base_en.properties b/BudgetMasterServer/src/main/resources/languages/base_en.properties index b2e64859dcd8844eb4858d7be5ed97ef1a8784ef..eafb8b9a228472ad07bfaee4ed0fc4c60321db85 100644 --- a/BudgetMasterServer/src/main/resources/languages/base_en.properties +++ b/BudgetMasterServer/src/main/resources/languages/base_en.properties @@ -174,6 +174,8 @@ notification.settings.security.warning=Password equals already saved password notification.settings.security.error=Error saving password notification.settings.personalization.saved=Personalization settings saved notification.settings.personalization.error=Error saving personalization settings +notification.settings.transactions.saved=Transactions settings saved +notification.settings.transactions.error=Error saving transactions settings notification.settings.update.available=BudgetMaster update "{0}" available notification.settings.database.delete.success=Successfully deleted database notification.settings.backup.run.success=Backup successful @@ -315,6 +317,7 @@ settings.category.circle.style.deactivated=Squares settings.category.circle.style.activated=Circles settings.personalization=Personalization settings.personalization.reload.page=<a href="">Reload</a> page to apply visual changes +settings.transactions=Transactions settings.database.import=Import settings.database.export=Export diff --git a/BudgetMasterServer/src/main/resources/templates/settings/containers/settingsTransactions.ftl b/BudgetMasterServer/src/main/resources/templates/settings/containers/settingsTransactions.ftl new file mode 100644 index 0000000000000000000000000000000000000000..c0abf9861fc615c52a3418c700072e2a79f6c854 --- /dev/null +++ b/BudgetMasterServer/src/main/resources/templates/settings/containers/settingsTransactions.ftl @@ -0,0 +1,39 @@ +<#import "/spring.ftl" as s> +<#import "../../helpers/validation.ftl" as validation> +<#import "../../helpers/header.ftl" as header> +<@header.globals/> + +<#import "settingsContainer.ftl" as settingsContainerMacros> +<#import "../settingsMacros.ftl" as settingsMacros> + +<#macro transactionsSettingsContainer settings> + <@settingsContainerMacros.settingsContainer 'TransactionsSettingsContainer' 'transactionsSettingsContainer'> + <div class="row"> + <div class="col s12"> + <div class="table-container"> + <div class="table-cell"> + <div class="switch-cell-margin">${locale.getString("settings.rest")}</div> + </div> + <div class="table-cell table-cell-spacer"></div> + <div class="table-cell"> + <@settingsMacros.switch "rest" "restActivated" settings.isRestActivated()/> + </div> + <div class="table-cell table-cell-spacer"></div> + <div class="table-cell"> + <div class="switch-cell-margin"> + <a class="btn btn-flat tooltipped text-default" data-position="bottom" data-tooltip="${locale.getString("settings.rest.description")}"><i class="material-icons">help_outline</i></a> + </div> + </div> + </div> + </div> + </div> + + <div class="row"> + <div class="col s12 center-align"> + <@header.buttonSubmit name='action' icon='save' localizationKey='save' color='background-green' formaction='/settings/save/transactions'/> + </div> + </div> + </@settingsContainerMacros.settingsContainer> +</#macro> + +<@transactionsSettingsContainer settings/> diff --git a/BudgetMasterServer/src/main/resources/templates/settings/settings.ftl b/BudgetMasterServer/src/main/resources/templates/settings/settings.ftl index 3f2166342959b64ded95a940c975efcfdccac9e8..94ff9c810826ed057a2a2972890789652b1f3b99 100644 --- a/BudgetMasterServer/src/main/resources/templates/settings/settings.ftl +++ b/BudgetMasterServer/src/main/resources/templates/settings/settings.ftl @@ -16,6 +16,7 @@ <#import "containers/settingsSecurity.ftl" as settingsSecurityMacros> <#import "containers/settingsPersonalization.ftl" as settingsPersonalizationMacros> + <#import "containers/settingsTransactions.ftl" as settingsTransactionMacros> <main> @@ -40,37 +41,8 @@ <@settingsPersonalizationMacros.personalizationSettingsContainer settings=settings showReloadWarning=false/> </@settingsMacros.settingsCollapsibleItem> - <@settingsMacros.settingsCollapsibleItem "" "list" "Transactions"> - <div class="row"> - <div class="col s12"> - <div class="table-container"> - <div class="table-cell"> - <div class="switch-cell-margin">${locale.getString("settings.rest")}</div> - <div class="switch-cell-margin">Warn about expenditure switch</div> - </div> - <div class="table-cell table-cell-spacer"></div> - <div class="table-cell"> - <@settingsMacros.switch "rest" "restActivated" settings.isRestActivated()/> - <@settingsMacros.switch "rest" "restActivated" settings.isRestActivated()/> - </div> - <div class="table-cell table-cell-spacer"></div> - <div class="table-cell"> - <div class="switch-cell-margin"> - <a class="btn btn-flat tooltipped text-default" data-position="bottom" data-tooltip="${locale.getString("settings.rest.description")}"><i class="material-icons">help_outline</i></a> - </div> - <div class="switch-cell-margin"> - <a class="btn btn-flat tooltipped text-default" data-position="bottom" data-tooltip="${locale.getString("settings.rest.description")}"><i class="material-icons">help_outline</i></a> - </div> - </div> - </div> - </div> - </div> - - <div class="row"> - <div class="col s12 center-align"> - <@header.buttonSubmit name='action' icon='save' localizationKey='save' color='background-green'/> - </div> - </div> + <@settingsMacros.settingsCollapsibleItem "transactionsSettingsContainer" "list" locale.getString("settings.transactions")> + <@settingsTransactionMacros.transactionsSettingsContainer settings/> </@settingsMacros.settingsCollapsibleItem> <@settingsMacros.settingsCollapsibleItem "" "cloud_download" locale.getString("settings.backup")> @@ -242,6 +214,7 @@ <script> initSettingsContainer('SecuritySettingsContainer', 'securitySettingsContainer'); initSettingsContainer('PersonalizationSettingsContainer', 'personalizationSettingsContainer'); + initSettingsContainer('TransactionsSettingsContainer', 'transactionsSettingsContainer'); </script> </@header.body> </html>