From 477613b21c8c567a904761ba36442c7db13eff40 Mon Sep 17 00:00:00 2001 From: Bharti Date: Fri, 29 Nov 2024 14:03:21 +0100 Subject: [PATCH] UBL updates --- .../main/java/org/mustangproject/Item.java | 2 +- .../mustangproject/ReferencedDocument.java | 4 +- .../java/org/mustangproject/TradeParty.java | 130 ++++++------------ .../ZUGFeRD/ZUGFeRDInvoiceImporter.java | 37 ++++- 4 files changed, 83 insertions(+), 90 deletions(-) diff --git a/library/src/main/java/org/mustangproject/Item.java b/library/src/main/java/org/mustangproject/Item.java index bb48a528..f64c75fe 100644 --- a/library/src/main/java/org/mustangproject/Item.java +++ b/library/src/main/java/org/mustangproject/Item.java @@ -115,7 +115,7 @@ public class Item implements IZUGFeRDExportableItem { }); itemMap.getAllNodes("DocumentReference").map(ReferencedDocument::fromNode) - .forEach(this::addReferencedDocument); + .forEach(this::addAdditionalReference); // ubl diff --git a/library/src/main/java/org/mustangproject/ReferencedDocument.java b/library/src/main/java/org/mustangproject/ReferencedDocument.java index 8cd0229b..9255017f 100644 --- a/library/src/main/java/org/mustangproject/ReferencedDocument.java +++ b/library/src/main/java/org/mustangproject/ReferencedDocument.java @@ -70,8 +70,8 @@ public class ReferencedDocument implements IReferencedDocument { return null; } NodeMap nodes = new NodeMap(node); - return new ReferencedDocument(nodes.getAsStringOrNull("IssuerAssignedID"), - nodes.getAsStringOrNull("TypeCode"), + return new ReferencedDocument(nodes.getAsStringOrNull("IssuerAssignedID", "ID"), + nodes.getAsStringOrNull("TypeCode", "DocumentTypeCode"), nodes.getAsStringOrNull("ReferenceTypeCode")); } } diff --git a/library/src/main/java/org/mustangproject/TradeParty.java b/library/src/main/java/org/mustangproject/TradeParty.java index 577b9223..73b1ae81 100644 --- a/library/src/main/java/org/mustangproject/TradeParty.java +++ b/library/src/main/java/org/mustangproject/TradeParty.java @@ -74,35 +74,34 @@ public class TradeParty implements IZUGFeRDExportableTradeParty { if (currentItemNode.getLocalName() != null) { String currentUBLChild = currentItemNode.getLocalName(); - if (currentUBLChild.equals("Delivery")) { - NodeList delivery = currentItemNode.getChildNodes(); - for (int deliveryIndex = 0; deliveryIndex < delivery.getLength(); deliveryIndex++) { - if (delivery.item(deliveryIndex).getLocalName() != null) { - Node currentNode = delivery.item(deliveryIndex); - if (currentNode.getLocalName().equals("DeliveryLocation")) { - NodeList deliveryLocation = currentNode.getChildNodes(); - for (int deliveryLocationIndex = 0; deliveryLocationIndex < deliveryLocation.getLength(); deliveryLocationIndex++) { - if (deliveryLocation.item(deliveryLocationIndex).getLocalName() != null) { - if (deliveryLocation.item(deliveryLocationIndex).getLocalName().equals("ID")) { - //Node currentNode = partyID.item(partyIDIndex); - setID(deliveryLocation.item(deliveryLocationIndex).getTextContent()); - if ((deliveryLocation.item(deliveryLocationIndex).getAttributes() != null && - (deliveryLocation.item(deliveryLocationIndex).getAttributes().getNamedItem("schemeID") != null)) - ) { - SchemedID sID = new SchemedID().setScheme(deliveryLocation.item(deliveryLocationIndex).getAttributes().getNamedItem("schemeID").getTextContent()); - addGlobalID(sID); - } - } - } - } - } - - } - } - } +// if (currentUBLChild.equals("Delivery")) { +// NodeList delivery = currentItemNode.getChildNodes(); +// for (int deliveryIndex = 0; deliveryIndex < delivery.getLength(); deliveryIndex++) { +// if (delivery.item(deliveryIndex).getLocalName() != null) { +// Node currentNode = delivery.item(deliveryIndex); +// if (currentNode.getLocalName().equals("DeliveryLocation")) { +// NodeList deliveryLocation = currentNode.getChildNodes(); +// for (int deliveryLocationIndex = 0; deliveryLocationIndex < deliveryLocation.getLength(); deliveryLocationIndex++) { +// if (deliveryLocation.item(deliveryLocationIndex).getLocalName() != null) { +// if (deliveryLocation.item(deliveryLocationIndex).getLocalName().equals("ID")) { +// //Node currentNode = partyID.item(partyIDIndex); +// setID(deliveryLocation.item(deliveryLocationIndex).getTextContent()); +// if ((deliveryLocation.item(deliveryLocationIndex).getAttributes() != null && +// (deliveryLocation.item(deliveryLocationIndex).getAttributes().getNamedItem("schemeID") != null)) +// ) { +// SchemedID sID = new SchemedID().setScheme(deliveryLocation.item(deliveryLocationIndex).getAttributes().getNamedItem("schemeID").getTextContent()); +// addGlobalID(sID); +// } +// } +// } +// } +// } +// +// } +// } +// } if (currentUBLChild.equals("Party")) { - NodeList party = currentItemNode.getChildNodes(); for (int partyIndex = 0; partyIndex < party.getLength(); partyIndex++) { if (party.item(partyIndex).getLocalName() != null) { @@ -130,68 +129,27 @@ public class TradeParty implements IZUGFeRDExportableTradeParty { } } -// if (party.item(partyIndex).getLocalName().equals("AccountingSupplierParty")) { -// NodeList payeeParty = party.item(partyIndex).getChildNodes(); -// for (int payeePartyIndex = 0; payeePartyIndex < payeeParty.getLength(); payeePartyIndex++) { -// if (payeeParty.item(payeePartyIndex).getLocalName() != null) { - if (currentTopElementName.equals("PartyIdentification")) { - NodeList partyID = party.item(partyIndex).getChildNodes(); - for (int partyIDIndex = 0; partyIDIndex < partyID.getLength(); partyIDIndex++) { - if (partyID.item(partyIDIndex).getLocalName() != null) { - if (partyID.item(partyIDIndex).getLocalName().equals("ID")) { - Node currentNode = partyID.item(partyIDIndex); - if ((currentNode.getAttributes() != null && - (currentNode.getAttributes().getNamedItem("schemeID") != null)) - ) { - //SchemedID gid = new SchemedID().setScheme(nodes.item(nodeIndex).getAttributes().getNamedItem("schemeID").getNodeValue()).setId(nodes.item(nodeIndex).getTextContent()); - // addGlobalID(gid); - SchemedID sID = new SchemedID().setScheme(currentNode.getAttributes().getNamedItem("schemeID").getTextContent()).setId(currentNode.getTextContent()); - addGlobalID(sID); + if (currentTopElementName.equals("PartyIdentification")) { + NodeList partyID = party.item(partyIndex).getChildNodes(); + for (int partyIDIndex = 0; partyIDIndex < partyID.getLength(); partyIDIndex++) { + if (partyID.item(partyIDIndex).getLocalName() != null) { + if (partyID.item(partyIDIndex).getLocalName().equals("ID")) { + Node currentNode = partyID.item(partyIDIndex); + if ((currentNode.getAttributes() != null && + (currentNode.getAttributes().getNamedItem("schemeID") != null)) + ) { + SchemedID sID = new SchemedID().setScheme(currentNode.getAttributes().getNamedItem("schemeID").getTextContent()).setId(currentNode.getTextContent()); + addGlobalID(sID); - //&& ((currentNode.getAttributes().getNamedItem("schemeID").getNodeValue().equals("0110") && currentNode.getAttributes().getNamedItem("schemeID").getNodeValue().equals("0100")) - } -// else { -// setID(currentNode.getTextContent()); -// } - - } - } } + else { + setID(currentNode.getTextContent()); + } + } -// } -// } -// } - -// if (currentTopElementName.equals("AccountingCustomerParty")) { -// NodeList partyID = party.item(partyIndex).getChildNodes(); -// for (int partyIDIndex = 0; partyIDIndex < partyID.getLength(); partyIDIndex++) { -// if (partyID.item(partyIDIndex).getLocalName() != null) { -// if (partyID.item(partyIDIndex).getLocalName().equals("ID")) { -// Node currentNode = partyID.item(partyIDIndex); -// //setID(currentNode.getTextContent()); -// -// if ((currentNode.getAttributes() != null && -// (currentNode.getAttributes().getNamedItem("schemeID") != null)) -// ) { -// //SchemedID gid = new SchemedID().setScheme(nodes.item(nodeIndex).getAttributes().getNamedItem("schemeID").getNodeValue()).setId(nodes.item(nodeIndex).getTextContent()); -// //addGlobalID(gid); -// //SchemedID sID = new SchemedID(currentNode.getAttributes().getNamedItem("schemeID").getTextContent(), currentNode.getTextContent()); -// //addGlobalID(sID); -// // SchemedID sID = new SchemedID().setScheme(deliveryLocation.item(deliveryLocationIndex).getAttributes().getNamedItem("schemeID").getTextContent()); -// // addGlobalID(sID); -// SchemedID sID = new SchemedID().setScheme(currentNode.getAttributes().getNamedItem("schemeID").getTextContent()).setId(currentNode.getTextContent()); -// addGlobalID(sID); -// -// //&& ((currentNode.getAttributes().getNamedItem("schemeID").getNodeValue().equals("0110") && currentNode.getAttributes().getNamedItem("schemeID").getNodeValue().equals("0100")) -// } else { -// setID(currentNode.getTextContent()); -// } -// -// } -// } -// } -// } - + } + } + } if (currentTopElementName.equals("PartyTaxScheme")) { NodeList partyTaxScheme = party.item(partyIndex).getChildNodes(); diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDInvoiceImporter.java b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDInvoiceImporter.java index 88e69dd8..7e4d633b 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDInvoiceImporter.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDInvoiceImporter.java @@ -306,6 +306,7 @@ public class ZUGFeRDInvoiceImporter { } + //UBL... XPathExpression shipExUBL = xpath.compile("//*[local-name()=\"Delivery\"]"); Node deliveryNode = (Node) shipExUBL.evaluate(getDocument(), XPathConstants.NODE); @@ -381,9 +382,40 @@ public class ZUGFeRDInvoiceImporter { xpr = xpath.compile("//*[local-name()=\"BuyerTradeParty\"]|//*[local-name()=\"AccountingCustomerParty\"]/*"); NodeList BuyerNodes = (NodeList) xpr.evaluate(getDocument(), XPathConstants.NODESET); - xpr = xpath.compile("//*[local-name()=\"PayeeTradeParty\"]|//*[local-name()=\"PayeeParty\"]/*"); + xpr = xpath.compile("//*[local-name()=\"PayeeTradeParty\"]"); NodeList payeeNodes = (NodeList) xpr.evaluate(getDocument(), XPathConstants.NODESET); + // UBL + XPathExpression shipPayee = xpath.compile("//*[local-name()=\"PayeeParty\"]/*"); + NodeList ublPayeeNodes = (NodeList) shipPayee.evaluate(getDocument(), XPathConstants.NODESET); + +// if(ublPayeeNodes != null) { +// TradeParty payee = new TradeParty(); +// NodeMap nodeMap = new NodeMap(ublPayeeNodes).getAsNodeMap("PayeeParty").get(); +// nodeMap.getNode("ID").ifPresent(s -> { +// SchemedID sID = new SchemedID().setScheme(s.getAttributes().getNamedItem("schemeID").getTextContent()).setId(s.getTextContent()); +// payee.addGlobalID(sID); +// }); +// } + //NodeList UBLpayeeNodes = (NodeList) xpr.evaluate(getDocument(), XPathConstants.NODESET); + zpp.setPayee(new TradeParty(ublPayeeNodes)); +// TradeParty payee =new TradeParty(); +// NodeMap payeeID = new NodeMap(UBLpayeeNodes).getAsNodeMap("PartyIdentification").get(); +// if (payeeID !=null) { +// payeeID.getAsString("Name").ifPresent(t->payee.setName(t)); +// } +// if (payeeNodes != null) { +// TradeParty payee =new TradeParty(); +// NodeMap nodeMap = new NodeMap(payeeNodes).getAsNodeMap("PartyIdentification").get(); +// if (nodeMap != null) { +// nodeMap.getNode("ID").ifPresent(s -> { +// SchemedID sID = new SchemedID().setScheme(s.getAttributes().getNamedItem("schemeID").getTextContent()).setId(s.getTextContent()); +// payee.addGlobalID(sID); +// }); +// } +// } + + xpr = xpath.compile("//*[local-name()=\"ExchangedDocument\"]|//*[local-name()=\"HeaderExchangedDocument\"]"); NodeList ExchangedDocumentNodes = (NodeList) xpr.evaluate(getDocument(), XPathConstants.NODESET); @@ -505,6 +537,9 @@ public class ZUGFeRDInvoiceImporter { deliveryDate = new SimpleDateFormat("yyyy-MM-dd").parse(deliveryDt); } } + xpr = xpath.compile("//*[local-name()=\"Invoice\"]/*[local-name()=\"Note\"]"); + Node note = (Node) xpr.evaluate(getDocument(), XPathConstants.NODESET); + xpr = xpath.compile("//*[local-name()=\"ApplicableHeaderTradeDelivery\"]|//*[local-name()=\"Delivery\"]"); NodeList headerTradeDeliveryNodes = (NodeList) xpr.evaluate(getDocument(), XPathConstants.NODESET);