Remove LineCalculator.getItemTotalGrossAmount() to prevent confusion

This commit is contained in:
Sebastian Sieber
2020-11-18 15:00:19 +01:00
parent 4ba099c86d
commit f29c452a04
2 changed files with 33 additions and 31 deletions

View File

@@ -123,7 +123,7 @@ public class TransactionCalculator implements IAbsoluteValueProvider {
BigDecimal res = BigDecimal.ZERO; BigDecimal res = BigDecimal.ZERO;
for (IZUGFeRDExportableItem currentItem : trans.getZFItems()) { for (IZUGFeRDExportableItem currentItem : trans.getZFItems()) {
LineCalculator lc = new LineCalculator(currentItem); LineCalculator lc = new LineCalculator(currentItem);
res = res.add(lc.getItemTotalGrossAmount()); res = res.add(lc.getItemTotalNetAmount());
} }
return res; return res;
} }

View File

@@ -1,61 +1,63 @@
package org.mustangproject.ZUGFeRD; package org.mustangproject.ZUGFeRD;
import static java.math.BigDecimal.TEN;
import static java.math.BigDecimal.valueOf;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
import java.math.BigDecimal;
import org.junit.Test; import org.junit.Test;
public class LineCalculatorTest { public class LineCalculatorTest {
@Test @Test
public void testLineCalculator() { public void testLineCalculator_simpleAmounts_resultInValidVATAmount() {
final IZUGFeRDExportableProduct product = new IZUGFeRDExportableProductImpl().setVatPercent(BigDecimal.valueOf(16)); final IZUGFeRDExportableProduct product = new IZUGFeRDExportableProductImpl().setVatPercent(valueOf(16));
final IZUGFeRDExportableItem currentItem = new IZUGFeRDExportableItemImpl().setPrice(BigDecimal.valueOf(78.35)) final IZUGFeRDExportableItem currentItem = new IZUGFeRDExportableItemImpl().setPrice(valueOf(100))
.setQuantity(BigDecimal.valueOf(11)) .setQuantity(TEN)
.setProduct(product); .setProduct(product);
final LineCalculator calculator = new LineCalculator(currentItem); final LineCalculator calculator = new LineCalculator(currentItem);
assertEquals(BigDecimal.valueOf(78.35), calculator.getPrice().stripTrailingZeros()); assertEquals(valueOf(100).stripTrailingZeros(), calculator.getPrice().stripTrailingZeros());
assertEquals(BigDecimal.valueOf(861.85), calculator.getItemTotalNetAmount().stripTrailingZeros()); assertEquals(valueOf(1000).stripTrailingZeros(), calculator.getItemTotalNetAmount().stripTrailingZeros());
assertEquals(BigDecimal.valueOf(861.85), calculator.getItemTotalGrossAmount().stripTrailingZeros()); assertEquals(valueOf(160).stripTrailingZeros(), calculator.getItemTotalVATAmount().stripTrailingZeros());
assertEquals(BigDecimal.valueOf(137.896), calculator.getItemTotalVATAmount().stripTrailingZeros());
} }
@Test @Test
public void testLineCalculatorInclusiveAllowance() { public void testLineCalculatorInclusiveAllowance() {
final IZUGFeRDExportableProduct product = new IZUGFeRDExportableProductImpl().setVatPercent(BigDecimal.valueOf(16)); //This test failed with previous implementation. By rounding the totalVATAmount to 2 decimal places the result became wrong
final IZUGFeRDAllowanceCharge allowance = new IZUGFeRDAllowanceChargeImpl() final IZUGFeRDExportableProduct product = new IZUGFeRDExportableProductImpl().setVatPercent(valueOf(16));
.setTotalAmount(BigDecimal.valueOf(14.8730)); // 10 % discount on each item
final IZUGFeRDExportableItem currentItem = new IZUGFeRDExportableItemImpl().setPrice(BigDecimal.valueOf(148.73)) final IZUGFeRDAllowanceCharge allowance = new IZUGFeRDAllowanceChargeImpl().setTotalAmount(valueOf(14.8730));
.setQuantity(BigDecimal.valueOf(12))
final IZUGFeRDExportableItem currentItem = new IZUGFeRDExportableItemImpl().setPrice(valueOf(148.73))
.setQuantity(valueOf(12))
.setItemAllowances(new IZUGFeRDAllowanceCharge[] { allowance }) .setItemAllowances(new IZUGFeRDAllowanceCharge[] { allowance })
.setProduct(product); .setProduct(product);
final LineCalculator calculator = new LineCalculator(currentItem); final LineCalculator calculator = new LineCalculator(currentItem);
assertEquals(BigDecimal.valueOf(133.857), calculator.getPrice().stripTrailingZeros()); assertEquals(valueOf(133.857).stripTrailingZeros(), calculator.getPrice().stripTrailingZeros());
assertEquals(BigDecimal.valueOf(1606.28), calculator.getItemTotalNetAmount().stripTrailingZeros()); assertEquals(valueOf(1606.28).stripTrailingZeros(), calculator.getItemTotalNetAmount().stripTrailingZeros());
assertEquals(BigDecimal.valueOf(1606.28), calculator.getItemTotalGrossAmount().stripTrailingZeros()); assertEquals(valueOf(257.0048).stripTrailingZeros(), calculator.getItemTotalVATAmount().stripTrailingZeros());
assertEquals(BigDecimal.valueOf(257.0048), calculator.getItemTotalVATAmount().stripTrailingZeros());
} }
@Test @Test
public void testLineCalculatorInclusiveAllowanceAndCharge() { public void testLineCalculatorInclusiveAllowanceAndCharge() {
final IZUGFeRDExportableProduct product = new IZUGFeRDExportableProductImpl().setVatPercent(BigDecimal.valueOf(16)); final IZUGFeRDExportableProduct product = new IZUGFeRDExportableProductImpl().setVatPercent(valueOf(16));
final IZUGFeRDAllowanceCharge allowance = new IZUGFeRDAllowanceChargeImpl() // 10 % discount on each item
.setTotalAmount(BigDecimal.valueOf(14.8730)); final IZUGFeRDAllowanceCharge allowance = new IZUGFeRDAllowanceChargeImpl().setTotalAmount(valueOf(14.873));
final IZUGFeRDAllowanceCharge charge = new IZUGFeRDAllowanceChargeImpl() // 20 % charge
.setTotalAmount(BigDecimal.valueOf(14.8730)); final IZUGFeRDAllowanceCharge charge = new IZUGFeRDAllowanceChargeImpl().setTotalAmount(valueOf(29.746));
final IZUGFeRDExportableItem currentItem = new IZUGFeRDExportableItemImpl().setPrice(BigDecimal.valueOf(148.73)) final IZUGFeRDExportableItem currentItem = new IZUGFeRDExportableItemImpl().setPrice(valueOf(148.73))
.setQuantity(BigDecimal.valueOf(12)) .setQuantity(valueOf(12))
.setItemAllowances(new IZUGFeRDAllowanceCharge[] { allowance }) .setItemAllowances(new IZUGFeRDAllowanceCharge[] { allowance })
.setItemCharges(new IZUGFeRDAllowanceCharge[] { charge }) .setItemCharges(new IZUGFeRDAllowanceCharge[] { charge })
.setProduct(product); .setProduct(product);
final LineCalculator calculator = new LineCalculator(currentItem); final LineCalculator calculator = new LineCalculator(currentItem);
assertEquals(BigDecimal.valueOf(148.73), calculator.getPrice().stripTrailingZeros()); assertEquals(valueOf(163.603).stripTrailingZeros(), calculator.getPrice().stripTrailingZeros());
assertEquals(BigDecimal.valueOf(1784.76), calculator.getItemTotalNetAmount().stripTrailingZeros()); assertEquals(valueOf(1963.24).stripTrailingZeros(), calculator.getItemTotalNetAmount().stripTrailingZeros());
assertEquals(BigDecimal.valueOf(1784.76), calculator.getItemTotalGrossAmount().stripTrailingZeros()); assertEquals(valueOf(314.1184).stripTrailingZeros(), calculator.getItemTotalVATAmount().stripTrailingZeros());
assertEquals(BigDecimal.valueOf(285.5616), calculator.getItemTotalVATAmount().stripTrailingZeros());
} }
} }