Correcting calculation for extended_fremdwaehrung (issue #764), now the following errors arise:
[ERROR] CalculationTest.testTotalCalculatorGrandTotalRounding:223 expected:<101.86> but was:<104.04> [ERROR] DeSerializationTest.testItemAllowances:398 expected:<19.52> but was:<18.33> [ERROR] ZF2PushTest.testAllowancesExport:648 expected:<[4046].00> but was:<[10829].00> [ERROR] ZF2PushTest.testItemChargesAllowancesExport:286 expected:<1[9.52]> but was:<1[8.33]> [ERROR] ZF2PushTest.testPushEdge:609 ParseException should not be raised [ERROR] ZF2ZInvoiceImporterTest.testEdgeInvoiceImport:179 [ERROR] ZF2ZInvoiceImporterTest.testItemAllowancesChargesImport:265 [ERROR] CalculationTest.testLineCalculatorInclusiveAllowance:55 » Arithmetic Non-terminating decimal expansion; no exact representable decimal result. [ERROR] CalculationTest.testLineCalculatorInclusiveAllowanceAndCharge:75 » Arithmetic Non-terminating decimal expansion; no exact representable decimal result.
This commit is contained in:
@@ -121,10 +121,10 @@ public class Charge implements IZUGFeRDAllowanceCharge {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public BigDecimal getTotalAmount(IAbsoluteValueProvider currentItem) {
|
public BigDecimal getTotalAmount(IAbsoluteValueProvider currentItem) {
|
||||||
if (percent!=null) {
|
if(totalAmount != null) {
|
||||||
return currentItem.getValue().multiply(getPercent().divide(new BigDecimal(100)));
|
|
||||||
} else if(totalAmount != null) {
|
|
||||||
return totalAmount;
|
return totalAmount;
|
||||||
|
} else if (percent!=null) {
|
||||||
|
return currentItem.getValue().multiply(getPercent().divide(new BigDecimal(100)));
|
||||||
} else {
|
} else {
|
||||||
throw new RuntimeException("percent must be set");
|
throw new RuntimeException("percent must be set");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -42,21 +42,24 @@ public class LineCalculator {
|
|||||||
vatPercent = BigDecimal.ZERO;
|
vatPercent = BigDecimal.ZERO;
|
||||||
}
|
}
|
||||||
BigDecimal multiplicator = vatPercent.divide(BigDecimal.valueOf(100));
|
BigDecimal multiplicator = vatPercent.divide(BigDecimal.valueOf(100));
|
||||||
priceGross = currentItem.getPrice(); // see https://github.com/ZUGFeRD/mustangproject/issues/159
|
|
||||||
price = priceGross.subtract(allowance).add(charge);
|
|
||||||
|
|
||||||
BigDecimal quantity=BigDecimal.ZERO;
|
BigDecimal quantity=BigDecimal.ZERO;
|
||||||
if ((currentItem!=null)&&(currentItem.getQuantity()!=null)) {
|
if ((currentItem!=null)&&(currentItem.getQuantity()!=null)) {
|
||||||
quantity=currentItem.getQuantity();
|
quantity=currentItem.getQuantity();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
price=currentItem.getPrice();
|
||||||
|
BigDecimal delta=charge.subtract(allowanceItemTotal).subtract(allowance);
|
||||||
|
delta=delta.divide(currentItem.getQuantity());
|
||||||
|
priceGross=currentItem.getPrice().add(delta);
|
||||||
// Division/Zero occurred here.
|
// Division/Zero occurred here.
|
||||||
// Used the setScale only because that's also done in getBasisQuantity
|
// Used the setScale only because that's also done in getBasisQuantity
|
||||||
BigDecimal basisQuantity = currentItem.getBasisQuantity().compareTo(BigDecimal.ZERO) == 0
|
BigDecimal basisQuantity = currentItem.getBasisQuantity().compareTo(BigDecimal.ZERO) == 0
|
||||||
? BigDecimal.ONE.setScale(4)
|
? BigDecimal.ONE.setScale(4)
|
||||||
: currentItem.getBasisQuantity();
|
: currentItem.getBasisQuantity();
|
||||||
itemTotalNetAmount = quantity.multiply(price).divide(basisQuantity, 18, RoundingMode.HALF_UP)
|
itemTotalNetAmount = quantity.multiply(currentItem.getPrice()).divide(basisQuantity, 18, RoundingMode.HALF_UP)
|
||||||
.subtract(allowanceItemTotal).setScale(2, RoundingMode.HALF_UP);
|
.subtract(allowanceItemTotal).subtract(allowance).add(charge).setScale(2, RoundingMode.HALF_UP);
|
||||||
itemTotalVATAmount = itemTotalNetAmount.multiply(multiplicator);
|
itemTotalVATAmount = itemTotalNetAmount.multiply(multiplicator);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -82,9 +82,8 @@ public class CalculationTest extends ResourceCase {
|
|||||||
@Test
|
@Test
|
||||||
public void testLineCalculatorForeignCurrencyExample() {
|
public void testLineCalculatorForeignCurrencyExample() {
|
||||||
|
|
||||||
/*
|
|
||||||
File inputCII = getResourceAsFile("Extended_fremdwaehrung.xml");
|
File inputCII = getResourceAsFile("Extended_fremdwaehrung.xml");
|
||||||
inputCII=new File("C:\\Users\\jstaerk\\workspace\\XMLExamples\\zfdiverses\\20250407\\fremdwaehrung.xml");
|
|
||||||
ZUGFeRDInvoiceImporter zii=new ZUGFeRDInvoiceImporter();
|
ZUGFeRDInvoiceImporter zii=new ZUGFeRDInvoiceImporter();
|
||||||
Invoice invoice=null;
|
Invoice invoice=null;
|
||||||
zii.doIgnoreCalculationErrors();
|
zii.doIgnoreCalculationErrors();
|
||||||
@@ -104,9 +103,9 @@ inputCII=new File("C:\\Users\\jstaerk\\workspace\\XMLExamples\\zfdiverses\\20250
|
|||||||
|
|
||||||
final TransactionCalculator calculator = new TransactionCalculator(invoice);
|
final TransactionCalculator calculator = new TransactionCalculator(invoice);
|
||||||
|
|
||||||
assertEquals(valueOf(521.91).stripTrailingZeros(), calculator.getGrandTotal().stripTrailingZeros());
|
assertEquals(valueOf(521.91).stripTrailingZeros(), calculator.getDuePayable().stripTrailingZeros());
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user