public ActionResult GuardarTerminar()
        {
            List <CriteriosViewModelafp> list = new List <CriteriosViewModelafp>();

            try
            {
                Empresa     empresa     = db.Tb_Empresa.Find(AccountData.NitEmpresa);
                TipoEmpresa tipoEmpresa = empresa.TipoEmpresa;
                if (empresa.Empr_Ttrabaja > 0 && (tipoEmpresa == null || tipoEmpresa.Categoria < 3))
                {
                    tipoEmpresa = db.Tb_TipoEmpresa.FirstOrDefault(t => t.RangoMinimoTrabajadores <= empresa.Empr_Ttrabaja && t.RangoMaximoTrabajadores >= empresa.Empr_Ttrabaja);
                }
                AutoEvaluacionAfp autoevaluacionAfp = db.Tb_AutoEvaluacionAfp.FirstOrDefault(a => a.Empr_Nit == AccountData.NitEmpresa && !a.Finalizada);
                if (autoevaluacionAfp != null)
                {
                    int q  = db.Tb_cumplimientoAfp.Count(c => c.Auevafp_Id == autoevaluacionAfp.Auevafp_Id);
                    int q2 = db.Tb_ItemEstandarAfp.Count(ie => tipoEmpresa.Categoria == 0 || ie.Categoria <= tipoEmpresa.Categoria && ie.CategoriaExcepcion != tipoEmpresa.Categoria && ie.CategoriaExcepcion != tipoEmpresa.Categoria);
                    if (q2 > q)
                    {
                        return(RedirectToAction("AutoevaluacionAfp", new { textError = "Esta evaluación aún no ha sido finalizada" }));
                    }
                    autoevaluacionAfp.Auev_Fin        = DateTime.Now;
                    autoevaluacionAfp.Finalizada      = true;
                    db.Entry(autoevaluacionAfp).State = EntityState.Modified;
                    db.SaveChanges();
                }
            }
            catch (Exception ex)
            {
                ViewBag.TextError = ex.Message;
                return(RedirectToAction("AutoevaluacionAfp"));
            }

            return(RedirectToAction("Index", "Home"));
        }
 /// <summary>
 /// Inicializa una nueva instancia de la <see cref="AutoEvaluacionViewModelafp"/> clase.
 /// </summary>
 public AutoEvaluacionViewModelafp()
 {
     AutoEvaluacion = new AutoEvaluacionAfp();
 }
        public ActionResult AutoevaluacionAfp(string textError = "")
        {
            List <CicloPHVAViewModelafp> list = new List <CicloPHVAViewModelafp>();

            try
            {
                ViewBag.TextError = textError;
                Empresa     empresa     = db.Tb_Empresa.Find(AccountData.NitEmpresa);
                TipoEmpresa tipoEmpresa = empresa.TipoEmpresa;
                if (empresa.Empr_Ttrabaja > 0 && (tipoEmpresa == null || tipoEmpresa.Categoria < 3))
                {
                    tipoEmpresa = db.Tb_TipoEmpresa.FirstOrDefault(t => t.Categoria < 4 && empresa.Empr_Ttrabaja > 0);
                }
                AutoEvaluacionAfp autoevaluacion = db.Tb_AutoEvaluacionAfp.FirstOrDefault(a => a.Empr_Nit == AccountData.NitEmpresa && !a.Finalizada);
                if (autoevaluacion == null)
                {
                    db.Tb_AutoEvaluacionAfp.Add(
                        new AutoEvaluacionAfp
                    {
                        Empr_Nit    = AccountData.NitEmpresa,
                        Auev_Inicio = DateTime.Now,
                        Auev_Nom    = "Autoevaluación"
                    });
                    db.SaveChanges();
                }
                list =
                    db.Tb_cicloPHVAAfps
                    .Where(cp => cp.Categoria < 4)
                    .Select(cp =>
                            new CicloPHVAViewModelafp
                {
                    Id           = cp.Id,
                    Nombre       = cp.Nombre,
                    Description  = cp.Description,
                    Criteriosafp = cp.CriteriosAfp
                                   .Where(c => cp.Id == c.CicloPHVA_Id && tipoEmpresa.Categoria == 0 || c.Categoria < 4)
                                   .Select(c =>
                                           new CriteriosViewModelafp
                    {
                        Id            = c.Crit_Id,
                        Nombre        = c.Crit_Nom,
                        Porcentaje    = c.Crit_Porcentaje,
                        Registro      = c.Crit_Registro,
                        EstandaresAfp =
                            c.EstandarsAfp
                            .Where(e => tipoEmpresa.Categoria == 0 || e.Categoria < 4)
                            .Select(e =>
                                    new EstandaresViewModelafp
                        {
                            Id           = e.Esta_Id,
                            Nombre       = e.Esta_Nom,
                            Porcentaje   = e.Esta_Porcentaje,
                            Registro     = e.Esta_Registro,
                            ElementosAfp =
                                e.itemEstandarsAfp
                                .Where(ie => tipoEmpresa.Categoria == 0 || ie.Categoria < 4)
                                .Select(i =>
                                        new ElementoViewModelafp
                            {
                                Id               = i.Iest_Id,
                                Descripcion      = i.Iest_Desc,
                                Observaciones    = i.Iest_Observa,
                                Porcentaje       = i.Iest_Porcentaje,
                                Recurso          = i.Iest_Recurso,
                                Registro         = i.Iest_Registro,
                                Reursob          = i.Iest_Rescursob,
                                Verificar        = i.Iest_Verificar,
                                Video            = i.Iest_Video,
                                Periodo          = i.Iest_Peri,
                                MasInformacion   = i.Iest_MasInfo,
                                CumplimientosAfp = i.CumplimientosAfp.Where(cu => cu.Empr_Nit == AccountData.NitEmpresa && !cu.AutoEvaluacionAfp.Finalizada).ToList()
                            }).ToList()
                        }).ToList()
                    }).ToList()
                }).ToList();
            }
            catch (Exception ex)
            {
                ViewBag.TextError = ex.Message;
            }
            return(View(list));
        }
        public ActionResult CumplimientoAfp([Bind(Include = "AutoEvaluacionId,Cumple,Nocumple,Justifica,Nojustifica,Id,Registro,Observaciones,ItemEstandarId,Nit")] CumplimientoViewModelafp model)
        {
            try
            {
                AutoEvaluacionAfp autoevaluacionAfp = db.Tb_AutoEvaluacionAfp.FirstOrDefault(a => a.Empr_Nit == AccountData.NitEmpresa && !a.Finalizada);
                CumplimientoAfp   cumplimientoAfp;
                if (model.Id == 0)
                {
                    cumplimientoAfp =
                        new CumplimientoAfp
                    {
                        Cumpafp_Id       = model.Id,
                        Cump_NoAplica    = model.NoAplica,
                        Cump_Cumple      = model.Cumple,
                        Cump_Nocumple    = model.Nocumple,
                        Cump_Justifica   = model.Justifica,
                        Cump_Nojustifica = model.Nojustifica,
                        Cump_Observ      = model.Observaciones,
                        Cump_Registro    = DateTime.Now,
                        Empr_Nit         = model.Nit,
                        Iest_Id          = model.ItemEstandarId,
                        Auevafp_Id       = autoevaluacionAfp.Auevafp_Id,
                    };
                    db.Tb_cumplimientoAfp.Add(cumplimientoAfp);
                }
                else
                {
                    cumplimientoAfp = db.Tb_cumplimientoAfp.Find(model.Id);
                    cumplimientoAfp.Cump_NoAplica    = model.NoAplica;
                    cumplimientoAfp.Cumpafp_Id       = model.Id;
                    cumplimientoAfp.Cump_Cumple      = model.Cumple;
                    cumplimientoAfp.Cump_Nocumple    = model.Nocumple;
                    cumplimientoAfp.Cump_Justifica   = model.Justifica;
                    cumplimientoAfp.Cump_Nojustifica = model.Nojustifica;
                    cumplimientoAfp.Cump_Observ      = model.Observaciones;
                    cumplimientoAfp.Cump_Registro    = DateTime.Now;
                    cumplimientoAfp.Empr_Nit         = model.Nit;
                    cumplimientoAfp.Iest_Id          = model.ItemEstandarId;
                    cumplimientoAfp.Auevafp_Id       = autoevaluacionAfp.Auevafp_Id;
                    db.Entry(cumplimientoAfp).State  = EntityState.Modified;
                }
                db.SaveChanges();
                model.Id            = cumplimientoAfp.Cumpafp_Id;
                ViewBag.TextExitoso = "Se guardaron los datos exitosamente";
            }
            catch (Exception ex)
            {
                ViewBag.TextError = ex.Message;
                ItemEstandarAfp item = db.Tb_ItemEstandarAfp.Find(model.ItemEstandarId);
                model.ItemEstandar =
                    new ElementoViewModelafp
                {
                    Id             = item.Iest_Id,
                    Descripcion    = item.Iest_Desc,
                    Observaciones  = item.Iest_Observa,
                    Porcentaje     = item.Iest_Porcentaje,
                    Recurso        = item.Iest_Recurso,
                    Registro       = item.Iest_Registro,
                    Reursob        = item.Iest_Rescursob,
                    Verificar      = item.Iest_Verificar,
                    Video          = item.Iest_Video,
                    Periodo        = item.Iest_Peri,
                    MasInformacion = item.Iest_MasInfo
                };
                return(View(model));
            }

            return(RedirectToAction("AutoevaluacionAfp"));
        }
        public JsonResult ImplementacionPHVAPlanear(int Nitempresa)
        {
            TipoEmpresa tipoEmpresa = new TipoEmpresa();

            if (Nitempresa != 0)
            {
                Empresa empresa = db.Tb_Empresa.Find(Nitempresa);
                tipoEmpresa = empresa.TipoEmpresa;
                if (empresa.Empr_Ttrabaja > 0 && (tipoEmpresa == null || tipoEmpresa.Categoria < 3))
                {
                    tipoEmpresa = db.Tb_TipoEmpresa.FirstOrDefault(t => t.RangoMinimoTrabajadores <= empresa.Empr_Ttrabaja && t.RangoMaximoTrabajadores >= empresa.Empr_Ttrabaja);
                }
            }
            AutoEvaluacionAfp evaluacion =
                db.Tb_AutoEvaluacionAfp
                .Where(a => a.Empr_Nit == Nitempresa && a.CumplimientosAfp.Count > 0)
                .OrderByDescending(a => a.Auev_Inicio)
                .FirstOrDefault();

            decimal[] lst    = new decimal[0];
            string[]  labels = new string[0];
            if (evaluacion != null)
            {
                var values =
                    db.Tb_ItemEstandarAfp
                    .Where(ie => tipoEmpresa.Categoria == 0 || (ie.Categoria <= tipoEmpresa.Categoria && ie.CategoriaExcepcion != tipoEmpresa.Categoria && ie.CategoriaExcepcion != tipoEmpresa.Categoria))
                    .GroupBy(a => a.EstandarAfp.CriterioAfp.CicloPHVAAfp).Select(a => new { key = a.Key.Id, value = (decimal)a.Count(), name = a.Key.Nombre })
                    .ToArray();
                labels = values.Where(v => v.name == "1. Planear").Select(v => v.name).ToArray();
                var temp =
                    db.Tb_cumplimientoAfp
                    .Where(a => a.Auevafp_Id == evaluacion.Auevafp_Id && (a.Cump_Cumple || a.Cump_Justifica))
                    .GroupBy(a => a.ItemEstandarAfp.EstandarAfp.CriterioAfp.CicloPHVAAfp).Select(a => new { key = a.Key.Id, value = (decimal)a.Where(e => e.Cump_Cumple || e.Cump_Justifica).Count() })
                    .ToArray();
                lst    = new decimal[values.Length];
                lst[0] = 0;
                var flag = 0;
                for (int i = 0; i < values.Length; i++)
                {
                    var val = temp.FirstOrDefault(v => v.key == values[i].key);
                    if (val != null)
                    {
                        if (values[i].name == "1. Planear")
                        {
                            lst[0] = Decimal.Round((val.value * 100 / values[i].value), 1);
                            flag   = 1;
                        }
                        if (flag == 1)
                        {
                            lst[0 + 1] = 100 - lst[0];
                            flag       = 2;
                        }
                    }
                }
            }
            ChartDataViewModel datos =
                new ChartDataViewModel
            {
                title    = "1. Planear PBA",
                labels   = labels,
                datasets =
                    new List <ChartDatasetsViewModel> {
                    new ChartDatasetsViewModel
                    {
                        label       = "Avance porcentual %",
                        data        = lst,
                        fill        = false,
                        borderWidth = 1
                    },
                }
            };

            return(Json(datos, JsonRequestBehavior.AllowGet));
        }