Example #1
0
        public async Task GetQualificationsByProjectAsync(ChartDataViewModel viewModel)
        {
            var projectQualifications = await _context.ProjectQualifications.Include(x => x.Project).ToArrayAsync();

            viewModel.ChartData = projectQualifications.GroupBy(x => x.Project.Name, x => x.QualificationId).ToDictionary(x => x.Key, x => x.Count());
            viewModel.Label     = "Qualifications by project";
        }
Example #2
0
        public ChartDataView()
        {
            InitializeComponent();
            ChartRoadsData   = new Dictionary <Road, Dictionary <DateTime, int> >();
            this.DataContext = new NetworkService.ViewModel.ChartDataViewModel();
            Vm = (ChartDataViewModel)(this.DataContext);

            ListOfTbs.Add(0, Tb1);
            ListOfTbs.Add(1, Tb2);
            ListOfTbs.Add(2, Tb3);
            ListOfTbs.Add(3, Tb4);
            ListOfTbs.Add(4, Tb5);
            ListOfTbs.Add(5, Tb6);
            ListOfTbs.Add(6, Tb7);
            ListOfTbs.Add(7, Tb8);
            ListOfTbs.Add(8, Tb9);
            ListOfTbs.Add(9, Tb10);

            ListOfRects.Add(0, R1);
            ListOfRects.Add(1, R2);
            ListOfRects.Add(2, R3);
            ListOfRects.Add(3, R4);
            ListOfRects.Add(4, R5);
            ListOfRects.Add(5, R6);
            ListOfRects.Add(6, R7);
            ListOfRects.Add(7, R8);
            ListOfRects.Add(8, R9);
            ListOfRects.Add(9, R10);

            NotifiedVms.Instance.RegisterAction(ShowChartAction);
        }
Example #3
0
        public async Task GetSkillsByLevelAsync(ChartDataViewModel viewModel)
        {
            var qualifications = await _context.Qualifications.Include(x => x.Skill).ToArrayAsync();

            viewModel.ChartData = qualifications.GroupBy(x => x.Level, x => x.Skill).ToDictionary(x => x.Key.ToString(), x => x.Count());
            viewModel.Label     = "Skills by level";
        }
Example #4
0
        private async Task <ChartDataViewModel> SetTickerData(ChartDataViewModel model, int tradePairId)
        {
            using (var context = DataContextFactory.CreateContext())
            {
                var timeLast = DateTime.UtcNow.AddHours(-24);
                var query    = from tradepair in context.TradePair.Where(t => t.Id == tradePairId)
                               from history in context.TradeHistory.Where(t => t.TradePairId == tradepair.Id && t.Timestamp > timeLast)
                               .DefaultIfEmpty()
                               .GroupBy(g => g.TradePairId)
                               .Select(x => new
                {
                    High = x.Max(j => j.Rate),
                    Low  = x.Min(j => j.Rate),
                    Last = tradepair.LastTrade
                })
                               select new
                {
                    High = (decimal?)history.High ?? tradepair.LastTrade,
                    Low  = (decimal?)history.Low ?? tradepair.LastTrade,
                    Last = tradepair.LastTrade
                };
                var data = await query.FirstOrDefaultNoLockAsync();

                model.High = data.High;
                model.Low  = data.Low;
                model.Last = data.Last;
                return(model);
            }
        }
Example #5
0
        public async Task GetProjectsPerManagerAsync(ChartDataViewModel viewModel)
        {
            var projects = await _context.Projects.Include(x => x.Manager).ToArrayAsync();

            viewModel.ChartData = GetProjectsPerManager(projects);
            viewModel.Label     = "Projects by manager";
        }
