From 66c6dfa228ddc0e5bd848f042f5fb91ca95bc69d Mon Sep 17 00:00:00 2001
From: Robert Goldmann <deadlocker@gmx.de>
Date: Sun, 2 Aug 2020 22:56:30 +0200
Subject: [PATCH] #535 - added new field "isExpenditure" for Transaction and
 Template

---
 .../budgetmaster/templates/Template.java      | 39 +++++++++++++------
 .../templates/TemplateController.java         | 24 ++++++------
 .../templates/TemplateService.java            |  3 +-
 .../transactions/Transaction.java             | 24 +++++++++++-
 .../transactions/TransactionBase.java         |  4 ++
 .../transactions/TransactionController.java   | 27 ++++++-------
 .../transactions/TransactionService.java      | 12 ++++--
 .../templates/templates/newTemplate.ftl       |  2 +-
 .../transactions/newTransactionMacros.ftl     | 11 ++++--
 .../transactions/newTransactionNormal.ftl     |  2 +-
 .../transactions/newTransactionRepeating.ftl  |  2 +-
 .../transactions/newTransactionTransfer.ftl   |  2 +-
 12 files changed, 101 insertions(+), 51 deletions(-)

diff --git a/src/main/java/de/deadlocker8/budgetmaster/templates/Template.java b/src/main/java/de/deadlocker8/budgetmaster/templates/Template.java
index 74e4478ce..7eaa176fe 100644
--- a/src/main/java/de/deadlocker8/budgetmaster/templates/Template.java
+++ b/src/main/java/de/deadlocker8/budgetmaster/templates/Template.java
@@ -26,6 +26,9 @@ public class Template implements TransactionBase
 	@Expose
 	private Integer amount;
 
+	@Expose
+	private Boolean isExpenditure;
+
 	@ManyToOne
 	@Expose
 	private Account account;
@@ -62,6 +65,7 @@ public class Template implements TransactionBase
 		this.ID = template.getID();
 		this.templateName = template.getTemplateName();
 		this.amount = template.getAmount();
+		this.isExpenditure = template.isExpenditure();
 		this.account = template.getAccount();
 		this.category = template.getCategory();
 		this.name = template.getName();
@@ -74,6 +78,12 @@ public class Template implements TransactionBase
 	{
 		this.templateName = templateName;
 		this.amount = transaction.getAmount();
+		this.isExpenditure = transaction.isExpenditure();
+		if(this.isExpenditure == null)
+		{
+			this.isExpenditure = true;
+		}
+
 		this.account = transaction.getAccount();
 		this.category = transaction.getCategory();
 		this.name = transaction.getName();
@@ -119,6 +129,21 @@ public class Template implements TransactionBase
 		this.amount = amount;
 	}
 
+	public Boolean isExpenditure()
+	{
+		return isExpenditure;
+	}
+
+	public Boolean getExpenditure()
+	{
+		return isExpenditure;
+	}
+
+	public void setExpenditure(Boolean expenditure)
+	{
+		isExpenditure = expenditure;
+	}
+
 	public Account getAccount()
 	{
 		return account;
@@ -184,16 +209,6 @@ public class Template implements TransactionBase
 		return transferAccount != null;
 	}
 
-	public boolean isPayment()
-	{
-		if(this.amount == null)
-		{
-			return true;
-		}
-
-		return this.amount <= 0;
-	}
-
 	@Override
 	public String toString()
 	{
@@ -201,6 +216,7 @@ public class Template implements TransactionBase
 				"ID=" + ID +
 				", templateName='" + templateName + '\'' +
 				", amount=" + amount +
+				", isExpenditure=" + isExpenditure +
 				", category=" + category +
 				", name='" + name + '\'' +
 				", description='" + description + '\'' +
@@ -237,6 +253,7 @@ public class Template implements TransactionBase
 		return Objects.equals(ID, template.ID) &&
 				Objects.equals(templateName, template.templateName) &&
 				Objects.equals(amount, template.amount) &&
+				Objects.equals(isExpenditure, template.isExpenditure) &&
 				Objects.equals(account, template.account) &&
 				Objects.equals(category, template.category) &&
 				Objects.equals(name, template.name) &&
@@ -248,6 +265,6 @@ public class Template implements TransactionBase
 	@Override
 	public int hashCode()
 	{
-		return Objects.hash(ID, templateName, amount, account, category, name, description, tags, transferAccount);
+		return Objects.hash(ID, templateName, amount, isExpenditure, account, category, name, description, tags, transferAccount);
 	}
 }
