Skip to content

Commit 800d9e6

Browse files
Merge pull request #266 from dbingham-tl/feature/DespatchAdviceReferencedDocument
Feature/despatch advice referenced document
2 parents 86f6a6a + 4a8e4b5 commit 800d9e6

5 files changed

+104
-0
lines changed

ZUGFeRD-Test/ZUGFeRD22Tests.cs

+17
Original file line numberDiff line numberDiff line change
@@ -1909,5 +1909,22 @@ public void TestReferenceXRechnung21UBL()
19091909

19101910
Assert.AreEqual(desc.PaymentMeans.TypeCode, (PaymentMeansTypeCodes)30);
19111911
} // !TestReferenceXRechnung21UBL()
1912+
1913+
[TestMethod]
1914+
public void TestWriteAndReadDespatchAdviceDocumentReferenceXRechnung()
1915+
{
1916+
InvoiceDescriptor desc = this.InvoiceProvider.CreateInvoice();
1917+
string despatchAdviceNo = "421567982";
1918+
DateTime despatchAdviceDate = new DateTime(2024, 5, 14);
1919+
desc.SetDespatchAdviceReferencedDocument(despatchAdviceNo, despatchAdviceDate);
1920+
1921+
MemoryStream ms = new MemoryStream();
1922+
desc.Save(ms, ZUGFeRDVersion.Version22, Profile.XRechnung);
1923+
ms.Seek(0, SeekOrigin.Begin);
1924+
InvoiceDescriptor loadedInvoice = InvoiceDescriptor.Load(ms);
1925+
1926+
Assert.AreEqual(despatchAdviceNo, loadedInvoice.DespatchAdviceReferencedDocument.ID);
1927+
Assert.AreEqual(despatchAdviceDate, loadedInvoice.DespatchAdviceReferencedDocument.IssueDateTime);
1928+
} //!TestWriteAndReadDespatchAdviceDocumentReference
19121929
}
19131930
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
/*
2+
* Licensed to the Apache Software Foundation (ASF) under one
3+
* or more contributor license agreements. See the NOTICE file
4+
* distributed with this work for additional information
5+
* regarding copyright ownership. The ASF licenses this file
6+
* to you under the Apache License, Version 2.0 (the
7+
* "License"); you may not use this file except in compliance
8+
* with the License. You may obtain a copy of the License at
9+
*
10+
* http://www.apache.org/licenses/LICENSE-2.0
11+
*
12+
* Unless required by applicable law or agreed to in writing,
13+
* software distributed under the License is distributed on an
14+
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15+
* KIND, either express or implied. See the License for the
16+
* specific language governing permissions and limitations
17+
* under the License.
18+
*/
19+
using System;
20+
using System.Collections.Generic;
21+
using System.Linq;
22+
using System.Text;
23+
24+
namespace s2industries.ZUGFeRD
25+
{
26+
/// <summary>
27+
/// Structure containing detailed information about the corresponding despatch advice
28+
/// </summary>
29+
public class DespatchAdviceReferencedDocument : BaseReferencedDocument
30+
{
31+
}
32+
}

ZUGFeRD/InvoiceDescriptor.cs

+18
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,11 @@ public class InvoiceDescriptor
6262
/// </summary>
6363
public List<AdditionalReferencedDocument> AdditionalReferencedDocuments { get; internal set; } = new List<AdditionalReferencedDocument>();
6464

65+
/// <summary>
66+
/// Detailed information about the corresponding despatch advice
67+
/// </summary>
68+
public DespatchAdviceReferencedDocument DespatchAdviceReferencedDocument { get; internal set; } = null;
69+
6570
/// <summary>
6671
/// Detailed information about the corresponding delivery note
6772
/// </summary>
@@ -664,6 +669,19 @@ public void SetBuyerOrderReferenceDocument(string orderNo, DateTime? orderDate =
664669
this.OrderDate = orderDate;
665670
} // !SetBuyerOrderReferenceDocument()
666671

