Skip to content

Commit 442632a

Browse files
committed
Removed unneeded null checks, Service Charge can be set via function() only, not by accessing the property
1 parent af0b6d0 commit 442632a

4 files changed

+133
-156
lines changed

ZUGFeRD/InvoiceDescriptor.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -248,7 +248,7 @@ public class InvoiceDescriptor
248248
/// <summary>
249249
/// Transport and packaging costs
250250
/// </summary>
251-
public List<ServiceCharge> ServiceCharges { get; set; } = new List<ServiceCharge>();
251+
public List<ServiceCharge> ServiceCharges { get; internal set; } = new List<ServiceCharge>();
252252

253253
/// <summary>
254254
/// Detailed information on discounts and charges.

ZUGFeRD/InvoiceDescriptor1Writer.cs

+55-63
Original file line numberDiff line numberDiff line change
@@ -132,30 +132,28 @@ public override void Save(InvoiceDescriptor descriptor, Stream stream)
132132
Writer.WriteEndElement(); // !BuyerOrderReferencedDocument
133133
}
134134

135-
if (this.Descriptor.AdditionalReferencedDocuments != null)
136-
{
137-
foreach(AdditionalReferencedDocument document in this.Descriptor.AdditionalReferencedDocuments)
138-
{
139-
Writer.WriteStartElement("ram:AdditionalReferencedDocument");
140-
if (document.IssueDateTime.HasValue)
141-
{
142-
Writer.WriteStartElement("ram:IssueDateTime");
143-
//Writer.WriteStartElement("udt:DateTimeString");
144-
//Writer.WriteAttributeString("format", "102");
145-
Writer.WriteValue(_formatDate(document.IssueDateTime.Value, false));
146-
//Writer.WriteEndElement(); // !udt:DateTimeString
147-
Writer.WriteEndElement(); // !IssueDateTime()
148-
}
135+
136+
foreach(AdditionalReferencedDocument document in this.Descriptor.AdditionalReferencedDocuments)
137+
{
138+
Writer.WriteStartElement("ram:AdditionalReferencedDocument");
139+
if (document.IssueDateTime.HasValue)
140+
{
141+
Writer.WriteStartElement("ram:IssueDateTime");
142+
//Writer.WriteStartElement("udt:DateTimeString");
143+
//Writer.WriteAttributeString("format", "102");
144+
Writer.WriteValue(_formatDate(document.IssueDateTime.Value, false));
145+
//Writer.WriteEndElement(); // !udt:DateTimeString
146+
Writer.WriteEndElement(); // !IssueDateTime()
147+
}
149148

150-
if (document.ReferenceTypeCode != ReferenceTypeCodes.Unknown)
151-
{
152-
Writer.WriteElementString("ram:TypeCode", document.ReferenceTypeCode.EnumToString());
153-
}
149+
if (document.ReferenceTypeCode != ReferenceTypeCodes.Unknown)
150+
{
151+
Writer.WriteElementString("ram:TypeCode", document.ReferenceTypeCode.EnumToString());
152+
}
154153

155-
Writer.WriteElementString("ram:ID", document.ID);
156-
Writer.WriteEndElement(); // !ram:AdditionalReferencedDocument
157-
} // !foreach(document)
158-
}
154+
Writer.WriteElementString("ram:ID", document.ID);
155+
Writer.WriteEndElement(); // !ram:AdditionalReferencedDocument
156+
} // !foreach(document)
159157

160158
Writer.WriteEndElement(); // !ApplicableSupplyChainTradeAgreement
161159

@@ -303,62 +301,56 @@ public override void Save(InvoiceDescriptor descriptor, Stream stream)
303301

304302
_writeOptionalTaxes(Writer);
305303

