public static List <GrupoBeneficiarioClass> ListarGrupoBeneficiariosPorNombre(string nombre)
        {
            List <GrupoBeneficiarioClass> r = new List <GrupoBeneficiarioClass>();
            saluddbEntities        mctx     = new saluddbEntities();
            GrupoBeneficiarioClass x;


            var cur = from ben in mctx.grupoes
                      where ben.nombre.Contains(nombre)
                      select ben;


            foreach (var f in cur)
            {
                x = new GrupoBeneficiarioClass();

                x._id_grupo    = f.id_grupo;
                x._descripcion = f.descripcion;
                x._nombre      = f.nombre;

                x._beneficiarios = BeneficiarioClass.ListarBeneficiariosPorGrupo(f.id_grupo);

                r.Add(x);
            }
            return(r);
        }
        /// <summary>
        /// Lista los Grupos que el beneficiario pertenece
        /// </summary>
        /// <param name="id_beneficiario">Id del beneficiario a buscar en los grupos</param>
        /// <returns>Retorna una lista de grupos de beneficiarios</returns>
        public static List <GrupoBeneficiarioClass> ListarGruposPorBeneficiario(int id_beneficiario)
        {
            List <GrupoBeneficiarioClass> r = new List <GrupoBeneficiarioClass>();
            saluddbEntities        mctx     = new saluddbEntities();
            GrupoBeneficiarioClass x;

            var cur = from g in mctx.grupoes
                      join bg in mctx.beneficiario_grupo
                      on g.id_grupo equals bg.id_gupo
                      where bg.id_beneficiario == id_beneficiario
                      orderby g.nombre
                      select g;

            foreach (var f in cur)
            {
                x = new GrupoBeneficiarioClass();

                x._id_grupo    = f.id_grupo;
                x._descripcion = f.descripcion;
                x._nombre      = f.nombre;

                x._beneficiarios = BeneficiarioClass.ListarBeneficiariosPorGrupo(f.id_grupo);

                r.Add(x);
            }


            return(r);
        }
        /// <summary>
        /// Lista todos los beneficiarios que se encuentran en la base de datos
        /// </summary>
        /// <returns>Lista de beneficiarios</returns>
        public static List <BeneficiarioClass> ListarBeneficiarios()
        {
            List <BeneficiarioClass> r    = new List <BeneficiarioClass>();
            saluddbEntities          mctx = new saluddbEntities();
            BeneficiarioClass        x;

            var cur = from b in mctx.beneficiarios
                      orderby b.nombre
                      select b;

            foreach (var f in cur)
            {
                x = new BeneficiarioClass();

                x._id_beneficiario = f.id_beneficiario;
                x._nombre          = f.nombre;
                x._direccion       = f.direccion;
                x._documento       = f.documento;
                x._telefono        = f.telefono;
                x._fecha_nac       = (DateTime)f.fecha_nac;
                x._cuit_cuil       = f.cuit_cuil;
                x._barrio          = BarrioClass.BuscarBarrioPorId((int)f.id_barrio);
                x._beneficios      = BeneficioBeneficiarioClass.ListarBeneficioPorBeneficiario((int)x._id_beneficiario);

                r.Add(x);
            }


            return(r);
        }
        /// <summary>
        /// Lista los beneficiarios por criterio
        /// </summary>
        /// <param name="parametro">Parámetro con el que se compara para listar</param>
        /// <param name="criterio">Criterio de búsqueda</param>
        /// <returns>Lista de beneficiarios</returns>
        public static List <BeneficiarioClass> ListarBeneficiarioPorCriterio(string parametro, CriterioBusqueda criterio)
        {
            List <BeneficiarioClass> r    = new List <BeneficiarioClass>();
            saluddbEntities          mctx = new saluddbEntities();
            BeneficiarioClass        x;


            var cur = from b in mctx.beneficiarios
                      select b;

            foreach (var f in cur)
            {
                bool agregar = false;
                switch (criterio)
                {
                case CriterioBusqueda.Busqueda_Dni:
                    agregar = f.documento.Contains(parametro);
                    break;

                case CriterioBusqueda.Busqueda_ID:
                    int id = 0;
                    Int32.TryParse(parametro, out id);
                    if (f.id_beneficiario == id)
                    {
                        agregar = true;
                    }
                    else
                    {
                        agregar = false;
                    }

                    break;

                case CriterioBusqueda.Busqueda_Nombre:
                    agregar = f.nombre.Contains(parametro);
                    break;
                }

                if (agregar)
                {
                    x = new BeneficiarioClass();

                    x._id_beneficiario = f.id_beneficiario;
                    x._nombre          = f.nombre;
                    x._direccion       = f.direccion;
                    x._documento       = f.documento;
                    x._telefono        = f.telefono;
                    x._fecha_nac       = (DateTime)f.fecha_nac;
                    x._cuit_cuil       = f.cuit_cuil;
                    x._barrio          = BarrioClass.BuscarBarrioPorId((int)f.id_barrio);
                    x._beneficios      = BeneficioBeneficiarioClass.ListarBeneficioPorBeneficiario((int)x._id_beneficiario);
                    r.Add(x);
                }
            }

            return(r);
        }
        /// <summary>
        /// Busca el grupo según el criterio de busqueda y el  parametro
        /// </summary>
        /// <param name="criterio"></param>
        /// <returns>Retorna el Beneficiario. Null en otro  caso</returns>
        public static GrupoBeneficiarioClass BuscarGrupo(String parametro, CriterioBusqueda criterio)
        {
            GrupoBeneficiarioClass r = new GrupoBeneficiarioClass();

            saluddbEntities ctx = new saluddbEntities();

            switch (criterio)
            {
            case CriterioBusqueda.Busqueda_ID:
                int id = 0;
                Int32.TryParse(parametro, out id);

                var cur = from g in ctx.grupoes
                          where g.id_grupo == id
                          select g;

                if (cur.Count() > 0)
                {
                    var f = cur.First();

                    r._id_grupo    = f.id_grupo;
                    r._descripcion = f.descripcion;
                    r._nombre      = f.nombre;

                    r._beneficiarios = BeneficiarioClass.ListarBeneficiariosPorGrupo(f.id_grupo);
                    return(r);
                }

                break;



            case CriterioBusqueda.Busqueda_Nombre:
                var cur3 = from g in ctx.grupoes
                           where g.nombre == parametro
                           select g;
                if (cur3.Count() > 0)
                {
                    var f = cur3.First();


                    r._id_grupo    = f.id_grupo;
                    r._descripcion = f.descripcion;
                    r._nombre      = f.nombre;

                    r._beneficiarios = BeneficiarioClass.ListarBeneficiariosPorGrupo(f.id_grupo);
                    return(r);
                }
                break;
            }



            return(null);
        }
        public static BeneficiarioClass BuscarBeneficiariosPorOrden(long id_orden)
        {
            BeneficiarioClass r = new BeneficiarioClass();

            saluddbEntities ctx = new saluddbEntities();

            var cur = from o in ctx.ordenentregas
                      where o.id_orden == id_orden
                      select o;

            if (cur.Count() > 0)
            {
                var f = cur.First();

                r = BeneficiarioClass.BuscarBeneficiario(f.id_beneficiario.ToString(), CriterioBusqueda.Busqueda_ID);


                return(r);
            }

            return(r);
        }
        /// <summary>
        /// Lista los beneficiarios que adquirieron el articulo pasado como parametro.
        /// </summary>
        /// <param name="id_articulo">id del articulo al que se va a buscar el beneficiario</param>
        /// <returns>Lista de beneficiarios</returns>
        public static List <BeneficiarioClass> ListarBeneficiarioPorArticulo(int id_articulo)
        {
            List <BeneficiarioClass> r    = new List <BeneficiarioClass>();
            saluddbEntities          mctx = new saluddbEntities();
            BeneficiarioClass        x;

            //une las tablas itemEntregas, ordenEntregas y beneficiari mediante un Join para obtener los beneficiarios que adquirieron un cierto articulo
            var cur = from ben in mctx.beneficiarios

                      join ord in mctx.ordenentregas
                      on ben.id_beneficiario equals ord.id_beneficiario

                      join item in mctx.itementregas
                      on ord.id_orden equals item.id_orden

                      where item.id_articulo == id_articulo
                      select ben;


            foreach (var f in cur)
            {
                x = new BeneficiarioClass();

                x._id_beneficiario = f.id_beneficiario;
                x._nombre          = f.nombre;
                x._direccion       = f.direccion;
                x._documento       = f.documento;
                x._telefono        = f.telefono;
                x._fecha_nac       = (DateTime)f.fecha_nac;
                x._cuit_cuil       = f.cuit_cuil;
                x._barrio          = BarrioClass.BuscarBarrioPorId((int)f.id_barrio);
                x._beneficios      = BeneficioBeneficiarioClass.ListarBeneficioPorBeneficiario((int)x._id_beneficiario);
                r.Add(x);
            }


            return(r);
        }
        /// <summary>
        /// Lista los Beneficios por criterio
        /// </summary>
        /// <param name="parametro">Parámetro con el que se compara para listar</param>
        /// <param name="criterio">Criterio de búsqueda</param>
        /// <returns>Lista de Beneficios</returns>
        public static List <BeneficioClass> ListarBeneficioPorCriterio(string parametro, CriterioBusqueda criterio)
        {
            List <BeneficioClass> r    = new List <BeneficioClass>();
            saluddbEntities       mctx = new saluddbEntities();
            BeneficioClass        x;



            var cur = from b in mctx.beneficios
                      select b;

            foreach (var f in cur)
            {
                bool agregar = false;
                switch (criterio)
                {
                case CriterioBusqueda.Busqueda_ID:
                    int id = 0;
                    Int32.TryParse(parametro, out id);
                    if (f.id_beneficio == id)
                    {
                        agregar = true;
                    }
                    else
                    {
                        agregar = false;
                    }

                    break;

                case CriterioBusqueda.Busqueda_Nombre_Beneficio:
                    agregar = f.nombre.Contains(parametro);
                    break;

                case CriterioBusqueda.Busqueda_Dni:
                    List <BeneficiarioClass> listaBenef     = BeneficiarioClass.ListarBeneficiarioPorCriterio(parametro, CriterioBusqueda.Busqueda_Dni);
                    List <BeneficioClass>    listaBeneficio = new List <BeneficioClass>();
                    foreach (BeneficiarioClass b in listaBenef)
                    {
                        List <BeneficioClass> listaGrupoBenf = BeneficioClass.ListarBeneficiosPorBeneficiario(b.Id_beneficiario);

                        foreach (BeneficioClass g in listaGrupoBenf)
                        {
                            if (listaBeneficio.Contains(g))
                            {
                            }
                            else
                            {
                                listaBeneficio.Add(g);
                            }
                        }
                    }


                    BeneficioClass benef = listaBeneficio.Find(b => b.Id_beneficio == f.id_beneficio);

                    if (benef != null)
                    {
                        agregar = true;
                    }

                    break;

                case CriterioBusqueda.Busqueda_Nombre:
                    List <BeneficiarioClass> listaBen = BeneficiarioClass.ListarBeneficiarioPorCriterio(parametro, CriterioBusqueda.Busqueda_Nombre);
                    List <BeneficioClass>    listaB   = new List <BeneficioClass>();
                    foreach (BeneficiarioClass b in listaBen)
                    {
                        List <BeneficioClass> listaBeneficiario = BeneficioClass.ListarBeneficiosPorBeneficiario(b.Id_beneficiario);

                        foreach (BeneficioClass g in listaBeneficiario)
                        {
                            if (listaB.Contains(g))
                            {
                            }
                            else
                            {
                                listaB.Add(g);
                            }
                        }
                    }


                    BeneficioClass ben = listaB.Find(b => b.Id_beneficio == f.id_beneficio);

                    if (ben != null)
                    {
                        agregar = true;
                    }

                    break;
                }

                if (agregar)
                {
                    x = new BeneficioClass();

                    x._id_beneficio          = f.id_beneficio;
                    x._descripcion_beneficio = f.descripcion;
                    x._nombre_beneficio      = f.nombre;

                    r.Add(x);
                }
            }

            return(r);
        }
        /// <summary>
        /// Lista los grupos por criterio
        /// </summary>
        /// <param name="parametro">Parámetro con el que se compara para listar</param>
        /// <param name="criterio">Criterio de búsqueda</param>
        /// <returns>Lista de grupos</returns>
        public static List <GrupoBeneficiarioClass> ListarGruposPorCriterio(string parametro, CriterioBusqueda criterio)
        {
            List <GrupoBeneficiarioClass> r = new List <GrupoBeneficiarioClass>();
            saluddbEntities        mctx     = new saluddbEntities();
            GrupoBeneficiarioClass x;


            var cur = from g in mctx.grupoes
                      select g;

            foreach (var f in cur)
            {
                bool agregar = false;
                switch (criterio)
                {
                case CriterioBusqueda.Busqueda_ID:
                    int id = 0;
                    Int32.TryParse(parametro, out id);
                    if (f.id_grupo == id)
                    {
                        agregar = true;
                    }
                    else
                    {
                        agregar = false;
                    }

                    break;

                case CriterioBusqueda.Busqueda_Nombre_Grupo:
                    agregar = f.nombre.Contains(parametro);
                    break;

                case CriterioBusqueda.Busqueda_Dni:
                    List <BeneficiarioClass>      listaBenef = BeneficiarioClass.ListarBeneficiarioPorCriterio(parametro, CriterioBusqueda.Busqueda_Dni);
                    List <GrupoBeneficiarioClass> listaGrup  = new List <GrupoBeneficiarioClass>();
                    foreach (BeneficiarioClass b in listaBenef)
                    {
                        List <GrupoBeneficiarioClass> listaGrupoBenf = GrupoBeneficiarioClass.ListarGruposPorBeneficiario(b.Id_beneficiario);

                        foreach (GrupoBeneficiarioClass g in listaGrupoBenf)
                        {
                            if (listaGrup.Contains(g))
                            {
                            }
                            else
                            {
                                listaGrup.Add(g);
                            }
                        }
                    }


                    GrupoBeneficiarioClass grupo = listaGrup.Find(g => g.Id_grupo == f.id_grupo);

                    if (grupo != null)
                    {
                        agregar = true;
                    }

                    break;

                case CriterioBusqueda.Busqueda_Nombre:
                    List <BeneficiarioClass>      listaBen = BeneficiarioClass.ListarBeneficiarioPorCriterio(parametro, CriterioBusqueda.Busqueda_Nombre);
                    List <GrupoBeneficiarioClass> listaG   = new List <GrupoBeneficiarioClass>();
                    foreach (BeneficiarioClass b in listaBen)
                    {
                        List <GrupoBeneficiarioClass> listaGrupoBenf = GrupoBeneficiarioClass.ListarGruposPorBeneficiario(b.Id_beneficiario);

                        foreach (GrupoBeneficiarioClass g in listaGrupoBenf)
                        {
                            if (listaG.Contains(g))
                            {
                            }
                            else
                            {
                                listaG.Add(g);
                            }
                        }
                    }


                    GrupoBeneficiarioClass gru = listaG.Find(g => g.Id_grupo == f.id_grupo);

                    if (gru != null)
                    {
                        agregar = true;
                    }

                    break;
                }

                if (agregar)
                {
                    x = new GrupoBeneficiarioClass();

                    x._id_grupo    = f.id_grupo;
                    x._descripcion = f.descripcion;
                    x._nombre      = f.nombre;

                    x._beneficiarios = BeneficiarioClass.ListarBeneficiariosPorGrupo(f.id_grupo);

                    r.Add(x);
                }
            }

            return(r);
        }
        public bool Modificar()
        {
            bool r = false;

            try
            {
                var cur = from g in ctx.grupoes
                          where g.id_grupo == _id_grupo
                          select g;


                var f = cur.First();
                f.descripcion = _descripcion;

                ctx.SaveChanges();
                r = true;

                if (r)
                {
                    var cur2 = from bg in ctx.beneficiario_grupo
                               where bg.id_gupo == _id_grupo
                               select bg;


                    List <BeneficiarioClass>  listaGuardada = new List <BeneficiarioClass>();
                    List <beneficiario_grupo> listaAdd      = new List <beneficiario_grupo>();
                    List <beneficiario_grupo> listaBorrar   = new List <beneficiario_grupo>();
                    foreach (beneficiario_grupo bg in cur2)
                    {
                        listaGuardada.Add(BeneficiarioClass.BuscarBeneficiario((bg.id_beneficiario).ToString(), CriterioBusqueda.Busqueda_ID));
                    }

                    // Si se guardó la descripción guardo los beneficiarios
                    foreach (BeneficiarioClass b in _beneficiarios)
                    {
                        if (listaGuardada.Exists(x => x.Id_beneficiario == b.Id_beneficiario))
                        {
                            // No hago nada;
                        }
                        else
                        {
                            // Guardo en la lista para agregar
                            // listaAdd.Add(b);
                            beneficiario_grupo bg = new beneficiario_grupo();
                            bg.id_gupo         = this.Id_grupo;
                            bg.id_beneficiario = b.Id_beneficiario;
                            listaAdd.Add(bg);
                            // ctx.beneficiario_grupo.Attach(bg);
                            ctx.beneficiario_grupo.Add(bg);
                            ctx.SaveChanges();

                            // ctx.beneficiario_grupo.Add(bg);
                            // ctx.SaveChanges();
                        }
                    }


                    foreach (BeneficiarioClass b in listaGuardada)
                    {
                        if (_beneficiarios.Exists(x => x.Id_beneficiario == b.Id_beneficiario))
                        {
                            // NO hago nada
                        }
                        else
                        {
                            //listaBorrar.Add(b);
                            beneficiario_grupo bg = new beneficiario_grupo();
                            bg.id_gupo         = this.Id_grupo;
                            bg.id_beneficiario = b.Id_beneficiario;
                            listaBorrar.Add(bg);

                            //ctx.beneficiario_grupo.Remove(bg);
                        }
                    }

                    /*  foreach(beneficiario_grupo bg in listaAdd)
                     * {
                     *    ctx.beneficiario_grupo.Add(bg);
                     *
                     * }
                     */
                    foreach (beneficiario_grupo bg in listaBorrar)
                    {
                        if (eliminarBeneficiarioGrupo(bg.id_beneficiario, bg.id_gupo))
                        {
                        }
                        else
                        {
                            r = false;
                        }
                    }
                    ctx.SaveChanges();
                }
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message, "Error al modificar el grupo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                r = false;
            }



            return(r);
        }
        /// <summary>
        /// Busca el beneficiario según el criterio de busqueda y el  parametro
        /// </summary>
        /// <param name="criterio"></param>
        /// <returns>Retorna el Beneficiario. Null en otro  caso</returns>
        public static BeneficiarioClass BuscarBeneficiario(String parametro, CriterioBusqueda criterio)
        {
            BeneficiarioClass r = new BeneficiarioClass();

            saluddbEntities ctx = new saluddbEntities();

            switch (criterio)
            {
            case CriterioBusqueda.Busqueda_ID:
                int id = 0;
                Int32.TryParse(parametro, out id);

                var cur = from b in ctx.beneficiarios
                          where b.id_beneficiario == id
                          select b;

                if (cur.Count() > 0)
                {
                    var f = cur.First();

                    r._id_beneficiario = f.id_beneficiario;
                    r._documento       = f.documento;
                    r._direccion       = f.direccion;
                    r._telefono        = f.telefono;
                    r._nombre          = f.nombre;
                    r._fecha_nac       = (DateTime)f.fecha_nac;
                    r._cuit_cuil       = f.cuit_cuil;
                    r._barrio          = BarrioClass.BuscarBarrioPorId((int)f.id_barrio);
                    r._beneficios      = BeneficioBeneficiarioClass.ListarBeneficioPorBeneficiario((int)r._id_beneficiario);
                    return(r);
                }

                break;


            case CriterioBusqueda.Busqueda_Dni:
                var cur2 = from b in ctx.beneficiarios
                           where b.documento == parametro
                           select b;



                if (cur2.Count() > 0)
                {
                    var f = cur2.First();

                    r._id_beneficiario = f.id_beneficiario;
                    r._documento       = f.documento;
                    r._direccion       = f.direccion;
                    r._telefono        = f.telefono;
                    r._nombre          = f.nombre;
                    r._fecha_nac       = (DateTime)f.fecha_nac;
                    r._cuit_cuil       = f.cuit_cuil;
                    r._barrio          = BarrioClass.BuscarBarrioPorId((int)f.id_barrio);
                    r._beneficios      = BeneficioBeneficiarioClass.ListarBeneficioPorBeneficiario((int)r._id_beneficiario);
                    return(r);
                }


                break;

            case CriterioBusqueda.Busqueda_Nombre:
                var cur3 = from b in ctx.beneficiarios
                           where b.nombre == parametro
                           select b;
                if (cur3.Count() > 0)
                {
                    var f = cur3.First();

                    r._id_beneficiario = f.id_beneficiario;
                    r._documento       = f.documento;
                    r._direccion       = f.direccion;
                    r._telefono        = f.telefono;
                    r._nombre          = f.nombre;
                    r._fecha_nac       = (DateTime)f.fecha_nac;
                    r._cuit_cuil       = f.cuit_cuil;
                    r._barrio          = BarrioClass.BuscarBarrioPorId((int)f.id_barrio);
                    r._beneficios      = BeneficioBeneficiarioClass.ListarBeneficioPorBeneficiario((int)r._id_beneficiario);
                    return(r);
                }
                break;
            }



            return(null);
        }