/// <summary>
        /// Cancels the payment reservation.
        /// </summary>
        /// <param name="paymentSystem">The payment System.</param>
        /// <param name="paymentArgs">The payment arguments.</param>
        /// <param name="reservationTicket">The reservation ticket.</param>
        public void CancelReservation([NotNull] PaymentSystem paymentSystem, [NotNull] PaymentArgs paymentArgs, [NotNull] ReservationTicket reservationTicket)
        {
            Assert.ArgumentNotNull(paymentSystem, "paymentSystem");
            Assert.ArgumentNotNull(paymentArgs, "paymentArgs");
            Assert.ArgumentNotNull(reservationTicket, "reservationTicket");

            PaymentSettingsReader configuration = new PaymentSettingsReader(paymentSystem);
            bool isTest;

            Boolean.TryParse(configuration.GetSetting("x_test_request"), out isTest);
            var request = new VoidRequest(reservationTicket.TransactionNumber);
            var gate    = new Gateway(paymentSystem.Username, paymentSystem.Password, isTest);

            var response = gate.Send(request);

            ITransactionData transactionDataProvider = Context.Entity.Resolve <ITransactionData>();

            transactionDataProvider.SavePersistentValue(reservationTicket.InvoiceNumber, response.Approved ? PaymentConstants.CancelSuccess : response.Message);
        }
        /// <summary>
        /// Captures the payment
        /// </summary>
        /// <param name="paymentSystem">The payment System.</param>
        /// <param name="paymentArgs">The payment args.</param>
        /// <param name="reservationTicket">The reservation ticket.</param>
        /// <param name="amount">The amount.</param>
        public void Capture([NotNull] PaymentSystem paymentSystem, [NotNull] PaymentArgs paymentArgs, [NotNull] ReservationTicket reservationTicket, decimal amount)
        {
            Assert.ArgumentNotNull(paymentSystem, "paymentSystem");
            Assert.ArgumentNotNull(paymentArgs, "paymentArgs");
            Assert.ArgumentNotNull(reservationTicket, "reservationTicket");

            Assert.ArgumentCondition((amount > 0), "amount", "An amount should be greater than zero");
            Assert.ArgumentCondition((amount <= reservationTicket.Amount), "amount", "An amount should not be greater than the original reserved one");

            PaymentSettingsReader configuration = new PaymentSettingsReader(paymentSystem);
            bool isTest;

            Boolean.TryParse(configuration.GetSetting("x_test_request"), out isTest);
            var request = new CaptureRequest(amount, reservationTicket.TransactionNumber, reservationTicket.AuthorizationCode);
            var gate    = new Gateway(paymentSystem.Username, paymentSystem.Password, isTest);

            var response = gate.Send(request);

            ITransactionData transactionDataProvider = Context.Entity.Resolve <ITransactionData>();

            transactionDataProvider.SavePersistentValue(reservationTicket.InvoiceNumber, response.Approved ? PaymentConstants.CaptureSuccess : response.Message);
        }