From f0025c9e275bcffc857a80e8b7822e66a74e51f3 Mon Sep 17 00:00:00 2001
From: Robert Goldmann <deadlocker@gmx.de>
Date: Sun, 17 Oct 2021 22:05:41 +0200
Subject: [PATCH] #577 - added route to fill transaction form from existing one

---
 .../transactions/TransactionController.java   | 35 +++++++++++++++++++
 1 file changed, 35 insertions(+)

diff --git a/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionController.java b/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionController.java
index 3733d4d5d..81db8cfd5 100644
--- a/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionController.java
+++ b/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionController.java
@@ -333,4 +333,39 @@ public class TransactionController extends BaseController
 
 		return redirectUrl;
 	}
+
+	@GetMapping("/{ID}/newFromExisting")
+	public String newFromExisting(Model model, @PathVariable("ID") Integer ID, @CookieValue("currentDate") String cookieDate)
+	{
+		Optional<Transaction> transactionOptional = transactionService.getRepository().findById(ID);
+		if(transactionOptional.isEmpty())
+		{
+			throw new ResourceNotFoundException();
+		}
+
+		Transaction existingTransaction = transactionOptional.get();
+
+		// select first transaction in order to provide correct start date for repeating transactions
+		if(existingTransaction.getRepeatingOption() != null)
+		{
+			existingTransaction = existingTransaction.getRepeatingOption().getReferringTransactions().get(0);
+		}
+
+		final Transaction newTransaction = new Transaction(existingTransaction);
+		newTransaction.setID(null);
+
+		if(newTransaction.getAccount().getAccountState() != AccountState.FULL_ACCESS)
+		{
+			newTransaction.setAccount(helpers.getCurrentAccountOrDefault());
+		}
+
+		DateTime date = dateService.getDateTimeFromCookie(cookieDate);
+		transactionService.prepareModelNewOrEdit(model, false, date, false, newTransaction, accountService.getAllActivatedAccountsAsc());
+
+		if(newTransaction.isTransfer())
+		{
+			return "transactions/newTransactionTransfer";
+		}
+		return "transactions/newTransactionNormal";
+	}
 }
\ No newline at end of file
-- 
GitLab