private async Task Handle(TransactionProcessedEvent evt, ICommandSender sender)
        {
            ChaosKitty.Meow();

            var clientAcc = await _clientAccountClient.GetByIdAsync(evt.ClientId);

            var sendEmailCommand = new SendNoRefundDepositDoneMailCommand
            {
                Email   = clientAcc.Email,
                Amount  = evt.Amount,
                AssetId = evt.Asset.Id
            };

            sender.SendCommand(sendEmailCommand, "email");

            ChaosKitty.Meow();

            var pushSettings = await _clientAccountClient.GetPushNotificationAsync(evt.ClientId);

            if (pushSettings.Enabled)
            {
                var sendNotificationCommand = new SendNotificationCommand
                {
                    NotificationId = clientAcc.NotificationsId,
                    Type           = NotificationType.TransactionConfirmed,
                    Message        = string.Format(TextResources.CashInSuccessText, new decimal(evt.Amount).TruncateDecimalPlaces(evt.Asset.Accuracy), evt.Asset.Id)
                };
                sender.SendCommand(sendNotificationCommand, "notifications");
            }
        }
        private void TransactionProcessed(TransactionProcessedEvent transactionProcessedEvent)
        {
            if (transactionProcessedEvent == TransactionProcessedEvent.Success)
            {
                Response.Redirect("Default.aspx");
                return;
            }

            errorMsg.Text = "CANNOT COMPLETE TRANSACTION - IT WILL CAUSE ACCOUNT TO BE LOCKED!";
        }
        private void Handle(SmsNotificationJobContext context, TransactionProcessedEvent smsEvent)
        {
            var transaction = context.ProcessingService.GetCardTransaction(new IdentityQuery <Guid>(smsEvent.TransactionId));

            if (transaction == null)
            {
                return;
            }
            if (transaction.Status == ProcessStatusModel.Pending)
            {
                return;
            }
            var account = context.CardAccountService.GetCardAccountBrief(new IdentityQuery <string>(transaction.AccountNo));

            if (account == null)
            {
                Logger.Info("Couldn't find account for card transaction #{0}.", smsEvent.TransactionId);
                return;
            }
            var profile = VerifyProfile(context, account.Owner.UserId);

            if (profile == null || !profile.SmsNotificationEnabled)
            {
                return;
            }
            var sms = new SendSmsCommand {
                RecipientPhoneNumber = profile.PhoneNumber
            };
            var secureCardNo = string.Format(
                "{0}****{1}",
                new string(transaction.CardNo.Take(8).ToArray()),
                new string(transaction.CardNo.Skip(12).ToArray()));

            if (transaction.Status == ProcessStatusModel.Failed)
            {
                var message = string.Format(
                    SmsMessages.CardError,
                    secureCardNo,
                    string.Format("{0:F2} {1}", transaction.TransactionAmount, transaction.Currency.ISOName),
                    transaction.Location,
                    TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, _timezone),
                    string.Format("{0:F2} {1}", account.Balance, account.Currency.ISOName));
                sms.Text = message;
                context.SmsService.SendSms(sms);
                return;
            }
            if (transaction.TransactionAmount < 0)
            {
                var message = string.Format(
                    SmsMessages.CardWithdrawal,
                    secureCardNo,
                    string.Format("{0:F2} {1}", -transaction.TransactionAmount, transaction.Currency.ISOName),
                    transaction.Location,
                    TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, _timezone),
                    string.Format("{0:F2} {1}", account.Balance, account.Currency.ISOName));
                sms.Text = message;
                context.SmsService.SendSms(sms);
            }
            else
            {
                var message = string.Format(
                    SmsMessages.CardDeposit,
                    secureCardNo,
                    string.Format("{0:F2} {1}", transaction.TransactionAmount, transaction.Currency.ISOName),
                    transaction.Location,
                    TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, _timezone),
                    string.Format("{0:F2} {1}", account.Balance, account.Currency.ISOName));
                sms.Text = message;
                context.SmsService.SendSms(sms);
            }
        }