306-
if ((this.Descriptor.GetTradeAllowanceCharges() != null) && (this.Descriptor.GetTradeAllowanceCharges().Count > 0))
304+
foreach (TradeAllowanceCharge tradeAllowanceCharge in this.Descriptor.GetTradeAllowanceCharges())
307305
{
308-
foreach (TradeAllowanceCharge tradeAllowanceCharge in this.Descriptor.GetTradeAllowanceCharges())
309-
{
310-
Writer.WriteStartElement("ram:SpecifiedTradeAllowanceCharge");
311-
Writer.WriteStartElement("ram:ChargeIndicator", Profile.Comfort | Profile.Extended);
312-
Writer.WriteElementString("udt:Indicator", tradeAllowanceCharge.ChargeIndicator ? "true" : "false");
313-
Writer.WriteEndElement(); // !ram:ChargeIndicator
314-
315-
if (tradeAllowanceCharge.BasisAmount.HasValue)
316-
{
317-
Writer.WriteStartElement("ram:BasisAmount", Profile.Extended);
318-
Writer.WriteAttributeString("currencyID", tradeAllowanceCharge.Currency.EnumToString());
319-
Writer.WriteValue(_formatDecimal(tradeAllowanceCharge.BasisAmount.Value));
320-
Writer.WriteEndElement();
321-
}
306+
Writer.WriteStartElement("ram:SpecifiedTradeAllowanceCharge");
307+
Writer.WriteStartElement("ram:ChargeIndicator", Profile.Comfort | Profile.Extended);
308+
Writer.WriteElementString("udt:Indicator", tradeAllowanceCharge.ChargeIndicator ? "true" : "false");
309+
Writer.WriteEndElement(); // !ram:ChargeIndicator
322310

323-
Writer.WriteStartElement("ram:ActualAmount", Profile.Comfort | Profile.Extended);
311+
if (tradeAllowanceCharge.BasisAmount.HasValue)
312+
{
313+
Writer.WriteStartElement("ram:BasisAmount", Profile.Extended);
324314
Writer.WriteAttributeString("currencyID", tradeAllowanceCharge.Currency.EnumToString());
325-
Writer.WriteValue(_formatDecimal(tradeAllowanceCharge.ActualAmount, 2));
315+
Writer.WriteValue(_formatDecimal(tradeAllowanceCharge.BasisAmount.Value));
326316
Writer.WriteEndElement();
317+
}
327318

319+
Writer.WriteStartElement("ram:ActualAmount", Profile.Comfort | Profile.Extended);
320+
Writer.WriteAttributeString("currencyID", tradeAllowanceCharge.Currency.EnumToString());
321+
Writer.WriteValue(_formatDecimal(tradeAllowanceCharge.ActualAmount, 2));
322+
Writer.WriteEndElement();
328323

329-
Writer.WriteOptionalElementString("ram:Reason", tradeAllowanceCharge.Reason, Profile.Comfort | Profile.Extended);
330324

331-
if (tradeAllowanceCharge.Tax != null)
332-
{
333-
Writer.WriteStartElement("ram:CategoryTradeTax");
334-
Writer.WriteElementString("ram:TypeCode", tradeAllowanceCharge.Tax.TypeCode.EnumToString(), Profile.Comfort | Profile.Extended);
335-
if (tradeAllowanceCharge.Tax.CategoryCode.HasValue)
336-
Writer.WriteElementString("ram:CategoryCode", tradeAllowanceCharge.Tax.CategoryCode?.EnumToString(), Profile.Comfort | Profile.Extended);
337-
Writer.WriteElementString("ram:ApplicablePercent", _formatDecimal(tradeAllowanceCharge.Tax.Percent), Profile.Comfort | Profile.Extended);
338-
Writer.WriteEndElement();
339-
}
325+
Writer.WriteOptionalElementString("ram:Reason", tradeAllowanceCharge.Reason, Profile.Comfort | Profile.Extended);
326+
327+
if (tradeAllowanceCharge.Tax != null)
328+
{
329+
Writer.WriteStartElement("ram:CategoryTradeTax");
330+
Writer.WriteElementString("ram:TypeCode", tradeAllowanceCharge.Tax.TypeCode.EnumToString(), Profile.Comfort | Profile.Extended);
331+
if (tradeAllowanceCharge.Tax.CategoryCode.HasValue)
332+
Writer.WriteElementString("ram:CategoryCode", tradeAllowanceCharge.Tax.CategoryCode?.EnumToString(), Profile.Comfort | Profile.Extended);
333+
Writer.WriteElementString("ram:ApplicablePercent", _formatDecimal(tradeAllowanceCharge.Tax.Percent), Profile.Comfort | Profile.Extended);
340334
Writer.WriteEndElement();
341335
}
336+
Writer.WriteEndElement();
342337
}
343338

344-
if ((this.Descriptor.ServiceCharges != null) && (this.Descriptor.ServiceCharges.Count > 0))
339+
foreach (ServiceCharge serviceCharge in this.Descriptor.ServiceCharges)
345340
{
346-
foreach (ServiceCharge serviceCharge in this.Descriptor.ServiceCharges)
341+
Writer.WriteStartElement("ram:SpecifiedLogisticsServiceCharge");
342+
Writer.WriteOptionalElementString("ram:Description", serviceCharge.Description, Profile.Comfort | Profile.Extended);
343+
Writer.WriteElementString("ram:AppliedAmount", _formatDecimal(serviceCharge.Amount), Profile.Comfort | Profile.Extended);
344+
if (serviceCharge.Tax != null)
347345
{
348-
Writer.WriteStartElement("ram:SpecifiedLogisticsServiceCharge");
349-
Writer.WriteOptionalElementString("ram:Description", serviceCharge.Description, Profile.Comfort | Profile.Extended);
350-
Writer.WriteElementString("ram:AppliedAmount", _formatDecimal(serviceCharge.Amount), Profile.Comfort | Profile.Extended);
351-
if (serviceCharge.Tax != null)
352-
{
353-
Writer.WriteStartElement("ram:AppliedTradeTax");
354-
Writer.WriteElementString("ram:TypeCode", serviceCharge.Tax.TypeCode.EnumToString(), Profile.Comfort | Profile.Extended);
355-
if (serviceCharge.Tax.CategoryCode.HasValue)
356-
Writer.WriteElementString("ram:CategoryCode", serviceCharge.Tax.CategoryCode?.EnumToString(), Profile.Comfort | Profile.Extended);
357-
Writer.WriteElementString("ram:ApplicablePercent", _formatDecimal(serviceCharge.Tax.Percent), Profile.Comfort | Profile.Extended);
358-
Writer.WriteEndElement();
359-
}
346+
Writer.WriteStartElement("ram:AppliedTradeTax");
347+
Writer.WriteElementString("ram:TypeCode", serviceCharge.Tax.TypeCode.EnumToString(), Profile.Comfort | Profile.Extended);
348+
if (serviceCharge.Tax.CategoryCode.HasValue)
349+
Writer.WriteElementString("ram:CategoryCode", serviceCharge.Tax.CategoryCode?.EnumToString(), Profile.Comfort | Profile.Extended);
350+
Writer.WriteElementString("ram:ApplicablePercent", _formatDecimal(serviceCharge.Tax.Percent), Profile.Comfort | Profile.Extended);
360351
Writer.WriteEndElement();
361352
}
353+
Writer.WriteEndElement();
362354
}
363355

364356
if (this.Descriptor.PaymentTerms != null)

ZUGFeRD/InvoiceDescriptor20Writer.cs

+51-60
Original file line numberDiff line numberDiff line change
@@ -203,27 +203,24 @@ public override void Save(InvoiceDescriptor descriptor, Stream stream)
203203
Writer.WriteEndElement(); // !ram:ContractReferencedDocument(Extended)
204204
}
205205

