001package io.konik.calculation; 002 003import io.konik.zugferd.Invoice; 004import io.konik.zugferd.entity.trade.MonetarySummation; 005import io.konik.zugferd.entity.trade.TradeTax; 006import org.slf4j.Logger; 007import org.slf4j.LoggerFactory; 008 009import javax.validation.constraints.NotNull; 010import java.util.List; 011 012import static io.konik.validation.AmountCalculator.*; 013 014/** 015 * Recalculates invoice settlement {@link MonetarySummation} and replaces it in the {@link Invoice} object. 016 */ 017public final class InvoiceMonetarySummationAndTradeTaxCompleter implements Correction<Invoice> { 018 019 protected static Logger log = LoggerFactory.getLogger(InvoiceMonetarySummationAndTradeTaxCompleter.class); 020 021 @Override 022 public Invoice correct(@NotNull final Invoice invoice) { 023 024 log.debug("Running InvoiceMonetarySummationCompleter..."); 025 026 if (invoice.getTrade() != null && invoice.getTrade().getSettlement() != null) { 027 RecalculationResult result = recalculate(invoice); 028 MonetarySummation monetarySummation = result.getMonetarySummation(); 029 invoice.getTrade().getSettlement().setMonetarySummation(monetarySummation); 030 031 TaxAggregator taxAggregator = result.getTaxAggregator(); 032 List<TradeTax> taxes = taxAggregator.generateTradeTaxList( 033 invoice.getTrade().getSettlement().getCurrency(), 034 invoice.getTrade().getSettlement().getTradeTax() 035 ); 036 037 invoice.getTrade().getSettlement().getTradeTax().clear(); 038 039 for (TradeTax tradeTax : taxes) { 040 invoice.getTrade().getSettlement().addTradeTax(tradeTax); 041 } 042 043 } 044 return invoice; 045 } 046}