Beispiel #1
0
        /// <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);
        }
Beispiel #2
0
        /// <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);
        }
Beispiel #3
0
        /// <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);
            }
        }