public static Ahorro select(int id)
        {
            Ahorro ahorro = new Ahorro();

            ahorro.id = id;

            string query;
            List <SqlParameter> parameters;

            query      = "select codigo, id_asociado, tipo, interes, fecha, activo from asociados.ahorro where id = @id";
            parameters = new List <SqlParameter>()
            {
                new SqlParameter("id", id)
            };
            SqlDataReader dataReader = Queries.getDataReader(query, parameters);

            while (dataReader.Read())
            {
                ahorro.codigo     = dataReader.GetString(0);
                ahorro.idAsociado = dataReader.GetInt32(1);
                ahorro.tipo       = dataReader.GetString(2);
                ahorro.interes    = dataReader.GetByte(3);
                ahorro.fecha      = dataReader.GetDateTime(4);
                ahorro.activo     = dataReader.GetBoolean(5);
            }
            dataReader.Close();

            if (ahorro.tipo == "Depósito a plazo")
            {
                AhorroPlazo ahorroPlazo = new AhorroPlazo();

                query      = "select monto_inicial, plazo, extendido from asociados.ahorroplazo where id_ahorro = @id";
                parameters = new List <SqlParameter>()
                {
                    new SqlParameter("id", id)
                };
                dataReader = Queries.getDataReader(query, parameters);

                while (dataReader.Read())
                {
                    ahorroPlazo.montoInicial = dataReader.GetDecimal(0);
                    ahorroPlazo.plazo        = dataReader.GetByte(1);
                    ahorroPlazo.extendido    = dataReader.GetByte(2);
                }
                dataReader.Close();

                ahorro.ahorroPlazo = ahorroPlazo;
            }

            if (ahorro.tipo == "Programado")
            {
                AhorroProgramado ahorroProgramado = new AhorroProgramado();

                query      = "select cuota, forma_pago, plazo, extendido from asociados.ahorroprogramado where id_ahorro = @id";
                parameters = new List <SqlParameter>()
                {
                    new SqlParameter("id", id)
                };
                dataReader = Queries.getDataReader(query, parameters);

                while (dataReader.Read())
                {
                    ahorroProgramado.cuota     = dataReader.GetDecimal(0);
                    ahorroProgramado.formaPago = dataReader.GetString(1);
                    ahorroProgramado.plazo     = dataReader.GetByte(2);
                    ahorroProgramado.extendido = dataReader.GetByte(3);
                }
                dataReader.Close();

                ahorro.ahorroProgramado = ahorroProgramado;
            }

            query      = "select tipo, monto, fecha, saldo_parcial from asociados.ahorrodetalle where id_ahorro = @id order by fecha";
            parameters = new List <SqlParameter>()
            {
                new SqlParameter("id", id)
            };
            dataReader = Queries.getDataReader(query, parameters);

            ahorro.detalles = new List <AhorroDetalle>();
            AhorroDetalle detalle;

            while (dataReader.Read())
            {
                detalle              = new AhorroDetalle();
                detalle.tipo         = dataReader.GetString(0);
                detalle.monto        = dataReader.GetDecimal(1);
                detalle.fecha        = dataReader.GetDateTime(2);
                detalle.saldoParcial = dataReader.GetDecimal(3);

                ahorro.detalles.Add(detalle);
            }
            dataReader.Close();

            query      = "select nombre, edad, porcentaje, parentesco from asociados.beneficiarioahorro where id_ahorro = @id";
            parameters = new List <SqlParameter>()
            {
                new SqlParameter("id", id)
            };
            dataReader = Queries.getDataReader(query, parameters);

            ahorro.beneficiarios = new List <Beneficiario>();
            Beneficiario beneficiario;

            while (dataReader.Read())
            {
                beneficiario            = new Beneficiario();
                beneficiario.nombre     = dataReader.GetString(0);
                beneficiario.edad       = dataReader.GetByte(1);
                beneficiario.porcentaje = dataReader.GetByte(2);
                beneficiario.parentesco = dataReader.GetString(3);

                ahorro.beneficiarios.Add(beneficiario);
            }
            dataReader.Close();

            ahorro.asociado = AsociadoServicio.selectParcial(ahorro.idAsociado);

            return(ahorro);
        }
// ##########################################################################################
// ###############   Recuperar un crédito a partir de su id   ###############################
// ##########################################################################################

        public static Credito select(int id)
        {
            Credito credito = new Credito();

            credito.id = id;

            string query;
            List <SqlParameter> parameters;


            // ####  Recuperar la información del crédito   #####

            query = "select codigo, id_asociado, tipo, monto, interes, cuota, " +
                    "plazo, forma_pago, fecha, aportacion, cuota_social, garantia_aportacion, activo " +
                    "from asociados.credito where id = @id";
            parameters = new List <SqlParameter>()
            {
                new SqlParameter("id", credito.id)
            };
            SqlDataReader dataReader = Queries.getDataReader(query, parameters);

            while (dataReader.Read())
            {
                credito.codigo              = dataReader.GetString(0);
                credito.idAsociado          = dataReader.GetInt32(1);
                credito.tipo                = dataReader.GetString(2);
                credito.monto               = dataReader.GetDecimal(3);
                credito.interes             = dataReader.GetByte(4);
                credito.cuota               = dataReader.GetDecimal(5);
                credito.plazo               = dataReader.GetByte(6);
                credito.forma_pago          = dataReader.GetString(7);
                credito.fecha               = dataReader.GetDateTime(8);
                credito.aportacion          = dataReader.GetDecimal(9);
                credito.cuota_social        = dataReader.GetDecimal(10);
                credito.garantia_aportacion = dataReader.GetBoolean(11);
                credito.activo              = dataReader.GetBoolean(12);
            }
            dataReader.Close();


            // ####   Recuperar los pagos de este crédito   #####

            credito.detallesPago = new List <CreditoDetalle>();

            query = "select monto_pagado, aportacion, cuota_social, capital, interes, fecha, saldoParcial from asociados.creditodetalle " +
                    "where id_credito = @id order by fecha";
            parameters = new List <SqlParameter>()
            {
                new SqlParameter("id", credito.id)
            };
            dataReader = Queries.getDataReader(query, parameters);
            while (dataReader.Read())
            {
                CreditoDetalle detalle = new CreditoDetalle(dataReader.GetDecimal(0), dataReader.GetDecimal(1),
                                                            dataReader.GetDecimal(2), dataReader.GetDateTime(5));
                detalle.capital      = dataReader.GetDecimal(3);
                detalle.interes      = dataReader.GetDecimal(4);
                detalle.saldoParcial = dataReader.GetDecimal(6);
                credito.detallesPago.Add(detalle);
            }
            dataReader.Close();

            // ##### Recupera la información del asociado (parcialmente, solo la que se usa)  ####

            credito.asociado = AsociadoServicio.selectParcial(credito.idAsociado);


            // #### Recupera el objeto CreditoDescuento  #####

            credito.creditoDescuento = new CreditoDescuento();

            query      = "select cuota_ingreso, escrituracion, seguro, papeleria from asociados.creditodescuento where id_credito = @id";
            parameters = new List <SqlParameter>()
            {
                new SqlParameter("id", credito.id)
            };
            dataReader = Queries.getDataReader(query, parameters);
            while (dataReader.Read())
            {
                credito.creditoDescuento.cuota_ingreso = dataReader.GetDecimal(0);
                credito.creditoDescuento.escrituracion = dataReader.GetDecimal(1);
                credito.creditoDescuento.seguro        = dataReader.GetDecimal(2);
                credito.creditoDescuento.papeleria     = dataReader.GetDecimal(3);
            }
            dataReader.Close();

            return(credito);
        }