private void WriteDiscountElements(XmlTextWriter writer)
 {
     writer.WriteElementEnum(DiscountTypeElement, Type);
     switch(Type)
     {
         case DiscountType.Percent:
             writer.WriteElementIntIfProvided(DiscountPercentElement, DiscountPercent);
             break;
         case DiscountType.Dollars:
             writer.WriteStartElement(DiscountInCentsElement);
             foreach(var item in DiscountInCents)
             {
                 writer.WriteElementString(item.Currency, item.AmountInCents.ToString(CultureInfo.InvariantCulture));
             }
             writer.WriteEndElement();
             break;
     }
 }
        private void WriteManualInvoiceElement(XmlTextWriter writer)
        {
            if(CollectionMethod != CollectionMethods.Manual || ManualInvoiceDetails == null) return;

            writer.WriteElementEnum(CollectionMethodElement,CollectionMethod);
            ManualInvoiceDetails.WriteXmlElements(writer);
        }
 internal void WriteXml(XmlTextWriter writer)
 {
     writer.WriteStartElement(ElementName);
         writer.WriteElementString(PlanCodeElement, PlanCode);
         writer.WriteElementString(NameElement, Name);
         writer.WriteElementStringIfProvided(DescriptionElement,Description);
         writer.WriteElementStringIfProvided(SuccessUrlElement,SuccessUrl);
         writer.WriteElementStringIfProvided(CancelUrlElement,CancelUrl);
         writer.WriteElementString(DisplayQuantityElement, DisplayQuantity.ToString());
         writer.WriteElementStringIfProvided(UnitNameElement, UnitName);
         writer.WriteElementString(PlanIntervalLengthElement, PlanIntervalLength.ToString(CultureInfo.InvariantCulture));
         writer.WriteElementEnum(PlanIntervalUnitElement,PlanIntervalUnit);
         writer.WriteElementString(TrialIntervalLengthElement, TrialIntervalLength.ToString(CultureInfo.InvariantCulture));
         writer.WriteElementEnum(TrialIntervalUnitElement, TrialIntervalUnit);
         writer.WriteElementStringIfProvided(AccountingCodeElement,AccountingCode);
         UnitAmountInCents.WriteXml(writer);
         SetupFeeInCents.WriteXml(writer);
     writer.WriteEndElement();
 }
 protected void WriteChangeXml(XmlTextWriter writer, ChangeTimeframe timeframe, string newPlanCode)
 {
     writer.WriteStartElement(ElementName); // Start: subscription
         writer.WriteElementEnum("timeframe", timeframe); //Required
         writer.WriteElementStringIfProvided(PlanCodeElement, newPlanCode);
         writer.WriteElementIntIfProvided(QuantityElement,Quantity);
         writer.WriteElementIntIfProvided(UnitAmountInCentsElement,UnitAmountInCents);
         writer.WriteElementListIfAny(AddonsElement, Addons, (w, a) => a.WriteXml(w));
         WriteManualInvoiceElement(writer);
     writer.WriteEndElement(); // End: subscription
 }