Skip to content
Snippets Groups Projects
Commit 8969198d authored by Robert Goldmann's avatar Robert Goldmann
Browse files

Fixed #355 - repeating transactions are imported multiple times (only export them once)

parent 3b4bda41
No related branches found
No related tags found
No related merge requests found
Pipeline #310 passed
......@@ -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;
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment