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 a7c3dff3c88d8cc1d01f59e3c800f79021d3e6fc..1465be91ea26c78154d8cd50b169bd7c0fa732d9 100644 --- a/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionController.java +++ b/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionController.java @@ -411,13 +411,4 @@ public class TransactionController extends BaseController } return ReturnValues.NEW_TRANSACTION; } - - @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/java/de/deadlocker8/budgetmaster/transactions/keywords/TransactionNameKeywordController.java b/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/transactions/keywords/TransactionNameKeywordController.java new file mode 100644 index 0000000000000000000000000000000000000000..95774477461be8a59145e03c5db2e9e0998a5cc1 --- /dev/null +++ b/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/transactions/keywords/TransactionNameKeywordController.java @@ -0,0 +1,52 @@ +package de.deadlocker8.budgetmaster.transactions.keywords; + +import de.deadlocker8.budgetmaster.controller.BaseController; +import de.deadlocker8.budgetmaster.utils.Mappings; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +@Controller +@RequestMapping(Mappings.KEYWORDS) +public class TransactionNameKeywordController extends BaseController +{ + private static class ModelAttributes + { + public static final String KEYWORD = "transactionNameKeyword"; + } + + private static class ReturnValues + { + public static final String KEYWORD_WARNING = "transactions/transactionNameKeywordWarningModal"; + public static final String EMPTY = "transactions/empty"; + } + + private final TransactionNameKeywordService transactionNameKeywordService; + + @Autowired + public TransactionNameKeywordController(TransactionNameKeywordService transactionNameKeywordService) + { + this.transactionNameKeywordService = transactionNameKeywordService; + } + + @GetMapping("/keywordCheck") + public String keywordCheck(HttpServletResponse response, Model model, @RequestParam(value = "transactionName", required = false) String transactionName) + { + final List<String> matchingKeywords = transactionNameKeywordService.getMatchingKeywords(transactionName); + + if(matchingKeywords.isEmpty()) + { + response.setStatus(204); + return null; + } + else + { + model.addAttribute(ModelAttributes.KEYWORD, matchingKeywords.get(0)); + return ReturnValues.KEYWORD_WARNING; + } + } +} \ No newline at end of file diff --git a/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/transactions/keywords/TransactionNameKeywordService.java b/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/transactions/keywords/TransactionNameKeywordService.java index 8718acecf850910631ad9bb68d0208e146695d12..f653381fc4dcfa897371bb0d33f807bf05d7ebbc 100644 --- a/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/transactions/keywords/TransactionNameKeywordService.java +++ b/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/transactions/keywords/TransactionNameKeywordService.java @@ -58,7 +58,7 @@ public class TransactionNameKeywordService implements Resettable return keywords.stream() .map(TransactionNameKeyword::getValue) - .filter(value -> textLowerCase.contains(value.toLowerCase(Locale.ROOT))) + .filter(value -> textLowerCase.contains(value.toLowerCase())) .toList(); } } diff --git a/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/utils/Mappings.java b/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/utils/Mappings.java index 91f661cc62feea86174a3263f5e0a3c3cf3a5b26..332d2b61c76ad5889ffc6de1f89cd49de7c0e7d3 100644 --- a/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/utils/Mappings.java +++ b/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/utils/Mappings.java @@ -25,6 +25,7 @@ public final class Mappings public static final String TRANSACTIONS = "/transactions"; public static final String TAGS = "/tags"; public static final String HINTS = "/hints"; + public static final String KEYWORDS = "/keywords"; public static final String MIGRATION = "/migration"; } diff --git a/BudgetMasterServer/src/main/resources/static/js/transactions.js b/BudgetMasterServer/src/main/resources/static/js/transactions.js index 046df4d93d5ca0bf23801d459a4ec3f0a5417e58..2d4f4071486ecc8a73a3baffc29200868173b196 100644 --- a/BudgetMasterServer/src/main/resources/static/js/transactions.js +++ b/BudgetMasterServer/src/main/resources/static/js/transactions.js @@ -480,17 +480,18 @@ function validateForm(allowEmptyAmount = false, skipKeywordCheck = false) function checkNameForKeywords() { let url = document.getElementById('keywordCheckUrl').dataset.url; + let transactionName = document.getElementById('transaction-name').value; let result; $.ajax({ async: false, type: 'GET', - url: url, + url: url + '?transactionName=' + transactionName, data: {}, - success: function(data) + success: function(data, textStatus, request) { - if(data) + if(request.status === 200) { // name contains at least one keyword result = true; diff --git a/BudgetMasterServer/src/main/resources/templates/transactions/empty.ftl b/BudgetMasterServer/src/main/resources/templates/transactions/empty.ftl new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/BudgetMasterServer/src/main/resources/templates/transactions/newTransactionMacros.ftl b/BudgetMasterServer/src/main/resources/templates/transactions/newTransactionMacros.ftl index cd29623fe66e8744aeb246255b62dcf09eb3e94b..0f09255a75bde1a511858b2f5ab4fe57d498ff42 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="keywordCheckUrl" class="hidden" data-url="<@s.url '/transactions/keywordCheck'/>"></div> + <div id="keywordCheckUrl" class="hidden" data-url="<@s.url '/keywords/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 19f53460642a334ad919fb6e4ad70338c6b1cfc7..3ec5be4ee448b554d6dc4a32045a1b9737eeb2a1 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">${keyword}</span> + <span id="keyword">${transactionNameKeyword}</span> ${locale.getString("transaction.warning.name.keyword.description.part2")} </div> </div>