From 17e3e02768d2e2dbe26fd5519ec3f01dde067d40 Mon Sep 17 00:00:00 2001
From: tobias <thinkdifferent055@gmail.com>
Date: Sun, 25 Aug 2019 17:09:21 +0200
Subject: [PATCH] Fixed #477 - error while deleting default account with
 transactions

---
 .../budgetmaster/accounts/AccountService.java        | 10 +++++-----
 .../transactions/TransactionRepository.java          |  2 ++
 .../transactions/TransactionService.java             | 12 ++++++++++++
 .../unit/database/DatabaseImportTest.java            |  6 ++++++
 4 files changed, 25 insertions(+), 5 deletions(-)

diff --git a/src/main/java/de/deadlocker8/budgetmaster/accounts/AccountService.java b/src/main/java/de/deadlocker8/budgetmaster/accounts/AccountService.java
index 675ff4d24..2b8671db7 100644
--- a/src/main/java/de/deadlocker8/budgetmaster/accounts/AccountService.java
+++ b/src/main/java/de/deadlocker8/budgetmaster/accounts/AccountService.java
@@ -3,7 +3,7 @@ package de.deadlocker8.budgetmaster.accounts;
 import de.deadlocker8.budgetmaster.authentication.User;
 import de.deadlocker8.budgetmaster.authentication.UserRepository;
 import de.deadlocker8.budgetmaster.services.Resetable;
-import de.deadlocker8.budgetmaster.transactions.TransactionRepository;
+import de.deadlocker8.budgetmaster.transactions.TransactionService;
 import de.deadlocker8.budgetmaster.utils.Strings;
 import de.thecodelabs.utils.util.Localization;
 import org.slf4j.Logger;
@@ -19,14 +19,14 @@ public class AccountService implements Resetable
 {
 	private final Logger LOGGER = LoggerFactory.getLogger(this.getClass());
 	private AccountRepository accountRepository;
-	private TransactionRepository transactionRepository;
+	private TransactionService transactionService;
 	private UserRepository userRepository;
 
 	@Autowired
-	public AccountService(AccountRepository accountRepository, TransactionRepository transactionRepository, UserRepository userRepository)
+	public AccountService(AccountRepository accountRepository, TransactionService transactionService, UserRepository userRepository)
 	{
 		this.accountRepository = accountRepository;
-		this.transactionRepository = transactionRepository;
+		this.transactionService = transactionService;
 		this.userRepository = userRepository;
 
 		createDefaults();
@@ -47,7 +47,7 @@ public class AccountService implements Resetable
 	public void deleteAccount(int ID)
 	{
 		Account accountToDelete = accountRepository.findOne(ID);
-		transactionRepository.delete(accountToDelete.getReferringTransactions());
+		transactionService.deleteTransactionsWithAccount(accountToDelete);
 		accountToDelete.setReferringTransactions(new ArrayList<>());
 
 		List<Account> accounts = accountRepository.findAll();
diff --git a/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionRepository.java b/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionRepository.java
index 3510a0040..0e03741b5 100644
--- a/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionRepository.java
+++ b/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionRepository.java
@@ -31,4 +31,6 @@ public interface TransactionRepository extends JpaRepository<Transaction, Intege
 
 	@Query(value = "SELECT SUM(t.amount) FROM `transaction` as t WHERE t.transfer_account_id = ?1 AND t.date BETWEEN ?2 AND ?3", nativeQuery = true)
 	Integer getRestForTransferDestination(int accountID, String startDate, String endDate);
+
+	List<Transaction> findAllByTransferAccount(Account account);
 }
\ No newline at end of file
diff --git a/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionService.java b/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionService.java
index 9bce43ab8..f50a0005c 100644
--- a/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionService.java
+++ b/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionService.java
@@ -167,6 +167,18 @@ public class TransactionService implements Resetable
 		}
 	}
 
+	public void deleteTransactionsWithAccount(Account account) {
+		for(Transaction referringTransaction : account.getReferringTransactions())
+		{
+			deleteTransactionInRepo(referringTransaction.getID());
+		}
+
+		for(Transaction referringTransaction : transactionRepository.findAllByTransferAccount(account))
+		{
+			deleteTransactionInRepo(referringTransaction.getID());
+		}
+	}
+
 	@Override
 	public void createDefaults()
 	{
diff --git a/src/test/java/de/deadlocker8/budgetmaster/unit/database/DatabaseImportTest.java b/src/test/java/de/deadlocker8/budgetmaster/unit/database/DatabaseImportTest.java
index 13dccf4e3..459f7df76 100644
--- a/src/test/java/de/deadlocker8/budgetmaster/unit/database/DatabaseImportTest.java
+++ b/src/test/java/de/deadlocker8/budgetmaster/unit/database/DatabaseImportTest.java
@@ -292,6 +292,12 @@ public class DatabaseImportTest
 					return null;
 				}
 
+				@Override
+				public List<Transaction> findAllByTransferAccount(Account account)
+				{
+					return null;
+				}
+
 				@Override
 				public List<Transaction> findAll()
 				{
-- 
GitLab