public async Task <IViewComponentResult> InvokeAsync(int reportElementId) { BoolHeatmapDto boolHeatmapDto = await _reportElementManager.GetBoolHeatmapById(reportElementId); BoolHeatmapViewModel result = _mapper.Map <BoolHeatmapDto, BoolHeatmapViewModel>(boolHeatmapDto); return(View("BoolHeatmap", result)); }
public async Task <BoolHeatmapDto> GetBoolHeatmapById(int reportElementId) { ReportElement reportElement = await unitOfWork.ReportElementRepo.GetById(reportElementId); if (reportElement == null) { return new BoolHeatmapDto { IsCorrect = false } } ; DateTime dateFrom = new DateTime(); DateTime dateTo = DateTime.Now.AddMinutes(1); if (reportElement.Hours != 0) { dateFrom = DateTime.Now.AddHours(-(int)reportElement.Hours); } int[] hoursArray = new int[(int)(dateTo - dateFrom).TotalHours]; string[] daysArray = new string[(int)(dateTo - dateFrom).TotalHours]; for (int i = 0; i < hoursArray.Length; i++) { hoursArray[i] = dateFrom.AddHours(i).Hour; daysArray[i] = dateFrom.AddHours(i).Date.ToString("dd.MM.yyyy"); } IEnumerable <BoolValuePercentagePerHour> boolValuePercentagesPerHours = await unitOfWork.HistoryRepo.GetBoolValuePercentagesPerHours(reportElement.SensorId.Value, dateFrom, dateTo); List <BoolValuePercentagePerHour> BoolValuePercentagesPerHours = new List <BoolValuePercentagePerHour>(); int w = 0; for (int j = 0; j < hoursArray.Length; j++) { if (!boolValuePercentagesPerHours.Any(a => a.HourTime == hoursArray[j] && a.DayDate.ToString().Contains(daysArray[j]))) { BoolValuePercentagesPerHours.Add( new BoolValuePercentagePerHour { DayDate = dateFrom, HourTime = hoursArray[j], TrueCount = null, TrueFalseCount = null, TruePercentage = null }); dateFrom = dateFrom.AddHours(1); } else { if (w != boolValuePercentagesPerHours.Count()) { BoolValuePercentagesPerHours.Add( new BoolValuePercentagePerHour { DayDate = dateFrom, HourTime = hoursArray[j], TrueCount = boolValuePercentagesPerHours.ElementAt(w).TrueCount, TrueFalseCount = boolValuePercentagesPerHours.ElementAt(w).TrueFalseCount, TruePercentage = boolValuePercentagesPerHours.ElementAt(w).TruePercentage }); w++; dateFrom = dateFrom.AddHours(1); } else { BoolValuePercentagesPerHours.Add( new BoolValuePercentagePerHour { DayDate = dateFrom, HourTime = hoursArray[j], TrueCount = null, TrueFalseCount = null, TruePercentage = null }); dateFrom = dateFrom.AddHours(1); } } } if (boolValuePercentagesPerHours.Count() == 0) { return new BoolHeatmapDto { Id = reportElementId, IsCorrect = false } } ; BoolHeatmapDto heatmap = mapper.Map <Sensor, BoolHeatmapDto>(reportElement.Sensor); heatmap.Id = reportElement.Id; heatmap.DashboardName = reportElement.Dashboard.Name; heatmap.DashboardId = reportElement.Dashboard.Id; heatmap.BoolValuePercentagesPerHours = BoolValuePercentagesPerHours; heatmap.Hours = reportElement.Hours; return(heatmap); }