コード例 #1
0
        /// <summary>
        /// Preview the changes associated with the current subscription
        /// </summary>
        /// <param name="timeframe">ChangeTimeframe.Now (default) or at Renewal</param>
        public virtual Subscription PreviewChange(ChangeTimeframe timeframe)
        {
            if (!_saved)
            {
                throw new Recurly.RecurlyException("Must have an existing subscription to preview changes.");
            }

            Client.WriteXmlDelegate writeXmlDelegate;

            if (ChangeTimeframe.Renewal == timeframe)
            {
                writeXmlDelegate = WriteChangeSubscriptionAtRenewalXml;
            }
            else
            {
                writeXmlDelegate = WriteChangeSubscriptionNowXml;
            }

            var previewSubscription = new Subscription();

            var statusCode = Client.Instance.PerformRequest(Client.HttpRequestMethod.Post,
                                                            UrlPrefix + Uri.EscapeUriString(Uuid) + "/preview",
                                                            writeXmlDelegate,
                                                            previewSubscription.ReadPreviewXml);

            return(statusCode == HttpStatusCode.NotFound ? null : previewSubscription);
        }
コード例 #2
0
        protected void WriteChangeSubscriptionXml(XmlTextWriter xmlWriter, ChangeTimeframe timeframe)
        {
            xmlWriter.WriteStartElement("subscription"); // Start: subscription

            xmlWriter.WriteElementString("timeframe", timeframe.ToString().EnumNameToTransportCase());
            xmlWriter.WriteElementString("quantity", Quantity.AsString());
            xmlWriter.WriteStringIfValid("plan_code", _planCode);
            xmlWriter.WriteIfCollectionHasAny("subscription_add_ons", AddOns);
            xmlWriter.WriteStringIfValid("coupon_code", _couponCode);

            if (UnitAmountInCents.HasValue)
            {
                xmlWriter.WriteElementString("unit_amount_in_cents", UnitAmountInCents.Value.AsString());
            }

            if (CollectionMethod.Like("manual"))
            {
                xmlWriter.WriteElementString("collection_method", "manual");
                xmlWriter.WriteElementString("net_terms", NetTerms.Value.AsString());
                xmlWriter.WriteElementString("po_number", PoNumber);
            }
            else if (CollectionMethod.Like("automatic"))
            {
                xmlWriter.WriteElementString("collection_method", "automatic");
            }

            xmlWriter.WriteEndElement(); // End: subscription
        }
コード例 #3
0
        /// <summary>
        /// Request that an update to a subscription take place
        /// </summary>
        /// <param name="timeframe">when the update should occur: now (default) or at renewal</param>
        public void ChangeSubscription(ChangeTimeframe timeframe)
        {
            Client.WriteXmlDelegate writeXmlDelegate;

            if (ChangeTimeframe.Renewal == timeframe)
                writeXmlDelegate = WriteChangeSubscriptionAtRenewalXml;
            else
                writeXmlDelegate = WriteChangeSubscriptionNowXml;

            Client.Instance.PerformRequest(Client.HttpRequestMethod.Put,
                UrlPrefix + Uri.EscapeUriString(Uuid),
                writeXmlDelegate,
                ReadXml);
        }
コード例 #4
0
        /// <summary>
        /// Transforms this object into a preview Subscription applied to the account.
        /// </summary>
        /// <param name="timeframe">ChangeTimeframe.Now (default) or at Renewal</param>
        public void Preview(ChangeTimeframe timeframe)
        {
            if (_saved)
            {
                throw new Recurly.RecurlyException("Cannot preview an existing subscription.");
            }

            Client.Instance.PerformRequest(Client.HttpRequestMethod.Post,
                                           UrlPrefix + "preview",
                                           WriteSubscriptionXml,
                                           ReadXml);

            // this method does not save the object
            _saved = false;
        }
コード例 #5
0
        public void ChangeSubscription(ChangeTimeframe timeframe)
        {
            RecurlyClient.WriteXmlDelegate writeXmlDelegate;

            if (timeframe == ChangeTimeframe.Now)
            {
                writeXmlDelegate = new RecurlyClient.WriteXmlDelegate(WriteChangeSubscriptionNowXml);
            }
            else
            {
                writeXmlDelegate = new RecurlyClient.WriteXmlDelegate(WriteChangeSubscriptionAtRenewalXml);
            }

            HttpStatusCode statusCode = RecurlyClient.PerformRequest(RecurlyClient.HttpRequestMethod.Put,
                                                                     SubscriptionUrl(this.Account.AccountCode),
                                                                     writeXmlDelegate,
                                                                     new RecurlyClient.ReadXmlDelegate(this.ReadXml));
        }
