public void Transferir(decimal valorTransferencia, string usuarioOrigem, string usuarioDestino)
        {
            SqlConnection SqlConn = new SqlConnection(ConnectionString);

            try
            {
                if (valorTransferencia < 0)
                {
                    throw new Exception("O valor de transferencia nao pode ser negativo");
                }

                Dictionary <int, string> existeDestinatario = ValidaDestinatario(usuarioDestino);
                if (existeDestinatario.TryGetValue(0, out string mensagem))
                {
                    throw new Exception("Destinatario nao existe no banco");
                }

                ctlConta _ctlConta = new ctlConta();

                decimal saldoOrigem = _ctlConta.ValorEmConta(usuarioOrigem);
                if (valorTransferencia > saldoOrigem) //Se transferir um valor maior que o disponivel em conta da excecao
                {
                    throw new Exception("O valor de transferencia é maior que o saldo disponível");
                }
                decimal novoSaldo = saldoOrigem - valorTransferencia;

                decimal novoSaldoDestino = _ctlConta.ValorEmConta(usuarioDestino) + valorTransferencia;

                ctlSaque _ctlSaque = new ctlSaque();
                _ctlSaque.Saque(valorTransferencia, usuarioOrigem); //Para aproveitar codigo e subtrair do saldo

                if (SqlConn.State != ConnectionState.Open)
                {
                    SqlConn.Open();
                }

                SqlCommand SqlCmd = new SqlCommand(@"UPDATE co
                                                        SET co.saldo = @SaldoDestino
                                                        FROM cliente cl
                                                        JOIN acesso ac ON ac.idAcesso = cl.idAcesso
                                                        JOIN conta co ON co.numeroConta = cl.conta
                                                        WHERE ac.usuario = @UsuarioDestino", SqlConn);
                SqlCmd.Parameters.AddWithValue("@SaldoDestino", novoSaldoDestino);
                SqlCmd.Parameters.AddWithValue("@UsuarioDestino", usuarioDestino);
                SqlCmd.ExecuteNonQuery();

                string     msg         = "Feito transferencia de R$" + valorTransferencia;
                ctlExtrato _ctlExtrato = new ctlExtrato();
                _ctlExtrato.Logs(msg);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                SqlConn.Close();
            }
        }
Exemple #2
0
        public decimal Depositar(decimal valorDeposito, string usuario)
        {
            SqlConnection SqlConn = new SqlConnection(ConnectionString);

            try
            {
                if (valorDeposito < 0)
                {
                    throw new Exception("O valor de deposito nao pode ser negativo");
                }

                ctlConta _ctlConta       = new ctlConta();
                decimal  saldoDisponivel = _ctlConta.ValorEmConta(usuario);

                decimal novoSaldo = valorDeposito + saldoDisponivel;

                if (SqlConn.State != ConnectionState.Open)
                {
                    SqlConn.Open();
                }
                SqlCommand SqlCmd = new SqlCommand(@"UPDATE co
                                                        SET co.saldo = @saldo
                                                        FROM cliente cl
                                                        JOIN acesso ac ON ac.idAcesso = cl.idAcesso
                                                        JOIN conta co ON co.numeroConta = cl.conta
                                                        WHERE ac.usuario = @usuario", SqlConn);
                SqlCmd.Parameters.AddWithValue("@saldo", novoSaldo);
                SqlCmd.Parameters.AddWithValue("@usuario", usuario);
                SqlCmd.ExecuteNonQuery();

                string     mensagem    = "Feito deposito de R$" + valorDeposito;
                ctlExtrato _ctlExtrato = new ctlExtrato();
                _ctlExtrato.Logs(mensagem);

                return(novoSaldo);
            }
            catch (Exception ex)
            {
                string message = ex.Message;
                if (message.Contains(@"Erro de estouro aritmético ao converter numeric no tipo de dados numeric"))
                {
                    throw new Exception("O valor de deposito faz com que o saldo ultrapasse o limite");
                }

                throw ex;
            }
            finally
            {
                SqlConn.Close();
            }
        }
Exemple #3
0
        public decimal Saque(decimal valorSaque, string usuario)
        {
            SqlConnection SqlConn = new SqlConnection(ConnectionString);

            try
            {
                if (valorSaque < 0)
                {
                    throw new Exception("O valor do saque nao pode ser negativo");
                }

                ctlConta _ctlConta       = new ctlConta();
                decimal  saldoDisponivel = _ctlConta.ValorEmConta(usuario);
                if (valorSaque > saldoDisponivel)
                {
                    throw new Exception("O valor de saque é maior que o saldo disponível");
                }
                decimal novoSaldo = saldoDisponivel - valorSaque;

                if (SqlConn.State != ConnectionState.Open)
                {
                    SqlConn.Open();
                }

                SqlCommand SqlCmd = new SqlCommand(@"UPDATE co
                                                        SET co.saldo = @saldo
                                                        FROM cliente cl
                                                        JOIN acesso ac ON ac.idAcesso = cl.idAcesso
                                                        JOIN conta co ON co.numeroConta = cl.conta
                                                        WHERE ac.usuario = @usuario", SqlConn);
                SqlCmd.Parameters.AddWithValue("@saldo", novoSaldo);
                SqlCmd.Parameters.AddWithValue("@usuario", usuario);
                SqlCmd.ExecuteNonQuery();

                string     mensagem    = "Feito saque de R$" + valorSaque;
                ctlExtrato _ctlExtrato = new ctlExtrato();
                _ctlExtrato.Logs(mensagem);

                return(novoSaldo);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                SqlConn.Close();
            }
        }