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(""));