Merge branch 'ZUGFeRD:master' into master

This commit is contained in:
Kemal Taskin
2024-12-09 08:01:45 +01:00
committed by GitHub
10 changed files with 86 additions and 75 deletions

View File

@@ -1,23 +1,21 @@
595
591
577
575
573
601
2.15.1
=======
2024-12-07
- #566 Failed to parse PDF - Could not reproduce the invoice
? be able to access ID in error message
- closes #579 prepaidamount is only read in UBL
- #581 parse lineTotalAmount
- also parse TaxBasisAmount
- #581 parse lineTotalAmount, TaxBasisAmount, duePayableAmount
- #576 read lineid, #578 set lineid
- log error ids
- log error ids, be able to access them from context
- #503 import more ubl
- allow jackson to run over more classes, e.g., DirectDebit, bean contructor for direct debit
- allow json includedNotes
- support importing duePayableAmount
- allow json in document includedNotes and
- #591 Import IncludedNotes also on item level
- #595 Treat all fatal XR schematron rules as errors, not as warnings.
- #577 dom4j: exclude all (optional) dependencies to avoid potential conflicts.
- #575 Fix compilation problems.
- #573 Feature/category code
- #601 exceptions in metrics
- #606 also parse BT-25
2.15.0

View File

@@ -3,7 +3,7 @@
<parent>
<groupId>org.mustangproject</groupId>
<artifactId>core</artifactId>
<version>2.15.1-SNAPSHOT</version>
<version>2.15.2-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>org.mustangproject</groupId>
@@ -12,7 +12,7 @@
should also work for XRechnung/CII.
</name>
<packaging>jar</packaging>
<version>2.15.1-SNAPSHOT</version>
<version>2.15.2-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.compilerVersion>11</maven.compiler.compilerVersion>
@@ -23,7 +23,7 @@
<dependency>
<groupId>org.mustangproject</groupId>
<artifactId>validator</artifactId>
<version>2.15.1-SNAPSHOT</version>
<version>2.15.2-SNAPSHOT</version>
<!-- prototypes of new mustangproject versions can be installed by referring to them and installed to the local repo from a jar file with
mvn install:install-file -Dfile=mustang-1.5.4-SNAPSHOT.jar -DgroupId=org.mustangproject.ZUGFeRD -DartifactId=mustang -Dversion=1.5.4 -Dpackaging=jar -DgeneratePom=true
-->

View File

@@ -3,13 +3,13 @@
<parent>
<groupId>org.mustangproject</groupId>
<artifactId>core</artifactId>
<version>2.15.1-SNAPSHOT</version>
<version>2.15.2-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>org.mustangproject</groupId>
<artifactId>library</artifactId>
<version>2.15.1-SNAPSHOT</version>
<version>2.15.2-SNAPSHOT</version>
<packaging>jar</packaging>
<name>Library to write, read and validate e-invoices (Factur-X, ZUGFeRD, Order-X, XRechnung/CII)</name>
<description>FOSS Java library to read, write and validate european electronic invoices and orders in the UN/CEFACT

View File

