package io.konik.calculation;
import io.konik.zugferd.Invoice;
import io.konik.zugferd.entity.trade.MonetarySummation;
import io.konik.zugferd.entity.trade.TradeTax;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.validation.constraints.NotNull;
import java.util.List;
import static io.konik.validation.AmountCalculator.*;
/**
* Recalculates invoice settlement {@link MonetarySummation} and replaces it in the {@link Invoice} object.
*/
public final class InvoiceMonetarySummationAndTradeTaxCompleter implements Correction<Invoice> {
protected static Logger log = LoggerFactory.getLogger(InvoiceMonetarySummationAndTradeTaxCompleter.class);
@Override
public Invoice correct(@NotNull final Invoice invoice) {
log.debug("Running InvoiceMonetarySummationCompleter...");
if (invoice.getTrade() != null && invoice.getTrade().getSettlement() != null) {
RecalculationResult result = recalculate(invoice);
MonetarySummation monetarySummation = result.getMonetarySummation();
invoice.getTrade().getSettlement().setMonetarySummation(monetarySummation);
TaxAggregator taxAggregator = result.getTaxAggregator();
List<TradeTax> taxes = taxAggregator.generateTradeTaxList(
invoice.getTrade().getSettlement().getCurrency(),
invoice.getTrade().getSettlement().getTradeTax()
);
invoice.getTrade().getSettlement().getTradeTax().clear();
for (TradeTax tradeTax : taxes) {
invoice.getTrade().getSettlement().addTradeTax(tradeTax);
}
}
return invoice;
}
}