Example #6
0
        public async Task GetResourcesByProjectAsync(ChartDataViewModel viewModel)
        {
            var projectResources = await _context.ProjectIdentityResources.Include(x => x.Project).ToArrayAsync();

            viewModel.ChartData = projectResources.GroupBy(x => x.Project.Name, x => x.IdentityResourceId).ToDictionary(x => x.Key, x => x.Count());
            viewModel.Label     = "Resources by project";
        }
        public JsonResult ImplementacionApi(int location)
        {
            using (WebClient wc = new WebClient())
            {
                var     json    = wc.DownloadString("http://127.0.0.1/scoreapb/api/datosapi?location=" + location);
                dynamic jsonObj = JsonConvert.DeserializeObject(json);
                RecomendacionesHogar  = Int32.Parse(jsonObj["RecomendacionesHogar"].ToString());
                DistanciaminetoFisico = Int32.Parse(jsonObj["DistanciaminetoFisico"].ToString());
                Transporte            = Int32.Parse(jsonObj["Transporte"].ToString());
                Guantes              = Int32.Parse(jsonObj["Guantes"].ToString());
                Tabocas              = Int32.Parse(jsonObj["Tabocas"].ToString());
                LavadoManos          = Int32.Parse(jsonObj["LavadoManos"].ToString());
                UsuariosMatriculados = Int32.Parse(jsonObj["UsuariosMatriculados"].ToString());

                PorcentajeRecomendacionesHogar  = (RecomendacionesHogar * 100) / UsuariosMatriculados;
                PorcentajeDistanciaminetoFisico = (DistanciaminetoFisico * 100) / UsuariosMatriculados;
                PorcentajeTransporte            = (Transporte * 100) / UsuariosMatriculados;
                PorcentajeGuantes     = (Guantes * 100) / UsuariosMatriculados;
                PorcentajeTapabocas   = (Tabocas * 100) / UsuariosMatriculados;
                PorcentajeLavadoManos = (LavadoManos * 100) / UsuariosMatriculados;
                PorcentajeTotal       = ((RecomendacionesHogar + DistanciaminetoFisico + Transporte + Guantes + Tabocas + LavadoManos) * 100) / (UsuariosMatriculados * 6);
            }

            ChartDataViewModel datos =
                new ChartDataViewModel
            {
                title  = "INDICADOR TRABAJADORES CERTIFICADOS",
                labels = new string[7] {
                    "Recomendaciones Hogar", "Transporte", "Guantes", "Tapabocas", "Distanciamineto físico", "Lavado Manos", "Porcentaje Total"
                },
                datasets =
                    new List <ChartDatasetsViewModel> {
                    new ChartDatasetsViewModel
                    {
                        label = "Avance porcentual %",
                        data  = new string[7] {
                            PorcentajeRecomendacionesHogar.ToString(), PorcentajeTransporte.ToString(), PorcentajeGuantes.ToString(), PorcentajeTapabocas.ToString(), PorcentajeDistanciaminetoFisico.ToString(), PorcentajeLavadoManos.ToString(), PorcentajeTotal.ToString()
                        },
                        fill        = false,
                        borderWidth = 1
                    },
                }
            };

            return(Json(datos, JsonRequestBehavior.AllowGet));
        }
        public JsonResult AvanceAutoevaluaciones(int Nitempresa)
        {
            List <ActiCumplimiento> lst = new List <ActiCumplimiento>();

            try
            {
                var cumplimientos =
                    db.Tb_ActiCumplimiento.Where(a => a.Empr_Nit == Nitempresa && a.Usersplandetrabajo.Any(u => u.PlandeTrabajo != null)).ToList();
                if (cumplimientos != null && cumplimientos.Count > 0)
                {
                    lst.AddRange(cumplimientos);
                }

                var ci          = new CultureInfo("es-CO");
                var ejecucion   = lst.Where(a => !a.Finalizada).GroupBy(a => a.Acum_IniAct.ToString("MMMM", ci)).Select(a => a.Count()).Count();
                var planeadas   = lst.Count;
                var finalizadas = lst.Count - ejecucion;

                ChartDataViewModel datos =
                    new ChartDataViewModel
                {
                    title  = "Alcance del plan de trabajo anual",
                    labels = new string[3] {
                        "Planeadas", "En Ejercucion", "Finalizadas"
                    },
                    datasets =
                        new List <ChartDatasetsViewModel> {
                        new ChartDatasetsViewModel
                        {
                            label = "Porcentaje %",
                            data  = new string[3] {
                                planeadas.ToString(), ejecucion.ToString(), finalizadas.ToString()
                            },
                            fill        = false,
                            borderWidth = 1
                        },
                    }
                };
                return(Json(datos, JsonRequestBehavior.AllowGet));
            }
            catch (Exception ex)
            {
                return(Json(ex, JsonRequestBehavior.AllowGet));
            }
        }
        public JsonResult AvanceAutoevaluaciones()
        {
            List <ActiCumplimiento> lst = new List <ActiCumplimiento>();

            try
            {
                var cumplimientos =
                    db.Tb_ActiCumplimiento.Where(a => a.Empr_Nit == AccountData.NitEmpresa && a.Usersplandetrabajo.Any(u => u.PlandeTrabajo != null)).ToList();
                if (cumplimientos != null && cumplimientos.Count > 0)
                {
                    lst.AddRange(cumplimientos);
                }

                var ci = new CultureInfo("es-CO");
                ChartDataViewModel datos =
                    new ChartDataViewModel
                {
                    title    = "Alcance del plan de trabajo anual",
                    labels   = lst.Select(a => a.Acum_IniAct.ToString("MMMM", ci)).Distinct().ToArray(),
                    datasets =
                        new List <ChartDatasetsViewModel> {
                        new ChartDatasetsViewModel
                        {
                            label       = "Planeadas",
                            data        = lst.GroupBy(a => a.Acum_IniAct.ToString("MMMM", ci)).Select(a => a.Count()).ToArray(),
                            fill        = false,
                            borderWidth = 1
                        },
                        new ChartDatasetsViewModel
                        {
                            label       = "En ejecución",
                            data        = lst.Where(a => !a.Finalizada).GroupBy(a => a.Acum_IniAct.ToString("MMMM", ci)).Select(a => a.Count()).ToArray(),
                            fill        = false,
                            borderWidth = 1
                        }
                    },
                };
                return(Json(datos, JsonRequestBehavior.AllowGet));
            }
            catch (Exception ex)
            {
                return(Json(ex, JsonRequestBehavior.AllowGet));
            }
        }
