public bool Equals(RecurlyTransaction transaction)
 {
     return this.Id == transaction.Id;
 }
        public static RecurlyTransaction Get(string appName, string transactionId)
        {
            RecurlyTransaction transaction = new RecurlyTransaction();

            HttpStatusCode statusCode = RecurlyClient.PerformRequest(appName, RecurlyClient.HttpRequestMethod.Get,
                UrlPrefix + System.Web.HttpUtility.UrlEncode(transactionId),
                new RecurlyClient.ReadXmlDelegate(transaction.ReadXml));

            if (statusCode == HttpStatusCode.NotFound)
                return null;

            return transaction;
        }
        public static RecurlyTransaction CreateAccountTransaction(string accountCode, int amountInCents, string description)
        {
            var transaction = new RecurlyTransaction { AccountCode = accountCode, AmountInCents = amountInCents, Description = description };

            var resultCode = RecurlyClient.PerformRequest(RecurlyClient.HttpRequestMethod.Post,
                                               UrlPrefix,
                                               new RecurlyClient.WriteXmlDelegate(transaction.WriteXml),
                                               new RecurlyClient.ReadXmlDelegate(transaction.ReadXml));

            return transaction;
        }
        public static void Create(RecurlyAccount acct, int amountInCents, string description)
        {
            RecurlyTransaction toCreate = new RecurlyTransaction();

            toCreate.Account = acct;
            toCreate.AmountInCents = amountInCents;
            toCreate.Description = description;

            RecurlyClient.PerformRequest(RecurlyClient.HttpRequestMethod.Post,
                UrlPrefix,
                new RecurlyClient.WriteXmlDelegate(toCreate.WriteXml));
        }
 /// <summary>
 /// Returns a list of transactions for an account.
 /// </summary>
 /// <param name="state">The state of transactions to return</param>
 /// <param name="type">The type of transactions to return</param>
 /// <param name="pageSize">Number of records to return per page</param>
 /// <returns></returns>
 public RecurlyTransactionList ListTransactions(RecurlyTransaction.TransactionState state =
                                                    RecurlyTransaction.TransactionState.All,
                                                RecurlyTransaction.TransactionType type =
                                                    RecurlyTransaction.TransactionType.All,
                                                int pageSize = RecurlyPager.DefaultPageSize)
 {
     return RecurlyTransactionList.ListAccountTransactions(AccountCode, state, type, pageSize);
 }
        /// <summary>
        /// If the transaction has not settled and you perform a full refund, the transaction will be voided instead. Voided transactions typically do not show up on the customer's card statement. If the transaction has settled, a refund will be performed.
        /// If the transaction has not settled and you attempt a partial refund, the request will fail. Please wait until the transaction has settled (typically 24 hours) before performing a partial refund. This advice varies depending on when your payment gateway settles the transaction.
        /// </summary>
        /// <param name="amountInCents">The amount (in cents) to refund (refunds fully if null or not provided).</param>
        /// <returns>The updated original transaction if voided, a new refund transaction, or null if the transaction isn't voidable or refundable.</returns>
        public RecurlyTransaction Refund(int? amountInCents = null)
        {
            var transaction = new RecurlyTransaction();

            var statusCode = RecurlyClient.PerformRequest(RecurlyClient.HttpRequestMethod.Delete,
                String.Format(Settings.Default.PathTransactionRefund, Id.UrlEncode(), amountInCents.HasValue ? amountInCents.Value.ToString(CultureInfo.InvariantCulture) : String.Empty),
                                         reader =>
                                             {
                                                 var element = XDocument.Load(reader).Root;
                                                 transaction.ReadElement(element);
                                                 if (transaction.Id == Id)
                                                     ReadElement(element);
                                             });

            return RecurlyClient.OkOrAccepted(statusCode) ? transaction.Id == Id ? this : transaction : null;
        }
        /// <summary>
        /// Lists details for an individual transaction.
        /// </summary>
        /// <param name="transactionId"></param>
        /// <returns></returns>
        public static RecurlyTransaction Get(string transactionId)
        {
            var transaction = new RecurlyTransaction();

            var statusCode = RecurlyClient.PerformRequest(RecurlyClient.HttpRequestMethod.Get,
                String.Format(Settings.Default.PathTransactionGet, transactionId.UrlEncode()),
                transaction.ReadXml);

            return statusCode == HttpStatusCode.OK ? transaction : null;
        }