Skip to content

Commit a2e9b07

Browse files
committed
22Reader and Tests
Added functionality in Reader and Test for SpecifiedTradeAllowanceCharge
1 parent 61e355c commit a2e9b07

File tree

2 files changed

+38
-1
lines changed

2 files changed

+38
-1
lines changed

ZUGFeRD-Test/ZUGFeRD22Tests.cs

+24
Original file line numberDiff line numberDiff line change
@@ -1926,5 +1926,29 @@ public void TestWriteAndReadDespatchAdviceDocumentReferenceXRechnung()
19261926
Assert.AreEqual(despatchAdviceNo, loadedInvoice.DespatchAdviceReferencedDocument.ID);
19271927
Assert.AreEqual(despatchAdviceDate, loadedInvoice.DespatchAdviceReferencedDocument.IssueDateTime);
19281928
} //!TestWriteAndReadDespatchAdviceDocumentReference
1929+
1930+
[TestMethod]
1931+
public void TestSpecifiedTradeAllowanceCharge()
1932+
{
1933+
InvoiceDescriptor invoice = InvoiceProvider.CreateInvoice();
1934+
1935+
invoice.TradeLineItems[0].AddSpecifiedTradeAllowanceCharge(true, CurrencyCodes.EUR, 198m, 19.8m, 10m, "Discount 10%");
1936+
1937+
MemoryStream ms = new MemoryStream();
1938+
invoice.Save(ms, ZUGFeRDVersion.Version22, Profile.Extended);
1939+
ms.Position = 0;
1940+
1941+
InvoiceDescriptor loadedInvoice = InvoiceDescriptor.Load(ms);
1942+
TradeAllowanceCharge allowanceCharge = loadedInvoice.TradeLineItems[0].GetSpecifiedTradeAllowanceCharges().First();
1943+
1944+
Assert.AreEqual(allowanceCharge.ChargeIndicator, false);//false = discount
1945+
//CurrencyCodes are not written bei InvoiceDescriptor22Writer
1946+
//Assert.AreEqual(allowanceCharge.Currency, CurrencyCodes.EUR);
1947+
Assert.AreEqual(allowanceCharge.BasisAmount, 198m);
1948+
Assert.AreEqual(allowanceCharge.ActualAmount, 19.8m);
1949+
Assert.AreEqual(allowanceCharge.ChargePercentage, 10m);
1950+
Assert.AreEqual(allowanceCharge.Reason, "Discount 10%");
1951+
} // !SpecifiedTradeAllowanceCharge()
1952+
19291953
}
19301954
}

ZUGFeRD/InvoiceDescriptor22Reader.cs

+14-1
Original file line numberDiff line numberDiff line change
@@ -497,7 +497,20 @@ private static TradeLineItem _parseTradeLineItem(XmlNode tradeLineItem, XmlNames
497497
//TODO
498498
break;
499499
case "ram:SpecifiedTradeAllowanceCharge":
500-
//TODO
500+
bool chargeIndicator = _nodeAsBool(LineTradeSettlementNode, "./ram:ChargeIndicator/udt:Indicator", nsmgr);
501+
decimal? basisAmount = _nodeAsDecimal(LineTradeSettlementNode, "./ram:BasisAmount", nsmgr, null);
502+
string basisAmountCurrency = _nodeAsString(LineTradeSettlementNode, "./ram:BasisAmount/@currencyID", nsmgr);
503+
decimal actualAmount = _nodeAsDecimal(LineTradeSettlementNode, "./ram:ActualAmount", nsmgr, 0).Value;
504+
string actualAmountCurrency = _nodeAsString(LineTradeSettlementNode, "./ram:ActualAmount/@currencyID", nsmgr);
505+
string reason = _nodeAsString(LineTradeSettlementNode, "./ram:Reason", nsmgr);
506+
decimal? chargePercentage = _nodeAsDecimal(LineTradeSettlementNode, "./ram:CalculationPercent", nsmgr, null);
507+
508+
item.AddSpecifiedTradeAllowanceCharge(!chargeIndicator, // wichtig: das not (!) beachten
509+
default(CurrencyCodes).FromString(basisAmountCurrency),
510+
basisAmount,
511+
actualAmount,
512+
chargePercentage,
513+
reason);
501514
break;
502515
case "ram:SpecifiedTradeSettlementLineMonetarySummation":
503516
//TODO

0 commit comments

Comments
 (0)