public async Task <IViewComponentResult> InvokeAsync(int reportElementId) { HeatmapDto heatmapDto = await _reportElementManager.GetHeatmapById(reportElementId); HeatmapViewModel result = _mapper.Map <HeatmapDto, HeatmapViewModel>(heatmapDto); return(View("Heatmap", result)); }
public async Task <HeatmapDto> GetHeatmapById(int reportElementId) { ReportElement reportElement = await unitOfWork.ReportElementRepo.GetById(reportElementId); if (reportElement == null) { return new HeatmapDto { IsCorrect = false } } ; DateTime dateFrom = new DateTime(); DateTime dateTo = DateTime.Now.AddDays(1); if (reportElement.Hours != 0) { dateFrom = DateTime.Now.AddHours(-(int)reportElement.Hours).Date.AddDays(1); } DateTime[] daysArray = new DateTime[(int)(dateTo - dateFrom).TotalDays]; for (int i = 0; i < daysArray.Length; i++) { daysArray[i] = dateFrom.AddDays(i); } IEnumerable <AvgSensorValuePerDay> avgSensorValuesPerDays = await unitOfWork.HistoryRepo.GetAvgSensorsValuesPerDays(reportElement.SensorId.Value, dateFrom, dateTo); List <AvgSensorValuePerDay> AvgSensorValuesPerDays = avgSensorValuesPerDays.ToList(); for (int i = 0; i < daysArray.Length; i++) { if (!avgSensorValuesPerDays.Any(a => a.WeekDay.ToString("yyyy-MM-dd") == daysArray[i].ToString("yyyy-MM-dd"))) { AvgSensorValuesPerDays.Add(new AvgSensorValuePerDay { WeekDay = daysArray[i], AvgValue = null }); } } AvgSensorValuesPerDays = AvgSensorValuesPerDays.OrderBy(d => d.WeekDay).ToList(); if (avgSensorValuesPerDays.Count() == 0) { return new HeatmapDto { Id = reportElementId, IsCorrect = false } } ; HeatmapDto heatmap = mapper.Map <Sensor, HeatmapDto>(reportElement.Sensor); heatmap.Id = reportElement.Id; heatmap.DashboardName = reportElement.Dashboard.Name; heatmap.DashboardId = reportElement.Dashboard.Id; heatmap.AvgSensorValuesPerDays = AvgSensorValuesPerDays; heatmap.Hours = reportElement.Hours; return(heatmap); }