- invoiceimporter to parse BuyerReference

- support LineThree in TradeParty (BT-165?)
This commit is contained in:
jstaerk
2022-11-14 07:48:16 +01:00
parent ef49132429
commit 9cbf93c276
8 changed files with 89 additions and 6 deletions

View File

@@ -1,7 +1,8 @@
2.5.8 2.5.8
======= =======
- invoiceimporter to parse BuyerReference
- support LineThree in TradeParty (BT-165?)
- Corrected forgotten --d CLI shortcut - Corrected forgotten --d CLI shortcut
2.5.7 2.5.7

View File

@@ -25,6 +25,7 @@ public class TradeParty implements IZUGFeRDExportableTradeParty {
protected String taxID = null, vatID = null; protected String taxID = null, vatID = null;
protected String ID = null; protected String ID = null;
protected String additionalAddress = null; protected String additionalAddress = null;
protected String additionalAddressExtension = null;
protected List<BankDetails> bankDetails = new ArrayList<>(); protected List<BankDetails> bankDetails = new ArrayList<>();
protected List<IZUGFeRDTradeSettlementDebit> debitDetails = new ArrayList<>(); protected List<IZUGFeRDTradeSettlementDebit> debitDetails = new ArrayList<>();
protected Contact contact = null; protected Contact contact = null;
@@ -120,6 +121,9 @@ public class TradeParty implements IZUGFeRDExportableTradeParty {
if (postal.item(postalChildIndex).getLocalName().equals("LineTwo")) { if (postal.item(postalChildIndex).getLocalName().equals("LineTwo")) {
setAdditionalAddress(postal.item(postalChildIndex).getTextContent()); setAdditionalAddress(postal.item(postalChildIndex).getTextContent());
} }
if (postal.item(postalChildIndex).getLocalName().equals("LineThree")) {
setAdditionalAddressExtension(postal.item(postalChildIndex).getTextContent());
}
if (postal.item(postalChildIndex).getLocalName().equals("CityName")) { if (postal.item(postalChildIndex).getLocalName().equals("CityName")) {
setLocation(postal.item(postalChildIndex).getTextContent()); setLocation(postal.item(postalChildIndex).getTextContent());
} }
@@ -398,9 +402,11 @@ public class TradeParty implements IZUGFeRDExportableTradeParty {
} }
/*** /***
* additional parts of the address, e.g. which floor. * additional info of the address, e.g. which building or which floor.
* Street address will become "lineOne", this will become "lineTwo" * Street address will become "lineOne", this will become "lineTwo".
* (see setAdditionalAddressExtension for "lineThree")
* @param additionalAddress additional address description * @param additionalAddress additional address description
* @return fluent setter * @return fluent setter
*/ */
@@ -409,5 +415,41 @@ public class TradeParty implements IZUGFeRDExportableTradeParty {
return this; return this;
} }
/***
* Sets two parts of additional address at once, e.g. which building and which floor
* (if building is not in question which floor can also be set with the first part only :-))
*
* @param additionalAddress1 first part of additional info, e.g. "Rear building"
* @param additionalAddress2 second part of additional address info, e.g. "2nd floor"
* @return fluent setter
*/
public TradeParty setAdditionalAddress(String additionalAddress1, String additionalAddress2) {
this.additionalAddress = additionalAddress1;
this.additionalAddressExtension = additionalAddress2;
return this;
}
/***
* Sets even advanced additional address information,
* e.g. which floor (if LineTwo has already been used e.g. for which building)
* This could sometimes be BT-165?
*
* @param additionalAddress2
* @return fluent setter
*/
public TradeParty setAdditionalAddressExtension(String additionalAddress2) {
this.additionalAddressExtension = additionalAddress2;
return this;
}
/***
* Returns even advanced additional address information,
* e.g. which floor (if LineTwo=setAdditionalAddress has already been used e.g. for which building)
* @return lineThree
*/
public String getAdditionalAddressExtension() {
return this.additionalAddressExtension;
}
} }

View File

