/// <summary> /// Gets a configured factory that creates the data required for the chart. /// </summary> public ChartJsTimeSeriesDataFactory <ChartJsTimeSeriesDataPoint> GetChartJsFactory() { var reportPeriod = new TimePeriod(drpSlidingDateRange.DelimitedValues); var isYearly = reportPeriod.TimeUnit == TimePeriodUnitSpecifier.Year; var dateRange = reportPeriod.GetDateRange(); var startDate = dateRange.Start; var endDate = dateRange.End; var successDateQuery = GetChartQuery().Select(saa => saa.AchievementAttemptEndDateTime.Value); if (startDate.HasValue) { startDate = startDate.Value.Date; successDateQuery = successDateQuery.Where(d => d >= startDate); } if (endDate.HasValue) { endDate = endDate.Value.Date.AddDays(1); successDateQuery = successDateQuery.Where(d => d < endDate); } Func <DateTime, DateTime> groupByExpression; if (isYearly) { groupByExpression = dt => new DateTime(dt.Year, dt.Month, 1); } else { groupByExpression = dt => dt.Date; } var groupedSuccessData = successDateQuery.ToList().GroupBy(groupByExpression); // Initialize a new Chart Factory. var factory = new ChartJsTimeSeriesDataFactory <ChartJsTimeSeriesDataPoint> { TimeScale = isYearly ? ChartJsTimeSeriesTimeScaleSpecifier.Month : ChartJsTimeSeriesTimeScaleSpecifier.Day, StartDateTime = startDate, EndDateTime = endDate, ChartStyle = ChartJsTimeSeriesChartStyleSpecifier.Line }; // Add data series for success factory.Datasets.Add(new ChartJsTimeSeriesDataset { Name = "Successful", BorderColor = ChartJsConstants.Colors.Green, DataPoints = groupedSuccessData.Select(g => (IChartJsTimeSeriesDataPoint) new ChartJsTimeSeriesDataPoint { DateTime = g.Key, Value = g.Count() }).ToList() }); return(factory); }
/// <summary> /// Gets a configured factory that creates the data required for the chart. /// </summary> /// <param name="summary">The summary.</param> /// <returns></returns> /// <exception cref="NotImplementedException"></exception> private ChartJsTimeSeriesDataFactory <ChartJsTimeSeriesDataPoint> GetChartJsFactory(List <SummaryInfo> summary, TimePeriod timePeriod) { var dateRange = timePeriod.GetDateRange(); ChartJsTimeSeriesTimeScaleSpecifier chartTimeScale = timePeriod.TimeUnit == TimePeriodUnitSpecifier.Year ? ChartJsTimeSeriesTimeScaleSpecifier.Month : ChartJsTimeSeriesTimeScaleSpecifier.Day; var factory = new ChartJsTimeSeriesDataFactory <ChartJsTimeSeriesDataPoint>(); factory.TimeScale = chartTimeScale; factory.StartDateTime = dateRange.Start; factory.EndDateTime = dateRange.End; factory.ChartStyle = ChartJsTimeSeriesChartStyleSpecifier.Line; factory.ChartColors = new List <string> { "#2ECC71", "#3498DB" }; var viewsSummary = summary.Where(m => m.DatasetName == VIEWS_DATASET_NAME); var completionSummary = summary.Where(m => m.DatasetName == COMPLETIONS_DATASET_NAME); var viewedDataset = new ChartJsTimeSeriesDataset(); viewedDataset.Name = VIEWS_DATASET_NAME; viewedDataset.DataPoints = viewsSummary .Select(m => new ChartJsTimeSeriesDataPoint { DateTime = m.InterationDateTime, Value = m.value }) .Cast <IChartJsTimeSeriesDataPoint>() .ToList(); var completionDataset = new ChartJsTimeSeriesDataset(); completionDataset.Name = COMPLETIONS_DATASET_NAME; completionDataset.DataPoints = completionSummary .Select(m => new ChartJsTimeSeriesDataPoint { DateTime = m.InterationDateTime, Value = m.value }) .Cast <IChartJsTimeSeriesDataPoint>() .ToList(); factory.Datasets.Add(completionDataset); factory.Datasets.Add(viewedDataset); return(factory); }
/// <summary> /// Get KPI and Chart data /// </summary> /// <param name="workflowTypeId"></param> private void ShowAnalytics(int workflowTypeId) { nbWorkflowIdNullMessage.Visible = false; var reportPeriod = new TimePeriod(drpSlidingDateRange.DelimitedValues); List <SummaryInfo> summary = GetSummary(workflowTypeId, reportPeriod); var views = summary.Where(m => m.DatasetName == VIEWS_DATASET_NAME).Select(m => m.value); var completions = summary.Where(m => m.DatasetName == COMPLETIONS_DATASET_NAME).Select(m => m.value); ShowKpis(views, completions); if (views.Sum() == 0 && completions.Sum() == 0) { nbViewsAndCompletionsEmptyMessage.Visible = true; dvCharts.Visible = false; } else { nbViewsAndCompletionsEmptyMessage.Visible = false; dvCharts.Visible = true; ChartJsTimeSeriesDataFactory <ChartJsTimeSeriesDataPoint> chartFactory = this.GetChartJsFactory(summary, reportPeriod); InitializeChartScripts(); var chartDataJson = chartFactory.GetJson(new ChartJsTimeSeriesDataFactory.GetJsonArgs { SizeToFitContainerWidth = true, MaintainAspectRatio = false, LineTension = 0.4m, DisplayLegend = true }); string script = string.Format(@" var barCtx = $('#{0}')[0].getContext('2d'); var barChart = new Chart(barCtx, {1});", viewsAndCompletionsCanvas.ClientID, chartDataJson); ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "formAnalyticsChartScript", script, true); } }