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(); } }
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(); } }
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(); } }