コード例 #6
0
        protected void WriteChangeSubscriptionXml(XmlTextWriter xmlWriter, ChangeTimeframe timeframe)
        {
            xmlWriter.WriteStartElement("subscription"); // Start: subscription

            xmlWriter.WriteElementString("timeframe",
                                         (timeframe == ChangeTimeframe.Now ? "now" : "renewal"));

            if (!String.IsNullOrEmpty(this.PlanCode))
            {
                xmlWriter.WriteElementString("plan_code", this.PlanCode);
            }

            if (this.Quantity.HasValue)
            {
                xmlWriter.WriteElementString("quantity", this.Quantity.Value.ToString());
            }

            if (this.UnitAmountInCents.HasValue)
            {
                xmlWriter.WriteElementString("unit_amount_in_cents", this.UnitAmountInCents.Value.ToString());
            }

            xmlWriter.WriteEndElement(); // End: subscription
        }
コード例 #7
0
        protected void WriteChangeSubscriptionXml(XmlTextWriter xmlWriter, ChangeTimeframe timeframe)
        {
            xmlWriter.WriteStartElement("subscription"); // Start: subscription

            xmlWriter.WriteElementString("timeframe",
                (timeframe == ChangeTimeframe.Now ? "now" : "renewal"));

            if (!String.IsNullOrEmpty(this.PlanCode))
                xmlWriter.WriteElementString("plan_code", this.PlanCode);

            if (this.Quantity.HasValue)
                xmlWriter.WriteElementString("quantity", this.Quantity.Value.ToString());

            if (this.UnitAmountInCents.HasValue)
                xmlWriter.WriteElementString("unit_amount_in_cents", this.UnitAmountInCents.Value.ToString());

            xmlWriter.WriteEndElement(); // End: subscription
        }
コード例 #8
0
        public void ChangeSubscription(ChangeTimeframe timeframe)
        {
            RecurlyClient.WriteXmlDelegate writeXmlDelegate;

            if (timeframe == ChangeTimeframe.Now)
                writeXmlDelegate = new RecurlyClient.WriteXmlDelegate(WriteChangeSubscriptionNowXml);
            else
                writeXmlDelegate = new RecurlyClient.WriteXmlDelegate(WriteChangeSubscriptionAtRenewalXml);

            HttpStatusCode statusCode = RecurlyClient.PerformRequest(RecurlyClient.HttpRequestMethod.Put,
                SubscriptionUrl(this.Account.AccountCode),
                writeXmlDelegate,
                new RecurlyClient.ReadXmlDelegate(this.ReadXml));
        }
コード例 #9
0
        protected void WriteChangeSubscriptionXml(XmlTextWriter xmlWriter, ChangeTimeframe timeframe)
        {
            xmlWriter.WriteStartElement("subscription"); // Start: subscription

            xmlWriter.WriteElementString("timeframe", timeframe.ToString().EnumNameToTransportCase());
            xmlWriter.WriteElementString("quantity", Quantity.AsString());
            xmlWriter.WriteStringIfValid("plan_code", _planCode);
            xmlWriter.WriteIfCollectionHasAny("subscription_add_ons", AddOns);
            xmlWriter.WriteStringIfValid("coupon_code", _couponCode);

            if (_couponCodes != null && _couponCodes.Length != 0) {
                xmlWriter.WriteStartElement("coupon_codes");
                foreach (var _coupon_code in _couponCodes)
                {
                    xmlWriter.WriteElementString("coupon_code", _coupon_code);
                }
                xmlWriter.WriteEndElement();
            }

            if (UnitAmountInCents.HasValue)
                xmlWriter.WriteElementString("unit_amount_in_cents", UnitAmountInCents.Value.AsString());

            if (CollectionMethod.Like("manual"))
            {
                xmlWriter.WriteElementString("collection_method", "manual");
                xmlWriter.WriteElementString("net_terms", NetTerms.Value.AsString());
                xmlWriter.WriteElementString("po_number", PoNumber);
            }
            else if (CollectionMethod.Like("automatic"))
                xmlWriter.WriteElementString("collection_method", "automatic");

            xmlWriter.WriteEndElement(); // End: subscription
        }
