//Devuelve las cuentas de un cliente dado su Id de cliente
        public List <CuentaVirtual> obtenerPorIdCliente(int id)
        {
            string StrConn             = ConfigurationManager.ConnectionStrings["BDLocal"].ToString();
            List <CuentaVirtual> lista = new List <CuentaVirtual>();

            using (SqlConnection conn = new SqlConnection(StrConn))
            {
                conn.Open();

                SqlCommand comm = conn.CreateCommand();
                comm.CommandText = "obtenerCuentasCliente";

                comm.CommandType = System.Data.CommandType.StoredProcedure;
                comm.Parameters.Add(new SqlParameter("@id_cliente", id));

                SqlDataReader dr = comm.ExecuteReader();
                while (dr.Read())
                {
                    long              idCuentaVirtual   = dr.GetInt64(0);
                    string            nroCuenta         = dr.GetString(1);
                    string            tipoCuenta        = dr.GetString(2);
                    TipoCuentaVirtual tipoCuentaVirtual = new TipoCuentaVirtual(tipoCuenta);
                    decimal           saldo             = dr.GetSqlMoney(3).ToDecimal();

                    CuentaVirtual cuentaVirtual = new CuentaVirtual(idCuentaVirtual, nroCuenta, tipoCuentaVirtual, Math.Round(saldo, 2));
                    lista.Add(cuentaVirtual);
                }
                dr.Close();
            }
            return(lista);
        }
        public CuentaVirtual obtenerPorId(int id)
        {
            CuentaVirtual cv      = null;
            string        StrConn = ConfigurationManager.ConnectionStrings["BDLocal"].ToString();

            using (SqlConnection conn = new SqlConnection(StrConn))
            {
                conn.Open();

                SqlCommand comm = new SqlCommand("obtenerCuentaVirtual", conn);
                comm.CommandType = System.Data.CommandType.StoredProcedure;

                comm.Parameters.Add(new SqlParameter("@idCliente", id));

                SqlDataReader dr = comm.ExecuteReader();
                if (dr.Read())
                {
                    long              idCuenta         = dr.GetInt64(0);
                    string            alias            = dr.GetString(1);
                    string            cvu              = dr.GetString(2);
                    string            nroCuenta        = dr.GetString(3);
                    decimal           montoDescubierto = dr.GetSqlMoney(4).ToDecimal();
                    int               idCliente        = dr.GetInt32(5);
                    string            tipoCuenta       = dr.GetString(6);
                    TipoCuentaVirtual TipoCuenta       = new TipoCuentaVirtual(tipoCuenta);
                    int               estado           = dr.GetInt32(7);
                    decimal           saldo            = dr.GetSqlMoney(8).ToDecimal();

                    cv = new CuentaVirtual(idCuenta, alias, cvu, nroCuenta, montoDescubierto, idCliente, TipoCuenta, estado, saldo);
                }
                dr.Close();
            }
            return(cv);
        }
        public List <CuentaVirtual> obtenerCuentasVirtuales()
        {
            List <CuentaVirtual> lista = new List <CuentaVirtual>();

            string StrConn = ConfigurationManager.ConnectionStrings["BDLocal"].ToString();

            using (SqlConnection conn = new SqlConnection(StrConn))
            {
                conn.Open();

                SqlCommand comm = conn.CreateCommand();
                comm.CommandText = "obtenerCuentasVirtuales";
                comm.CommandType = System.Data.CommandType.StoredProcedure;

                SqlDataReader dr = comm.ExecuteReader();
                while (dr.Read())
                {
                    long              id               = dr.GetInt64(0);
                    string            alias            = dr.GetString(1).Trim();
                    string            cvu              = dr.GetString(2).Trim();
                    string            nroCuenta        = dr.GetString(3).Trim();
                    decimal           montoDescubierto = dr.GetDecimal(4);
                    int               idCliente        = dr.GetInt32(5);
                    TipoCuentaVirtual idTipoCuenta     = new TipoCuentaVirtual();
                    int               idEstado         = dr.GetInt32(7);

                    CuentaVirtual cv = new CuentaVirtual(id, alias, cvu, nroCuenta, montoDescubierto, idCliente, idTipoCuenta, idEstado);

                    lista.Add(cv);
                }
                dr.Close();
            }
            return(lista);
        }
        public void nuevaCuentaVirtual(CuentaVirtual nueva)
        {
            string StrConn = ConfigurationManager.ConnectionStrings["BDLocal"].ToString();

            using (SqlConnection conn = new SqlConnection(StrConn))
            {
                conn.Open();

                SqlCommand comm = conn.CreateCommand();
                comm.CommandText = "nuevaCuentaVirtual";
                comm.CommandType = System.Data.CommandType.StoredProcedure;

                comm.Parameters.Add(new SqlParameter("@alias", nueva.Alias));
                comm.Parameters.Add(new SqlParameter("@cvu", nueva.Cvu));
                comm.Parameters.Add(new SqlParameter("@nro_cuenta", nueva.NroCuenta));
                comm.Parameters.Add(new SqlParameter("@monto_descubierto", nueva.MontoDescubierto));
                comm.Parameters.Add(new SqlParameter("@id_cliente", nueva.IdCliente));
                comm.Parameters.Add(new SqlParameter("@id_tipo_cuenta", nueva.IdTipoCuenta.Id));
                comm.Parameters.Add(new SqlParameter("@id_estado", nueva.IdEstado));

                comm.ExecuteNonQuery();
            }
        }
        /*MÉTODO PARA INSERTAR LAS FOTOS DEL DNI EN EL CLIENTE Y ACTIVAR LA CUENTA*/
        public bool insertarFotosDni(Cliente fotoDni)
        {
            CuentaVirtual       cv  = null;
            Operaciones         op  = null;
            GestorCuentaVirtual Gcv = new GestorCuentaVirtual();
            GestorOperaciones   Gop = new GestorOperaciones();
            string            cvu;
            string            nroCuenta;
            long              idcuenta;
            TipoCuentaVirtual tipoCuentaVirtual = null;
            string            nroOperacion;
            string            hora            = DateTime.Now.ToString("HH:mm");
            string            fecha           = DateTime.Today.ToString("dd-MM-yyyy");
            TipoOperacion     idtipoOperacion = null;
            Estado            estado          = null;


            string StrConn = ConfigurationManager.ConnectionStrings["BDLocal"].ToString();

            using (SqlConnection conn = new SqlConnection(StrConn))
            {
                conn.Open();

                SqlCommand comm = new SqlCommand("insertarFotosDni", conn);
                comm.CommandType = System.Data.CommandType.StoredProcedure;
                comm.Parameters.Add(new SqlParameter("@id", fotoDni.Id));
                comm.Parameters.Add(new SqlParameter("@selfieCliente", fotoDni.SelfieCliente));
                comm.Parameters.Add(new SqlParameter("@frenteDni", fotoDni.FotoFrenteDni));
                comm.Parameters.Add(new SqlParameter("@dorsoDni", fotoDni.FotoDorsoDni));

                SqlDataReader dr = comm.ExecuteReader();
                if (dr.HasRows)
                {
                    //GENERAMOS LA CUENTA ALEATORIA
                    nroCuenta = Gcv.generarCuentaAleatoria();
                    cvu       = Gcv.generarcvuAleatorio();

                    while (Gcv.existeCuentaCvu(nroCuenta, cvu))
                    {
                        nroCuenta = Gcv.generarCuentaAleatoria();
                        cvu       = Gcv.generarcvuAleatorio();
                    }

                    tipoCuentaVirtual = new TipoCuentaVirtual(1);
                    cv = new CuentaVirtual(0, "ALIAS-" + nroCuenta, cvu, nroCuenta, 0, fotoDni.Id, tipoCuentaVirtual, 1);

                    Gcv.nuevaCuentaVirtual(cv);
                    //-------------------------------------

                    //GENERAMOS UNA OPERACION DE APERTURA A LA CUENTA CREADA
                    idcuenta = Gcv.obtenerPorNroCuenta(nroCuenta);
                    //generamos el numero de operacion aleatorio
                    nroOperacion = Gcv.generarNroOperacionAleatorio();

                    while (Gcv.existeNroOperacion(idcuenta, nroOperacion))
                    {
                        nroOperacion = Gcv.generarNroOperacionAleatorio();
                    }

                    idtipoOperacion = new TipoOperacion(5);
                    estado          = new Estado(3);
                    op = new Operaciones(nroOperacion, fecha, hora, 0, "sin destino", idtipoOperacion, estado, idcuenta);

                    Gop.insertarOperacion(op);

                    //ENVIAMOS EL MAIL DE CONFIRMACION
                    enviarEmailCuenta(fotoDni.Email, nroCuenta, cvu);

                    return(true);
                }
                else
                {
                    return(false);
                }
            }
        }