public async Task <IViewComponentResult> InvokeAsync(int reportElementId)
        {
            HeatmapDto heatmapDto = await _reportElementManager.GetHeatmapById(reportElementId);

            HeatmapViewModel result = _mapper.Map <HeatmapDto, HeatmapViewModel>(heatmapDto);

            return(View("Heatmap", result));
        }
示例#2
0
        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);
        }