Skip to content

Commit

Permalink
#764 - add new settings option to enable/disable account end date rem…
Browse files Browse the repository at this point in the history
…inders
  • Loading branch information
deadlocker8 committed Oct 2, 2024
1 parent e0b15e4 commit 37a8fce
Show file tree
Hide file tree
Showing 8 changed files with 190 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,10 @@ public class Settings

private Boolean orderTransactionNameSuggestionsAlphabetically;

private Boolean accountEndDateReminderActivated;
@DateTimeFormat(pattern = "dd.MM.yyyy")
private LocalDate lastAccountEndDateReminderDate;

public Settings()
{
// empty
Expand Down Expand Up @@ -76,6 +80,8 @@ public static Settings getDefault()
defaultSettings.setWhatsNewShownForCurrentVersion(false);
defaultSettings.setMigrationDeclined(false);
defaultSettings.setOrderTransactionNameSuggestionsAlphabetically(true);
defaultSettings.setAccountEndDateReminderActivated(true);
defaultSettings.setLastAccountEndDateReminderDate(LocalDate.now());

return defaultSettings;
}
Expand Down Expand Up @@ -314,6 +320,26 @@ public void setOrderTransactionNameSuggestionsAlphabetically(Boolean orderTransa
this.orderTransactionNameSuggestionsAlphabetically = orderTransactionNameSuggestionsAlphabetically;
}

public Boolean getAccountEndDateReminderActivated()
{
return accountEndDateReminderActivated;
}

public void setAccountEndDateReminderActivated(Boolean accountEndDateReminderActivated)
{
this.accountEndDateReminderActivated = accountEndDateReminderActivated;
}

public LocalDate getLastAccountEndDateReminderDate()
{
return lastAccountEndDateReminderDate;
}

public void setLastAccountEndDateReminderDate(LocalDate lastAccountEndDateReminderDate)
{
this.lastAccountEndDateReminderDate = lastAccountEndDateReminderDate;
}

@Override
public String toString()
{
Expand All @@ -340,6 +366,8 @@ public String toString()
", whatsNewShownForCurrentVersion=" + whatsNewShownForCurrentVersion +
", migrationDeclined=" + migrationDeclined +
", orderTransactionNameSuggestionsAlphabetically=" + orderTransactionNameSuggestionsAlphabetically +
", accountEndDateReminderActivated=" + accountEndDateReminderActivated +
", lastAccountEndDateReminderDate=" + lastAccountEndDateReminderDate +
'}';
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -156,6 +156,14 @@ public String saveContainerPersonalization(Model model,
return result.templatePath();
}

@PostMapping(value = "/save/accounts")
public String saveContainerAccounts(Model model,
@ModelAttribute("AccountsSettingsContainer") AccountsSettingsContainer accountsSettingsContainer,
BindingResult bindingResult)
{
return saveContainer(model, accountsSettingsContainer, bindingResult).templatePath();
}

@PostMapping(value = "/save/transactions")
public String saveContainerTransactions(Model model,
@ModelAttribute("TransactionsSettingsContainer") TransactionsSettingsContainer transactionsSettingsContainer,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import org.springframework.transaction.annotation.Transactional;

import jakarta.annotation.PostConstruct;

import java.lang.reflect.Field;
import java.util.NoSuchElementException;
import java.util.Optional;
Expand Down Expand Up @@ -116,6 +117,14 @@ public void createDefaultSettingsIfNotExists()
{
settings.setOrderTransactionNameSuggestionsAlphabetically(defaultSettings.getOrderTransactionNameSuggestionsAlphabetically());
}
if(settings.getAccountEndDateReminderActivated() == null)
{
settings.setAccountEndDateReminderActivated(defaultSettings.getAccountEndDateReminderActivated());
}
if(settings.getLastAccountEndDateReminderDate() == null)
{
settings.setLastAccountEndDateReminderDate(defaultSettings.getLastAccountEndDateReminderDate());
}

settingsRepository.save(settings);
}
Expand All @@ -139,6 +148,13 @@ public void updateMigrationDeclined(boolean isDeclined)
settings.setMigrationDeclined(isDeclined);
}