206-
if (tradeLineItem.AdditionalReferencedDocuments != null)
206+
foreach (AdditionalReferencedDocument document in tradeLineItem.AdditionalReferencedDocuments)
207207
{
208-
foreach (AdditionalReferencedDocument document in tradeLineItem.AdditionalReferencedDocuments)
208+
Writer.WriteStartElement("ram:AdditionalReferencedDocument");
209+
if (document.IssueDateTime.HasValue)
209210
{
210-
Writer.WriteStartElement("ram:AdditionalReferencedDocument");
211-
if (document.IssueDateTime.HasValue)
212-
{
213-
Writer.WriteStartElement("ram:FormattedIssueDateTime");
214-
Writer.WriteStartElement("qdt:DateTimeString");
215-
Writer.WriteValue(_formatDate(document.IssueDateTime.Value));
216-
Writer.WriteEndElement(); // !qdt:DateTimeString
217-
Writer.WriteEndElement(); // !ram:FormattedIssueDateTime
218-
}
211+
Writer.WriteStartElement("ram:FormattedIssueDateTime");
212+
Writer.WriteStartElement("qdt:DateTimeString");
213+
Writer.WriteValue(_formatDate(document.IssueDateTime.Value));
214+
Writer.WriteEndElement(); // !qdt:DateTimeString
215+
Writer.WriteEndElement(); // !ram:FormattedIssueDateTime
216+
}
219217

220-
Writer.WriteElementString("ram:LineID", String.Format("{0}", tradeLineItem.AssociatedDocument?.LineID));
221-
Writer.WriteOptionalElementString("ram:IssuerAssignedID", document.ID);
222-
Writer.WriteElementString("ram:ReferenceTypeCode", document.ReferenceTypeCode.EnumToString());
218+
Writer.WriteElementString("ram:LineID", String.Format("{0}", tradeLineItem.AssociatedDocument?.LineID));
219+
Writer.WriteOptionalElementString("ram:IssuerAssignedID", document.ID);
220+
Writer.WriteElementString("ram:ReferenceTypeCode", document.ReferenceTypeCode.EnumToString());
223221

224-
Writer.WriteEndElement(); // !ram:AdditionalReferencedDocument
225-
} // !foreach(document)
226-
}
222+
Writer.WriteEndElement(); // !ram:AdditionalReferencedDocument
223+
} // !foreach(document)
227224