diff --git a/src/main/java/de/deadlocker8/budgetmaster/templates/TemplateController.java b/src/main/java/de/deadlocker8/budgetmaster/templates/TemplateController.java
index 15a551c5e..972a4e6cc 100644
--- a/src/main/java/de/deadlocker8/budgetmaster/templates/TemplateController.java
+++ b/src/main/java/de/deadlocker8/budgetmaster/templates/TemplateController.java
@@ -72,13 +72,12 @@ public class TemplateController extends BaseController
 	@PostMapping(value = "/templates/fromTransaction")
 	public String postFromTransaction(@RequestParam(value = "templateName") String templateName,
 									  @ModelAttribute("NewTransaction") Transaction transaction,
-									  @RequestParam(value = "isPayment", required = false) boolean isPayment,
 									  @RequestParam(value = "includeCategory") Boolean includeCategory,
 									  @RequestParam(value = "includeAccount") Boolean includeAccount)
 	{
 		if(transaction.getAmount() != null)
 		{
-			transactionService.handleAmount(transaction, isPayment);
+			transactionService.handleAmount(transaction);
 		}
 		transactionService.handleTags(transaction);
 
@@ -128,14 +127,13 @@ public class TemplateController extends BaseController
 
 		templateService.prepareTemplateForNewTransaction(template, true);
 
-		boolean isPayment = true;
-		if(template.getAmount() != null)
+		if(template.getAmount() == null)
 		{
-			isPayment = template.getAmount() <= 0;
+			template.setExpenditure(true);
 		}
 
 		final DateTime date = dateService.getDateTimeFromCookie(cookieDate);
-		transactionService.prepareModelNewOrEdit(model, false, date, template, isPayment, accountService.getAllAccountsAsc());
+		transactionService.prepareModelNewOrEdit(model, false, date, template, accountService.getAllAccountsAsc());
 
 		if(template.isTransfer())
 		{
@@ -149,14 +147,13 @@ public class TemplateController extends BaseController
 	{
 		final Template emptyTemplate = new Template();
 		templateService.prepareTemplateForNewTransaction(emptyTemplate, false);
-		templateService.prepareModelNewOrEdit(model, false, emptyTemplate, true, accountService.getAllAccountsAsc());
+		templateService.prepareModelNewOrEdit(model, false, emptyTemplate, accountService.getAllAccountsAsc());
 		return "templates/newTemplate";
 	}
 
 	@PostMapping(value = "/templates/newTemplate")
 	public String post(Model model,
 					   @ModelAttribute("NewTemplate") Template template, BindingResult bindingResult,
-					   @RequestParam(value = "isPayment", required = false) boolean isPayment,
 					   @RequestParam(value = "includeAccount", required = false) boolean includeAccount,
 					   @RequestParam(value = "includeTransferAccount", required = false) boolean includeTransferAccount)
 	{
@@ -176,16 +173,21 @@ public class TemplateController extends BaseController
 		TemplateValidator templateValidator = new TemplateValidator(previousTemplateName, templateService.getExistingTemplateNames());
 		templateValidator.validate(template, bindingResult);
 
+		if(template.isExpenditure() == null)
+		{
+			template.setExpenditure(false);
+		}
+
 		if(template.getAmount() != null)
 		{
-			transactionService.handleAmount(template, isPayment);
+			transactionService.handleAmount(template);
 		}
 		transactionService.handleTags(template);
 
 		if(bindingResult.hasErrors())
 		{
 			model.addAttribute("error", bindingResult);
-			templateService.prepareModelNewOrEdit(model, template.getID() != null, template, isPayment, accountService.getAllAccountsAsc());
+			templateService.prepareModelNewOrEdit(model, template.getID() != null, template, accountService.getAllAccountsAsc());
 			return "templates/newTemplate";
 		}
 
@@ -214,7 +216,7 @@ public class TemplateController extends BaseController
 
 		Template template = templateOptional.get();
 		templateService.prepareTemplateForNewTransaction(template, false);
-		templateService.prepareModelNewOrEdit(model, true, template, template.isPayment(), accountService.getAllAccountsAsc());
+		templateService.prepareModelNewOrEdit(model, true, template, accountService.getAllAccountsAsc());
 
 		return "templates/newTemplate";
 	}
diff --git a/src/main/java/de/deadlocker8/budgetmaster/templates/TemplateService.java b/src/main/java/de/deadlocker8/budgetmaster/templates/TemplateService.java
index a71eb3239..b11fd292d 100644
--- a/src/main/java/de/deadlocker8/budgetmaster/templates/TemplateService.java
+++ b/src/main/java/de/deadlocker8/budgetmaster/templates/TemplateService.java
@@ -89,14 +89,13 @@ public class TemplateService implements Resetable
 		}
 	}
 
