Skip to content

Commit 6fa4bec

Browse files
Merge pull request #299 from shahchandra/master
ApplicableProductCharacteristic in the UBL format
2 parents bc9e3dc + 284e6d4 commit 6fa4bec

File tree

4 files changed

+63
-16
lines changed

4 files changed

+63
-16
lines changed

ZUGFeRD-Test/InvoiceProvider.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ internal InvoiceDescriptor CreateInvoice()
8888
desc.ActualDeliveryDate = new DateTime(2018, 03, 05);
8989
desc.SetPaymentMeans(PaymentMeansTypeCodes.SEPACreditTransfer, "Zahlung per SEPA Überweisung.");
9090
desc.AddCreditorFinancialAccount(iban: "DE02120300000000202051", bic: "BYLADEM1001", name: "Kunden AG");
91-
desc.AddDebitorFinancialAccount(iban: "DB02120300000000202051", bic: "DBBYLADEM1001", bankName: "KundenDB AG");
91+
//desc.AddDebitorFinancialAccount(iban: "DB02120300000000202051", bic: "DBBYLADEM1001", bankName: "KundenDB AG");
9292
desc.AddApplicableTradeTax(basisAmount: 275.0m,
9393
percent: 7m,
9494
typeCode: TaxTypes.VAT,

ZUGFeRD-Test/ZUGFeRD22Tests.cs

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,6 @@ public void TestMinimumInvoice()
258258
public void TestUBLInvoiceCreation()
259259
{
260260
InvoiceDescriptor desc = this.InvoiceProvider.CreateInvoice();
261-
262261
MemoryStream ms = new MemoryStream();
263262

264263
desc.Save(ms, ZUGFeRDVersion.Version22,Profile.XRechnung,ZUGFeRDFormats.UBL);
@@ -273,6 +272,39 @@ public void TestUBLInvoiceCreation()
273272
Assert.IsNull(loadedInvoice.BuyerContact);
274273
}
275274

275+
[TestMethod]
276+
public void TestUBLTradelineitemProductCharacterstics()
277+
{
278+
InvoiceDescriptor desc = this.InvoiceProvider.CreateInvoice();
279+
280+
desc.TradeLineItems[0].ApplicableProductCharacteristics = new ApplicableProductCharacteristic[]
281+
{
282+
new ApplicableProductCharacteristic()
283+
{
284+
Description = "Test Description",
285+
Value = "1.5 kg"
286+
},
287+
new ApplicableProductCharacteristic()
288+
{
289+
Description = "UBL Characterstics 2",
290+
Value = "3 kg"
291+
},
292+
}.ToList();
293+
294+
MemoryStream ms = new MemoryStream();
295+
296+
desc.Save(ms, ZUGFeRDVersion.Version22, Profile.XRechnung, ZUGFeRDFormats.UBL);
297+
ms.Seek(0, SeekOrigin.Begin);
298+
299+
InvoiceDescriptor loadedInvoice = InvoiceDescriptor.Load(ms);
300+
301+
Assert.IsNotNull(loadedInvoice.TradeLineItems);
302+
Assert.AreEqual(loadedInvoice.TradeLineItems[0].ApplicableProductCharacteristics.Count, 2);
303+
Assert.AreEqual(loadedInvoice.TradeLineItems[0].ApplicableProductCharacteristics[0].Description, "Test Description");
304+
Assert.AreEqual(loadedInvoice.TradeLineItems[0].ApplicableProductCharacteristics[1].Value, "3 kg");
305+
}
306+
307+
276308
[TestMethod]
277309
public void TestInvoiceWithAttachmentXRechnung()
278310
{

ZUGFeRD/InvoiceDescriptor22UBLWriter.cs

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,7 @@
2121
using System.Collections.Generic;
2222
using System.IO;
2323
using System.Text;
24-
using System.Globalization;
25-
using System.Linq;
2624
using System.Xml;
27-
using System.Diagnostics;
2825

2926
namespace s2industries.ZUGFeRD
3027
{
@@ -274,6 +271,9 @@ public override void Save(InvoiceDescriptor descriptor, Stream stream, ZUGFeRDFo
274271
Writer.WriteElementString("cbc:ID", tradeLineItem.BuyerAssignedID);
275272
Writer.WriteEndElement(); //!BuyersItemIdentification
276273

274+
275+
_writeApplicableProductCharacteristics(Writer, tradeLineItem.ApplicableProductCharacteristics);
276+
277277
Writer.WriteEndElement(); //!Item
278278

279279

@@ -541,6 +541,20 @@ private void _writeOptionalParty(ProfileAwareXmlTextWriter writer, PartyTypes pa
541541
}
542542
} // !_writeOptionalParty()
543543

544+
private void _writeApplicableProductCharacteristics(ProfileAwareXmlTextWriter writer, List<ApplicableProductCharacteristic> productCharacteristics)
545+
{
546+
547+
if (productCharacteristics.Count > 0)
548+
{
549+
foreach (var characteristic in productCharacteristics)
550+
{
551+
writer.WriteStartElement("cac:AdditionalItemProperty");
552+
writer.WriteElementString("cbc:Name", characteristic.Description);
553+
writer.WriteElementString("cbc:Value", characteristic.Value);
554+
writer.WriteEndElement();
555+
}
556+
}
557+
} // !_writeApplicableProductCharacteristics()
544558

545559
private void _writeNotes(ProfileAwareXmlTextWriter writer, List<Note> notes)
546560
{

ZUGFeRD/InvoiceDescriptor22UblReader.cs

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -442,17 +442,18 @@ private static TradeLineItem _parseTradeLineItem(XmlNode tradeLineItem, XmlNames
442442
BillingPeriodEnd = _nodeAsDateTime(tradeLineItem, ".//cac:InvoicePeriod/cbc:EndDate", nsmgr),
443443
};
444444

445-
// TODO: Find value //if (tradeLineItem.SelectNodes(".//cac:Item/ram:ApplicableProductCharacteristic", nsmgr) != null)
446-
//{
447-
// foreach (XmlNode applicableProductCharacteristic in tradeLineItem.SelectNodes(".//cac:Item/ram:ApplicableProductCharacteristic", nsmgr))
448-
// {
449-
// item.ApplicableProductCharacteristics.Add(new ApplicableProductCharacteristic()
450-
// {
451-
// Description = _nodeAsString(applicableProductCharacteristic, ".//ram:Description", nsmgr),
452-
// Value = _nodeAsString(applicableProductCharacteristic, ".//ram:Value", nsmgr),
453-
// });
454-
// }
455-
//}
445+
// Read ApplicableProductCharacteristic
446+
if (tradeLineItem.SelectNodes(".//cac:Item/cac:AdditionalItemProperty", nsmgr) != null)
447+
{
448+
foreach (XmlNode applicableProductCharacteristic in tradeLineItem.SelectNodes(".//cac:Item/cac:AdditionalItemProperty", nsmgr))
449+
{
450+
item.ApplicableProductCharacteristics.Add(new ApplicableProductCharacteristic()
451+
{
452+
Description = _nodeAsString(applicableProductCharacteristic, ".//cbc:Name", nsmgr),
453+
Value = _nodeAsString(applicableProductCharacteristic, ".//cbc:Value", nsmgr),
454+
});
455+
}
456+
}
456457

457458
// TODO: Find value //if (tradeLineItem.SelectSingleNode(".//ram:SpecifiedLineTradeAgreement/ram:BuyerOrderReferencedDocument", nsmgr) != null)
458459
//{

0 commit comments

Comments
 (0)