From 2a213de8460b42e354b74a6b69d41c6e7b9e9c81 Mon Sep 17 00:00:00 2001
From: Robert Goldmann <deadlocker@gmx.de>
Date: Fri, 22 Jul 2022 22:16:03 +0200
Subject: [PATCH] #677 - check name for keywords in java

---
 .../transactions/TransactionController.java   | 12 ++-
 .../main/resources/static/js/transactions.js  | 81 +++++++++++--------
 .../transactions/newTransactionMacros.ftl     |  2 +-
 .../transactionNameKeywordWarningModal.ftl    |  2 +-
 4 files changed, 58 insertions(+), 39 deletions(-)

diff --git a/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionController.java b/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionController.java
index 7050c5b6d..a7c3dff3c 100644
--- a/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionController.java
+++ b/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionController.java
@@ -46,6 +46,11 @@ import static java.time.temporal.TemporalAdjusters.lastDayOfMonth;
 @RequestMapping(Mappings.TRANSACTIONS)
 public class TransactionController extends BaseController
 {
+	private static class ModelAttributes
+	{
+		public static final String KEYWORD = "keyword";
+	}
+
 	private static class ReturnValues
 	{
 		public static final String ALL_ENTITIES = "transactions/transactions";
@@ -407,9 +412,12 @@ public class TransactionController extends BaseController
 		return ReturnValues.NEW_TRANSACTION;
 	}
 
-	@GetMapping("/keywordWarningModal")
-	public String keywordWarningModal()
+	@GetMapping("/keywordCheck")
+	public String keywordWarningModal(Model model)
 	{
+		// TODO implement real check
+		// TODO only return keyword for transaction name not template
+		model.addAttribute(ModelAttributes.KEYWORD, "income");
 		return ReturnValues.KEYWORD_WARNING;
 	}
 }
\ No newline at end of file
diff --git a/BudgetMasterServer/src/main/resources/static/js/transactions.js b/BudgetMasterServer/src/main/resources/static/js/transactions.js
index eb1b0c1cf..e085a6df9 100644
--- a/BudgetMasterServer/src/main/resources/static/js/transactions.js
+++ b/BudgetMasterServer/src/main/resources/static/js/transactions.js
@@ -386,10 +386,10 @@ function validateForm(allowEmptyAmount = false, skipKeywordCheck = false)
     // name (keyword check)
     if(!skipKeywordCheck)
     {
-        let keyword = checkNameForKeywords();
-        if(keyword !== null)
+        let nameContainsKeywords = checkNameForKeywords();
+        if(nameContainsKeywords)
         {
-            openKeywordWarningModal(keyword);
+            console.log("nameContainsKeywords");
             return false;
         }
     }
@@ -480,52 +480,63 @@ function validateForm(allowEmptyAmount = false, skipKeywordCheck = false)
 
 function checkNameForKeywords()
 {
-    // TODO implement real check
-    // TODO only return keyword for transaction name not template
-    return 'income';
-}
+    let url = document.getElementById('keywordCheckUrl').dataset.url;
 
-function openKeywordWarningModal(keyword)
-{
-    let url = document.getElementById('keywordWarningModalUrl').dataset.url;
+    let result;
 
     $.ajax({
+        async: false,
         type: 'GET',
         url: url,
         data: {},
         success: function(data)
         {
-            let modalID = '#modalTransactionNameKeywordWarning';
+            if(data)
+            {
+                // name contains at least one keyword
+                result = true;
+                openKeywordWarningModal(data);
+            }
+            else
+            {
+                result = false;
+            }
+        },
+        error: function(data)
+        {
+            console.error(data);
+        }
+    });
 
-            $('#transactionNameKeywordWarningModalContainer').html(data);
-            $(modalID).modal();
-            $(modalID).modal('open');
+    return result;
+}
 
-            document.getElementById('keyword').innerHTML = keyword;
+function openKeywordWarningModal(htmlData)
+{
+    let modalID = '#modalTransactionNameKeywordWarning';
 
-            $('#keyword-warning-button-ignore').click(function()
-            {
-                $(modalID).modal('close');
+    $('#transactionNameKeywordWarningModalContainer').html(htmlData);
+    $(modalID).modal();
+    $(modalID).modal('open');
 
-                // rebind onsubmit function to skip keyword check once
-                document.getElementsByName('NewTransaction')[0].onsubmit = function()
-                {
-                    return validateForm(false, true);
-                };
+    // button ignore
+    $('#keyword-warning-button-ignore').click(function()
+    {
+        $(modalID).modal('close');
+
+        // rebind onsubmit function to skip keyword check once
+        document.getElementsByName('NewTransaction')[0].onsubmit = function()
+        {
+            return validateForm(false, true);
+        };
 
-                // TODO differentiate between user clicked button "save" or "save and continue" before
-                document.getElementById('button-save-transaction').click();
+        // TODO differentiate between user clicked button "save" or "save and continue" before
+        document.getElementById('button-save-transaction').click();
 
-                // reset onsubmit function in case user edits transaction name too after fixing validation errors
-                document.getElementsByName('NewTransaction')[0].onsubmit = function()
-                {
-                    return validateForm(false, false);
-                };
-            });
-        },
-        error: function(data)
+        // reset onsubmit function in case user edits transaction name too after fixing validation errors
+        document.getElementsByName('NewTransaction')[0].onsubmit = function()
         {
-            console.error(data);
-        }
+            return validateForm(false, false);
+        };
     });
 }
diff --git a/BudgetMasterServer/src/main/resources/templates/transactions/newTransactionMacros.ftl b/BudgetMasterServer/src/main/resources/templates/transactions/newTransactionMacros.ftl
index 4abdcea99..cd29623fe 100644
--- a/BudgetMasterServer/src/main/resources/templates/transactions/newTransactionMacros.ftl
+++ b/BudgetMasterServer/src/main/resources/templates/transactions/newTransactionMacros.ftl
@@ -304,7 +304,7 @@
 </#macro>
 
 <#macro buttons cancelURL includeContinueButton>
-    <div id="keywordWarningModalUrl" class="hidden" data-url="<@s.url '/transactions/keywordWarningModal'/>"></div>
+    <div id="keywordCheckUrl" class="hidden" data-url="<@s.url '/transactions/keywordCheck'/>"></div>
 
     <br>
     <hr>
diff --git a/BudgetMasterServer/src/main/resources/templates/transactions/transactionNameKeywordWarningModal.ftl b/BudgetMasterServer/src/main/resources/templates/transactions/transactionNameKeywordWarningModal.ftl
index 222436916..19f534606 100644
--- a/BudgetMasterServer/src/main/resources/templates/transactions/transactionNameKeywordWarningModal.ftl
+++ b/BudgetMasterServer/src/main/resources/templates/transactions/transactionNameKeywordWarningModal.ftl
@@ -9,7 +9,7 @@
         <div class="row">
             <div class="sol s12">
                 ${locale.getString("transaction.warning.name.keyword.description.part1")}
-                <span id="keyword"></span>
+                <span id="keyword">${keyword}</span>
                 ${locale.getString("transaction.warning.name.keyword.description.part2")}
             </div>
         </div>
-- 
GitLab