Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ private String getSheetName(final MessageSource messageSource, final Locale loca

private List<String> getHeaders(final MessageSource messageSource, final Locale locale) {
return List.of(
messageSource.getMessage("bookings.shareholder.display-id", null, locale),
messageSource.getMessage("bookings.shareholder", null, locale),
messageSource.getMessage("account-statements.table.id", null, locale),
messageSource.getMessage("account-statements.table.date", null, locale),
Expand Down Expand Up @@ -50,6 +51,7 @@ public void export(final ExportTarget exportTarget) {

private List<Object> toGenericRow(final ExportRow exportRow) {
List<Object> row = new ArrayList<>();
row.add(exportRow.shareholderId());
row.add(exportRow.shareholderName());
row.add(exportRow.id() != null ? exportRow.id() : "");
row.add(exportRow.date());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
import de.nihas101.midas.accountstatement.runningtotal.RunningTotalAccountStatement;
import de.nihas101.midas.accountstatement.runningtotal.RunningTotalAccountStatements;
import de.nihas101.midas.accountstatement.service.RunningTotalAccountStatementService;
import de.nihas101.midas.export.sort.DisplayIdExportRowSort;
import de.nihas101.midas.export.sort.ExportRowSort;
import de.nihas101.midas.shareholders.dto.Shareholder;
import lombok.RequiredArgsConstructor;
import org.springframework.context.MessageSource;
Expand All @@ -12,12 +14,13 @@
import java.time.LocalDate;
import java.time.Year;
import java.util.Collection;
import java.util.Comparator;
import java.util.List;
import java.util.Locale;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

import static java.math.BigDecimal.ZERO;

@RequiredArgsConstructor
public class AccountStatementsRowExtractor {
private final List<Shareholder> shareholders;
Expand All @@ -26,23 +29,37 @@ public class AccountStatementsRowExtractor {
private final RunningTotalAccountStatementService runningTotalAccountStatementService;
private final MessageSource messageSource;
private final Locale locale;
private final ExportRowSort exportRowSort;

public AccountStatementsRowExtractor(
final List<Shareholder> shareholders,
final LocalDate startDate,
final LocalDate endDate,
final RunningTotalAccountStatementService runningTotalAccountStatementService,
final MessageSource messageSource,
final Locale locale
) {
this(
shareholders,
startDate,
endDate,
runningTotalAccountStatementService,
messageSource,
locale,
new DisplayIdExportRowSort()
);
}

public List<ExportRow> rows() {
return shareholders.stream()
.map(this::rowsForShareholder)
.map(shareholder -> IntStream.rangeClosed(startDate.getYear(), endDate.getYear())
.mapToObj(yearValue -> rowsForYear(shareholder, yearValue)).flatMap(Collection::stream)
.toList())
.flatMap(Collection::stream)
.sorted(Comparator.comparing(ExportRow::shareholderName).thenComparing(ExportRow::date))
.sorted(exportRowSort)
.collect(Collectors.toList());
}

private List<ExportRow> rowsForShareholder(final Shareholder shareholder) {
return IntStream.rangeClosed(startDate.getYear(), endDate.getYear())
.mapToObj(yearValue ->
rowsForYear(shareholder, yearValue)
).flatMap(Collection::stream)
.toList();
}

private List<ExportRow> rowsForYear(
final Shareholder shareholder,
final int yearValue
Expand All @@ -60,18 +77,27 @@ private List<ExportRow> rowsForYear(
.stream()
.filter(stmt -> isWithinRange(stmt.date()))
.filter(stmt -> !stmt.isHidden())
.map(stmt -> exportRow(shareholderName, stmt)).toList();
.map(stmt -> exportRow(
shareholder.getDisplayId(),
shareholderName,
stmt
)).toList();
}

private ExportRow exportRow(final String shareholderName, final RunningTotalAccountStatement stmt) {
private ExportRow exportRow(
final Integer shareholderId,
final String shareholderName,
final RunningTotalAccountStatement stmt
) {
final BigDecimal amount = stmt.amount().toBigDecimal();
final BigDecimal debit = amount.compareTo(BigDecimal.ZERO) < 0
final BigDecimal debit = amount.compareTo(ZERO) < 0
? amount.abs()
: BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP);
final BigDecimal credit = amount.compareTo(BigDecimal.ZERO) >= 0
: ZERO.setScale(2, RoundingMode.HALF_UP);
final BigDecimal credit = amount.compareTo(ZERO) >= 0
? amount
: BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP);
: ZERO.setScale(2, RoundingMode.HALF_UP);
return new ExportRow(
shareholderId,
shareholderName,
stmt.id(),
stmt.date(),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,18 @@
package de.nihas101.midas.export.accountstatement;

import de.nihas101.midas.export.sort.SortableExportRow;

import java.math.BigDecimal;
import java.time.LocalDate;

public record ExportRow(
Integer shareholderId,
String shareholderName,
Integer id,
LocalDate date,
String type,
BigDecimal debit,
BigDecimal credit,
BigDecimal balance
) {
) implements SortableExportRow {
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ private String getSheetName(final MessageSource messageSource, final Locale loca

private List<String> getHeaders(final MessageSource messageSource, final Locale locale) {
return List.of(
messageSource.getMessage("bookings.shareholder.display-id", null, locale),
messageSource.getMessage("bookings.shareholder", null, locale),
messageSource.getMessage("bookings.table.id", null, locale),
messageSource.getMessage("bookings.date", null, locale),
Expand Down Expand Up @@ -55,22 +56,23 @@ public void export(final ExportTarget exportTarget) {
);
}

private List<Object> toGenericRow(ExportRow row) {
final List<Object> list = new ArrayList<>();
list.add(row.shareholderName());
list.add(row.id() != null ? row.id() : "");
list.add(row.date());
list.add(row.comment());
private List<Object> toGenericRow(ExportRow exportRow) {
final List<Object> row = new ArrayList<>();
row.add(exportRow.shareholderId());
row.add(exportRow.shareholderName());
row.add(exportRow.id() != null ? exportRow.id() : "");
row.add(exportRow.date());
row.add(exportRow.comment());

// Map the amount to the correct column based on type, use 0.00 for others
list.add(getValueForType(row, BookingType.WITHDRAWAL.name()));
list.add(getValueForType(row, BookingType.TAX_PREVIOUS_YEAR.name()));
list.add(getValueForType(row, BookingType.TAX_CREDIT.name()));
list.add(getValueForType(row, BookingType.INTEREST.name()));
list.add(getValueForType(row, BookingType.COMPENSATION.name()));
list.add(getValueForType(row, BookingsRowExtractor.TYPE_OPENING_BALANCE));
row.add(getValueForType(exportRow, BookingType.WITHDRAWAL.name()));
row.add(getValueForType(exportRow, BookingType.TAX_PREVIOUS_YEAR.name()));
row.add(getValueForType(exportRow, BookingType.TAX_CREDIT.name()));
row.add(getValueForType(exportRow, BookingType.INTEREST.name()));
row.add(getValueForType(exportRow, BookingType.COMPENSATION.name()));
row.add(getValueForType(exportRow, BookingsRowExtractor.TYPE_OPENING_BALANCE));

return list;
return row;
}

private BigDecimal getValueForType(ExportRow row, String typeName) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package de.nihas101.midas.export.bookings;

import de.nihas101.midas.bookings.service.BookingsReader;
import de.nihas101.midas.export.sort.DisplayIdExportRowSort;
import de.nihas101.midas.export.sort.ExportRowSort;
import de.nihas101.midas.openingbalance.dto.OpeningBalance;
import de.nihas101.midas.openingbalance.service.OpeningBalanceService;
import de.nihas101.midas.shareholders.dto.Shareholder;
Expand All @@ -11,7 +13,6 @@
import java.time.Year;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Comparator;
import java.util.List;
import java.util.Locale;
import java.util.Optional;
Expand All @@ -29,13 +30,35 @@ public class BookingsRowExtractor {
private final OpeningBalanceService openingBalanceService;
private final MessageSource messageSource;
private final Locale locale;
private final ExportRowSort exportRowSort;

public BookingsRowExtractor(
final List<Shareholder> shareholders,
final LocalDate startDate,
final LocalDate endDate,
final BookingsReader bookingsReader,
final OpeningBalanceService openingBalanceService,
final MessageSource messageSource,
final Locale locale
) {
this(
shareholders,
startDate,
endDate,
bookingsReader,
openingBalanceService,
messageSource,
locale,
new DisplayIdExportRowSort()
);
}

public List<ExportRow> rows() {
return shareholders.stream()
.flatMap(shareholder -> IntStream.rangeClosed(startDate.getYear(), endDate.getYear())
.mapToObj(yearValue -> exportRows(shareholder, yearValue))
.flatMap(Collection::stream))
.sorted(Comparator.comparing(ExportRow::shareholderName).thenComparing(ExportRow::date))
.sorted(exportRowSort)
.toList();
}

Expand Down Expand Up @@ -67,6 +90,7 @@ private Optional<ExportRow> openingBalance(

return Optional.of(
new ExportRow(
shareholder.getDisplayId(),
shareholderName,
null,
openingBalanceDate,
Expand All @@ -88,6 +112,7 @@ private List<ExportRow> bookings(
.stream()
.map(b ->
new ExportRow(
shareholder.getDisplayId(),
shareholderName,
b.getId(),
b.getDate(),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,17 @@
package de.nihas101.midas.export.bookings;

import de.nihas101.midas.export.sort.SortableExportRow;

import java.math.BigDecimal;
import java.time.LocalDate;

public record ExportRow(
Integer shareholderId,
String shareholderName,
Integer id,
LocalDate date,
String comment,
String typeName,
BigDecimal amount
) {
) implements SortableExportRow {
}
10 changes: 9 additions & 1 deletion src/main/java/de/nihas101/midas/export/interest/ExportRow.java
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
package de.nihas101.midas.export.interest;

import de.nihas101.midas.export.sort.SortableExportRow;

import java.math.BigDecimal;
import java.time.LocalDate;

public record ExportRow(
Integer shareholderId,
String shareholderName,
LocalDate date,
BigDecimal transactions,
Expand All @@ -13,5 +16,10 @@ public record ExportRow(
Integer days,
BigDecimal interestNumber,
BigDecimal rate
) {
) implements SortableExportRow {

@Override
public Integer id() {
return 0;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -34,17 +34,18 @@ public void export(final ExportTarget exportTarget) {
}

private List<Object> toGenericRow(final ExportRow exportRow) {
List<Object> list = new ArrayList<>();
list.add(exportRow.shareholderName());
list.add(exportRow.date());
list.add(exportRow.transactions());
list.add(exportRow.transSH());
list.add(exportRow.balance());
list.add(exportRow.balanceSH());
list.add(exportRow.days());
list.add(exportRow.interestNumber());
list.add(exportRow.rate());
return list;
List<Object> row = new ArrayList<>();
row.add(exportRow.shareholderId());
row.add(exportRow.shareholderName());
row.add(exportRow.date());
row.add(exportRow.transactions());
row.add(exportRow.transSH());
row.add(exportRow.balance());
row.add(exportRow.balanceSH());
row.add(exportRow.days());
row.add(exportRow.interestNumber());
row.add(exportRow.rate());
return row;
}

private String getSheetName(final MessageSource messageSource, final Locale locale) {
Expand All @@ -53,6 +54,7 @@ private String getSheetName(final MessageSource messageSource, final Locale loca

private List<String> getHeaders(final MessageSource messageSource, final Locale locale) {
return List.of(
messageSource.getMessage("bookings.shareholder.display-id", null, locale),
messageSource.getMessage("bookings.shareholder", null, locale),
messageSource.getMessage("interest.table.month", null, locale),
messageSource.getMessage("interest.table.transactions", null, locale),
Expand Down
Loading
Loading