From dad26e190075f8d6b1b7550822fcb4600d28c134 Mon Sep 17 00:00:00 2001 From: jstaerk Date: Wed, 9 Jul 2025 10:23:35 +0200 Subject: [PATCH] added two new tests --- .../main/java/org/mustangproject/Charge.java | 8 +-- .../ZUGFeRD/CalculationTest.java | 57 +++++++++++++++++-- .../ZUGFeRD/DeSerializationTest.java | 2 +- .../mustangproject/ZUGFeRD/ZF2PushTest.java | 10 ++-- .../ZUGFeRD/ZF2ZInvoiceImporterTest.java | 2 +- 5 files changed, 64 insertions(+), 15 deletions(-) diff --git a/library/src/main/java/org/mustangproject/Charge.java b/library/src/main/java/org/mustangproject/Charge.java index c906a704..f1a12bf6 100644 --- a/library/src/main/java/org/mustangproject/Charge.java +++ b/library/src/main/java/org/mustangproject/Charge.java @@ -145,10 +145,10 @@ public class Charge implements IZUGFeRDAllowanceCharge { if(totalAmount != null) { return totalAmount; } else if (percent!=null) { - BigDecimal singlePrice=currentItem.getValue().divide(BigDecimal.ONE.add(getPercent().divide(new BigDecimal(100))), 18, RoundingMode.HALF_UP); -// BigDecimal singlePrice=currentItem.getValue().multiply(BigDecimal.ONE.subtract(getPercent().divide(new BigDecimal(100)))); - BigDecimal singlePriceDiff=currentItem.getValue().add(singlePrice); - return singlePriceDiff; +// BigDecimal singlePrice=currentItem.getValue().divide(BigDecimal.ONE.add(getPercent().divide(new BigDecimal(100))), 18, RoundingMode.HALF_UP); + BigDecimal singlePrice=currentItem.getValue().multiply(BigDecimal.ONE.subtract(getPercent().divide(new BigDecimal(100)))); +// BigDecimal singlePriceDiff=currentItem.getValue().add(singlePrice); + return singlePrice; } else { throw new RuntimeException("percent must be set"); } diff --git a/library/src/test/java/org/mustangproject/ZUGFeRD/CalculationTest.java b/library/src/test/java/org/mustangproject/ZUGFeRD/CalculationTest.java index f7f1ce72..99c73b64 100644 --- a/library/src/test/java/org/mustangproject/ZUGFeRD/CalculationTest.java +++ b/library/src/test/java/org/mustangproject/ZUGFeRD/CalculationTest.java @@ -12,12 +12,11 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.xml.xpath.XPathExpressionException; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; +import java.io.*; import java.math.BigDecimal; import java.text.ParseException; import java.text.SimpleDateFormat; +import java.util.Date; /*** * tests the linecalculator and transactioncalculator classes @@ -274,7 +273,7 @@ public class CalculationTest extends ResourceCase { invoice.addAllowance(new Allowance().setPercent(total_discount_percent).setTaxPercent(sales_tax_percent1).setReasonCode("95").setReason("Rabatte")); } TransactionCalculator calculator = new TransactionCalculator(invoice); - assertEquals(valueOf(307.18).stripTrailingZeros(), calculator.getGrandTotal().stripTrailingZeros()); + assertEquals(valueOf(306.38).stripTrailingZeros(), calculator.getGrandTotal().stripTrailingZeros()); } public void testSimpleItemPercentAllowance() { @@ -319,6 +318,56 @@ public class CalculationTest extends ResourceCase { assertEquals(new BigDecimal("4.95"), calculator.getGrandTotal().stripTrailingZeros()); } + public void testSimpleDocumentPercentCharge() { + + String orgname = "Test company"; + String number = "123"; + String priceStr = "3.00"; + BigDecimal price = new BigDecimal(priceStr); + + + // similar, but slightly less complicated to whats later testted in testRelativeChargesAllowancesExport + Invoice i = new Invoice().setCurrency("CHF").setDueDate(new Date()).setIssueDate(new Date()).setDeliveryDate(new Date()) + .setSender(new TradeParty(orgname, "teststr", "55232", "teststadt", "DE").addTaxID("4711").addVATID("DE0815")) + .setRecipient(new TradeParty("Franz Müller", "teststr.12", "55232", "Entenhausen", "DE")) + .setNumber(number) + .addItem(new Item(new Product("Testprodukt", "", "H87", new BigDecimal(19)), price, new BigDecimal(1.0))) + .addItem(new Item(new Product("Testprodukt", "", "H87", new BigDecimal(19)), price, new BigDecimal(1.0))) + .addItem(new Item(new Product("Testprodukt", "", "H87", new BigDecimal(19)), price, new BigDecimal(1.0))) + .addCharge(new Charge().setPercent(new BigDecimal(50)).setTaxPercent(new BigDecimal(19)).setReasonCode("ABK")); + // 9+50%=>13,50 expected net + // .addAllowance(new Allowance().setPercent(new BigDecimal(50)).setTaxPercent(new BigDecimal(19)).setReason("Mengenrabatt")) + TransactionCalculator tc = new TransactionCalculator(i); + assertEquals(new BigDecimal("13.50"), tc.getTaxBasis()); + + assertEquals(new BigDecimal("16.07"), tc.getDuePayable()); + } + + public void testSimpleDocumentPercentAllowance() { + + String orgname = "Test company"; + String number = "123"; + String priceStr = "3.00"; + BigDecimal price = new BigDecimal(priceStr); + + + // similar, but slightly less complicated to whats later testted in testRelativeChargesAllowancesExport + Invoice i = new Invoice().setCurrency("CHF").setDueDate(new Date()).setIssueDate(new Date()).setDeliveryDate(new Date()) + .setSender(new TradeParty(orgname, "teststr", "55232", "teststadt", "DE").addTaxID("4711").addVATID("DE0815")) + .setRecipient(new TradeParty("Franz Müller", "teststr.12", "55232", "Entenhausen", "DE")) + .setNumber(number) + .addItem(new Item(new Product("Testprodukt", "", "H87", new BigDecimal(19)), price, new BigDecimal(1.0))) + .addItem(new Item(new Product("Testprodukt", "", "H87", new BigDecimal(19)), price, new BigDecimal(1.0))) + .addItem(new Item(new Product("Testprodukt", "", "H87", new BigDecimal(19)), price, new BigDecimal(1.0))) + .addAllowance(new Allowance().setPercent(new BigDecimal(50)).setTaxPercent(new BigDecimal(19)).setReasonCode("ABK")); + // 9-50%=>4,50 expected net + // .addAllowance(new Allowance().setPercent(new BigDecimal(50)).setTaxPercent(new BigDecimal(19)).setReason("Mengenrabatt")) + TransactionCalculator tc = new TransactionCalculator(i); + assertEquals(new BigDecimal("4.50"), tc.getTaxBasis()); + + assertEquals(new BigDecimal("5.36"), tc.getDuePayable()); + } + public void testSimpleItemTotalAllowance() { /*** * a product with net 1 and qty 5 and absolute _item_ allowance of 1 should return 4 as line total, and grand total diff --git a/library/src/test/java/org/mustangproject/ZUGFeRD/DeSerializationTest.java b/library/src/test/java/org/mustangproject/ZUGFeRD/DeSerializationTest.java index 561ee4e3..e527021e 100644 --- a/library/src/test/java/org/mustangproject/ZUGFeRD/DeSerializationTest.java +++ b/library/src/test/java/org/mustangproject/ZUGFeRD/DeSerializationTest.java @@ -395,7 +395,7 @@ public class DeSerializationTest extends ResourceCase { try { Invoice newInvoiceFromJSON = mapper.readValue(json, Invoice.class); TransactionCalculator tc=new TransactionCalculator(newInvoiceFromJSON); - assertEquals(new BigDecimal("18.92"),tc.getGrandTotal()); + assertEquals(new BigDecimal("18.33"),tc.getGrandTotal()); } catch (JsonProcessingException e) { throw new RuntimeException(e); diff --git a/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2PushTest.java b/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2PushTest.java index fc000301..86b2f730 100644 --- a/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2PushTest.java +++ b/library/src/test/java/org/mustangproject/ZUGFeRD/ZF2PushTest.java @@ -283,7 +283,7 @@ public class ZF2PushTest extends TestCase { assertTrue(zi.getUTF8().contains("ABK")); // Reading ZUGFeRD - assertEquals("18.92", zi.getAmount()); + assertEquals("18.33", zi.getAmount()); assertEquals(orgname, zi.getHolder()); assertEquals(number, zi.getForeignReference()); assertEquals(zi.getVersion(), 2); @@ -675,10 +675,10 @@ public class ZF2PushTest extends TestCase { .setSender(new TradeParty(orgname, "teststr", "55232", "teststadt", "DE").addTaxID("4711").addVATID("DE0815")) .setRecipient(new TradeParty("Franz Müller", "teststr.12", "55232", "Entenhausen", "DE")) .setNumber(number) - .addItem(new Item(new Product("Testprodukt", "", "C62", new BigDecimal(19)), price, new BigDecimal(1.0))) - .addItem(new Item(new Product("Testprodukt", "", "C62", new BigDecimal(19)), price, new BigDecimal(1.0))) - .addItem(new Item(new Product("Testprodukt", "", "C62", new BigDecimal(19)), price, new BigDecimal(1.0)).addCharge(new Charge().setPercent(new BigDecimal(50)).setTaxPercent(new BigDecimal(19)).setReasonCode("ABK"))) - .addAllowance(new Allowance().setPercent(new BigDecimal(50)).setTaxPercent(new BigDecimal(19)).setReason("Mengenrabatt")) + .addItem(new Item(new Product("Testprodukt", "", "H87", new BigDecimal(19)), price, new BigDecimal(1.0))) + .addItem(new Item(new Product("Testprodukt", "", "H87", new BigDecimal(19)), price, new BigDecimal(1.0))) + .addItem(new Item(new Product("Testprodukt", "", "H87", new BigDecimal(19)), price, new BigDecimal(1.0))).addCharge(new Charge().setPercent(new BigDecimal(50)).setTaxPercent(new BigDecimal(19)).setReasonCode("ABK")) + .addAllowance(new Allowance().setPercent(new BigDecimal(50)).setTaxPercent(new BigDecimal(19)).setReason("Mengenrabatt")) ); String theXML = new String(ze.getProvider().getXML()); assertTrue(theXML.contains("