@Transactional
public void updateLastAccountEndDateReminderDate()
{
Settings settings = getSettings();
settings.setLastAccountEndDateReminderDate(DateHelper.getCurrentDate());
}

@Transactional
public void updateSettings(Settings newSettings)
{
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
package de.deadlocker8.budgetmaster.settings.containers;

import de.deadlocker8.budgetmaster.settings.Settings;
import de.deadlocker8.budgetmaster.settings.SettingsService;
import org.springframework.validation.Errors;

public final class AccountsSettingsContainer implements SettingsContainer
{
private Boolean accountEndDateReminderActivated;

public AccountsSettingsContainer(Boolean accountEndDateReminderActivated)
{
this.accountEndDateReminderActivated = accountEndDateReminderActivated;
}

@Override
public void validate(Errors errors)
{
// nothing to do
}

@Override
public void fixBooleans()
{
// nothing to do
}

@Override
public String getErrorLocalizationKey()
{
return "notification.settings.accounts.error";
}

@Override
public String getSuccessLocalizationKey()
{
return "notification.settings.accounts.saved";
}

@Override
public String getTemplatePath()
{
return "settings/containers/settingsAccounts";
}

@Override
public Settings updateSettings(SettingsService settingsService)
{
final Settings settings = settingsService.getSettings();

if(accountEndDateReminderActivated == null)
{
accountEndDateReminderActivated = false;
}

settings.setAccountEndDateReminderActivated(accountEndDateReminderActivated);
return settings;
}

@Override
public void persistChanges(SettingsService settingsService, Settings previousSettings, Settings settings)
{
settingsService.updateSettings(settings);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -175,6 +175,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.accounts.saved=Kontoeinstellungen gespeichert
notification.settings.accounts.error=Fehler beim Speichern der Kontoeinstellungen
notification.settings.transactions.saved=Buchungseinstellungen gespeichert
notification.settings.transactions.error=Fehler beim Speichern der Buchungseinstellungen
notification.settings.update.saved=Updateeinstellungen gespeichert
Expand Down Expand Up @@ -276,6 +278,10 @@ settings.transactionNameSuggestionOrder.description=Legt die Sortierung von Name
settings.darkTheme=Design
settings.darkTheme.deactivated=Helles Design
settings.darkTheme.activated=Dunkles Design
settings.accountEndDateReminder=Erinnerung für Konten mit Enddatum
settings.accountEndDateReminder.description=Erinnert dich automatisch einmal pro Tag daran, wenn ein oder mehrere Konten in Kürze ihr Enddatum erreichen.
settings.accountEndDateReminder.deactivated=Aus
settings.accountEndDateReminder.activated=An
settings.backupReminder=Backuperinnerung
settings.backupReminder.description=Erinnert pro Monat an die Erstellung eines manuellen Backups
settings.backupReminder.deactivated=Aus
Expand Down Expand Up @@ -332,6 +338,7 @@ settings.transactions.keywords=Schlüsselwörter
settings.transactions.keywords.placeholder=Schlüsselwort hier eingeben
settings.transactions.keywords.description=Verwendest du eins dieser Schlüsselwörter im Namen einer neuen Buchung, so wirst du daran erinnert die Buchung als Einnahme zu markieren. (Groß- und Kleinschreibung wird nicht berücksichtigt)
settings.misc=Sonstiges
settings.accounts=Konten
settings.warning.unsaved=ungespeichert

settings.database.import=Importieren
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -175,6 +175,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.accounts.saved=Account settings saved
notification.settings.accounts.error=Error saving account settings
notification.settings.transactions.saved=Transactions settings saved
notification.settings.transactions.error=Error saving transactions settings
notification.settings.backup.saved=Backup settings saved
Expand Down Expand Up @@ -276,6 +278,10 @@ settings.transactionNameSuggestionOrder.description=Defines how the transaction
settings.darkTheme=Theme
settings.darkTheme.deactivated=Light Theme
settings.darkTheme.activated=Dark Theme
settings.accountEndDateReminder=Reminder for accounts with end dates
settings.accountEndDateReminder.description=Automatically remind you once per day if one or more accounts will reach their end dates soon.
settings.accountEndDateReminder.deactivated=Off
settings.accountEndDateReminder.activated=On
settings.backupReminder=Backup reminder
settings.backupReminder.description=Automatically remind you once per month to perform a manual backup
settings.backupReminder.deactivated=Off
Expand Down Expand Up @@ -332,6 +338,7 @@ settings.transactions.keywords=Keywords
settings.transactions.keywords.placeholder=Enter keyword here
settings.transactions.keywords.description=If you use one of these keywords in the name of a new transaction, you will be reminded to mark the transaction as an income. (This feature is case-insensitive)
settings.misc=Misc
settings.accounts=Accounts
settings.warning.unsaved=unsaved

settings.database.import=Import
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
<#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 accountsSettingsContainer importScripts settings>
<@settingsContainerMacros.settingsContainer 'AccountsSettingsContainer' 'accountsSettingsContainer' importScripts '/settings/save/accounts'>
<div class="row">
<div class="col s12">
<div class="table-container">
<div class="table-cell">
<div class="switch-cell-margin">${locale.getString("settings.accountEndDateReminder")}</div>
</div>
<div class="table-cell table-cell-spacer"></div>
<div class="table-cell">
<@settingsMacros.switch "accountEndDateReminder" "accountEndDateReminderActivated" settings.getAccountEndDateReminderActivated()/>
</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.accountEndDateReminder.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' onclick='return validateAccountsForm()'/>
</div>
</div>

<script>
function validateAccountsForm()
{
return true;
}
// toggle unsaved changes warning
$('input[name="accountEndDateReminderActivated"]').change(function()
{
toggleSettingsContainerHeader('accountsSettingsContainerHeader', false);
});
</script>
</@settingsContainerMacros.settingsContainer>
</#macro>

<@accountsSettingsContainer importScripts=true settings=settings/>
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

<#import "containers/settingsSecurity.ftl" as settingsSecurityMacros>
<#import "containers/settingsPersonalization.ftl" as settingsPersonalizationMacros>
<#import "containers/settingsAccounts.ftl" as settingsAccountsMacros>
<#import "containers/settingsTransactions.ftl" as settingsTransactionsMacros>
<#import "containers/settingsBackup.ftl" as settingsBackupMacros>
<#import "containers/settingsUpdate.ftl" as settingsUpdateMacros>
Expand Down Expand Up @@ -47,6 +48,10 @@
<@settingsPersonalizationMacros.personalizationSettingsContainer importScripts=false settings=settings showReloadWarning=false/>
</@settingsMacros.settingsCollapsibleItem>

<@settingsMacros.settingsCollapsibleItem "accountsSettingsContainer" "account_balance" locale.getString("settings.accounts")>
<@settingsAccountsMacros.accountsSettingsContainer importScripts=false settings=settings/>
</@settingsMacros.settingsCollapsibleItem>

<@settingsMacros.settingsCollapsibleItem "transactionsSettingsContainer" "list" locale.getString("settings.transactions")>
<@settingsTransactionsMacros.transactionsSettingsContainer importScripts=false settings=settings/>
</@settingsMacros.settingsCollapsibleItem>
Expand Down Expand Up @@ -111,6 +116,7 @@
<script>
initSettingsContainer('SecuritySettingsContainer', 'securitySettingsContainer');
initSettingsContainer('PersonalizationSettingsContainer', 'personalizationSettingsContainer');
initSettingsContainer('AccountsSettingsContainer', 'accountsSettingsContainer');
initSettingsContainer('TransactionsSettingsContainer', 'transactionsSettingsContainer');
initSettingsContainer('BackupSettingsContainer', 'backupSettingsContainer');
initSettingsContainer('MiscSettingsContainer', 'miscSettingsContainer');
Expand Down

0 comments on commit 37a8fce

Please sign in to comment.