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!" }); } } } }