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
|
||||
public BigDecimal getTotalAmount(IAbsoluteValueProvider currentItem) {
|
||||
if (percent!=null) {
|
||||
return currentItem.getValue().multiply(getPercent().divide(new BigDecimal(100)));
|
||||
} else if(totalAmount != null) {
|
||||
if(totalAmount != null) {
|
||||
return totalAmount;
|
||||
} else if (percent!=null) {
|
||||
return currentItem.getValue().multiply(getPercent().divide(new BigDecimal(100)));
|
||||
} else {
|
||||
throw new RuntimeException("percent must be set");
|
||||
}
|
||||
|
||||
@@ -42,21 +42,24 @@ public class LineCalculator {
|
||||
vatPercent = BigDecimal.ZERO;
|
||||
}
|
||||
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;
|
||||
if ((currentItem!=null)&&(currentItem.getQuantity()!=null)) {
|
||||
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.
|
||||
// Used the setScale only because that's also done in getBasisQuantity
|
||||
BigDecimal basisQuantity = currentItem.getBasisQuantity().compareTo(BigDecimal.ZERO) == 0
|
||||
? BigDecimal.ONE.setScale(4)
|
||||
: currentItem.getBasisQuantity();
|
||||
itemTotalNetAmount = quantity.multiply(price).divide(basisQuantity, 18, RoundingMode.HALF_UP)
|
||||
.subtract(allowanceItemTotal).setScale(2, RoundingMode.HALF_UP);
|
||||
itemTotalNetAmount = quantity.multiply(currentItem.getPrice()).divide(basisQuantity, 18, RoundingMode.HALF_UP)
|
||||
.subtract(allowanceItemTotal).subtract(allowance).add(charge).setScale(2, RoundingMode.HALF_UP);
|
||||
itemTotalVATAmount = itemTotalNetAmount.multiply(multiplicator);
|
||||
}
|
||||
|
||||
|
||||
@@ -82,9 +82,8 @@ public class CalculationTest extends ResourceCase {
|
||||
@Test
|
||||
public void testLineCalculatorForeignCurrencyExample() {
|
||||
|
||||
/*
|
||||
|
||||
File inputCII = getResourceAsFile("Extended_fremdwaehrung.xml");
|
||||
inputCII=new File("C:\\Users\\jstaerk\\workspace\\XMLExamples\\zfdiverses\\20250407\\fremdwaehrung.xml");
|
||||
ZUGFeRDInvoiceImporter zii=new ZUGFeRDInvoiceImporter();
|
||||
Invoice invoice=null;
|
||||
zii.doIgnoreCalculationErrors();
|
||||
@@ -104,9 +103,9 @@ inputCII=new File("C:\\Users\\jstaerk\\workspace\\XMLExamples\\zfdiverses\\20250
|
||||
|
||||
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