Example #10
0
        public async Task <IViewComponentResult> InvokeAsync(int sensor, DateTime from, DateTime to)
        {
            var model = new ChartDataViewModel()
            {
                SensorId = sensor,
                Data     = await _context.SensorData
                           .Where(x => x.SensorId == sensor && x.Timestamp >= from && x.Timestamp <= to)
                           .OrderBy(x => x.Timestamp)
                           .Select(x => new SensorDataViewModel(sensor, x.Timestamp, x.Value))
                           .ToListAsync()
            };

            // TODO: tohle nejak udelat uz pri nacitani z DB. Nebo jeste lepe udelat nejakou intepolaci
            var indexModulo = Math.Ceiling(model.Data.Count() / (float)MAX_SAMPLES_COUNT);

            model.Data = model.Data.Where((x, index) => index % indexModulo == 0);

            return(View("~/Views/Sensors/Components/DataChartComponent.cshtml", model));
        }
        public async Task <ActionResult> ChartData(ChartDataViewModel model)
        {
            ChartDataResponse resModel = null;

            using (var client = new HttpClient())
            {
                client.BaseAddress = new Uri(ConfigurationManager.AppSettings["BaseUrl"]);
                client.DefaultRequestHeaders.Clear();
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                var json                = JsonConvert.SerializeObject(model);
                var content             = new StringContent(json, Encoding.UTF8, "application/json");
                HttpResponseMessage Res = await client.PostAsync("api/CompanyDashboardAPI/ChartData", content);

                if (Res.IsSuccessStatusCode)
                {
                    resModel = JsonConvert.DeserializeObject <ChartDataResponse>(Res.Content.ReadAsStringAsync().Result);
                }
            }
            return(Json(resModel, JsonRequestBehavior.AllowGet));
        }