@@ -119,6 +119,7 @@ public interface IZUGFeRDExportableTradeParty {
/** /**
* returns additional address information which is display in xml tag "LineTwo" * returns additional address information which is display in xml tag "LineTwo"
* e.g. "Rear building"
* *
* @return additional address information * @return additional address information
*/ */
@@ -126,6 +127,17 @@ public interface IZUGFeRDExportableTradeParty {
return null; return null;
} }
/**
* returns additional address information which is display in xml tag "LineThree"
* e.g. "Second floor" if LineTwo is already used, e.g. "Rear Building".
* This attribute could sometimes be BT-165?
*
* @return additional address information
*/
default String getAdditionalAddressExtension() {
return null;
}
/*** /***
* obligatory for sender but not for recipient * obligatory for sender but not for recipient

View File

@@ -177,6 +177,10 @@ public class ZUGFeRD2PullProvider implements IXMLProvider {
xml += "<ram:LineTwo>" + XMLTools.encodeXML(party.getAdditionalAddress()) xml += "<ram:LineTwo>" + XMLTools.encodeXML(party.getAdditionalAddress())
+ "</ram:LineTwo>"; + "</ram:LineTwo>";
} }
if (party.getAdditionalAddressExtension() != null) {
xml += "<ram:LineThree>" + XMLTools.encodeXML(party.getAdditionalAddressExtension())
+ "</ram:LineThree>";
}
xml += "<ram:CityName>" + XMLTools.encodeXML(party.getLocation()) xml += "<ram:CityName>" + XMLTools.encodeXML(party.getLocation())
+ "</ram:CityName>" + "</ram:CityName>"
+ "<ram:CountryID>" + XMLTools.encodeXML(party.getCountry()) + "<ram:CountryID>" + XMLTools.encodeXML(party.getCountry())

View File

@@ -183,6 +183,17 @@ public class ZUGFeRDInvoiceImporter extends ZUGFeRDImporter {
.setSender(new TradeParty(SellerNodes)).setRecipient(new TradeParty(BuyerNodes)).setNumber(number); .setSender(new TradeParty(SellerNodes)).setRecipient(new TradeParty(BuyerNodes)).setNumber(number);
//.addItem(new Item(new Product("Testprodukt","","C62",BigDecimal.ZERO),amount,new BigDecimal(1.0))) //.addItem(new Item(new Product("Testprodukt","","C62",BigDecimal.ZERO),amount,new BigDecimal(1.0)))
zpp.setOwnOrganisationName(extractString("//*[local-name()=\"SellerTradeParty\"]/*[local-name()=\"Name\"]")); zpp.setOwnOrganisationName(extractString("//*[local-name()=\"SellerTradeParty\"]/*[local-name()=\"Name\"]"));
xpr = xpath.compile("//*[local-name()=\"BuyerReference\"]");
String buyerReference = null;
totalNodes = (NodeList) xpr.evaluate(getDocument(), XPathConstants.NODESET);
if (totalNodes.getLength() > 0) {
buyerReference = totalNodes.item(0).getTextContent();
}
if (buyerReference!=null) {
zpp.setReferenceNumber(buyerReference);
}
xpr = xpath.compile("//*[local-name()=\"IncludedSupplyChainTradeLineItem\"]"); xpr = xpath.compile("//*[local-name()=\"IncludedSupplyChainTradeLineItem\"]");
NodeList nodes = (NodeList) xpr.evaluate(getDocument(), XPathConstants.NODESET); NodeList nodes = (NodeList) xpr.evaluate(getDocument(), XPathConstants.NODESET);

View File

@@ -76,6 +76,16 @@ public abstract class MustangReaderTestCase extends TestCase implements IExporta
return "Bahnstr. 42"; return "Bahnstr. 42";
} }
@Override
public String getAdditionalAddress() {
return "Hinterhaus";
}
@Override
public String getAdditionalAddressExtension() {
return "Zweiter Stock";
}
@Override @Override
public String getVATID() { public String getVATID() {
return "DE999999999"; return "DE999999999";

View File

@@ -215,8 +215,8 @@ public class ZF2Test extends MustangReaderTestCase {
assertEquals(zi.getForeignReference(), getNumber()); assertEquals(zi.getForeignReference(), getNumber());
assertEquals(zi.getBuyerTradePartyAddress().getPostcodeCode(), "88802"); assertEquals(zi.getBuyerTradePartyAddress().getPostcodeCode(), "88802");
assertEquals(zi.getBuyerTradePartyAddress().getLineOne(), "Bahnstr. 42"); assertEquals(zi.getBuyerTradePartyAddress().getLineOne(), "Bahnstr. 42");
assertEquals(zi.getBuyerTradePartyAddress().getLineTwo(), null); assertEquals(zi.getBuyerTradePartyAddress().getLineTwo(), "Hinterhaus");
assertEquals(zi.getBuyerTradePartyAddress().getLineThree(), null); assertEquals(zi.getBuyerTradePartyAddress().getLineThree(), "Zweiter Stock");
assertEquals(zi.getBuyerTradePartyAddress().getCountrySubDivisionName(), null); assertEquals(zi.getBuyerTradePartyAddress().getCountrySubDivisionName(), null);
assertEquals(zi.getBuyerTradePartyAddress().getCountryID(), "DE"); assertEquals(zi.getBuyerTradePartyAddress().getCountryID(), "DE");
assertEquals(zi.getBuyerTradePartyAddress().getCityName(), "Spielkreis"); assertEquals(zi.getBuyerTradePartyAddress().getCityName(), "Spielkreis");

View File

@@ -65,6 +65,7 @@ public class ZF2ZInvoiceImporterTest extends ResourceCase {
assertEquals(3, invoice.getZFItems().length); assertEquals(3, invoice.getZFItems().length);
assertEquals("400.0000", invoice.getZFItems()[1].getQuantity().toString()); assertEquals("400.0000", invoice.getZFItems()[1].getQuantity().toString());
assertEquals("AB321", invoice.getReferenceNumber());
assertEquals("160.0000", invoice.getZFItems()[0].getPrice().toString()); assertEquals("160.0000", invoice.getZFItems()[0].getPrice().toString());
assertEquals("Heiße Luft pro Liter", invoice.getZFItems()[2].getProduct().getName()); assertEquals("Heiße Luft pro Liter", invoice.getZFItems()[2].getProduct().getName());
assertEquals("LTR", invoice.getZFItems()[2].getProduct().getUnit()); assertEquals("LTR", invoice.getZFItems()[2].getProduct().getUnit());
@@ -77,6 +78,8 @@ public class ZF2ZInvoiceImporterTest extends ResourceCase {
assertEquals("2017-05-30",sdf.format(invoice.getDueDate())); assertEquals("2017-05-30",sdf.format(invoice.getDueDate()));
assertEquals("Bahnstr. 42", invoice.getRecipient().getStreet()); assertEquals("Bahnstr. 42", invoice.getRecipient().getStreet());
assertEquals("Hinterhaus", invoice.getRecipient().getAdditionalAddress());
assertEquals("Zweiter Stock", invoice.getRecipient().getAdditionalAddressExtension());
assertEquals("88802", invoice.getRecipient().getZIP()); assertEquals("88802", invoice.getRecipient().getZIP());
assertEquals("DE", invoice.getRecipient().getCountry()); assertEquals("DE", invoice.getRecipient().getCountry());
assertEquals("Spielkreis", invoice.getRecipient().getLocation()); assertEquals("Spielkreis", invoice.getRecipient().getLocation());