-	public void prepareModelNewOrEdit(Model model, boolean isEdit, TransactionBase item, boolean isPayment, List<Account> accounts)
+	public void prepareModelNewOrEdit(Model model, boolean isEdit, TransactionBase item, List<Account> accounts)
 	{
 		model.addAttribute("isEdit", isEdit);
 		model.addAttribute("categories", categoryService.getAllCategories());
 		model.addAttribute("accounts", accounts);
 		model.addAttribute("template", item);
 		model.addAttribute("settings", settingsService.getSettings());
-		model.addAttribute("isPayment", isPayment);
 		model.addAttribute("suggestionsJSON", GSON.toJson(new ArrayList<String>()));
 	}
 
diff --git a/src/main/java/de/deadlocker8/budgetmaster/transactions/Transaction.java b/src/main/java/de/deadlocker8/budgetmaster/transactions/Transaction.java
index 12f7dbf54..0c950ba7c 100644
--- a/src/main/java/de/deadlocker8/budgetmaster/transactions/Transaction.java
+++ b/src/main/java/de/deadlocker8/budgetmaster/transactions/Transaction.java
@@ -20,9 +20,13 @@ public class Transaction implements TransactionBase
 	@GeneratedValue(strategy = GenerationType.IDENTITY)
 	@Expose
 	private Integer ID;
+
 	@Expose
 	private Integer amount;
 
+	@Expose
+	private Boolean isExpenditure;
+
 	@DateTimeFormat(pattern = "dd.MM.yyyy")
 	@Expose
 	private DateTime date;
@@ -66,6 +70,7 @@ public class Transaction implements TransactionBase
 	{
 		this.ID = transaction.getID();
 		this.amount = transaction.getAmount();
+		this.isExpenditure = transaction.isExpenditure();
 		this.date = transaction.getDate();
 		this.account = transaction.getAccount();
 		this.category = transaction.getCategory();
@@ -96,6 +101,21 @@ public class Transaction implements TransactionBase
 		this.amount = amount;
 	}
 
+	public Boolean isExpenditure()
+	{
+		return isExpenditure;
+	}
+
+	public Boolean getExpenditure()
+	{
+		return isExpenditure;
+	}
+
+	public void setExpenditure(Boolean expenditure)
+	{
+		isExpenditure = expenditure;
+	}
+
 	public DateTime getDate()
 	{
 		return date;
@@ -197,6 +217,7 @@ public class Transaction implements TransactionBase
 		String value = "Transaction{" +
 				"ID=" + ID +
 				", amount=" + amount +
+				", isExpenditure=" + isExpenditure +
 				", date=" + date +
 				", account=Account[ID=" + account.getID() + ", name=" + account.getName() + "]" +
 				", category=" + category +
@@ -225,6 +246,7 @@ public class Transaction implements TransactionBase
 		Transaction transaction = (Transaction) o;
 		return Objects.equals(ID, transaction.ID) &&
 				Objects.equals(amount, transaction.amount) &&
+				Objects.equals(isExpenditure, transaction.isExpenditure) &&
 				Objects.equals(date, transaction.date) &&
 				Objects.equals(account, transaction.account) &&
 				Objects.equals(category, transaction.category) &&
@@ -238,6 +260,6 @@ public class Transaction implements TransactionBase
 	@Override
 	public int hashCode()
 	{
-		return Objects.hash(ID, amount, date, account, category, name, description, tags, repeatingOption, transferAccount);
+		return Objects.hash(ID, amount, isExpenditure, date, account, category, name, description, tags, repeatingOption, transferAccount);
 	}
 }
