Merge pull request #1018 from pgjacobs/issue536

Fix for #536: Support for BT-18
This commit is contained in:
Jochen Staerk
2026-02-04 13:22:03 +01:00
committed by GitHub
4 changed files with 76 additions and 7 deletions

View File

@@ -55,6 +55,7 @@ public class Invoice implements IExportableTransaction {
protected Date detailedDeliveryDateStart = null; protected Date detailedDeliveryDateStart = null;
protected Date detailedDeliveryPeriodEnd = null; protected Date detailedDeliveryPeriodEnd = null;
protected IReferencedDocument tenderReference = null; protected IReferencedDocument tenderReference = null;
protected IReferencedDocument objectIdentifierReference = null;
protected ArrayList<IZUGFeRDAllowanceCharge> Allowances = new ArrayList<>(), protected ArrayList<IZUGFeRDAllowanceCharge> Allowances = new ArrayList<>(),
Charges = new ArrayList<>(), LogisticsServiceCharges = new ArrayList<>(); Charges = new ArrayList<>(), LogisticsServiceCharges = new ArrayList<>();
@@ -176,6 +177,28 @@ public class Invoice implements IExportableTransaction {
} }
/** BT-18 */
@Override
public IReferencedDocument getObjectIdentifierReferencedDocument() {
return objectIdentifierReference;
}
/** BT-18 */
public Invoice setObjectIdentifierReferencedDocument(ReferencedDocument dr) {
dr.setTypeCode("130");//50 is fixed for tender documents
objectIdentifierReference=dr;
return this;
}
public Invoice setObjectIdentifierReferencedDocument(String id) {
ReferencedDocument dr=new ReferencedDocument(id);
setObjectIdentifierReferencedDocument(dr);
return this;
}
public Invoice setNumber(String number) { public Invoice setNumber(String number) {
this.number = number; this.number = number;
return this; return this;

View File

@@ -224,6 +224,15 @@ public interface IExportableTransaction {
return null; return null;
} }
/**
* BT-18 Invoiced Object Identifier
*
* @return mandatory ID, optional Date
*/
default IReferencedDocument getObjectIdentifierReferencedDocument() {
return null;
}
/** /**
* own name * own name
* *

View File

@@ -658,17 +658,22 @@ public class ZUGFeRD2PullProvider implements IXMLProvider {
+ "</ram:AdditionalReferencedDocument>"; + "</ram:AdditionalReferencedDocument>";
} }
} }
if (trans.getObjectIdentifierReferencedDocument() != null) {
xml += "<ram:AdditionalReferencedDocument>"
+ "<ram:IssuerAssignedID>" + XMLTools.encodeXML(trans.getObjectIdentifierReferencedDocument().getIssuerAssignedID()) + "</ram:IssuerAssignedID>"
+ "<ram:TypeCode>130</ram:TypeCode>";
if (trans.getObjectIdentifierReferencedDocument().getFormattedIssueDateTime()!=null) {
xml += "<ram:FormattedIssueDateTime>" + DATE.qdtFormat(trans.getObjectIdentifierReferencedDocument().getFormattedIssueDateTime()) + "</ram:FormattedIssueDateTime>";
}
xml += "</ram:AdditionalReferencedDocument>";
}
if (trans.getTenderReferencedDocument() != null){ if (trans.getTenderReferencedDocument() != null){
xml += "<ram:AdditionalReferencedDocument>" xml += "<ram:AdditionalReferencedDocument>"
+ "<ram:IssuerAssignedID>" + XMLTools.encodeXML(trans.getTenderReferencedDocument().getIssuerAssignedID()) + "</ram:IssuerAssignedID>" + "<ram:IssuerAssignedID>" + XMLTools.encodeXML(trans.getTenderReferencedDocument().getIssuerAssignedID()) + "</ram:IssuerAssignedID>"
+ "<ram:TypeCode>" + 50 + "</ram:TypeCode>"; + "<ram:TypeCode>50</ram:TypeCode>";
if (trans.getTenderReferencedDocument().getFormattedIssueDateTime()!=null) { if (trans.getTenderReferencedDocument().getFormattedIssueDateTime()!=null) {
final SimpleDateFormat dateFormat102 = new SimpleDateFormat("yyyyMMdd"); xml += "<ram:FormattedIssueDateTime>" + DATE.qdtFormat(trans.getTenderReferencedDocument().getFormattedIssueDateTime()) + "</ram:FormattedIssueDateTime>";
xml += "<ram:FormattedIssueDateTime><qdt:DateTimeString format=\"102\">"+XMLTools.encodeXML(dateFormat102.format(trans.getTenderReferencedDocument().getFormattedIssueDateTime()))+"</qdt:DateTimeString></ram:FormattedIssueDateTime>";
} }
xml += "</ram:AdditionalReferencedDocument>"; xml += "</ram:AdditionalReferencedDocument>";
} }
if (trans.getSpecifiedProcuringProjectID() != null) { if (trans.getSpecifiedProcuringProjectID() != null) {

View File

@@ -176,6 +176,38 @@ public class ZF2EdgeTest extends MustangReaderTestCase {
}; };
} }
@Override
public IReferencedDocument getObjectIdentifierReferencedDocument() {
return new IReferencedDocument() {
@Override
public String getIssuerAssignedID() {
return "gPogKLtac0";
}
@Override
public String getTypeCode() {
return "130";
}
@Override
public String getReferenceTypeCode() {
return "";
}
@Override
public Date getFormattedIssueDateTime() {
SimpleDateFormat sdf=new SimpleDateFormat("YYYY-mm-dd");
try {
return sdf.parse("2026-01-26");
} catch (ParseException e) {
throw new RuntimeException(e);
}
}
};
}
@Override @Override
public String getOwnLocation() { public String getOwnLocation() {
return "Stadthausen"; return "Stadthausen";