Merge pull request #862 from rexfox147/buyerOrderId_merged

Add support for BuyerOrderReferencedDocument on line level - Merged to Master and Conflicts resolved
This commit is contained in:
Jochen Staerk
2025-06-26 10:52:47 +02:00
committed by GitHub
5 changed files with 46 additions and 11 deletions

View File

@@ -34,7 +34,8 @@ public class Item implements IZUGFeRDExportableItem {
protected Date detailedDeliveryPeriodFrom = null;
protected Date detailedDeliveryPeriodTo = null;
protected String id;
protected String referencedLineID = null;
protected String buyerOrderReferencedDocumentLineID = null;
protected String buyerOrderReferencedDocumentID = null;
protected Product product;
protected ArrayList<String> notes = null;
protected ArrayList<ReferencedDocument> referencedDocuments = null;
@@ -127,6 +128,9 @@ public class Item implements IZUGFeRDExportableItem {
.flatMap(bordNodes -> bordNodes.getAsString("LineID"))
.ifPresent(this::addReferencedLineID);
icnm.getAsNodeMap("BuyerOrderReferencedDocument")
.flatMap(bordNodes -> bordNodes.getAsString("IssuerAssignedID"))
.ifPresent(this::addBuyerOrderReferencedDocumentID);
icnm.getAsNodeMap("NetPriceProductTradePrice").ifPresent(npptpNodes -> {
npptpNodes.getAsBigDecimal("ChargeAmount").ifPresent(this::setPrice);
@@ -277,8 +281,23 @@ public class Item implements IZUGFeRDExportableItem {
});
}
public Item addBuyerOrderReferencedDocumentLineID(String s) {
buyerOrderReferencedDocumentLineID = s;
return this;
}
@Deprecated(since = "2.14.0")
public Item addReferencedLineID(String s) {
referencedLineID = s;
return addBuyerOrderReferencedDocumentLineID(s);
}
@Override
public String getBuyerOrderReferencedDocumentID() {
return buyerOrderReferencedDocumentID;
}
public Item addBuyerOrderReferencedDocumentID(String s) {
buyerOrderReferencedDocumentID = s;
return this;
}
@@ -298,7 +317,7 @@ public class Item implements IZUGFeRDExportableItem {
*/
@Override
public String getBuyerOrderReferencedDocumentLineID() {
return referencedLineID;
return buyerOrderReferencedDocumentLineID;
}
public BigDecimal getLineTotalAmount() {

View File

@@ -77,6 +77,14 @@ public interface IZUGFeRDExportableItem extends IAbsoluteValueProvider{
return null;
}
/***
* buyer order reference document id
* @return the document id (defaults to {@code null})
*/
default String getBuyerOrderReferencedDocumentID() {
return null;
}
/***
* BT 132 (issue https://github.com/ZUGFeRD/mustangproject/issues/247)
* @return the line ID of the order (BT-132)
@@ -106,7 +114,7 @@ public interface IZUGFeRDExportableItem extends IAbsoluteValueProvider{
/**
* how many items units per price
*
*
* @return item units per price
*/
default BigDecimal getBasisQuantity() {
@@ -166,7 +174,7 @@ public interface IZUGFeRDExportableItem extends IAbsoluteValueProvider{
default Date getDetailedDeliveryPeriodTo() {
return null;
}
/***
* get all (allowances and charges) SpecifiedTradeAllowanceCharges
*

View File

@@ -503,10 +503,17 @@ public class ZUGFeRD2PullProvider implements IXMLProvider {
"</ram:AdditionalReferencedDocument>";
}
}
if (currentItem.getBuyerOrderReferencedDocumentLineID() != null) {
xml += "<ram:BuyerOrderReferencedDocument> "
+ "<ram:LineID>" + XMLTools.encodeXML(currentItem.getBuyerOrderReferencedDocumentLineID()) + "</ram:LineID>"
+ "</ram:BuyerOrderReferencedDocument>";
if ((currentItem.getBuyerOrderReferencedDocumentLineID() != null) || (currentItem.getBuyerOrderReferencedDocumentID() != null)) {
xml += "<ram:BuyerOrderReferencedDocument> ";
if (currentItem.getBuyerOrderReferencedDocumentID() != null) {
xml += "<ram:IssuerAssignedID>" + XMLTools.encodeXML(currentItem.getBuyerOrderReferencedDocumentID())
+ "</ram:IssuerAssignedID>";
}
if (currentItem.getBuyerOrderReferencedDocumentLineID() != null) {
xml += "<ram:LineID>" + XMLTools.encodeXML(currentItem.getBuyerOrderReferencedDocumentLineID())
+ "</ram:LineID>";
}
xml += "</ram:BuyerOrderReferencedDocument>";
}
if (!allowanceChargeStr.isEmpty()) {

View File

@@ -82,7 +82,7 @@ public class UBLTest extends ResourceCase {
.setSender(new TradeParty("Test company", "teststr", "55232", "teststadt", "DE").addTaxID("DE4711").addVATID("DE0815").setContact(new Contact("Hans Test", "+49123456789", "test@example.org")).addBankDetails(new BankDetails("DE12500105170648489890", "COBADEFXXX")))
.setRecipient(new TradeParty("Franz Müller", "teststr.12", "55232", "Entenhausen", "DE"))
.setReferenceNumber("991-01484-64")//leitweg-id
.setNumber("123").addItem(new Item(new Product("Testprodukt", "", "C62", BigDecimal.ZERO), /*price*/ new BigDecimal("1.0"), /*qty*/ new BigDecimal("1.0")).addReferencedLineID("A12"));
.setNumber("123").addItem(new Item(new Product("Testprodukt", "", "C62", BigDecimal.ZERO), /*price*/ new BigDecimal("1.0"), /*qty*/ new BigDecimal("1.0")).addBuyerOrderReferencedDocumentLineID("A12"));
try {

View File

@@ -540,7 +540,7 @@ public class ZF2PushTest extends TestCase {
.setContractReferencedDocument(contractID)
.setRecipient(new TradeParty("Franz Müller", "teststr.12", "55232", "Entenhausen", "DE").addGlobalID(gln).setEmail("recipient@test.org").addVATID("DE4711")
.setContact(new Contact("Franz Müller", "01779999999", "franz@mueller.de", "teststr. 12", "55232", "Entenhausen", "DE").setFax("++49555123456")).setAdditionalAddress("Hinterhaus 3"))
.addItem(new Item(new Product("Testprodukt", "", "H87", new BigDecimal(16)).addGlobalID(gtin).setSellerAssignedID("4711"), price, new BigDecimal(1.0)).setId("a123").addReferencedLineID("xxx").addNote("item level 1/1").addAllowance(new Allowance(new BigDecimal(0.02)).setReason("item discount").setTaxPercent(new BigDecimal(16))).setDetailedDeliveryPeriod(sdf.parse("2020-01-13"), sdf.parse("2020-01-15")))
.addItem(new Item(new Product("Testprodukt", "", "C62", new BigDecimal(16)).addGlobalID(gtin).setSellerAssignedID("4711"), price, new BigDecimal(1.0)).addBuyerOrderReferencedDocumentID("orderId").addBuyerOrderReferencedDocumentLineID("xxx").addReferencedLineID("xxx").addNote("item level 1/1").addAllowance(new Allowance(new BigDecimal(0.02)).setReason("item discount").setTaxPercent(new BigDecimal(16))).setDetailedDeliveryPeriod(sdf.parse("2020-01-13"), sdf.parse("2020-01-15")))
.addCharge(new Charge(new BigDecimal(0.5)).setReason("quick delivery charge").setTaxPercent(new BigDecimal(16)))
.addAllowance(new Allowance(new BigDecimal(0.2)).setReason("discount").setTaxPercent(new BigDecimal(16)))
.addCashDiscount(new CashDiscount(new BigDecimal(2), 14))
@@ -570,6 +570,7 @@ public class ZF2PushTest extends TestCase {
assertTrue(zi.getUTF8().contains("0088"));
assertTrue(zi.getUTF8().contains(orgID));
assertTrue(zi.getUTF8().contains("ram:BuyerOrderReferencedDocument"));
assertThat(zi.getUTF8()).valueByXPath("//*[local-name()='SpecifiedLineTradeAgreement']/*[local-name()='BuyerOrderReferencedDocument']/*[local-name()='IssuerAssignedID']").asString().isEqualTo("orderId");
assertTrue(zi.getUTF8().contains(occurrenceFrom));
assertTrue(zi.getUTF8().contains(occurrenceTo));
assertTrue(zi.getUTF8().contains(contractID));