diff --git a/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionBase.java b/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionBase.java
index 103e3ca0b..06b7bdb74 100644
--- a/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionBase.java
+++ b/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionBase.java
@@ -12,6 +12,10 @@ public interface TransactionBase
 
 	void setAmount(Integer amount);
 
+	Boolean isExpenditure();
+
+	void setExpenditure(Boolean isExpenditure);
+
 	Category getCategory();
 
 	List<Tag> getTags();
diff --git a/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionController.java b/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionController.java
index bd7fb6366..acb0b578b 100644
--- a/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionController.java
+++ b/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionController.java
@@ -107,27 +107,26 @@ public class TransactionController extends BaseController
 		DateTime date = dateService.getDateTimeFromCookie(cookieDate);
 		Transaction emptyTransaction = new Transaction();
 		emptyTransaction.setCategory(categoryService.getRepository().findByType(CategoryType.NONE));
-		transactionService.prepareModelNewOrEdit(model, false, date, emptyTransaction, true, accountService.getAllAccountsAsc());
+		transactionService.prepareModelNewOrEdit(model, false, date, emptyTransaction, accountService.getAllAccountsAsc());
 		return "transactions/newTransaction" + StringUtils.capitalize(type);
 	}
 
 	@PostMapping(value = "/transactions/newTransaction/normal")
 	public String postNormal(Model model,
 							 @CookieValue("currentDate") String cookieDate,
-							 @ModelAttribute("NewTransaction") Transaction transaction, BindingResult bindingResult,
-							 @RequestParam(value = "isPayment", required = false) boolean isPayment)
+							 @ModelAttribute("NewTransaction") Transaction transaction, BindingResult bindingResult)
 	{
 		DateTime date = dateService.getDateTimeFromCookie(cookieDate);
 
 		TransactionValidator transactionValidator = new TransactionValidator();
 		transactionValidator.validate(transaction, bindingResult);
 
-		transactionService.handleAmount(transaction, isPayment);
+		transactionService.handleAmount(transaction);
 		transactionService.handleTags(transaction);
 
 		transaction.setRepeatingOption(null);
 
-		return handleRedirect(model, transaction.getID() != null, transaction, bindingResult, date, "transactions/newTransactionNormal", isPayment);
+		return handleRedirect(model, transaction.getID() != null, transaction, bindingResult, date, "transactions/newTransactionNormal");
 	}
 
 	@SuppressWarnings("ConstantConditions")
@@ -135,7 +134,6 @@ public class TransactionController extends BaseController
 	public String postRepeating(Model model, @CookieValue("currentDate") String cookieDate,
 								@ModelAttribute("NewTransaction") Transaction transaction, BindingResult bindingResult,
 								@RequestParam(value = "isRepeating", required = false) boolean isRepeating,
-								@RequestParam(value = "isPayment", required = false) boolean isPayment,
 								@RequestParam(value = "repeatingModifierNumber", required = false) int repeatingModifierNumber,
 								@RequestParam(value = "repeatingModifierType", required = false) String repeatingModifierType,
 								@RequestParam(value = "repeatingEndType", required = false) String repeatingEndType,
@@ -152,7 +150,7 @@ public class TransactionController extends BaseController
 		TransactionValidator transactionValidator = new TransactionValidator();
 		transactionValidator.validate(transaction, bindingResult);
 
-		transactionService.handleAmount(transaction, isPayment);
+		transactionService.handleAmount(transaction);
 		transactionService.handleTags(transaction);
 
 		RepeatingOption repeatingOption;
@@ -178,34 +176,33 @@ public class TransactionController extends BaseController
 		repeatingOption = new RepeatingOption(transaction.getDate(), repeatingModifier, repeatingEnd);
 		transaction.setRepeatingOption(repeatingOption);
 
-		return handleRedirect(model, transaction.getID() != null, transaction, bindingResult, date, "transactions/newTransactionRepeating", isPayment);
+		return handleRedirect(model, transaction.getID() != null, transaction, bindingResult, date, "transactions/newTransactionRepeating");
 	}
 
 	@PostMapping(value = "/transactions/newTransaction/transfer")
 	public String postTransfer(Model model,
 							   @CookieValue("currentDate") String cookieDate,
-							   @ModelAttribute("NewTransaction") Transaction transaction, BindingResult bindingResult,
-							   @RequestParam(value = "isPayment", required = false) boolean isPayment)
+							   @ModelAttribute("NewTransaction") Transaction transaction, BindingResult bindingResult)
 	{
 		DateTime date = dateService.getDateTimeFromCookie(cookieDate);
 
 		TransactionValidator transactionValidator = new TransactionValidator();
 		transactionValidator.validate(transaction, bindingResult);
 
-		transactionService.handleAmount(transaction, isPayment);
+		transactionService.handleAmount(transaction);
 		transactionService.handleTags(transaction);
 
 		transaction.setRepeatingOption(null);
 
-		return handleRedirect(model, transaction.getID() != null, transaction, bindingResult, date, "transactions/newTransactionTransfer", isPayment);
+		return handleRedirect(model, transaction.getID() != null, transaction, bindingResult, date, "transactions/newTransactionTransfer");
 	}
 
