diff --git a/library/pom.xml b/library/pom.xml index f3c5dc54..baf48639 100644 --- a/library/pom.xml +++ b/library/pom.xml @@ -102,7 +102,7 @@ com.helger en16931-cii2ubl - 1.3.0 + 1.4.10 @@ -122,6 +122,7 @@ org.xmlunit xmlunit-assertj 2.9.1 + test diff --git a/library/src/main/java/org/mustangproject/CII/CIIToUBL.java b/library/src/main/java/org/mustangproject/CII/CIIToUBL.java index 8034fe33..733006a1 100644 --- a/library/src/main/java/org/mustangproject/CII/CIIToUBL.java +++ b/library/src/main/java/org/mustangproject/CII/CIIToUBL.java @@ -1,12 +1,14 @@ package org.mustangproject.CII; -import com.helger.commons.error.list.ErrorList; -import com.helger.en16931.cii2ubl.CIIToUBL22Converter; -import com.helger.ubl21.UBL21Writer; -import com.helger.ubl22.UBL22Writer; import java.io.File; import java.io.Serializable; +import com.helger.commons.error.list.ErrorList; +import com.helger.en16931.cii2ubl.CIIToUBL23Converter; +import com.helger.ubl21.UBL21Writer; +import com.helger.ubl22.UBL22Writer; +import com.helger.ubl23.UBL23Writer; + /*** * converts a Cross Industry Invoice XML file to a UBL XML file * thanks to Philip Helger for his library @@ -18,36 +20,45 @@ public class CIIToUBL { * @param output the UBL file to write to */ public void convert(File input, File output) { - ErrorList occurred=new ErrorList(); - CIIToUBL22Converter cc=new CIIToUBL22Converter(); - Serializable aUBL = cc.convertCIItoUBL(input, occurred); + final ErrorList occurred=new ErrorList(); + final CIIToUBL23Converter cc=new CIIToUBL23Converter(); + final Serializable aUBL = cc.convertCIItoUBL(input, occurred); if (aUBL instanceof oasis.names.specification.ubl.schema.xsd.invoice_21.InvoiceType) { UBL21Writer.invoice () .setFormattedOutput (true) .write ((oasis.names.specification.ubl.schema.xsd.invoice_21.InvoiceType) aUBL, output); } - else - if (aUBL instanceof oasis.names.specification.ubl.schema.xsd.creditnote_21.CreditNoteType) + else if (aUBL instanceof oasis.names.specification.ubl.schema.xsd.creditnote_21.CreditNoteType) { UBL21Writer.creditNote () .setFormattedOutput (true) .write ((oasis.names.specification.ubl.schema.xsd.creditnote_21.CreditNoteType) aUBL, output); } - else - if (aUBL instanceof oasis.names.specification.ubl.schema.xsd.invoice_22.InvoiceType) + else if (aUBL instanceof oasis.names.specification.ubl.schema.xsd.invoice_22.InvoiceType) { UBL22Writer.invoice () .setFormattedOutput (true) .write ((oasis.names.specification.ubl.schema.xsd.invoice_22.InvoiceType) aUBL, output); } - else - if (aUBL instanceof oasis.names.specification.ubl.schema.xsd.creditnote_22.CreditNoteType) + else if (aUBL instanceof oasis.names.specification.ubl.schema.xsd.creditnote_22.CreditNoteType) { UBL22Writer.creditNote () .setFormattedOutput (true) .write ((oasis.names.specification.ubl.schema.xsd.creditnote_22.CreditNoteType) aUBL, output); } + else if (aUBL instanceof oasis.names.specification.ubl.schema.xsd.invoice_23.InvoiceType) + { + UBL23Writer.invoice () + .setFormattedOutput (true) + .write ((oasis.names.specification.ubl.schema.xsd.invoice_23.InvoiceType) aUBL, output); + } + else if (aUBL instanceof oasis.names.specification.ubl.schema.xsd.creditnote_23.CreditNoteType) + { + UBL23Writer.creditNote () + .setFormattedOutput (true) + .write ((oasis.names.specification.ubl.schema.xsd.creditnote_23.CreditNoteType) aUBL, output); + } } } diff --git a/library/src/test/java/org/mustangproject/ZUGFeRD/UBLTest.java b/library/src/test/java/org/mustangproject/ZUGFeRD/UBLTest.java index 38614e44..12cfed97 100644 --- a/library/src/test/java/org/mustangproject/ZUGFeRD/UBLTest.java +++ b/library/src/test/java/org/mustangproject/ZUGFeRD/UBLTest.java @@ -24,22 +24,31 @@ package org.mustangproject.ZUGFeRD; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; -import java.io.InputStream; import java.math.BigDecimal; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Paths; import java.util.Date; -import org.junit.FixMethodOrder; -import org.junit.runners.MethodSorters; -import org.mustangproject.*; +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.Order; +import org.junit.jupiter.api.Test; +import org.mustangproject.BankDetails; import org.mustangproject.CII.CIIToUBL; +import org.mustangproject.Contact; +import org.mustangproject.Invoice; +import org.mustangproject.Item; +import org.mustangproject.Product; +import org.mustangproject.TradeParty; -@FixMethodOrder(MethodSorters.NAME_ASCENDING) public class UBLTest extends ResourceCase { final String TARGET_XML = "./target/testout-1Lieferschein.xml"; + public UBLTest() { + } + + @Test + @Order(2) public void testUBLBasic() { // the writing part @@ -52,21 +61,23 @@ public class UBLTest extends ResourceCase { try { final File tempFile = File.createTempFile("ZUGFeRD-UBL-", "-test"); c2u.convert(input, tempFile); - expected = ResourceUtilities.readFile(StandardCharsets.UTF_8, expectedFile.getAbsolutePath()).replaceAll("\r\n", "\n"); - result = ResourceUtilities.readFile(StandardCharsets.UTF_8, tempFile.getAbsolutePath()).replaceAll("\r\n", "\n"); + expected = ResourceUtilities.readFile(StandardCharsets.UTF_8, expectedFile.getAbsolutePath()); + result = ResourceUtilities.readFile(StandardCharsets.UTF_8, tempFile.getAbsolutePath()); } catch (final IOException e) { fail("Exception should not happen: " + e.getMessage()); } assertNotNull(result); - assertEquals(expected, result); + Assertions.assertThat(result).isXmlEqualTo(expected); } + @Test + @Order(1) public void test1Lieferschein() { - EinLieferscheinExporter oe = new EinLieferscheinExporter(); - Invoice i = new Invoice().setDueDate(new Date()).setIssueDate(new Date()).setDeliveryDate(new Date()) + final EinLieferscheinExporter oe = new EinLieferscheinExporter(); + final Invoice i = new Invoice().setDueDate(new Date()).setIssueDate(new Date()).setDeliveryDate(new Date()) .setSender(new TradeParty("Test company", "teststr", "55232", "teststadt", "DE").addTaxID("DE4711").addVATID("DE0815").setContact(new Contact("Hans Test", "+49123456789", "test@example.org")).addBankDetails(new BankDetails("DE12500105170648489890", "COBADEFXXX"))) .setRecipient(new TradeParty("Franz Müller", "teststr.12", "55232", "Entenhausen", "DE")) .setReferenceNumber("991-01484-64")//leitweg-id @@ -75,13 +86,13 @@ public class UBLTest extends ResourceCase { try { oe.setTransaction(i); - ByteArrayOutputStream baos=new ByteArrayOutputStream(); + final ByteArrayOutputStream baos=new ByteArrayOutputStream(); oe.export(baos); - String theXML = baos.toString("UTF-8"); + final String theXML = baos.toString("UTF-8"); assertTrue(theXML.contains(" - - urn:cen.eu:en16931:2017:extended:urn:fdc:peppol.eu:2017:poacc:billing:3.0 + + urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0 urn:fdc:peppol.eu:2017:poacc:billing:01:1.0 RE-20201121/508 2020-11-21 @@ -13,21 +15,21 @@ Bei Spiel GmbH - + Ecke 12 - Stadthausen - 12345 - + Stadthausen + 12345 + DE - + DE136695976 - + VAT - + Bei Spiel GmbH @@ -37,18 +39,18 @@ 2 - + Theodor Est - + Bahnstr. 42 - Spielkreis - 88802 - + Spielkreis + 88802 + DE - + Theodor Est @@ -56,101 +58,111 @@ 2020-11-10 + + 42 + RE-20201121/508 + + DE88200800000970375700 + Max Mustermann + + COBADEFFXXX + + + Zahlbar ohne Abzug bis 12.12.2020 75.04 - - 160.00 - 11.20 - + + 160 + 11.2 + S - 7.00 - + 7 + VAT - - 336.00 - 63.84 - + + 336 + 63.84 + S - 19.00 - + 19 + VAT - 496.00 - 496.00 - 571.04 - 0.00 - 0.00 - 0.00 - 571.04 + 496 + 496 + 571.04 + 0 + 0 + 0 + 571.04 1 - 1.0000 - 160.00 - + 1 + 160 + Of a sample invoice - Design (hours) - + Design (hours) + S - 7.00 - + 7 + VAT - - 160.0000 - 1.0000 + + 160 + 1 2 - 400.0000 - 316.00 - + 400 + 316 + various colors, ~2000ml - Ballons - + Ballons + S - 19.00 - + 19 + VAT - - 0.7900 - 1.0000 + + 0.79 + 1 3 - 800.0000 - 20.00 - - - Hot air „heiße Luft“ (litres) - + 800 + 20 + + Hot air „heiße Luft“ (litres) + S - 19.00 - + 19 + VAT - - 0.0250 - 1.0000 + + 0.025 + 1 \ No newline at end of file