Exemple #1
0
        public static SummaryMethod FromDescriptor(SummaryMethodDescriptor descriptor)
        {
            switch (descriptor)
            {
            case SummaryMethodDescriptor.Count:
                return(Count);

            case SummaryMethodDescriptor.Average:
                return(Average);

            case SummaryMethodDescriptor.Median:
            default:
                return(Median);
            }
        }
Exemple #2
0
        public async Task <IActionResult> CreateCustomView(CreateCustomViewModel.ViewType chartViewType, string chartTitle, string apiEndpoint,
                                                           SummaryMethodDescriptor summaryMethodDescriptor, ProjectionResult projectionResult,
                                                           string groupedBarChartDatasetPropertyKey, string groupedBarChartCategoryPropertyKey,
                                                           List <string> groupedBarChartValuePropertyKeys, string barChartCategoryPropertyKey, string barChartValuePropertyKey,
                                                           bool timeRelative, int?relativeTimeStartValue, RelativeTimeGranularity?relativeTimeStartGranularity,
                                                           string absoluteTimeStartDate, string absoluteTimeEndDate, List <string> floatCriteriaJsonPropertyNames,
                                                           List <FloatCriterion.Relation> floatCriteriaRelations, List <float> floatCriteriaComparedValues)
        {
            // Attempt to parse date times from datepicker elements if the time is set to an absolute scale
            DateTime?absoluteTimeStartDateTime = null, absoluteTimeEndDateTime = null;

            if (!timeRelative)
            {
                if (DateTime.TryParseExact(absoluteTimeStartDate, "MM/dd/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out var candidate))
                {
                    absoluteTimeStartDateTime = candidate;
                }

                if (DateTime.TryParseExact(absoluteTimeEndDate, "MM/dd/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out candidate))
                {
                    absoluteTimeEndDateTime = candidate;
                }
            }

            switch (chartViewType)
            {
            case CreateCustomViewModel.ViewType.Bar:
                await InsertCustomBarChartAsync(chartTitle, apiEndpoint, summaryMethodDescriptor, projectionResult, barChartCategoryPropertyKey,
                                                barChartValuePropertyKey, timeRelative, relativeTimeStartValue, relativeTimeStartGranularity,
                                                absoluteTimeStartDateTime, absoluteTimeEndDateTime, floatCriteriaJsonPropertyNames,
                                                floatCriteriaRelations, floatCriteriaComparedValues);

                break;

            case CreateCustomViewModel.ViewType.GroupedBar:
                await InsertCustomGroupedBarChartAsync(chartTitle, apiEndpoint, summaryMethodDescriptor, projectionResult, groupedBarChartDatasetPropertyKey,
                                                       groupedBarChartCategoryPropertyKey, groupedBarChartValuePropertyKeys, timeRelative, relativeTimeStartValue,
                                                       relativeTimeStartGranularity, absoluteTimeStartDateTime, absoluteTimeEndDateTime, floatCriteriaJsonPropertyNames,
                                                       floatCriteriaRelations, floatCriteriaComparedValues);

                break;
            }

            return(RedirectToAction("Index"));
        }
Exemple #3
0
        public async Task InsertCustomGroupedBarChartAsync(string chartTitle, string apiEndpoint, SummaryMethodDescriptor summaryMethodDescriptor,
                                                           ProjectionResult?projectionResult, string datasetPropertyKey, string categoryPropertyKey,
                                                           List <string> valuePropertyKeys, bool timeRelative, int?relativeTimeStartValue,
                                                           RelativeTimeGranularity?relativeTimeStartGranularity, DateTime?absoluteTimeStartDate,
                                                           DateTime?absoluteTimeEndDate, List <string> floatCriteriaJsonPropertyNames,
                                                           List <FloatCriterion.Relation> floatCriteriaRelations, List <float> floatCriteriaComparedValues)
        {
            // Construct a list of float criteria from the individual property lists

            var floatCriteria = new List <CustomGroupedBarChart.CustomGroupedBarChartFloatCriterion>();

            if (floatCriteriaJsonPropertyNames.Count == floatCriteriaRelations.Count &&
                floatCriteriaJsonPropertyNames.Count == floatCriteriaComparedValues.Count)
            {
                for (var i = 0; i < floatCriteriaJsonPropertyNames.Count; i++)
                {
                    floatCriteria.Add(new CustomGroupedBarChart.CustomGroupedBarChartFloatCriterion()
                    {
                        Key      = floatCriteriaJsonPropertyNames[i],
                        Value    = floatCriteriaComparedValues[i],
                        Relation = floatCriteriaRelations[i]
                    });
                }
            }

            // Construct a list of value token keys (entities)
            // from the list of valuePropertyKeys
            var valueTokenKeys = new List <CustomGroupedBarChart.CustomGroupedBarChartValueTokenKey>();

            foreach (var valuePropertyKey in valuePropertyKeys)
            {
                valueTokenKeys.Add(new CustomGroupedBarChart.CustomGroupedBarChartValueTokenKey()
                {
                    Key = valuePropertyKey
                });
            }

            // Construct the chart and put it in the database
            var chart = new CustomGroupedBarChart()
            {
                Title                   = chartTitle,
                ApiEndpoint             = apiEndpoint,
                ProjectionResult        = projectionResult,
                SummaryMethodDescriptor = summaryMethodDescriptor,
                FloatCriteria           = floatCriteria,
                TimeRelative            = timeRelative,
                RelativeTimeValue       = relativeTimeStartValue,
                RelativeTimeGranularity = relativeTimeStartGranularity,
                IntervalStart           = absoluteTimeStartDate,
                IntervalEnd             = absoluteTimeEndDate,
                DatasetTokenKey         = datasetPropertyKey,
                CategoryTokenKey        = categoryPropertyKey,
                ValueTokenKeys          = valueTokenKeys
            };

            await _dbContext.CustomGroupedBarCharts.AddAsync(chart);

            await _dbContext.SaveChangesAsync();
        }