From 8969198de801420eb67f64110da04273e5016266 Mon Sep 17 00:00:00 2001 From: Robert Goldmann <deadlocker@gmx.de> Date: Sat, 17 Nov 2018 17:21:59 +0100 Subject: [PATCH] Fixed #355 - repeating transactions are imported multiple times (only export them once) --- .../services/DatabaseService.java | 42 ++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/src/main/java/de/deadlocker8/budgetmaster/services/DatabaseService.java b/src/main/java/de/deadlocker8/budgetmaster/services/DatabaseService.java index 489664120..33cc5b282 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/services/DatabaseService.java +++ b/src/main/java/de/deadlocker8/budgetmaster/services/DatabaseService.java @@ -5,6 +5,7 @@ import de.deadlocker8.budgetmaster.database.Database; import de.deadlocker8.budgetmaster.entities.Account; import de.deadlocker8.budgetmaster.entities.Category; import de.deadlocker8.budgetmaster.entities.Transaction; +import de.deadlocker8.budgetmaster.repeating.RepeatingOption; import org.joda.time.DateTime; import org.joda.time.format.ISODateTimeFormat; import org.slf4j.Logger; @@ -13,6 +14,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.lang.reflect.Type; +import java.util.ArrayList; import java.util.List; @Service @@ -78,8 +80,11 @@ public class DatabaseService List<Category> categories = categoryService.getRepository().findAll(); List<Account> accounts = accountService.getRepository().findAll(); List<Transaction> transactions = transactionService.getRepository().findAll(); + List<Transaction> filteredTransactions = filterRepeatingTransactions(transactions); + LOGGER.debug("Reduced " + transactions.size() + " transactions to " + filteredTransactions.size()); - Database database = new Database(categories, accounts, transactions); + Database database = new Database(categories, accounts, filteredTransactions); + LOGGER.debug("Created database JSON with " + database.getTransactions().size() + " transactions, " + database.getCategories().size() + " categories and " + database.getAccounts().size() + " accounts"); Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().setPrettyPrinting().registerTypeAdapter(DateTime.class, new JsonSerializer<DateTime>(){ @Override @@ -89,4 +94,39 @@ public class DatabaseService }).create(); return gson.toJson(database); } + + private List<Transaction> filterRepeatingTransactions(List<Transaction> transactions) + { + List<Transaction> filteredTransactions = new ArrayList<>(); + + for(Transaction transaction : transactions) + { + if(transaction.isRepeating()) + { + if(isRepeatingOptionInList(transaction.getRepeatingOption(), filteredTransactions)) + { + continue; + } + } + + filteredTransactions.add(transaction); + } + + return filteredTransactions; + } + + private boolean isRepeatingOptionInList(RepeatingOption repeatingOption, List<Transaction> transactions) + { + for(Transaction transaction : transactions) + { + if(transaction.isRepeating()) + { + if(transaction.getRepeatingOption().equals(repeatingOption)) + { + return true; + } + } + } + return false; + } } -- GitLab