672+
/// <summary>
673+
/// Sets detailed information about the corresponding despatch advice
674+
/// </summary>
675+
/// <param name="deliveryNoteNo"></param>
676+
/// <param name="deliveryNoteDate"></param>
677+
public void SetDespatchAdviceReferencedDocument(string despatchAdviceNo, DateTime? despatchAdviceDate = null)
678+
{
679+
this.DespatchAdviceReferencedDocument = new DespatchAdviceReferencedDocument()
680+
{
681+
ID = despatchAdviceNo,
682+
IssueDateTime = despatchAdviceDate
683+
};
684+
} // !SetDespatchAdviceReferencedDocument()
667685

668686
/// <summary>
669687
/// Sets detailed information about the corresponding delivery note

ZUGFeRD/InvoiceDescriptor22Reader.cs

+17
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,23 @@ public override InvoiceDescriptor Load(Stream stream)
188188
retval.ShipFrom = _nodeAsParty(doc.DocumentElement, "//ram:ApplicableHeaderTradeDelivery/ram:ShipFromTradeParty", nsmgr);
189189
retval.ActualDeliveryDate = _nodeAsDateTime(doc.DocumentElement, "//ram:ApplicableHeaderTradeDelivery/ram:ActualDeliverySupplyChainEvent/ram:OccurrenceDateTime/udt:DateTimeString", nsmgr);
190190

191+
string _despatchAdviceNo = _nodeAsString(doc.DocumentElement, "//ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:IssuerAssignedID", nsmgr);
192+
DateTime? _despatchAdviceDate = _nodeAsDateTime(doc.DocumentElement, "//ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:FormattedIssueDateTime/udt:DateTimeString", nsmgr);
193+
194+
if (!_despatchAdviceDate.HasValue)
195+
{
196+
_despatchAdviceDate = _nodeAsDateTime(doc.DocumentElement, "//ram:ApplicableHeaderTradeDelivery/ram:DespatchAdviceReferencedDocument/ram:FormattedIssueDateTime", nsmgr);
197+
}
198+
199+
if (_despatchAdviceDate.HasValue || !String.IsNullOrWhiteSpace(_despatchAdviceNo))
200+
{
201+
retval.DespatchAdviceReferencedDocument = new DespatchAdviceReferencedDocument()
202+
{
203+
ID = _despatchAdviceNo,
204+
IssueDateTime = _despatchAdviceDate
205+
};
206+
}
207+
191208
string _deliveryNoteNo = _nodeAsString(doc.DocumentElement, "//ram:ApplicableHeaderTradeDelivery/ram:DeliveryNoteReferencedDocument/ram:IssuerAssignedID", nsmgr);
192209
DateTime? _deliveryNoteDate = _nodeAsDateTime(doc.DocumentElement, "//ram:ApplicableHeaderTradeDelivery/ram:DeliveryNoteReferencedDocument/ram:IssueDateTime/udt:DateTimeString", nsmgr);
193210

ZUGFeRD/InvoiceDescriptor22Writer.cs

+20
Original file line numberDiff line numberDiff line change
@@ -646,6 +646,26 @@ public override void Save(InvoiceDescriptor descriptor, Stream stream)
646646
}
647647
#endregion
648648

649+
#region DespatchAdviceReferencedDocument
650+
if(this.Descriptor.DespatchAdviceReferencedDocument != null)
651+
{
652+
Writer.WriteStartElement("ram:DespatchAdviceReferencedDocument");
653+
Writer.WriteElementString("ram:IssuerAssignedID", this.Descriptor.DespatchAdviceReferencedDocument.ID);
654+
655+
if (this.Descriptor.DespatchAdviceReferencedDocument.IssueDateTime.HasValue)
656+
{
657+
Writer.WriteStartElement("ram:FormattedIssueDateTime");
658+
Writer.WriteStartElement("qdt:DateTimeString");
659+
Writer.WriteAttributeString("format", "102");
660+
Writer.WriteValue(_formatDate(this.Descriptor.DespatchAdviceReferencedDocument.IssueDateTime.Value));
661+
Writer.WriteEndElement(); // "qdt:DateTimeString
662+
Writer.WriteEndElement(); // !ram:FormattedIssueDateTime
663+
}
664+
665+
Writer.WriteEndElement(); // !DespatchAdviceReferencedDocument
666+
}
667+
#endregion
668+
649669
#region DeliveryNoteReferencedDocument
650670
if (this.Descriptor.DeliveryNoteReferencedDocument != null)
651671
{

0 commit comments

Comments
 (0)