コード例 #10
0
        /// <summary>
        /// Preview the changes associated with the current subscription
        /// </summary>
        /// <param name="timeframe">ChangeTimeframe.Now (default) or at Renewal</param>
        public virtual Subscription PreviewChange(ChangeTimeframe timeframe)
        {
            if (!_saved)
            {
                throw new Recurly.RecurlyException("Must have an existing subscription to preview changes.");
            }

            Client.WriteXmlDelegate writeXmlDelegate;

            if (ChangeTimeframe.Renewal == timeframe)
                writeXmlDelegate = WriteChangeSubscriptionAtRenewalXml;
            else
                writeXmlDelegate = WriteChangeSubscriptionNowXml;

            var previewSubscription = new Subscription();

            var statusCode = Client.Instance.PerformRequest(Client.HttpRequestMethod.Post,
                UrlPrefix + Uri.EscapeUriString(Uuid) + "/preview",
                writeXmlDelegate,
                previewSubscription.ReadPreviewXml);

            return statusCode == HttpStatusCode.NotFound ? null : previewSubscription;
        }
コード例 #11
0
        /// <summary>
        /// Transforms this object into a preview Subscription applied to the account.
        /// </summary>
        /// <param name="timeframe">ChangeTimeframe.Now (default) or at Renewal</param>
        public void Preview(ChangeTimeframe timeframe)
        {
            if (_saved)
            {
                throw new Recurly.RecurlyException("Cannot preview an existing subscription.");
            }

            Client.Instance.PerformRequest(Client.HttpRequestMethod.Post,
                UrlPrefix + "preview",
                WriteSubscriptionXml,
                ReadXml);

            // this method does not save the object
            _saved = false;
        }
コード例 #12
0
        /// <summary>
        /// Request that an update to a subscription take place
        /// </summary>
        /// <param name="timeframe">when the update should occur: now (default) or at renewal</param>
        public void ChangeSubscription(ChangeTimeframe timeframe)
        {
            Client.WriteXmlDelegate writeXmlDelegate;

            if (ChangeTimeframe.Renewal == timeframe)
                writeXmlDelegate = WriteChangeSubscriptionAtRenewalXml;
            else
                writeXmlDelegate = WriteChangeSubscriptionNowXml;

            Client.Instance.PerformRequest(Client.HttpRequestMethod.Put,
                UrlPrefix + Uri.EscapeUriString(Uuid),
                writeXmlDelegate,
                ReadXml);
        }
コード例 #13
0
        /// <summary>
        /// Request that an update to a subscription take place
        /// </summary>
        /// <param name="timeframe">when the update should occur: now or at renewal</param>
        public void ChangeSubscription(ChangeTimeframe timeframe)
        {
            Client.WriteXmlDelegate writeXmlDelegate;

            if (timeframe == ChangeTimeframe.now)
                writeXmlDelegate = new Client.WriteXmlDelegate(WriteChangeSubscriptionNowXml);
            else
                writeXmlDelegate = new Client.WriteXmlDelegate(WriteChangeSubscriptionAtRenewalXml);

            Client.PerformRequest(Client.HttpRequestMethod.Put,
                UrlPrefix + System.Uri.EscapeUriString(this.Uuid),
                writeXmlDelegate,
                new Client.ReadXmlDelegate(this.ReadXml));
        }
コード例 #14
0
 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
 }
コード例 #15
0
        /// <summary>
        /// Request an update to a subscription that takes place immediately or at renewal.
        /// </summary>
        /// <param name="timeframe"></param>
        /// <param name="newPlanCode"></param>
        /// <param name="unitAmountInCents"></param>
        public bool Update(ChangeTimeframe timeframe, NewPlanOptions newPlan = null)
        {
            if (newPlan != null && String.IsNullOrWhiteSpace(newPlan.PlanCode)) throw new ArgumentException("newPlan", "A new PlanCode cannot be empty if provided");

            if(newPlan != null)
            {
                UnitAmountInCents = newPlan.UnitAmountInCents;
            }

            var statusCode = RecurlyClient.PerformRequest(RecurlyClient.HttpRequestMethod.Put,
                                         String.Format(Settings.Default.PathSubscriptionUpdate, Id),
                                         writer => WriteChangeXml(writer, timeframe, newPlan.PlanCode), ReadXml);

            return RecurlyClient.OkOrAccepted(statusCode);
        }