fixed transaction order in CSV export
Build Docker Image / Docker-Build (push) Successful in 1m38s
Build Docker Image / Clean-Registry (push) Successful in 5s

Signed-off-by: Stephan Richter <s.richter@srsoftware.de>
This commit is contained in:
2026-08-16 23:29:14 +02:00
parent 94f11ea38f
commit 4af4bdbb85
2 changed files with 8 additions and 2 deletions
@@ -31,7 +31,7 @@ public interface AccountingService {
var keys = List.of(Field.DATE, Field.SOURCE, Field.AMOUNT, Field.DESTINATION, Field.PURPOSE,Field.TAGS); var keys = List.of(Field.DATE, Field.SOURCE, Field.AMOUNT, Field.DESTINATION, Field.PURPOSE,Field.TAGS);
var sb = new StringBuilder(); var sb = new StringBuilder();
keys.stream().map(Translatable::t).forEach(field -> sb.append(field).append(";")); keys.stream().map(Translatable::t).forEach(field -> sb.append(field).append(";"));
transactions.stream().sorted(Comparator.comparing(Transaction::id)) transactions.stream().sorted()
.map(transaction -> transaction.csvLine(users, keys,";")) .map(transaction -> transaction.csvLine(users, keys,";"))
.forEach(line -> sb.append("\n").append(line)); .forEach(line -> sb.append("\n").append(line));
return sb.toString().getBytes(UTF_8); return sb.toString().getBytes(UTF_8);
@@ -12,7 +12,7 @@ import java.time.ZoneOffset;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
public class Transaction extends UmbrellaObject { public class Transaction extends UmbrellaObject implements Comparable<Transaction>{
private final long accountId; private final long accountId;
private LocalDateTime date; private LocalDateTime date;
private IdOrString source, destination; private IdOrString source, destination;
@@ -51,6 +51,12 @@ public class Transaction extends UmbrellaObject {
return this; return this;
} }
@Override
public int compareTo(Transaction other) {
var order = date.compareTo(other.date);
return order == 0 ? Long.compare(id(), other.id()) : order;
}
public String csvLine(Map<Long, UmbrellaUser> users, List<String> keys, String delimiter) { public String csvLine(Map<Long, UmbrellaUser> users, List<String> keys, String delimiter) {
return keys.stream().map(this::get).map(o -> resolveUsers(users,o)).map(o -> quote(o, delimiter)).collect(Collectors.joining(delimiter)); return keys.stream().map(this::get).map(o -> resolveUsers(users,o)).map(o -> quote(o, delimiter)).collect(Collectors.joining(delimiter));
} }