diff --git a/History.md b/History.md
index 77e1c35b..c8bbc05b 100644
--- a/History.md
+++ b/History.md
@@ -1,3 +1,8 @@
+1.7.6
+=====
+
+- support different ship to address
+
1.7.5
=====
2019-11-05
diff --git a/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDExportableTransaction.java b/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDExportableTransaction.java
index 51f78131..33a35e8c 100644
--- a/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDExportableTransaction.java
+++ b/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDExportableTransaction.java
@@ -361,4 +361,14 @@ public interface IZUGFeRDExportableTransaction {
default BigDecimal getTotalPrepaidAmount() {
return BigDecimal.ZERO;
}
+
+
+ /***
+ * delivery address, i.e. ram:ShipToTradeParty (only supported for zf2)
+ * @return
+ */
+
+ default IZUGFeRDExportableContact getDeliveryAddress() {
+ return null;
+ }
}
diff --git a/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java b/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java
index 886f08af..ebbe2843 100644
--- a/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java
+++ b/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD2PullProvider.java
@@ -66,6 +66,7 @@ public class ZUGFeRD2PullProvider implements IXMLProvider, IProfileProvider {
public BigDecimal getItemTotalGrossAmount() {
return itemTotalVATAmount;
}
+
public BigDecimal getPriceGross() {
return priceGross;
}
@@ -131,9 +132,9 @@ public class ZUGFeRD2PullProvider implements IXMLProvider, IProfileProvider {
public byte[] getXML() {
byte[] res = zugferdData;
-
+
StringWriter sw = new StringWriter();
- Document document=null;
+ Document document = null;
try {
document = DocumentHelper.parseText(new String(zugferdData));
} catch (DocumentException e1) {
@@ -148,13 +149,13 @@ public class ZUGFeRD2PullProvider implements IXMLProvider, IProfileProvider {
} catch (IOException e) {
Logger.getLogger(ZUGFeRD2PullProvider.class.getName()).log(Level.SEVERE, null, e);
}
-
+
return res;
-
+
}
private BigDecimal getTotalPrepaid() {
- if (trans.getTotalPrepaidAmount()==null) {
+ if (trans.getTotalPrepaidAmount() == null) {
return new BigDecimal(0);
} else {
return trans.getTotalPrepaidAmount();
@@ -211,8 +212,35 @@ public class ZUGFeRD2PullProvider implements IXMLProvider, IProfileProvider {
// return "urn:cen.eu:en16931:2017#compliant#urn:xoev-de:kosit:standard:xrechnung_1.2";
return "urn:cen.eu:en16931:2017";
}
-
-
+
+ protected String getContactAsXML(IZUGFeRDExportableContact contact) {
+ String xml = " " + XMLTools.encodeXML(contact.getName()) + "\n" //$NON-NLS-1$ //$NON-NLS-2$
+ // + " \n"
+ // + " xxx\n"
+ // + " \n"
+ + " \n" //$NON-NLS-1$
+ + " " + XMLTools.encodeXML(contact.getZIP()) //$NON-NLS-1$
+ + "\n" //$NON-NLS-1$
+ + " " + XMLTools.encodeXML(contact.getStreet()) //$NON-NLS-1$
+ + "\n"; //$NON-NLS-1$
+ if (trans.getRecipient().getAdditionalAddress() != null) {
+ xml += " " + XMLTools.encodeXML(contact.getAdditionalAddress()) //$NON-NLS-1$
+ + "\n"; //$NON-NLS-1$
+ }
+ xml += " " + XMLTools.encodeXML(contact.getLocation()) //$NON-NLS-1$
+ + "\n" //$NON-NLS-1$
+ + " " + XMLTools.encodeXML(contact.getCountry()) //$NON-NLS-1$
+ + "\n" //$NON-NLS-1$
+ + " \n"; //$NON-NLS-1$
+ if (contact.getVATID() != null) {
+ xml += " \n" //$NON-NLS-1$
+ + " " + XMLTools.encodeXML(contact.getVATID()) //$NON-NLS-1$
+ + "\n" //$NON-NLS-1$
+ + " \n"; //$NON-NLS-1$
+ }
+ return xml;
+
+ }
@Override
public void generateXML(IZUGFeRDExportableTransaction trans) {
@@ -385,34 +413,25 @@ public class ZUGFeRD2PullProvider implements IXMLProvider, IProfileProvider {
+ " " + XMLTools.encodeXML(trans.getOwnVATID()) + "\n" //$NON-NLS-1$ //$NON-NLS-2$
+ " \n" //$NON-NLS-1$
+ " \n" //$NON-NLS-1$
- + " \n" //$NON-NLS-1$
+ + " \n"; //$NON-NLS-1$
// + " GE2020211\n"
// + " 4000001987658\n"
- + " " + XMLTools.encodeXML(trans.getRecipient().getName()) + "\n" //$NON-NLS-1$ //$NON-NLS-2$
- // + " \n"
- // + " xxx\n"
- // + " \n"
- + " \n" //$NON-NLS-1$
- + " " + XMLTools.encodeXML(trans.getRecipient().getZIP()) + "\n" //$NON-NLS-1$ //$NON-NLS-2$
- + " " + XMLTools.encodeXML(trans.getRecipient().getStreet()) + "\n"; //$NON-NLS-1$ //$NON-NLS-2$
- if (trans.getRecipient().getAdditionalAddress() != null) {
- xml += " " + XMLTools.encodeXML(trans.getRecipient().getAdditionalAddress()) + "\n"; //$NON-NLS-1$ //$NON-NLS-2$
- }
- xml += " " + XMLTools.encodeXML(trans.getRecipient().getLocation()) + "\n" //$NON-NLS-1$ //$NON-NLS-2$
- + " " + XMLTools.encodeXML(trans.getRecipient().getCountry()) + "\n" //$NON-NLS-1$ //$NON-NLS-2$
- + " \n"; //$NON-NLS-1$
- if (trans.getRecipient().getVATID() != null) {
- xml += " \n" //$NON-NLS-1$
- + " " + XMLTools.encodeXML(trans.getRecipient().getVATID()) + "\n" //$NON-NLS-1$ //$NON-NLS-2$
- + " \n"; //$NON-NLS-1$
- }
- xml += " \n" //$NON-NLS-1$
+
+ xml+=getContactAsXML(trans.getRecipient());
+ xml += " \n" //$NON-NLS-1$
// + " \n"
// + " 20130301\n"
// + " 2013-471331\n"
// + " \n"
+ " \n" //$NON-NLS-1$
- + " \n" + " \n"
+ + " \n" ;
+ if (this.trans.getDeliveryAddress()!=null) {
+ xml += ""+
+ getContactAsXML(this.trans.getDeliveryAddress())+
+ "";
+ }
+
+ xml+= " \n"
+ " ";
if (trans.getZFDeliveryDate() != null) {
@@ -426,8 +445,8 @@ public class ZUGFeRD2PullProvider implements IXMLProvider, IProfileProvider {
} else {
throw new IllegalStateException("No delivery date provided");
}
- xml += "\n"
- + " \n"
+ xml += "\n";
+ xml += " \n"
/*
* + " \n" +
* " 20130603\n" +
diff --git a/src/test/java/org/mustangproject/ZUGFeRD/ZF2EdgeTest.java b/src/test/java/org/mustangproject/ZUGFeRD/ZF2EdgeTest.java
index 54955fa3..6c1fe209 100644
--- a/src/test/java/org/mustangproject/ZUGFeRD/ZF2EdgeTest.java
+++ b/src/test/java/org/mustangproject/ZUGFeRD/ZF2EdgeTest.java
@@ -177,6 +177,11 @@ public class ZF2EdgeTest extends MustangReaderTestCase implements IZUGFeRDExport
public IZUGFeRDExportableContact getRecipient() {
return new RecipientContact();
}
+
+ @Override
+ public IZUGFeRDExportableContact getDeliveryAddress() {
+ return new RecipientContact();
+ }
@Override
public String getOwnOrganisationFullPlaintextInfo() {
@@ -276,6 +281,7 @@ public class ZF2EdgeTest extends MustangReaderTestCase implements IZUGFeRDExport
ZUGFeRDImporter zi = new ZUGFeRDImporter(TARGET_PDF);
assertTrue(zi.getUTF8().contains("59"));
+ assertTrue(zi.getUTF8().contains(""));
assertTrue(zi.getUTF8().contains("DE540815"));
assertTrue(zi.getUTF8().contains("DE99XX12345"));
assertFalse(zi.getUTF8().contains(""));