Skip to content

Commit

Permalink
Merge pull request #569 from tobitege/fix-regressions
Browse files Browse the repository at this point in the history
Fix rule regressions for 2 line item elements
  • Loading branch information
stephanstapel authored Jan 10, 2025
2 parents 20ab1b9 + c558761 commit 03f255a
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 11 deletions.
15 changes: 9 additions & 6 deletions ZUGFeRD.Test/ZUGFeRD22Tests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2320,9 +2320,12 @@ public void TestSpecifiedTradeAllowanceCharge(Profile profile)
Assert.AreEqual(allowanceCharge.ChargeIndicator, false);//false = discount
//CurrencyCodes are not written bei InvoiceDescriptor22Writer
//Assert.AreEqual(allowanceCharge.Currency, CurrencyCodes.EUR);
Assert.AreEqual(allowanceCharge.BasisAmount, 198m);
if (profile != Profile.Basic)
{
Assert.AreEqual(allowanceCharge.BasisAmount, 198m);
Assert.AreEqual(allowanceCharge.ChargePercentage, 10m);
}
Assert.AreEqual(allowanceCharge.ActualAmount, 19.8m);
Assert.AreEqual(allowanceCharge.ChargePercentage, 10m);
Assert.AreEqual(allowanceCharge.Reason, "Discount 10%");
} // !SpecifiedTradeAllowanceCharge()

Expand Down Expand Up @@ -2622,7 +2625,7 @@ public void TestPaymentTermsMultiCardinalityWithBasic()
paymentTerm = loadedInvoice.GetTradePaymentTerms().LastOrDefault();
Assert.IsNotNull(paymentTerm);
Assert.IsNull(paymentTerm.PaymentTermsType);
Assert.AreEqual("3% Skonto innerhalb 10 Tagen bis 15.03.2018", paymentTerm.Description);
Assert.AreEqual("3% Skonto innerhalb 10 Tagen bis 15.03.2018", paymentTerm.Description);
Assert.IsNull(paymentTerm.Percentage);
} // !TestPaymentTermsMultiCardinalityWithBasic()

Expand Down Expand Up @@ -2667,7 +2670,7 @@ public void TestPaymentTermsSingleCardinality()
DateTime timestamp = DateTime.Now.Date;
var desc = _InvoiceProvider.CreateInvoice();
desc.GetTradePaymentTerms().Clear();
desc.AddTradePaymentTerms("Zahlbar innerhalb 30 Tagen netto bis 04.04.2018", new DateTime(2018, 4, 4));
desc.AddTradePaymentTerms("Zahlbar innerhalb 30 Tagen netto bis 04.04.2018", new DateTime(2018, 4, 4));
desc.GetTradePaymentTerms().First().DueDate = timestamp.AddDays(14);

MemoryStream ms = new MemoryStream();
Expand Down Expand Up @@ -2698,13 +2701,13 @@ public void TestPaymentTermsSingleCardinality()

[TestMethod]
public void TestPaymentTermsMultiCardinalityXRechnungStructured()
{
{
DateTime timestamp = DateTime.Now.Date;
var desc = _InvoiceProvider.CreateInvoice();
desc.GetTradePaymentTerms().Clear();
desc.AddTradePaymentTerms(String.Empty, null, PaymentTermsType.Skonto, 14, 2.25m);
desc.GetTradePaymentTerms().First().DueDate = timestamp.AddDays(14);
desc.AddTradePaymentTerms("Description2", null, PaymentTermsType.Skonto, 28, 1m);
desc.AddTradePaymentTerms("Description2", null, PaymentTermsType.Skonto, 28, 1m);

MemoryStream ms = new MemoryStream();
desc.Save(ms, ZUGFeRDVersion.Version23, Profile.XRechnung);
Expand Down
18 changes: 13 additions & 5 deletions ZUGFeRD/InvoiceDescriptor23CIIWriter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -263,8 +263,14 @@ public override void Save(InvoiceDescriptor descriptor, Stream stream, ZUGFeRDFo
Writer.WriteStartElement("ram", "SpecifiedLineTradeAgreement", Profile.Basic | Profile.Comfort | Profile.Extended | Profile.XRechnung1 | Profile.XRechnung);

#region BuyerOrderReferencedDocument (Comfort, Extended, XRechnung)
//Detailangaben zur zugehörigen Bestellung
if (tradeLineItem.BuyerOrderReferencedDocument != null && (!string.IsNullOrWhiteSpace(tradeLineItem.BuyerOrderReferencedDocument.LineID) || descriptor.Profile == Profile.Extended))
// Detailangaben zur zugehörigen Bestellung
bool hasLineID = !string.IsNullOrWhiteSpace(tradeLineItem.BuyerOrderReferencedDocument?.LineID);
bool hasIssuerAssignedID = !string.IsNullOrWhiteSpace(tradeLineItem.BuyerOrderReferencedDocument?.ID);
bool hasIssueDateTime = tradeLineItem.BuyerOrderReferencedDocument?.IssueDateTime != null;

if (tradeLineItem.BuyerOrderReferencedDocument != null &&
(((descriptor.Profile != Profile.Extended) && hasLineID) ||
((descriptor.Profile == Profile.Extended) && (hasLineID || hasIssuerAssignedID || hasIssueDateTime))))
{
Writer.WriteStartElement("ram", "BuyerOrderReferencedDocument", Profile.Comfort | Profile.Extended | Profile.XRechnung1 | Profile.XRechnung);

Expand Down Expand Up @@ -508,7 +514,7 @@ public override void Save(InvoiceDescriptor descriptor, Stream stream, ZUGFeRDFo
#region ChargePercentage
if (specifiedTradeAllowanceCharge.ChargePercentage.HasValue)
{
Writer.WriteStartElement("ram", "CalculationPercent"); // BT-143
Writer.WriteStartElement("ram", "CalculationPercent", ALL_PROFILES ^ Profile.Basic); // BT-138, BT-143
Writer.WriteValue(_formatDecimal(specifiedTradeAllowanceCharge.ChargePercentage.Value, 2));
Writer.WriteEndElement();
}
Expand All @@ -517,7 +523,7 @@ public override void Save(InvoiceDescriptor descriptor, Stream stream, ZUGFeRDFo
#region BasisAmount
if (specifiedTradeAllowanceCharge.BasisAmount.HasValue)
{
Writer.WriteStartElement("ram", "BasisAmount", profile: Profile.Basic| Profile.Comfort | Profile.Extended | Profile.XRechnung);
Writer.WriteStartElement("ram", "BasisAmount", ALL_PROFILES ^ Profile.Basic); // BT-137, BT-142
Writer.WriteValue(_formatDecimal(specifiedTradeAllowanceCharge.BasisAmount.Value, 2));
Writer.WriteEndElement();
}
Expand All @@ -529,7 +535,9 @@ public override void Save(InvoiceDescriptor descriptor, Stream stream, ZUGFeRDFo
Writer.WriteEndElement();
#endregion

Writer.WriteOptionalElementString("ram", "Reason", specifiedTradeAllowanceCharge.Reason, Profile.Basic| Profile.Comfort | Profile.Extended | Profile.XRechnung);
// TODO: ReasonCode, BT-140, BT-145 -> missing in TradeAllowanceCharge
Writer.WriteOptionalElementString("ram", "Reason", specifiedTradeAllowanceCharge.Reason); // BT-139, BT-144

Writer.WriteEndElement(); // !ram:SpecifiedTradeAllowanceCharge
}
}
Expand Down

0 comments on commit 03f255a

Please sign in to comment.