|
21 | 21 | using System.Collections.Generic;
|
22 | 22 | using System.IO;
|
23 | 23 | using System.Linq;
|
24 |
| -using System.Xml.Linq; |
25 | 24 |
|
26 | 25 | namespace s2industries.ZUGFeRD
|
27 | 26 | {
|
@@ -654,35 +653,14 @@ private void _WriteTradeLineItem(TradeLineItem tradeLineItem, bool isInvoice = t
|
654 | 653 | }
|
655 | 654 | }
|
656 | 655 |
|
| 656 | + foreach (var specifiedTradeAllowanceCharge in tradeLineItem.GetSpecifiedTradeAllowances()) |
| 657 | + { |
| 658 | + _WriteItemLevelSpecifiedTradeAllowanceCharge(specifiedTradeAllowanceCharge); |
| 659 | + } |
| 660 | + |
657 | 661 | foreach (var specifiedTradeAllowanceCharge in tradeLineItem.GetSpecifiedTradeCharges())
|
658 | 662 | {
|
659 |
| - Writer.WriteStartElement("cac", "AllowanceCharge"); |
660 |
| - Writer.WriteElementString("cbc", "ChargeIndicator", |
661 |
| - specifiedTradeAllowanceCharge.ChargeIndicator ? "true" : "false"); // BG-28-0 |
662 |
| - Writer.WriteOptionalElementString("cbc", "AllowanceChargeReasonCode", |
663 |
| - specifiedTradeAllowanceCharge.ReasonCode.EnumToString()); // BT-140, BT-145 |
664 |
| - Writer.WriteOptionalElementString("cbc", "AllowanceChargeReason", |
665 |
| - specifiedTradeAllowanceCharge.Reason); // BT-139, BT-144 |
666 |
| - |
667 |
| - if (specifiedTradeAllowanceCharge.ChargePercentage.HasValue) |
668 |
| - { |
669 |
| - Writer.WriteOptionalElementString("cbc", "MultiplierFactorNumeric", |
670 |
| - _formatDecimal(specifiedTradeAllowanceCharge.ChargePercentage)); |
671 |
| - } |
672 |
| - |
673 |
| - Writer.WriteStartElement("cbc", "Amount"); |
674 |
| - Writer.WriteAttributeString("currencyID", this.Descriptor.Currency.EnumToString()); |
675 |
| - Writer.WriteValue(_formatDecimal(specifiedTradeAllowanceCharge.ActualAmount)); |
676 |
| - Writer.WriteEndElement(); // !Amount |
677 |
| - if (specifiedTradeAllowanceCharge.BasisAmount.HasValue) |
678 |
| - { |
679 |
| - Writer.WriteStartElement("cbc", "BaseAmount"); // BT-137, BT-142 |
680 |
| - Writer.WriteAttributeString("currencyID", this.Descriptor.Currency.EnumToString()); |
681 |
| - Writer.WriteValue(_formatDecimal(specifiedTradeAllowanceCharge.BasisAmount)); |
682 |
| - Writer.WriteEndElement(); // !BaseAmount |
683 |
| - } |
684 |
| - |
685 |
| - Writer.WriteEndElement(); // !AllowanceCharge |
| 663 | + _WriteItemLevelSpecifiedTradeAllowanceCharge(specifiedTradeAllowanceCharge); |
686 | 664 | }
|
687 | 665 |
|
688 | 666 | Writer.WriteStartElement("cac", "Item");
|
@@ -785,6 +763,45 @@ private void _WriteTradeLineItem(TradeLineItem tradeLineItem, bool isInvoice = t
|
785 | 763 | Writer.WriteEndElement(); //!InvoiceLine
|
786 | 764 | }
|
787 | 765 |
|
| 766 | + private void _WriteItemLevelSpecifiedTradeAllowanceCharge(AbstractTradeAllowanceCharge specifiedTradeAllowanceCharge) |
| 767 | + { |
| 768 | + Writer.WriteStartElement("cac", "AllowanceCharge"); |
| 769 | + Writer.WriteElementString("cbc", "ChargeIndicator", |
| 770 | + specifiedTradeAllowanceCharge.ChargeIndicator ? "true" : "false"); // BG-28-0 |
| 771 | + switch (specifiedTradeAllowanceCharge) |
| 772 | + { |
| 773 | + case TradeAllowance allowance when allowance.ReasonCode != null: |
| 774 | + Writer.WriteOptionalElementString("ram", "ReasonCode", allowance.ReasonCode.EnumToString()); // BT-140 |
| 775 | + break; |
| 776 | + case TradeCharge charge when charge.ReasonCode != null: |
| 777 | + Writer.WriteOptionalElementString("ram", "ReasonCode", charge.ReasonCode.EnumToString()); // BT-145 |
| 778 | + break; |
| 779 | + } |
| 780 | + |
| 781 | + Writer.WriteOptionalElementString("cbc", "AllowanceChargeReason", |
| 782 | + specifiedTradeAllowanceCharge.Reason); // BT-139, BT-144 |
| 783 | + |
| 784 | + if (specifiedTradeAllowanceCharge.ChargePercentage.HasValue) |
| 785 | + { |
| 786 | + Writer.WriteOptionalElementString("cbc", "MultiplierFactorNumeric", |
| 787 | + _formatDecimal(specifiedTradeAllowanceCharge.ChargePercentage)); |
| 788 | + } |
| 789 | + |
| 790 | + Writer.WriteStartElement("cbc", "Amount"); |
| 791 | + Writer.WriteAttributeString("currencyID", this.Descriptor.Currency.EnumToString()); |
| 792 | + Writer.WriteValue(_formatDecimal(specifiedTradeAllowanceCharge.ActualAmount)); |
| 793 | + Writer.WriteEndElement(); // !Amount |
| 794 | + if (specifiedTradeAllowanceCharge.BasisAmount.HasValue) |
| 795 | + { |
| 796 | + Writer.WriteStartElement("cbc", "BaseAmount"); // BT-137, BT-142 |
| 797 | + Writer.WriteAttributeString("currencyID", this.Descriptor.Currency.EnumToString()); |
| 798 | + Writer.WriteValue(_formatDecimal(specifiedTradeAllowanceCharge.BasisAmount)); |
| 799 | + Writer.WriteEndElement(); // !BaseAmount |
| 800 | + } |
| 801 | + |
| 802 | + Writer.WriteEndElement(); // !AllowanceCharge |
| 803 | + } |
| 804 | + |
788 | 805 |
|
789 | 806 | private void _WriteCommodityClassification(ProfileAwareXmlTextWriter writer, List<DesignatedProductClassification> designatedProductClassifications)
|
790 | 807 | {
|
|
0 commit comments