@@ -31,7 +31,7 @@ import org.mustangproject.ZUGFeRD.IDesignatedProductClassification;
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonInclude(JsonInclude.Include.NON_EMPTY)
public class DesignatedProductClassification implements IDesignatedProductClassification {
private final ClassCode classCode;
private ClassCode classCode;
private String className;
/**
@@ -54,6 +54,13 @@ public class DesignatedProductClassification implements IDesignatedProductClassi
this(classCode, null);
}
/**
* Bean constructor for schemed product descriptor
*/
public DesignatedProductClassification() {
classCode = null;// we need this constructor for jackson, i.e. to be able to JSON
}
@Override
public ClassCode getClassCode() {
return classCode;

View File

@@ -808,6 +808,7 @@ public class ZUGFeRDInvoiceImporter {
} else {
zpp.setDespatchAdviceReferencedDocumentID(extractString("//*[local-name()=\"DespatchDocumentReference\"]/*[local-name()=\"ID\"]"));
}
zpp.setInvoiceReferencedDocumentID(extractString("//*[local-name()=\"InvoiceReferencedDocument\"]/*[local-name()=\"IssuerAssignedID\"]|//*[local-name()=\"BillingReference\"]/*[local-name()=\"InvoiceDocumentReference\"]/*[local-name()=\"ID\"]"));
zpp.setOwnOrganisationName(extractString("//*[local-name()=\"SellerTradeParty\"]/*[local-name()=\"Name\"]|//*[local-name()=\"AccountingSupplierParty\"]/*[local-name()=\"Party\"]/*[local-name()=\"PartyName\"]").trim());
@@ -929,6 +930,7 @@ public class ZUGFeRDInvoiceImporter {
}
TransactionCalculator tc = new TransactionCalculator(zpp);
String expectedStringTotalGross = tc.getGrandTotal()
.subtract(Objects.requireNonNullElse(zpp.getTotalPrepaidAmount(), BigDecimal.ZERO)).toPlainString();

View File

@@ -539,6 +539,7 @@ public class ZF2PushTest extends TestCase {
.addAllowance(new Allowance(new BigDecimal(0.2)).setReason("discount").setTaxPercent(new BigDecimal(16)))
.addCashDiscount(new CashDiscount(new BigDecimal(2), 14))
.setDeliveryDate(sdf.parse("2020-11-02")).setNumber(number).setVATDueDateTypeCode(EventTimeCodeTypeConstants.PAYMENT_DATE)
.setInvoiceReferencedDocumentID("abc123")
);
} catch (ParseException e) {
e.printStackTrace();
@@ -582,6 +583,7 @@ public class ZF2PushTest extends TestCase {
try {
Invoice i = zii.extractInvoice();
assertEquals("abc123", i.getInvoiceReferencedDocumentID());
assertEquals("4304171000002", i.getRecipient().getGlobalID());
assertEquals("2001015001325", i.getZFItems()[0].getProduct().getGlobalID());
assertEquals(orgID, i.getSender().getID());

View File

@@ -3,7 +3,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>org.mustangproject</groupId>
<artifactId>core</artifactId>
<version>2.15.1-SNAPSHOT</version>
<version>2.15.2-SNAPSHOT</version>
<packaging>pom</packaging>
<name>Mustang</name>

View File

@@ -3,7 +3,7 @@
<parent>
<groupId>org.mustangproject</groupId>
<artifactId>core</artifactId>
<version>2.15.1-SNAPSHOT</version>
<version>2.15.2-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>org.mustangproject</groupId>
@@ -11,7 +11,7 @@
<name>Library to validate e-invoices (ZUGFeRD, Factur-X and Xrechnung)</name>
<packaging>jar</packaging>
<version>2.15.1-SNAPSHOT</version>
<version>2.15.2-SNAPSHOT</version>
<repositories>
<repository>
<!-- for jargs -->
@@ -38,7 +38,7 @@
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>library</artifactId>
<version>2.15.1-SNAPSHOT</version>
<version>2.15.2-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.dom4j</groupId>

View File

@@ -267,6 +267,7 @@ public class PDFValidator extends Validator {
final byte[] pdfMachineSignature = "pdfMachine from Broadgun Software".getBytes(StandardCharsets.UTF_8);
final byte[] ghostscriptSignature = "%%Invocation:".getBytes(StandardCharsets.UTF_8);
final byte[] cibpdfbrewerSignature = "CIB pdf brewer".getBytes(StandardCharsets.UTF_8);
final byte[] lexofficeSignature = "lexoffice".getBytes(StandardCharsets.UTF_8);
if (ByteArraySearcher.contains(fileContents, symtraxSignature)) {
Signature = "Symtrax";
@@ -284,6 +285,8 @@ public class PDFValidator extends Validator {
Signature = "Ghostscript";
} else if (ByteArraySearcher.contains(fileContents, cibpdfbrewerSignature)) {
Signature = "CIB pdf brewer";
} else if (ByteArraySearcher.contains(fileContents, lexofficeSignature)) {
Signature = "Lexware office";
}
context.setSignature(Signature);

View File

@@ -1,4 +1,5 @@
package org.mustangproject.validator;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringReader;
@@ -69,13 +70,11 @@ public class XMLValidator extends Validator {
final ValidationResultItem vri = new ValidationResultItem(ESeverity.exception, e.getMessage()).setSection(9)
.setPart(EPart.fx);
try (final StringWriter sw = new StringWriter();
final PrintWriter pw = new PrintWriter(sw))
{
final PrintWriter pw = new PrintWriter(sw)) {
e.printStackTrace(pw);
vri.setStacktrace(sw.toString());
context.addResultItem(vri);
}
catch (IOException ex) {
} catch (IOException ex) {
throw new UncheckedIOException(ex);
}
}