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 detailedDeliveryPeriodEnd = null;
protected IReferencedDocument tenderReference = null;
protected IReferencedDocument objectIdentifierReference = null;
protected ArrayList<IZUGFeRDAllowanceCharge> Allowances = 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) {
this.number = number;
return this;

View File

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

View File

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