From e04020b8bdd36a8e2b3e821b839d486d09bd258e Mon Sep 17 00:00:00 2001
From: Robert Goldmann <deadlocker@gmx.de>
Date: Tue, 15 Sep 2020 21:55:03 +0200
Subject: [PATCH] #528 - allow to set an account as readonly/readable

---
 .../accounts/AccountController.java           | 21 +++++++++++++++++++
 src/main/resources/languages/_de.properties   |  2 ++
 src/main/resources/languages/_en.properties   |  2 ++
 .../resources/templates/accounts/accounts.ftl | 10 +++++++++
 4 files changed, 35 insertions(+)

diff --git a/src/main/java/de/deadlocker8/budgetmaster/accounts/AccountController.java b/src/main/java/de/deadlocker8/budgetmaster/accounts/AccountController.java
index fa49c95de..a697a5048 100644
--- a/src/main/java/de/deadlocker8/budgetmaster/accounts/AccountController.java
+++ b/src/main/java/de/deadlocker8/budgetmaster/accounts/AccountController.java
@@ -57,6 +57,27 @@ public class AccountController extends BaseController
 		return "redirect:" + referer;
 	}
 
+	@GetMapping(value = "/{ID}/toggleReadOnly")
+	public String toggleReadOnly(HttpServletRequest request, @PathVariable("ID") Integer ID)
+	{
+		final Optional<Account> accountOptional = accountService.getRepository().findById(ID);
+		if(accountOptional.isEmpty())
+		{
+			throw new ResourceNotFoundException();
+		}
+
+		final Account account = accountOptional.get();
+		account.setReadOnly(!account.isReadOnly());
+		accountService.getRepository().save(account);
+
+		String referer = request.getHeader("Referer");
+		if(referer.contains("database/import"))
+		{
+			return "redirect:/settings";
+		}
+		return "redirect:" + referer;
+	}
+
 	@GetMapping
 	public String accounts(Model model)
 	{
diff --git a/src/main/resources/languages/_de.properties b/src/main/resources/languages/_de.properties
index a3813231d..a37ebbe64 100644
--- a/src/main/resources/languages/_de.properties
+++ b/src/main/resources/languages/_de.properties
@@ -207,6 +207,8 @@ account.default.name=Standardkonto
 account.all=Alle Konten
 account.budget.asof=Stand
 account.tooltip.default=Als Standardkonto festlegen
+account.tooltip.readonly.activate=Konto aktivieren
+account.tooltip.readonly.deactivate=Konto deaktivieren
 
 transaction.new.label.name=Name
 transaction.new.label.amount=Betrag
diff --git a/src/main/resources/languages/_en.properties b/src/main/resources/languages/_en.properties
index 1e875bf88..9745393de 100644
--- a/src/main/resources/languages/_en.properties
+++ b/src/main/resources/languages/_en.properties
@@ -207,6 +207,8 @@ account.default.name=Default Account
 account.all=All Accounts
 account.budget.asof=as of
 account.tooltip.default=Set as default account
+account.tooltip.readonly.activate=Enable account
+account.tooltip.readonly.deactivate=Disable account
 
 transaction.new.label.name=Name
 transaction.new.label.amount=Amount
diff --git a/src/main/resources/templates/accounts/accounts.ftl b/src/main/resources/templates/accounts/accounts.ftl
index a8a837748..6a865e4fe 100644
--- a/src/main/resources/templates/accounts/accounts.ftl
+++ b/src/main/resources/templates/accounts/accounts.ftl
@@ -25,6 +25,16 @@
                                 <tr>
                                     <td>
                                         <a href="<@s.url '/accounts/${account.getID()?c}/setAsDefault'/>" class="btn-flat no-padding text-color tooltipped" data-position="left" data-tooltip="${locale.getString("account.tooltip.default")}"><i class="material-icons left"><#if account.isDefault()>star<#else>star_border</#if></i></a>
+
+                                        <#if account.isReadOnly()>
+                                            <#assign toolTipText = locale.getString("account.tooltip.readonly.activate")/>
+                                            <#assign lockIcon = '<i class="fas fa-lock"></i>'/>
+                                        <#else>
+                                            <#assign toolTipText = locale.getString("account.tooltip.readonly.deactivate")/>
+                                            <#assign lockIcon = '<i class="fas fa-lock-open"></i>'/>
+                                        </#if>
+
+                                        <a href="<@s.url '/accounts/${account.getID()?c}/toggleReadOnly'/>" class="btn-flat no-padding text-color tooltipped" data-position="left" data-tooltip="${toolTipText}">${lockIcon}</a>
                                     </td>
                                     <td>${account.getName()}</td>
                                     <td>
-- 
GitLab