no message
This commit is contained in:
@@ -4,6 +4,7 @@
|
|||||||
? be able to access ID in error message
|
? be able to access ID in error message
|
||||||
- closes #579 prepaidamount is only read in UBL
|
- closes #579 prepaidamount is only read in UBL
|
||||||
- #581 parse lineTotalAmount
|
- #581 parse lineTotalAmount
|
||||||
|
- also parse TaxBasisAmount
|
||||||
- #576 read lineid, #578 set lineid
|
- #576 read lineid, #578 set lineid
|
||||||
- log error ids
|
- log error ids
|
||||||
- #503 import more ubl
|
- #503 import more ubl
|
||||||
@@ -11,6 +12,7 @@
|
|||||||
- allow json includedNotes
|
- allow json includedNotes
|
||||||
- support importing duePayableAmount
|
- support importing duePayableAmount
|
||||||
|
|
||||||
|
|
||||||
2.15.0
|
2.15.0
|
||||||
=======
|
=======
|
||||||
2024-11-18
|
2024-11-18
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package org.mustangproject;
|
|||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||||
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
|
|
||||||
@@ -9,6 +10,7 @@ import java.math.BigDecimal;
|
|||||||
* (absolute) allowances on item and document level
|
* (absolute) allowances on item and document level
|
||||||
*/
|
*/
|
||||||
@JsonIgnoreProperties(ignoreUnknown = true)
|
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||||
|
@JsonInclude(JsonInclude.Include.NON_EMPTY)
|
||||||
public class Allowance extends Charge {
|
public class Allowance extends Charge {
|
||||||
|
|
||||||
/***
|
/***
|
||||||
|
|||||||
@@ -2,12 +2,14 @@ package org.mustangproject;
|
|||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||||
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||||
import org.mustangproject.ZUGFeRD.IZUGFeRDTradeSettlementPayment;
|
import org.mustangproject.ZUGFeRD.IZUGFeRDTradeSettlementPayment;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* provides e.g. the IBAN to transfer money to :-)
|
* provides e.g. the IBAN to transfer money to :-)
|
||||||
*/
|
*/
|
||||||
@JsonIgnoreProperties(ignoreUnknown = true)
|
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||||
|
@JsonInclude(JsonInclude.Include.NON_EMPTY)
|
||||||
public class BankDetails implements IZUGFeRDTradeSettlementPayment {
|
public class BankDetails implements IZUGFeRDTradeSettlementPayment {
|
||||||
/**
|
/**
|
||||||
* the bank account number
|
* the bank account number
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package org.mustangproject;
|
|||||||
|
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||||
import org.mustangproject.ZUGFeRD.TransactionCalculator;
|
import org.mustangproject.ZUGFeRD.TransactionCalculator;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
@@ -11,17 +12,20 @@ import java.io.Serializable;
|
|||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
|
|
||||||
@JsonIgnoreProperties(ignoreUnknown = true)
|
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||||
|
@JsonInclude(JsonInclude.Include.NON_EMPTY)
|
||||||
public class CalculatedInvoice extends Invoice implements Serializable {
|
public class CalculatedInvoice extends Invoice implements Serializable {
|
||||||
|
|
||||||
|
protected BigDecimal lineTotalAmount=null;
|
||||||
protected BigDecimal duePayable=null;
|
protected BigDecimal duePayable=null;
|
||||||
protected BigDecimal grandTotal=null;
|
protected BigDecimal grandTotal=null;
|
||||||
protected BigDecimal lineTotalAmount=null;
|
protected BigDecimal taxBasis=null;
|
||||||
|
|
||||||
public void calculate() {
|
public void calculate() {
|
||||||
TransactionCalculator tc=new TransactionCalculator(this);
|
TransactionCalculator tc=new TransactionCalculator(this);
|
||||||
grandTotal=tc.getGrandTotal();
|
grandTotal=tc.getGrandTotal();
|
||||||
lineTotalAmount=tc.getValue();
|
lineTotalAmount=tc.getValue();
|
||||||
duePayable=tc.getDuePayable();
|
duePayable=tc.getDuePayable();
|
||||||
|
taxBasis= tc.getTaxBasis();
|
||||||
}
|
}
|
||||||
public BigDecimal getGrandTotal() {
|
public BigDecimal getGrandTotal() {
|
||||||
if (grandTotal==null) {
|
if (grandTotal==null) {
|
||||||
@@ -33,6 +37,16 @@ public class CalculatedInvoice extends Invoice implements Serializable {
|
|||||||
grandTotal=grand;
|
grandTotal=grand;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
public BigDecimal getTaxBasis() {
|
||||||
|
if (taxBasis==null) {
|
||||||
|
calculate();
|
||||||
|
}
|
||||||
|
return taxBasis;
|
||||||
|
}
|
||||||
|
public CalculatedInvoice setTaxBasis(BigDecimal basis) {
|
||||||
|
taxBasis=basis;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
public BigDecimal getDuePayable() {
|
public BigDecimal getDuePayable() {
|
||||||
if (duePayable==null) {
|
if (duePayable==null) {
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package org.mustangproject;
|
package org.mustangproject;
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||||
import org.mustangproject.ZUGFeRD.IZUGFeRDCashDiscount;
|
import org.mustangproject.ZUGFeRD.IZUGFeRDCashDiscount;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
@@ -9,6 +10,7 @@ import java.math.BigDecimal;
|
|||||||
* A class to represent discounts for early payments ("Skonto")
|
* A class to represent discounts for early payments ("Skonto")
|
||||||
*/
|
*/
|
||||||
@JsonIgnoreProperties(ignoreUnknown = true)
|
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||||
|
@JsonInclude(JsonInclude.Include.NON_EMPTY)
|
||||||
public class CashDiscount implements IZUGFeRDCashDiscount {
|
public class CashDiscount implements IZUGFeRDCashDiscount {
|
||||||
|
|
||||||
/***
|
/***
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package org.mustangproject;
|
|||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||||
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||||
import org.mustangproject.ZUGFeRD.IAbsoluteValueProvider;
|
import org.mustangproject.ZUGFeRD.IAbsoluteValueProvider;
|
||||||
import org.mustangproject.ZUGFeRD.IZUGFeRDAllowanceCharge;
|
import org.mustangproject.ZUGFeRD.IZUGFeRDAllowanceCharge;
|
||||||
|
|
||||||
@@ -11,6 +12,7 @@ import java.math.BigDecimal;
|
|||||||
* Absolute and relative charges for document and item level
|
* Absolute and relative charges for document and item level
|
||||||
*/
|
*/
|
||||||
@JsonIgnoreProperties(ignoreUnknown = true)
|
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||||
|
@JsonInclude(JsonInclude.Include.NON_EMPTY)
|
||||||
public class Charge implements IZUGFeRDAllowanceCharge {
|
public class Charge implements IZUGFeRDAllowanceCharge {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -21,6 +21,7 @@
|
|||||||
package org.mustangproject;
|
package org.mustangproject;
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||||
import org.w3c.dom.NamedNodeMap;
|
import org.w3c.dom.NamedNodeMap;
|
||||||
import org.w3c.dom.Node;
|
import org.w3c.dom.Node;
|
||||||
|
|
||||||
@@ -28,6 +29,7 @@ import org.w3c.dom.Node;
|
|||||||
* A schemed classification for products. The scheme can be anything defined in UNTDID 7143.
|
* A schemed classification for products. The scheme can be anything defined in UNTDID 7143.
|
||||||
*/
|
*/
|
||||||
@JsonIgnoreProperties(ignoreUnknown = true)
|
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||||
|
@JsonInclude(JsonInclude.Include.NON_EMPTY)
|
||||||
public class ClassCode {
|
public class ClassCode {
|
||||||
private final String listID;
|
private final String listID;
|
||||||
private final String code;
|
private final String code;
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package org.mustangproject;
|
package org.mustangproject;
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||||
import org.mustangproject.ZUGFeRD.IZUGFeRDExportableContact;
|
import org.mustangproject.ZUGFeRD.IZUGFeRDExportableContact;
|
||||||
import org.w3c.dom.Node;
|
import org.w3c.dom.Node;
|
||||||
import org.w3c.dom.NodeList;
|
import org.w3c.dom.NodeList;
|
||||||
@@ -11,6 +12,7 @@ import org.w3c.dom.NodeList;
|
|||||||
* @see TradeParty
|
* @see TradeParty
|
||||||
*/
|
*/
|
||||||
@JsonIgnoreProperties(ignoreUnknown = true)
|
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||||
|
@JsonInclude(JsonInclude.Include.NON_EMPTY)
|
||||||
public class Contact implements IZUGFeRDExportableContact {
|
public class Contact implements IZUGFeRDExportableContact {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -21,6 +21,7 @@
|
|||||||
package org.mustangproject;
|
package org.mustangproject;
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||||
import org.mustangproject.ZUGFeRD.IDesignatedProductClassification;
|
import org.mustangproject.ZUGFeRD.IDesignatedProductClassification;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -28,6 +29,7 @@ import org.mustangproject.ZUGFeRD.IDesignatedProductClassification;
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
@JsonIgnoreProperties(ignoreUnknown = true)
|
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||||
|
@JsonInclude(JsonInclude.Include.NON_EMPTY)
|
||||||
public class DesignatedProductClassification implements IDesignatedProductClassification {
|
public class DesignatedProductClassification implements IDesignatedProductClassification {
|
||||||
private final ClassCode classCode;
|
private final ClassCode classCode;
|
||||||
private String className;
|
private String className;
|
||||||
|
|||||||
@@ -1,12 +1,14 @@
|
|||||||
package org.mustangproject;
|
package org.mustangproject;
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||||
import org.mustangproject.ZUGFeRD.IZUGFeRDTradeSettlementDebit;
|
import org.mustangproject.ZUGFeRD.IZUGFeRDTradeSettlementDebit;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* provides e.g. the IBAN to transfer money to :-)
|
* provides e.g. the IBAN to transfer money to :-)
|
||||||
*/
|
*/
|
||||||
@JsonIgnoreProperties(ignoreUnknown = true)
|
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||||
|
@JsonInclude(JsonInclude.Include.NON_EMPTY)
|
||||||
public class DirectDebit implements IZUGFeRDTradeSettlementDebit {
|
public class DirectDebit implements IZUGFeRDTradeSettlementDebit {
|
||||||
/**
|
/**
|
||||||
* Debited account identifier (BT-91)
|
* Debited account identifier (BT-91)
|
||||||
|
|||||||
@@ -1,8 +1,10 @@
|
|||||||
package org.mustangproject;
|
package org.mustangproject;
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||||
|
|
||||||
@JsonIgnoreProperties(ignoreUnknown = true)
|
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||||
|
@JsonInclude(JsonInclude.Include.NON_EMPTY)
|
||||||
public class FileAttachment {
|
public class FileAttachment {
|
||||||
|
|
||||||
protected String filename;
|
protected String filename;
|
||||||
|
|||||||
@@ -1,11 +1,13 @@
|
|||||||
package org.mustangproject;
|
package org.mustangproject;
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A grouping of business terms to indicate accounting-relevant free texts including a qualification of these.
|
* A grouping of business terms to indicate accounting-relevant free texts including a qualification of these.
|
||||||
*/
|
*/
|
||||||
@JsonIgnoreProperties(ignoreUnknown = true)
|
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||||
|
@JsonInclude(JsonInclude.Include.NON_EMPTY)
|
||||||
public class IncludedNote {
|
public class IncludedNote {
|
||||||
private String content;
|
private String content;
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package org.mustangproject;
|
package org.mustangproject;
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||||
import org.mustangproject.ZUGFeRD.*;
|
import org.mustangproject.ZUGFeRD.*;
|
||||||
import org.w3c.dom.Node;
|
import org.w3c.dom.Node;
|
||||||
import org.w3c.dom.NodeList;
|
import org.w3c.dom.NodeList;
|
||||||
@@ -9,6 +10,7 @@ import org.w3c.dom.NodeList;
|
|||||||
* A organisation, i.e. usually a company
|
* A organisation, i.e. usually a company
|
||||||
*/
|
*/
|
||||||
@JsonIgnoreProperties(ignoreUnknown = true)
|
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||||
|
@JsonInclude(JsonInclude.Include.NON_EMPTY)
|
||||||
public class LegalOrganisation implements IZUGFeRDLegalOrganisation {
|
public class LegalOrganisation implements IZUGFeRDLegalOrganisation {
|
||||||
|
|
||||||
protected SchemedID schemedID = null;
|
protected SchemedID schemedID = null;
|
||||||
|
|||||||
@@ -1,11 +1,13 @@
|
|||||||
package org.mustangproject;
|
package org.mustangproject;
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||||
import org.mustangproject.ZUGFeRD.IReferencedDocument;
|
import org.mustangproject.ZUGFeRD.IReferencedDocument;
|
||||||
import org.mustangproject.util.NodeMap;
|
import org.mustangproject.util.NodeMap;
|
||||||
import org.w3c.dom.Node;
|
import org.w3c.dom.Node;
|
||||||
|
|
||||||
@JsonIgnoreProperties(ignoreUnknown = true)
|
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||||
|
@JsonInclude(JsonInclude.Include.NON_EMPTY)
|
||||||
public class ReferencedDocument implements IReferencedDocument {
|
public class ReferencedDocument implements IReferencedDocument {
|
||||||
|
|
||||||
String issuerAssignedID;
|
String issuerAssignedID;
|
||||||
|
|||||||
@@ -2,8 +2,10 @@ package org.mustangproject;
|
|||||||
|
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||||
|
|
||||||
@JsonIgnoreProperties(ignoreUnknown = true)
|
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||||
|
@JsonInclude(JsonInclude.Include.NON_EMPTY)
|
||||||
public class SchemedID {
|
public class SchemedID {
|
||||||
protected String scheme;
|
protected String scheme;
|
||||||
protected String id;
|
protected String id;
|
||||||
|
|||||||
@@ -149,7 +149,7 @@ public class TransactionCalculator implements IAbsoluteValueProvider {
|
|||||||
*
|
*
|
||||||
* @return item sum +- charges/allowances
|
* @return item sum +- charges/allowances
|
||||||
*/
|
*/
|
||||||
protected BigDecimal getTaxBasis() {
|
public BigDecimal getTaxBasis() {
|
||||||
return getTotal().add(getChargesForPercent(null).setScale(2, RoundingMode.HALF_UP))
|
return getTotal().add(getChargesForPercent(null).setScale(2, RoundingMode.HALF_UP))
|
||||||
.subtract(getAllowancesForPercent(null).setScale(2, RoundingMode.HALF_UP))
|
.subtract(getAllowancesForPercent(null).setScale(2, RoundingMode.HALF_UP))
|
||||||
.setScale(2, RoundingMode.HALF_UP);
|
.setScale(2, RoundingMode.HALF_UP);
|
||||||
|
|||||||
@@ -400,6 +400,19 @@ public class ZUGFeRDInvoiceImporter {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
xpr = xpath.compile("//*[local-name()=\"TaxBasisTotalAmount\"]|//*[local-name()=\"TaxExclusiveAmount\"]");
|
||||||
|
BigDecimal expectedTaxBasis = null;
|
||||||
|
NodeList basisNodes = (NodeList) xpr.evaluate(getDocument(), XPathConstants.NODESET);
|
||||||
|
if (basisNodes.getLength() > 0) {
|
||||||
|
expectedTaxBasis = new BigDecimal(XMLTools.trimOrNull(basisNodes.item(0)));
|
||||||
|
if (zpp instanceof CalculatedInvoice) {
|
||||||
|
// usually we would re-calculate the invoice to get expectedGrandTotal
|
||||||
|
// however, for "minimal" invoices or other invoices without lines
|
||||||
|
// this will not work
|
||||||
|
((CalculatedInvoice) zpp).setTaxBasis(expectedTaxBasis);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
xpr = xpath.compile("//*[local-name()=\"TotalPrepaidAmount\"]|//*[local-name()=\"PrepaidAmount\"]");
|
xpr = xpath.compile("//*[local-name()=\"TotalPrepaidAmount\"]|//*[local-name()=\"PrepaidAmount\"]");
|
||||||
NodeList prepaidNodes = (NodeList) xpr.evaluate(getDocument(), XPathConstants.NODESET);
|
NodeList prepaidNodes = (NodeList) xpr.evaluate(getDocument(), XPathConstants.NODESET);
|
||||||
if (prepaidNodes.getLength() > 0) {
|
if (prepaidNodes.getLength() > 0) {
|
||||||
|
|||||||
Reference in New Issue
Block a user