001package io.konik.util;
002
003import com.neovisionaries.i18n.CurrencyCode;
004import io.konik.zugferd.entity.trade.MonetarySummation;
005import io.konik.zugferd.entity.trade.item.SpecifiedMonetarySummation;
006import io.konik.zugferd.unqualified.Amount;
007
008import java.math.RoundingMode;
009
010/**
011 * Helper functions for {@link io.konik.zugferd.entity.trade.MonetarySummation} class.
012 */
013public final class MonetarySummations {
014
015        /**
016         * Creates a new {@link MonetarySummation} with 0 (zero) {@link Amount} for every field.
017         * @param currencyCode
018         * @return
019         */
020        public static MonetarySummation newMonetarySummation(final CurrencyCode currencyCode) {
021                Amount zeroAmount = Amounts.zero(currencyCode);
022
023                MonetarySummation monetarySummation = new MonetarySummation();
024                monetarySummation.setAllowanceTotal(zeroAmount);
025                monetarySummation.setChargeTotal(zeroAmount);
026                monetarySummation.setDuePayable(zeroAmount);
027                monetarySummation.setGrandTotal(zeroAmount);
028                monetarySummation.setLineTotal(zeroAmount);
029                monetarySummation.setTaxBasisTotal(zeroAmount);
030                monetarySummation.setTaxTotal(zeroAmount);
031                monetarySummation.setTotalPrepaid(zeroAmount);
032
033                return monetarySummation;
034        }
035
036        /**
037         * Creates a new {@link SpecifiedMonetarySummation} with 0 (zero) {@link Amount} for every field.
038         * @param currencyCode
039         * @return
040         */
041        public static SpecifiedMonetarySummation newSpecifiedMonetarySummation(final CurrencyCode currencyCode) {
042                Amount zeroAmount = Amounts.zero(currencyCode);
043
044                SpecifiedMonetarySummation monetarySummation = new SpecifiedMonetarySummation();
045                monetarySummation.setLineTotal(zeroAmount);
046                monetarySummation.setTotalAllowanceCharge(zeroAmount);
047
048                return monetarySummation;
049        }
050
051        public static MonetarySummation newMonetarySummation(final MonetarySummation monetarySummation) {
052                MonetarySummation copy = new MonetarySummation();
053                copy.setChargeTotal(Amounts.copy(monetarySummation.getChargeTotal()));
054                copy.setDuePayable(Amounts.copy(monetarySummation.getDuePayable()));
055                copy.setLineTotal(Amounts.copy(monetarySummation.getLineTotal()));
056                copy.setTotalPrepaid(Amounts.copy(monetarySummation.getTotalPrepaid()));
057                copy.setGrandTotal(Amounts.copy(monetarySummation.getGrandTotal()));
058                copy.setAllowanceTotal(Amounts.copy(monetarySummation.getAllowanceTotal()));
059                copy.setTaxBasisTotal(Amounts.copy(monetarySummation.getTaxBasisTotal()));
060                copy.setTaxTotal(Amounts.copy(monetarySummation.getTaxTotal()));
061                return copy;
062        }
063
064        public static MonetarySummation precise(final MonetarySummation monetarySummation, int precision, RoundingMode roundingMode) {
065                MonetarySummation copy = newMonetarySummation(monetarySummation);
066                copy.setChargeTotal(Amounts.setPrecision(copy.getChargeTotal(), precision, roundingMode));
067                copy.setDuePayable(Amounts.setPrecision(copy.getDuePayable(), precision, roundingMode));
068                copy.setLineTotal(Amounts.setPrecision(copy.getLineTotal(), precision, roundingMode));
069                copy.setTotalPrepaid(Amounts.setPrecision(copy.getTotalPrepaid(), precision, roundingMode));
070                copy.setGrandTotal(Amounts.setPrecision(copy.getGrandTotal(), precision, roundingMode));
071                copy.setAllowanceTotal(Amounts.setPrecision(copy.getAllowanceTotal(), precision, roundingMode));
072                copy.setTaxBasisTotal(Amounts.setPrecision(copy.getTaxBasisTotal(), precision, roundingMode));
073                copy.setTaxTotal(Amounts.setPrecision(copy.getTaxTotal(), precision, roundingMode));
074                return copy;
075        }
076}