/// <summary>
        /// Cancel a transaction.
        /// </summary>
        /// <param name="cancelation">Cancelation info.</param>
        internal void Cancel(CancelationOption cancelation)
        {
            ICancellationReport cancelReport = this.StoneAuthorizer
                                               .Cancel(cancelation.StoneId, cancelation.Amount);

            if (cancelReport.WasSuccessful == true)
            {
                Console.WriteLine("TRANSACAO {0} CANCELADA COM SUCESSO.",
                                  cancelation.StoneId);

                TransactionTableEntry transaction = this.Transactions
                                                    .Where(t => t.StoneId == cancelation.StoneId)
                                                    .FirstOrDefault();

                if (transaction != null)
                {
                    transaction.IsCaptured = false;
                }
            }
            else
            {
                Console.WriteLine("TRANSACAO {0} NAO PODE SER CANCELADA.",
                                  cancelation.StoneId);
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Performs a cancellation operation.
        /// </summary>
        /// <param name="sender">Cancellation button.</param>
        /// <param name="e">Click event arguments.</param>
        private void OnCancelTransaction(object sender, RoutedEventArgs e)
        {
            // Limpa o log:
            this.uxLog.Items.Clear();

            ICardPaymentAuthorizer currentAuthorizer = this.GetCurrentPinpad();

            if (currentAuthorizer == null)
            {
                this.Log("Selecione um pinpad.");
                return;
            }

            string atk = this.uxCbbxTransactions.SelectedItem.ToString();

            // Verifica se um ATK válido foi selecionado:
            if (string.IsNullOrEmpty(atk) == true)
            {
                this.Log("Não é possivel cancelar um ATK vazio.");
                return;
            }

            // Seleciona a transação a ser cancelada de acordo com o ATK:
            IAuthorizationReport transaction = this.approvedTransactions.Where(t => t.AcquirerTransactionKey == atk).First();

            // Cancela a transação:
            ICancellationReport cancelResult = currentAuthorizer.Cancel(transaction.AcquirerTransactionKey,
                                                                        transaction.Amount);

            if (cancelResult.WasSuccessful == true)
            {
                // Cancelamento autorizado.
                // Retira a transação da coleção de transação aprovadas:
                this.approvedTransactions.Remove(transaction);
                this.uxCbbxTransactions.Items.Remove(transaction.AcquirerTransactionKey);
            }
            else
            {
                // Cancelamento não autorizado:
                this.Log(string.Format("{0} - {1}", cancelResult.ResponseCode, cancelResult.ResponseReason));
            }

            this.UpdateTransactions();
        }