-	private String handleRedirect(Model model, boolean isEdit, @ModelAttribute("NewTransaction") Transaction transaction, BindingResult bindingResult, DateTime date, String url, boolean isPayment)
+	private String handleRedirect(Model model, boolean isEdit, @ModelAttribute("NewTransaction") Transaction transaction, BindingResult bindingResult, DateTime date, String url)
 	{
 		if(bindingResult.hasErrors())
 		{
 			model.addAttribute("error", bindingResult);
-			transactionService.prepareModelNewOrEdit(model, isEdit, date, transaction, isPayment, accountService.getAllAccountsAsc());
+			transactionService.prepareModelNewOrEdit(model, isEdit, date, transaction, accountService.getAllAccountsAsc());
 			return url;
 		}
 
@@ -231,7 +228,7 @@ public class TransactionController extends BaseController
 		}
 
 		DateTime date = dateService.getDateTimeFromCookie(cookieDate);
-		transactionService.prepareModelNewOrEdit(model, true, date, transaction, transaction.getAmount() <= 0, accountService.getAllAccountsAsc());
+		transactionService.prepareModelNewOrEdit(model, true, date, transaction, accountService.getAllAccountsAsc());
 
 		if(transaction.isRepeating())
 		{
diff --git a/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionService.java b/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionService.java
index 2b9794752..6b4fd35b3 100644
--- a/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionService.java
+++ b/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionService.java
@@ -221,14 +221,19 @@ public class TransactionService implements Resetable
 	{
 	}
 
-	public void handleAmount(TransactionBase item, boolean isPayment)
+	public void handleAmount(TransactionBase item)
 	{
+		if(item.isExpenditure() == null)
+		{
+			item.setExpenditure(false);
+		}
+
 		if(item.getAmount() == null)
 		{
 			item.setAmount(0);
 		}
 
-		if(isPayment)
+		if(item.isExpenditure())
 		{
 			item.setAmount(-Math.abs(item.getAmount()));
 		}
@@ -279,7 +284,7 @@ public class TransactionService implements Resetable
 		return item;
 	}
 
-	public void prepareModelNewOrEdit(Model model, boolean isEdit, DateTime date, TransactionBase item, boolean isPayment, List<Account> accounts)
+	public void prepareModelNewOrEdit(Model model, boolean isEdit, DateTime date, TransactionBase item, List<Account> accounts)
 	{
 		model.addAttribute("isEdit", isEdit);
 		model.addAttribute("currentDate", date);
@@ -287,7 +292,6 @@ public class TransactionService implements Resetable
 		model.addAttribute("accounts", accounts);
 		model.addAttribute("transaction", item);
 		model.addAttribute("settings", settingsService.getSettings());
-		model.addAttribute("isPayment", isPayment);
 
 		final List<Transaction> allByOrderByDateDesc = getRepository().findAllByOrderByDateDesc();
 		final List<String> nameSuggestions = allByOrderByDateDesc.stream()
diff --git a/src/main/resources/templates/templates/newTemplate.ftl b/src/main/resources/templates/templates/newTemplate.ftl
index 9a6f030b9..f26697165 100644
--- a/src/main/resources/templates/templates/newTemplate.ftl
+++ b/src/main/resources/templates/templates/newTemplate.ftl
@@ -29,7 +29,7 @@
                         <input type="hidden" name="ID" value="<#if template.getID()??>${template.getID()?c}</#if>">
 
                         <#-- isPayment switch -->
-                        <@newTransactionMacros.isExpenditureSwitch template isPayment/>
+                        <@newTransactionMacros.isExpenditureSwitch template/>
 
                         <#-- template name -->
                         <@templateFunctions.templateNameInput template/>
diff --git a/src/main/resources/templates/transactions/newTransactionMacros.ftl b/src/main/resources/templates/transactions/newTransactionMacros.ftl
index 0a01dbf27..bc9518ab6 100644
--- a/src/main/resources/templates/transactions/newTransactionMacros.ftl
+++ b/src/main/resources/templates/transactions/newTransactionMacros.ftl
@@ -1,8 +1,13 @@
 <#import "/spring.ftl" as s>
 <#import "../helpers/validation.ftl" as validation>
 
-<#macro isExpenditureSwitch transaction isPayment>
-    <#if isPayment>
+<#macro isExpenditureSwitch transaction>
+    <#assign isExpenditure = true/>
+    <#if transaction.isExpenditure()??>
+        <#assign isExpenditure=transaction.isExpenditure()/>
+    </#if>
+
+    <#if isExpenditure>
         <#assign colorButtonIncome = "budgetmaster-grey budgetmaster-text-isPayment">
         <#assign colorButtonExpenditure = "budgetmaster-red">
     <#else>
@@ -10,7 +15,7 @@
         <#assign colorButtonExpenditure = "budgetmaster-grey budgetmaster-text-isPayment">
     </#if>
 
-    <input type="hidden" name="isPayment" id="input-isPayment" value="${isPayment?c}">
+    <input type="hidden" name="isExpenditure" id="input-isPayment" value="${isExpenditure?c}">
 
     <div class="row">
         <div class="col s12 center-align">
diff --git a/src/main/resources/templates/transactions/newTransactionNormal.ftl b/src/main/resources/templates/transactions/newTransactionNormal.ftl
index 57aac21ec..fc4e34dae 100644
--- a/src/main/resources/templates/transactions/newTransactionNormal.ftl
+++ b/src/main/resources/templates/transactions/newTransactionNormal.ftl
@@ -31,7 +31,7 @@
                         <input type="hidden" name="ID" value="<#if transaction.class.simpleName == "Transaction" && transaction.getID()??>${transaction.getID()?c}</#if>">
 
                         <#-- isPayment switch -->
-                        <@newTransactionMacros.isExpenditureSwitch transaction isPayment/>
+                        <@newTransactionMacros.isExpenditureSwitch transaction/>
 
                         <#-- name -->
                         <@newTransactionMacros.transactionName transaction suggestionsJSON/>
diff --git a/src/main/resources/templates/transactions/newTransactionRepeating.ftl b/src/main/resources/templates/transactions/newTransactionRepeating.ftl
index 1fbd570c8..6c30e5862 100644
--- a/src/main/resources/templates/transactions/newTransactionRepeating.ftl
+++ b/src/main/resources/templates/transactions/newTransactionRepeating.ftl
@@ -29,7 +29,7 @@
                         <input type="hidden" name="isRepeating" value="${transaction.isRepeating()?c}">
 
                         <#-- isPayment switch -->
-                        <@newTransactionMacros.isExpenditureSwitch transaction isPayment/>
+                        <@newTransactionMacros.isExpenditureSwitch transaction/>
 
                         <#-- name -->
                         <@newTransactionMacros.transactionName transaction suggestionsJSON/>
diff --git a/src/main/resources/templates/transactions/newTransactionTransfer.ftl b/src/main/resources/templates/transactions/newTransactionTransfer.ftl
index 66329a093..a4bbc948d 100644
--- a/src/main/resources/templates/transactions/newTransactionTransfer.ftl
+++ b/src/main/resources/templates/transactions/newTransactionTransfer.ftl
@@ -29,7 +29,7 @@
                         <!-- only set ID for transactions not templates, otherwise the input is filled with the template ID and saving the transaction
                         may then override an existing transactions if the ID is also already used in transactions table -->
                         <input type="hidden" name="ID" value="<#if transaction.class.simpleName == "Transaction" && transaction.getID()??>${transaction.getID()?c}</#if>">
-                        <input type="hidden" name="isPayment" value="true">
+                        <input type="hidden" name="isExpenditure" value="true">
 
                         <#-- name -->
                         <@newTransactionMacros.transactionName transaction suggestionsJSON/>
-- 
GitLab