Example #12
0
        public async Task <IActionResult> SummaryChartData(ChartDataViewModel viewModel)
        {
            if (viewModel.ButtonType == ButtonType.Project)
            {
                await _summaryService.GetProjectsPerManagerAsync(viewModel);
            }

            if (viewModel.ButtonType == ButtonType.Qualification)
            {
                await _summaryService.GetQualificationsByProjectAsync(viewModel);
            }

            if (viewModel.ButtonType == ButtonType.Resource)
            {
                await _summaryService.GetResourcesByProjectAsync(viewModel);
            }

            if (viewModel.ButtonType == ButtonType.Skill)
            {
                await _summaryService.GetSkillsByLevelAsync(viewModel);
            }

            return(View("Summary", viewModel));
        }
Example #13
0
        public IHttpActionResult ChartData(int year)
        {
            var result = new List <ChartDataViewModel>();

            // Выполненные в текущем году
            var tasks = UnitOfWork.Repository <Task>()
                        .GetQ(filter: x => x.CreatedAt.HasValue && x.CreatedAt.Value.Year == year,
                              includeProperties: "CrashType, Employee, Employee.Person, SpareParts");
            var data = tasks
                       .GroupBy(g => g.CreatedAt.Value.Month)
                       .Select(x => new
            {
                Month = x.Key,
                Count = x.Count()
            });

            var months      = Enumerable.Range(1, 12);
            var currentYear = months.GroupJoin(data,
                                               m => m,
                                               d => d.Month,
                                               (m, g) => g
                                               .Select(r => new KeyValuePair <int, int>(m, r.Count))
                                               .DefaultIfEmpty(new KeyValuePair <int, int>(m, 0))
                                               )
                              .SelectMany(g => g)
                              .Select(x => x.Value);
            var currentYearData = new ChartDataViewModel
            {
                name = year + "г.",
                data = currentYear
            };

            // Выполненные в прошлом году
            tasks = UnitOfWork.Repository <Task>()
                    .GetQ(filter: x => x.CreatedAt.HasValue && x.CreatedAt.Value.Year == year - 1,
                          includeProperties: "CrashType, Employee, Employee.Person, SpareParts");
            data = tasks
                   .GroupBy(g => g.CreatedAt.Value.Month)
                   .Select(x => new
            {
                Month = x.Key,
                Count = x.Count()
            });

            months = Enumerable.Range(1, 12);
            var previousYear = months.GroupJoin(data,
                                                m => m,
                                                d => d.Month,
                                                (m, g) => g
                                                .Select(r => new KeyValuePair <int, int>(m, r.Count))
                                                .DefaultIfEmpty(new KeyValuePair <int, int>(m, 0))
                                                )
                               .SelectMany(g => g)
                               .Select(x => x.Value);
            var previousYearData = new ChartDataViewModel
            {
                name = (year - 1) + "г.",
                data = previousYear
            };

            result.Add(previousYearData);
            result.Add(currentYearData);

            return(Ok(result));
        }
        public ActionResult GetChartData()
        {
            List <int> test1 = new List <int>();

            test1.Add(1000);

            test1.Add(2000);
            test1.Add(2500);
            test1.Add(2000);
            test1.Add(3500);
            test1.Add(4000);
            test1.Add(6000);
            test1.Add(4000);

            List <int> test2 = new List <int>();

            test2.Add(3000);
            test2.Add(4000);
            test2.Add(4000);
            test2.Add(3000);
            test2.Add(5000);
            test2.Add(4000);
            test2.Add(2000);
            test2.Add(3000);

            ChartDataViewModel data1 = new ChartDataViewModel();

            data1.SeriesName = "series1"; data1.SeriesData = test1;


            ChartDataViewModel data2 = new ChartDataViewModel();

            data2.SeriesName = "series2"; data2.SeriesData = test2;

            //List<dynamic> data = new List<dynamic>();
            List <ChartDataViewModel> data = new List <ChartDataViewModel>();

            data.Add(data1);
            data.Add(data2);
            return(Json(data, JsonRequestBehavior.AllowGet));

            //List<int> test1 = new List<int>();
            //test1.Add(1000);
            //test1.Add(2000);
            //test1.Add(3000);
            //test1.Add(2000);
            //test1.Add(5000);
            //test1.Add(4000);
            //test1.Add(6000);
            //test1.Add(4000);

            //List<int> test2 = new List<int>();
            //test2.Add(3000);
            //test2.Add(4000);
            //test2.Add(4000);
            //test2.Add(3000);
            //test2.Add(5000);
            //test2.Add(4000);
            //test2.Add(2000);
            //test2.Add(3000);
            ////List<dynamic> data = new List<dynamic>();
            //List<List<int>> data = new List<List<int>>();
            //data.Add(test1);
            //data.Add(test2);
            //return Json(data, JsonRequestBehavior.AllowGet);
        }
        public async Task <IActionResult> Dashboard()
        {
            var currentUser = await GetCurrentUserAsync();

            TotalBudgetViewModel TotalModel = new TotalBudgetViewModel();

            var budget = await _context.Budget.Include(b => b.BudgetCategory)
                         .ThenInclude(bc => bc.BudgetItem)
                         .Where(b => b.User == currentUser && b.IsActive).FirstOrDefaultAsync();

            if (budget == null || budget.BudgetCategory.Count == 0)
            {
                return(RedirectToAction("Index", "Budgets"));
            }

            if (budget.StartDate > DateTime.Now || budget.EndDate < DateTime.Now)
            {
                return(RedirectToAction("Index", "Budgets"));
            }

            var budgetItems = await _context.BudgetItem
                              .Include(b => b.BudgetCategory)
                              .ThenInclude(bc => bc.Budget)
                              .Where(bi => bi.BudgetCategory.Budget == budget).ToListAsync();

            var cost = budgetItems.Select(c => c.Cost).Sum();

            TotalModel.Budget      = budget;
            TotalModel.AmountSpent = cost;

            ViewData["BudgetCategoryId"] = new SelectList(budget.BudgetCategory, "BudgetCategoryId", "Name");

            decimal costIfZero()
            {
                if (cost == 0)
                {
                    // perform the division only if cost is different than 0,
                    return(1);
                }
                else
                {
                    return(cost);
                }
            }

            int zeroDay()
            {
                if (TotalModel.DaysSinceStart() == 0)
                {
                    return(1);
                }
                else
                {
                    return(TotalModel.DaysSinceStart());
                }
            }

            foreach (BudgetCategory bc in budget.BudgetCategory)
            {
                var categoryCost = await _context.BudgetItem
                                   .Where(bi => bi.BudgetCategoryId == bc.BudgetCategoryId)
                                   .Select(bi => bi.Cost).ToListAsync();


                CategoryViewModel CategoryModel = new CategoryViewModel()
                {
                    BudgetCategory = bc,
                    TotalDays      = TotalModel.TotalDays(),
                    DaysRemaining  = TotalModel.TotalDays() - TotalModel.DaysSinceStart(),
                    TotalSpent     = categoryCost.Sum(),
                };
                TotalModel.CategoryViewModels.Add(CategoryModel);

                ChartDataViewModel ChartData = new ChartDataViewModel()
                {
                    xValue = bc.Name,
                    yValue = (double)(categoryCost.Sum() / costIfZero()),
                    text   = (categoryCost.Sum() / costIfZero()).ToString("P")
                };
                TotalModel.ChartDataModels.Add(ChartData);

                ChartDataViewModel ChartData1 = new ChartDataViewModel()
                {
                    xValue = bc.Name,
                    PerDay = (double)bc.BudgetPerDay
                };
                TotalModel.ChartDataModels1.Add(ChartData1);

                ChartDataViewModel ChartData2 = new ChartDataViewModel()
                {
                    xValue = bc.Name,
                    PerDay = (double)categoryCost.Sum() / zeroDay()
                };
                TotalModel.ChartDataModels2.Add(ChartData2);
            }

            return(View(TotalModel));
        }
        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));
        }
        public JsonResult PromedioAutoevaluaciones()
        {
            TipoEmpresa tipoEmpresa = new TipoEmpresa();

            if (AccountData.NitEmpresa != 0)
            {
                Empresa empresa = db.Tb_Empresa.Find(AccountData.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);
                }
            }
            AutoEvaluacion evaluacion =
                db.Tb_AutoEvaluacion
                .Where(a => a.Empr_Nit == AccountData.NitEmpresa && a.Cumplimientos.Count > 0 && a.Finalizada)
                .OrderByDescending(a => a.Auev_Inicio)
                .FirstOrDefault();

            decimal[] lst    = new decimal[0];
            string[]  labels = new string[0];
            if (evaluacion != null)
            {
                var values =
                    db.Tb_ItemEstandar
                    .Where(ie => tipoEmpresa.Categoria == 0 || (ie.Categoria <= tipoEmpresa.Categoria && ie.CategoriaExcepcion != tipoEmpresa.Categoria && ie.CategoriaExcepcion != tipoEmpresa.Categoria))
                    .GroupBy(a => a.Estandar.Criterio.CicloPHVA).Select(a => new { key = a.Key.Id, value = (decimal)a.Count(), name = a.Key.Nombre })
                    .ToArray();
                labels = values.Select(v => v.name).ToArray();
                var temp =
                    db.Tb_Cumplimiento
                    .Where(a => a.Auev_Id == evaluacion.Auev_Id && (a.Cump_Cumple || a.Cump_Justifica))
                    .GroupBy(a => a.ItemEstandar.Estandar.Criterio.CicloPHVA).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];
                for (int i = 0; i < values.Length; i++)
                {
                    var val = temp.FirstOrDefault(v => v.key == values[i].key);
                    if (val != null)
                    {
                        lst[i] = Decimal.Round((val.value * 100 / values[i].value), 1);
                    }
                }
            }
            ChartDataViewModel datos =
                new ChartDataViewModel
            {
                title    = "Medición del ciclo PHVA",
                labels   = labels,
                datasets =
                    new List <ChartDatasetsViewModel> {
                    new ChartDatasetsViewModel
                    {
                        label       = "Avance porcentual %",
                        data        = lst,
                        fill        = false,
                        borderWidth = 1
                    }
                },
            };

            return(Json(datos, JsonRequestBehavior.AllowGet));
        }
        public JsonResult UltimaAutoevaluacion()
        {
            TipoEmpresa tipoEmpresa = new TipoEmpresa();

            if (AccountData.NitEmpresa != 0)
            {
                Empresa empresa = db.Tb_Empresa.Find(AccountData.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);
                }
            }
            decimal total =
                db.Tb_ItemEstandar
                .Where(ie => tipoEmpresa.Categoria == 0 || (ie.Categoria <= tipoEmpresa.Categoria && ie.CategoriaExcepcion != tipoEmpresa.Categoria && ie.CategoriaExcepcion != tipoEmpresa.Categoria)).Count();
            decimal terminadas = 0;

            if (AccountData.NitEmpresa > 0)
            {
                AutoEvaluacion evaluacion =
                    db.Tb_AutoEvaluacion
                    .Where(a => a.Empr_Nit == AccountData.NitEmpresa && a.Cumplimientos.Count > 0 && a.Finalizada)
                    .OrderByDescending(a => a.Auev_Inicio)
                    .FirstOrDefault();

                if (evaluacion != null)
                {
                    terminadas =
                        db.Tb_Cumplimiento
                        .Count(a => a.Auev_Id == evaluacion.Auev_Id && (a.Cump_Cumple || a.Cump_Justifica));
                }
            }

            ChartDataViewModel datos =
                new ChartDataViewModel
            {
                title  = "Cumplimiento SG-SST",
                labels = new string[2] {
                    "Cumplido", "No cumplido"
                },
                datasets =
                    new List <ChartDatasetsViewModel> {
                    new ChartDatasetsViewModel {
                        label = "Estado actividades %",
                        data  = new string[2] {
                            String.Format("{0:0}", Convert.ToInt32((terminadas * 100) / total)), String.Format("{0:0}", Convert.ToInt32(((total - terminadas) * 100) / total))
                        },
                        fill            = true,
                        borderWidth     = 1,
                        backgroundColor = new string[2] {
                            "#6DB52D", "#AE2429"
                        },
                        borderColor = new string[2] {
                            "#6DB52D", "#AE2429"
                        }
                    }
                }
            };

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