From a168c542f9331e7de12585f670ce491657b90fdd Mon Sep 17 00:00:00 2001
From: Robert Goldmann <deadlocker@gmx.de>
Date: Mon, 7 Apr 2025 22:06:18 +0200
Subject: [PATCH] #774 - account overview: add filter controls

---
 .../resources/languages/base_de.properties    |  2 +
 .../resources/languages/base_en.properties    |  2 +
 .../main/resources/static/css/accounts.css    |  8 +++
 .../resources/templates/accounts/accounts.ftl | 64 ++++++++++++++++---
 4 files changed, 68 insertions(+), 8 deletions(-)

diff --git a/BudgetMasterServer/src/main/resources/languages/base_de.properties b/BudgetMasterServer/src/main/resources/languages/base_de.properties
index 6a6414c6f..564c62e90 100644
--- a/BudgetMasterServer/src/main/resources/languages/base_de.properties
+++ b/BudgetMasterServer/src/main/resources/languages/base_de.properties
@@ -371,6 +371,8 @@ account.all=Alle Konten
 account.tooltip.default=Als Standardkonto festlegen
 account.tooltip.endDate.soon=Das Enddatum für dieses Konto wird in {0} Tagen erreicht!
 account.tooltip.endDate.done=Das Enddatum für dieses Konto wurde vor {0} Tagen erreicht!
+account.label.endDate.with=mit
+account.label.endDate.without=ohne
 
 account.state.full.access=Vollzugriff
 account.state.read.only=Lesezugriff
diff --git a/BudgetMasterServer/src/main/resources/languages/base_en.properties b/BudgetMasterServer/src/main/resources/languages/base_en.properties
index 1b24c765e..f1169c119 100644
--- a/BudgetMasterServer/src/main/resources/languages/base_en.properties
+++ b/BudgetMasterServer/src/main/resources/languages/base_en.properties
@@ -370,6 +370,8 @@ account.all=All Accounts
 account.tooltip.default=Set as default account
 account.tooltip.endDate.soon=The end date for this account will be reached in {0} days!
 account.tooltip.endDate.done=The end date for this account was reached {0} days ago!
+account.label.endDate.with=with
+account.label.endDate.without=without
 
 account.state.full.access=Full access
 account.state.read.only=Read-only
diff --git a/BudgetMasterServer/src/main/resources/static/css/accounts.css b/BudgetMasterServer/src/main/resources/static/css/accounts.css
index 189526f80..7800c2330 100644
--- a/BudgetMasterServer/src/main/resources/static/css/accounts.css
+++ b/BudgetMasterServer/src/main/resources/static/css/accounts.css
@@ -31,3 +31,11 @@
     border: 3px solid var(--color-text);
     line-height: 32px !important;
 }
+
+.account-container th {
+    vertical-align: top;
+}
+
+.account-container th.vertical-align-middle {
+    vertical-align: middle;
+}
\ No newline at end of file
diff --git a/BudgetMasterServer/src/main/resources/templates/accounts/accounts.ftl b/BudgetMasterServer/src/main/resources/templates/accounts/accounts.ftl
index 215aa88ca..10880927e 100644
--- a/BudgetMasterServer/src/main/resources/templates/accounts/accounts.ftl
+++ b/BudgetMasterServer/src/main/resources/templates/accounts/accounts.ftl
@@ -25,20 +25,69 @@
                     <br>
                     <div class="container account-container">
                     <table class="bordered">
-                        <thead>
+                        <thead class="hide-on-med-and-down">
                             <tr>
-                                <th>${locale.getString("account.new.label.state")}</th>
-                                <th>${locale.getString("account.new.label.endDate")}</th>
-                                <th>${locale.getString("account.new.label.icon")}</th>
-                                <th>${locale.getString("account.new.label.name")}</th>
-                                <th>${locale.getString("transaction.new.label.description")}</th>
-                                <th>${locale.getString("categories.actions")}</th>
+                                <th></th>
+                                <th>
+                                    <div>${locale.getString("account.new.label.state")}</div>
+                                    <div>
+                                        <label>
+                                            <input type="checkbox" />
+                                            <span><i class="fas fa-edit placeholder-icon-right"></i>${locale.getString("account.state.full.access")}</span>
+                                        </label>
+                                    </div>
+                                    <div>
+                                        <label>
+                                            <input type="checkbox" />
+                                            <span><i class="fas fa-lock placeholder-icon-right"></i>${locale.getString("account.state.read.only")}</span>
+                                        </label>
+                                    </div>
+                                    <div>
+                                        <label>
+                                            <input type="checkbox" />
+                                            <span><i class="far fa-eye-slash placeholder-icon-right"></i>${locale.getString("account.state.hidden")}</span>
+                                        </label>
+                                    </div>
+                                </th>
+                                <th>
+                                    <div>${locale.getString("account.new.label.endDate")}</div>
+                                    <div>
+                                        <label>
+                                            <input type="checkbox" />
+                                            <span><i class="fas fa-bell placeholder-icon-right"></i>${locale.getString("account.label.endDate.with")}</span>
+                                        </label>
+                                    </div>
+                                    <div>
+                                        <label>
+                                            <input type="checkbox" />
+                                            <span><i class="fas fa-bell-slash placeholder-icon-right"></i>${locale.getString("account.label.endDate.without")}</span>
+                                        </label>
+                                    </div>
+                                </th>
+                                <th>
+                                    <div>${locale.getString("account.new.label.name")}</div>
+                                    <div class="input-field">
+                                        <input type="text" id="accounts-filter-name">
+                                    </div>
+                                </th>
+                                <th>
+                                    <div>${locale.getString("transaction.new.label.description")}</div>
+                                    <div class="input-field">
+                                        <input type="text" id="accounts-filter-description">
+                                    </div>
+                                </th>
+                                <th class="vertical-align-middle">
+                                    <button class="btn waves-effect waves-light background-green" type="submit" id="accounts-filter-button">
+                                        <i class="fas fa-filter left"></i>${locale.getString("filter.apply")}
+                                    </button>
+                                </th>
                             </tr>
                         </thead>
 
                         <#list accounts as account>
                             <#if (account.getType().name() == "CUSTOM")>
                                 <tr class="account-overview-row">
+                                    <td><@customSelectMacros.accountIcon account account.getName() "text-blue"/></td>
                                     <td>
                                         <#if account.getAccountState().name() == "READ_ONLY">
                                             <div class="placeholder-icon placeholder-icon-right"></div>
@@ -58,7 +107,6 @@
                                             <div class="placeholder-icon"></div>
                                         </#if>
                                     </td>
-                                    <td><@customSelectMacros.accountIcon account account.getName() "text-blue"/></td>
                                     <td>${account.getName()}</td>
                                     <td>
                                         <div class="truncate account-description">
-- 
GitLab