001package io.konik.calculation;
002
003import io.konik.util.Items;
004import io.konik.validation.AmountCalculator;
005import io.konik.zugferd.Invoice;
006import io.konik.zugferd.entity.trade.item.Item;
007import io.konik.zugferd.entity.trade.item.SpecifiedMonetarySummation;
008import org.slf4j.Logger;
009import org.slf4j.LoggerFactory;
010
011import javax.validation.constraints.NotNull;
012import java.util.List;
013
014/**
015 * Recalculates {@link SpecifiedMonetarySummation} for every {@link Item} and replaces old object with the new one.
016 */
017public final class ItemSpecifiedMonetarySummationCompleter implements Correction<Invoice> {
018
019        protected static Logger log = LoggerFactory.getLogger(ItemSpecifiedMonetarySummationCompleter.class);
020
021        @Override
022        public Invoice correct(@NotNull final Invoice invoice) {
023
024                log.debug("Running ItemSpecifiedMonetarySummationCompleter...");
025
026                if (invoice.getTrade() != null && invoice.getTrade().getItems() != null) {
027                        List<Item> items = Items.purchasableItemsOnly(invoice.getTrade().getItems());
028                        for (Item item : items) {
029                                if (item.getSettlement() != null) {
030                                        SpecifiedMonetarySummation monetarySummation = AmountCalculator.calculateSpecifiedMonetarySummation(item);
031                                        item.getSettlement().setMonetarySummation(monetarySummation);
032                                }
033                        }
034                }
035                return invoice;
036        }
037}