228225
Writer.WriteStartElement("ram:GrossPriceProductTradePrice");
229226
_writeOptionalAmount(Writer, "ram:ChargeAmount", tradeLineItem.GrossUnitPrice, numDecimals: 4, forceCurrency: false);
@@ -651,64 +648,58 @@ public override void Save(InvoiceDescriptor descriptor, Stream stream)
651648
#endregion
652649

653650
// 13. SpecifiedTradeAllowanceCharge (optional)
654-
if ((this.Descriptor.GetTradeAllowanceCharges() != null) && (this.Descriptor.GetTradeAllowanceCharges().Count > 0))
651+
foreach (TradeAllowanceCharge tradeAllowanceCharge in this.Descriptor.GetTradeAllowanceCharges())
655652
{
656-
foreach (TradeAllowanceCharge tradeAllowanceCharge in this.Descriptor.GetTradeAllowanceCharges())
657-
{
658-
Writer.WriteStartElement("ram:SpecifiedTradeAllowanceCharge");
659-
Writer.WriteStartElement("ram:ChargeIndicator");
660-
Writer.WriteElementString("udt:Indicator", tradeAllowanceCharge.ChargeIndicator ? "true" : "false");
661-
Writer.WriteEndElement(); // !ram:ChargeIndicator
662-
663-
if (tradeAllowanceCharge.BasisAmount.HasValue)
664-
{
665-
Writer.WriteStartElement("ram:BasisAmount");
666-
Writer.WriteValue(_formatDecimal(tradeAllowanceCharge.BasisAmount.Value));
667-
Writer.WriteEndElement();
668-
}
653+
Writer.WriteStartElement("ram:SpecifiedTradeAllowanceCharge");
654+
Writer.WriteStartElement("ram:ChargeIndicator");
655+
Writer.WriteElementString("udt:Indicator", tradeAllowanceCharge.ChargeIndicator ? "true" : "false");
656+
Writer.WriteEndElement(); // !ram:ChargeIndicator
669657

670-
Writer.WriteStartElement("ram:ActualAmount");
671-
Writer.WriteValue(_formatDecimal(tradeAllowanceCharge.ActualAmount));
658+
if (tradeAllowanceCharge.BasisAmount.HasValue)
659+
{
660+
Writer.WriteStartElement("ram:BasisAmount");
661+
Writer.WriteValue(_formatDecimal(tradeAllowanceCharge.BasisAmount.Value));
672662
Writer.WriteEndElement();
663+
}
673664

665+
Writer.WriteStartElement("ram:ActualAmount");
666+
Writer.WriteValue(_formatDecimal(tradeAllowanceCharge.ActualAmount));
667+
Writer.WriteEndElement();
674668

675-
Writer.WriteOptionalElementString("ram:Reason", tradeAllowanceCharge.Reason);
676669

677-
if (tradeAllowanceCharge.Tax != null)
678-
{
679-
Writer.WriteStartElement("ram:CategoryTradeTax");
680-
Writer.WriteElementString("ram:TypeCode", tradeAllowanceCharge.Tax.TypeCode.EnumToString());
681-
if (tradeAllowanceCharge.Tax.CategoryCode.HasValue)
682-
Writer.WriteElementString("ram:CategoryCode", tradeAllowanceCharge.Tax.CategoryCode?.EnumToString());
683-
Writer.WriteElementString("ram:RateApplicablePercent", _formatDecimal(tradeAllowanceCharge.Tax.Percent));
684-
Writer.WriteEndElement();
685-
}
670+
Writer.WriteOptionalElementString("ram:Reason", tradeAllowanceCharge.Reason);
671+
672+
if (tradeAllowanceCharge.Tax != null)
673+
{
674+
Writer.WriteStartElement("ram:CategoryTradeTax");
675+
Writer.WriteElementString("ram:TypeCode", tradeAllowanceCharge.Tax.TypeCode.EnumToString());
676+
if (tradeAllowanceCharge.Tax.CategoryCode.HasValue)
677+
Writer.WriteElementString("ram:CategoryCode", tradeAllowanceCharge.Tax.CategoryCode?.EnumToString());
678+
Writer.WriteElementString("ram:RateApplicablePercent", _formatDecimal(tradeAllowanceCharge.Tax.Percent));
686679
Writer.WriteEndElement();
687680
}
681+
Writer.WriteEndElement();
688682
}
689683

690684
// 14. SpecifiedLogisticsServiceCharge (optional)
691-
if ((this.Descriptor.ServiceCharges != null) && (this.Descriptor.ServiceCharges.Count > 0))
685+
foreach (ServiceCharge serviceCharge in this.Descriptor.ServiceCharges)
692686
{
693-
foreach (ServiceCharge serviceCharge in this.Descriptor.ServiceCharges)
687+
Writer.WriteStartElement("ram:SpecifiedLogisticsServiceCharge");
688+
if (!String.IsNullOrWhiteSpace(serviceCharge.Description))
694689
{
695-
Writer.WriteStartElement("ram:SpecifiedLogisticsServiceCharge");
696-
if (!String.IsNullOrWhiteSpace(serviceCharge.Description))
697-
{
698-
Writer.WriteElementString("ram:Description", serviceCharge.Description);
699-
}
700-
Writer.WriteElementString("ram:AppliedAmount", _formatDecimal(serviceCharge.Amount));
701-
if (serviceCharge.Tax != null)
702-
{
703-
Writer.WriteStartElement("ram:AppliedTradeTax");
704-
Writer.WriteElementString("ram:TypeCode", serviceCharge.Tax.TypeCode.EnumToString());
705-
if (serviceCharge.Tax.CategoryCode.HasValue)
706-
Writer.WriteElementString("ram:CategoryCode", serviceCharge.Tax.CategoryCode?.EnumToString());
707-
Writer.WriteElementString("ram:RateApplicablePercent", _formatDecimal(serviceCharge.Tax.Percent));
708-
Writer.WriteEndElement();
709-
}
690+
Writer.WriteElementString("ram:Description", serviceCharge.Description);
691+
}
692+
Writer.WriteElementString("ram:AppliedAmount", _formatDecimal(serviceCharge.Amount));
693+
if (serviceCharge.Tax != null)
694+
{
695+
Writer.WriteStartElement("ram:AppliedTradeTax");
696+
Writer.WriteElementString("ram:TypeCode", serviceCharge.Tax.TypeCode.EnumToString());
697+
if (serviceCharge.Tax.CategoryCode.HasValue)
698+
Writer.WriteElementString("ram:CategoryCode", serviceCharge.Tax.CategoryCode?.EnumToString());
699+
Writer.WriteElementString("ram:RateApplicablePercent", _formatDecimal(serviceCharge.Tax.Percent));
710700
Writer.WriteEndElement();
711701
}
702+
Writer.WriteEndElement();
712703
}
713704

714705
// 15. SpecifiedTradePaymentTerms (optional)

0 commit comments

Comments
 (0)