support alternate delivery address

This commit is contained in:
Jochen Stärk
2019-12-07 19:45:46 +01:00
parent a549213d95
commit d4f11a2e23
4 changed files with 70 additions and 30 deletions

View File

@@ -1,3 +1,8 @@
1.7.6
=====
- support different ship to address
1.7.5 1.7.5
===== =====
2019-11-05 2019-11-05

View File

@@ -361,4 +361,14 @@ public interface IZUGFeRDExportableTransaction {
default BigDecimal getTotalPrepaidAmount() { default BigDecimal getTotalPrepaidAmount() {
return BigDecimal.ZERO; return BigDecimal.ZERO;
} }
/***
* delivery address, i.e. ram:ShipToTradeParty (only supported for zf2)
* @return
*/
default IZUGFeRDExportableContact getDeliveryAddress() {
return null;
}
} }

View File

@@ -66,6 +66,7 @@ public class ZUGFeRD2PullProvider implements IXMLProvider, IProfileProvider {
public BigDecimal getItemTotalGrossAmount() { public BigDecimal getItemTotalGrossAmount() {
return itemTotalVATAmount; return itemTotalVATAmount;
} }
public BigDecimal getPriceGross() { public BigDecimal getPriceGross() {
return priceGross; return priceGross;
} }
@@ -131,9 +132,9 @@ public class ZUGFeRD2PullProvider implements IXMLProvider, IProfileProvider {
public byte[] getXML() { public byte[] getXML() {
byte[] res = zugferdData; byte[] res = zugferdData;
StringWriter sw = new StringWriter(); StringWriter sw = new StringWriter();
Document document=null; Document document = null;
try { try {
document = DocumentHelper.parseText(new String(zugferdData)); document = DocumentHelper.parseText(new String(zugferdData));
} catch (DocumentException e1) { } catch (DocumentException e1) {
@@ -148,13 +149,13 @@ public class ZUGFeRD2PullProvider implements IXMLProvider, IProfileProvider {
} catch (IOException e) { } catch (IOException e) {
Logger.getLogger(ZUGFeRD2PullProvider.class.getName()).log(Level.SEVERE, null, e); Logger.getLogger(ZUGFeRD2PullProvider.class.getName()).log(Level.SEVERE, null, e);
} }
return res; return res;
} }
private BigDecimal getTotalPrepaid() { private BigDecimal getTotalPrepaid() {
if (trans.getTotalPrepaidAmount()==null) { if (trans.getTotalPrepaidAmount() == null) {
return new BigDecimal(0); return new BigDecimal(0);
} else { } else {
return trans.getTotalPrepaidAmount(); 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#compliant#urn:xoev-de:kosit:standard:xrechnung_1.2";
return "urn:cen.eu:en16931:2017"; return "urn:cen.eu:en16931:2017";
} }
protected String getContactAsXML(IZUGFeRDExportableContact contact) {
String xml = " <ram:Name>" + XMLTools.encodeXML(contact.getName()) + "</ram:Name>\n" //$NON-NLS-1$ //$NON-NLS-2$
// + " <DefinedTradeContact>\n"
// + " <PersonName>xxx</PersonName>\n"
// + " </DefinedTradeContact>\n"
+ " <ram:PostalTradeAddress>\n" //$NON-NLS-1$
+ " <ram:PostcodeCode>" + XMLTools.encodeXML(contact.getZIP()) //$NON-NLS-1$
+ "</ram:PostcodeCode>\n" //$NON-NLS-1$
+ " <ram:LineOne>" + XMLTools.encodeXML(contact.getStreet()) //$NON-NLS-1$
+ "</ram:LineOne>\n"; //$NON-NLS-1$
if (trans.getRecipient().getAdditionalAddress() != null) {
xml += " <ram:LineTwo>" + XMLTools.encodeXML(contact.getAdditionalAddress()) //$NON-NLS-1$
+ "</ram:LineTwo>\n"; //$NON-NLS-1$
}
xml += " <ram:CityName>" + XMLTools.encodeXML(contact.getLocation()) //$NON-NLS-1$
+ "</ram:CityName>\n" //$NON-NLS-1$
+ " <ram:CountryID>" + XMLTools.encodeXML(contact.getCountry()) //$NON-NLS-1$
+ "</ram:CountryID>\n" //$NON-NLS-1$
+ " </ram:PostalTradeAddress>\n"; //$NON-NLS-1$
if (contact.getVATID() != null) {
xml += " <ram:SpecifiedTaxRegistration>\n" //$NON-NLS-1$
+ " <ram:ID schemeID=\"VA\">" + XMLTools.encodeXML(contact.getVATID()) //$NON-NLS-1$
+ "</ram:ID>\n" //$NON-NLS-1$
+ " </ram:SpecifiedTaxRegistration>\n"; //$NON-NLS-1$
}
return xml;
}
@Override @Override
public void generateXML(IZUGFeRDExportableTransaction trans) { public void generateXML(IZUGFeRDExportableTransaction trans) {
@@ -385,34 +413,25 @@ public class ZUGFeRD2PullProvider implements IXMLProvider, IProfileProvider {
+ " <ram:ID schemeID=\"VA\">" + XMLTools.encodeXML(trans.getOwnVATID()) + "</ram:ID>\n" //$NON-NLS-1$ //$NON-NLS-2$ + " <ram:ID schemeID=\"VA\">" + XMLTools.encodeXML(trans.getOwnVATID()) + "</ram:ID>\n" //$NON-NLS-1$ //$NON-NLS-2$
+ " </ram:SpecifiedTaxRegistration>\n" //$NON-NLS-1$ + " </ram:SpecifiedTaxRegistration>\n" //$NON-NLS-1$
+ " </ram:SellerTradeParty>\n" //$NON-NLS-1$ + " </ram:SellerTradeParty>\n" //$NON-NLS-1$
+ " <ram:BuyerTradeParty>\n" //$NON-NLS-1$ + " <ram:BuyerTradeParty>\n"; //$NON-NLS-1$
// + " <ID>GE2020211</ID>\n" // + " <ID>GE2020211</ID>\n"
// + " <GlobalID schemeID=\"0088\">4000001987658</GlobalID>\n" // + " <GlobalID schemeID=\"0088\">4000001987658</GlobalID>\n"
+ " <ram:Name>" + XMLTools.encodeXML(trans.getRecipient().getName()) + "</ram:Name>\n" //$NON-NLS-1$ //$NON-NLS-2$
// + " <DefinedTradeContact>\n" xml+=getContactAsXML(trans.getRecipient());
// + " <PersonName>xxx</PersonName>\n" xml += " </ram:BuyerTradeParty>\n" //$NON-NLS-1$
// + " </DefinedTradeContact>\n"
+ " <ram:PostalTradeAddress>\n" //$NON-NLS-1$
+ " <ram:PostcodeCode>" + XMLTools.encodeXML(trans.getRecipient().getZIP()) + "</ram:PostcodeCode>\n" //$NON-NLS-1$ //$NON-NLS-2$
+ " <ram:LineOne>" + XMLTools.encodeXML(trans.getRecipient().getStreet()) + "</ram:LineOne>\n"; //$NON-NLS-1$ //$NON-NLS-2$
if (trans.getRecipient().getAdditionalAddress() != null) {
xml += " <ram:LineTwo>" + XMLTools.encodeXML(trans.getRecipient().getAdditionalAddress()) + "</ram:LineTwo>\n"; //$NON-NLS-1$ //$NON-NLS-2$
}
xml += " <ram:CityName>" + XMLTools.encodeXML(trans.getRecipient().getLocation()) + "</ram:CityName>\n" //$NON-NLS-1$ //$NON-NLS-2$
+ " <ram:CountryID>" + XMLTools.encodeXML(trans.getRecipient().getCountry()) + "</ram:CountryID>\n" //$NON-NLS-1$ //$NON-NLS-2$
+ " </ram:PostalTradeAddress>\n"; //$NON-NLS-1$
if (trans.getRecipient().getVATID() != null) {
xml += " <ram:SpecifiedTaxRegistration>\n" //$NON-NLS-1$
+ " <ram:ID schemeID=\"VA\">" + XMLTools.encodeXML(trans.getRecipient().getVATID()) + "</ram:ID>\n" //$NON-NLS-1$ //$NON-NLS-2$
+ " </ram:SpecifiedTaxRegistration>\n"; //$NON-NLS-1$
}
xml += " </ram:BuyerTradeParty>\n" //$NON-NLS-1$
// + " <BuyerOrderReferencedDocument>\n" // + " <BuyerOrderReferencedDocument>\n"
// + " <IssueDateTime format=\"102\">20130301</IssueDateTime>\n" // + " <IssueDateTime format=\"102\">20130301</IssueDateTime>\n"
// + " <ID>2013-471331</ID>\n" // + " <ID>2013-471331</ID>\n"
// + " </BuyerOrderReferencedDocument>\n" // + " </BuyerOrderReferencedDocument>\n"
+ " </ram:ApplicableHeaderTradeAgreement>\n" //$NON-NLS-1$ + " </ram:ApplicableHeaderTradeAgreement>\n" //$NON-NLS-1$
+ " <ram:ApplicableHeaderTradeDelivery>\n" + " <ram:ActualDeliverySupplyChainEvent>\n" + " <ram:ApplicableHeaderTradeDelivery>\n" ;
if (this.trans.getDeliveryAddress()!=null) {
xml += "<ram:ShipToTradeParty>"+
getContactAsXML(this.trans.getDeliveryAddress())+
"</ram:ShipToTradeParty>";
}
xml+= " <ram:ActualDeliverySupplyChainEvent>\n"
+ " <ram:OccurrenceDateTime>"; + " <ram:OccurrenceDateTime>";
if (trans.getZFDeliveryDate() != null) { if (trans.getZFDeliveryDate() != null) {
@@ -426,8 +445,8 @@ public class ZUGFeRD2PullProvider implements IXMLProvider, IProfileProvider {
} else { } else {
throw new IllegalStateException("No delivery date provided"); throw new IllegalStateException("No delivery date provided");
} }
xml += "</ram:OccurrenceDateTime>\n" xml += "</ram:OccurrenceDateTime>\n";
+ " </ram:ActualDeliverySupplyChainEvent>\n" xml += " </ram:ActualDeliverySupplyChainEvent>\n"
/* /*
* + " <DeliveryNoteReferencedDocument>\n" + * + " <DeliveryNoteReferencedDocument>\n" +
* " <IssueDateTime format=\"102\">20130603</IssueDateTime>\n" + * " <IssueDateTime format=\"102\">20130603</IssueDateTime>\n" +

View File

@@ -177,6 +177,11 @@ public class ZF2EdgeTest extends MustangReaderTestCase implements IZUGFeRDExport
public IZUGFeRDExportableContact getRecipient() { public IZUGFeRDExportableContact getRecipient() {
return new RecipientContact(); return new RecipientContact();
} }
@Override
public IZUGFeRDExportableContact getDeliveryAddress() {
return new RecipientContact();
}
@Override @Override
public String getOwnOrganisationFullPlaintextInfo() { public String getOwnOrganisationFullPlaintextInfo() {
@@ -276,6 +281,7 @@ public class ZF2EdgeTest extends MustangReaderTestCase implements IZUGFeRDExport
ZUGFeRDImporter zi = new ZUGFeRDImporter(TARGET_PDF); ZUGFeRDImporter zi = new ZUGFeRDImporter(TARGET_PDF);
assertTrue(zi.getUTF8().contains("<ram:TypeCode>59</ram:TypeCode>")); assertTrue(zi.getUTF8().contains("<ram:TypeCode>59</ram:TypeCode>"));
assertTrue(zi.getUTF8().contains("<ram:ShipToTradeParty>"));
assertTrue(zi.getUTF8().contains("<ram:IBANID>DE540815</ram:IBANID>")); assertTrue(zi.getUTF8().contains("<ram:IBANID>DE540815</ram:IBANID>"));
assertTrue(zi.getUTF8().contains("<ram:DirectDebitMandateID>DE99XX12345</ram:DirectDebitMandateID>")); assertTrue(zi.getUTF8().contains("<ram:DirectDebitMandateID>DE99XX12345</ram:DirectDebitMandateID>"));
assertFalse(zi.getUTF8().contains("<ram:DueDateDateTime>")); assertFalse(zi.getUTF8().contains("<ram:DueDateDateTime>"));