private ReturnObject AddSendTransactionToEmailAddress(UserSendTransaction sendTransaction)
        {
            if (_connectionDb.State != ConnectionState.Open)
            {
                _connectionDb.Open();
            }


            using (var userRepository = new UserRepository(_connectionDb))
            {
                var sender   = userRepository.FindById(sendTransaction.UserId);
                var receiver = userRepository.FindByEmailAddress(sendTransaction.To);

                if (sender == null)
                {
                    return(new ReturnObject()
                    {
                        Status = Status.STATUS_ERROR,
                        Message = "Sender UserID not found in Vakapay system"
                    });
                }

                if (receiver == null)
                {
                    return(new ReturnObject()
                    {
                        Status = Status.STATUS_ERROR,
                        Message = "Email address not found in Vakapay system"
                    });
                }


                using (var sendTransactionRepository = new UserSendTransactionRepository(_connectionDb))
                {
                    var insertTrx = _connectionDb.BeginTransaction();
                    var insertRes = sendTransactionRepository.Insert(sendTransaction);

                    if (insertRes.Status == Status.STATUS_ERROR)
                    {
                        insertTrx.Rollback();
                        return(insertRes);
                    }

                    var internalTransactions = new InternalWithdrawTransaction()
                    {
                        SenderUserId   = sendTransaction.UserId,
                        ReceiverUserId = receiver.Id,
                        Amount         = sendTransaction.Amount,
                        PricePerCoin   = sendTransaction.PricePerCoin,
                        Currency       = sendTransaction.Currency,
                        Idem           = sendTransaction.Idem,
                        Description    = sendTransaction.Description
                    };

                    using (var internalTransactionsRepository = new InternalTransactionsRepository(_connectionDb))
                    {
                        insertRes = internalTransactionsRepository.Insert(internalTransactions);

                        if (insertRes.Status == Status.STATUS_ERROR)
                        {
                            insertTrx.Rollback();
                            return(insertRes);
                        }

                        insertTrx.Commit();

                        var sendTrx = _connectionDb.BeginTransaction();
                        var senRes  = SendInternalTransaction(internalTransactions);
                        if (senRes.Status == Status.STATUS_ERROR)
                        {
                            sendTrx.Rollback();
                            internalTransactionsRepository.Update(internalTransactions);
                            return(senRes);
                        }

                        var updateRes = internalTransactionsRepository.Update(internalTransactions);


                        if (updateRes.Status == Status.STATUS_ERROR)
                        {
                            sendTrx.Rollback();
                            return(new ReturnObject()
                            {
                                Status = Status.STATUS_ERROR,
                                Message = "Fail to update send status"
                            });
                        }


                        sendTrx.Commit();


                        var email = sender.Email;
                        if (email != null)
                        {
                            var res = SendMailBusiness.SendMailBusiness.CreateDataEmail(
                                "Notify send " + sendTransaction.Currency,
                                email, internalTransactions.Amount, internalTransactions.Id,
                                EmailTemplate.Sent, internalTransactions.Currency, _vakapayRepositoryFactory, true);
                            res.Wait();
                        }

                        var receiverEmail = receiver.Email;
                        if (receiverEmail != null)
                        {
                            var res = SendMailBusiness.SendMailBusiness.CreateDataEmail(
                                "Notify receive " + sendTransaction.Currency, receiverEmail,
                                internalTransactions.Amount,
                                internalTransactions.Id, EmailTemplate.ReceivedInternal, internalTransactions.Currency,
                                _vakapayRepositoryFactory, true);
                            res.Wait();
                        }

                        return(new ReturnObject()
                        {
                            Status = Status.STATUS_SUCCESS,
                            Message = "Transaction Sent!"
                        });
                    }
                }
            }
        }