private IEnumerable <ITaskChartModel> FilterTaskChartModelsAccordingToGroupings <T>(IEnumerable <ITaskChartModel> models, ITaskRatioCharConfig <T> chartConfig)
        {
            IEnumerable <T> involvedTaskTypes    = chartConfig.TypesGroupings.SelectMany(grouping => grouping.Value);
            IEnumerable <ITaskChartModel> result = models.Where(m => involvedTaskTypes.Contains(chartConfig.TaskGroupingSelector(m)));

            return(result);
        }
        public IRatioChartData <TGroup, ITaskChartModel> Build <TGroup>(IChartDataQueryingRestrictions restrictions, ITaskRatioCharConfig <TGroup> chartConfig, ITimePeriod period,
                                                                        bool showLastCompletedOrCanceledStatus, IDictionary <Guid, int> categorySortPriority)
        {
            IEnumerable <IDayAssign>      dayAssigns      = dayAssignsTimeSpanSelector.Get(period, restrictions);
            IEnumerable <ITaskChartModel> taskChartModels = taskChartModelBuilder.Build(
                restrictions.AccessibleManagementToHousingDepartmentsRelation,
                dayAssigns,
                categorySortPriority,
                showLastCompletedOrCanceledStatus);

            IEnumerable <ITaskChartModel> filteredTaskChartModels = FilterTaskChartModelsAccordingToGroupings(taskChartModels, chartConfig);

            var result = new RatioChartData <TGroup, ITaskChartModel>
            {
                Data   = filteredTaskChartModels,
                Groups = chartConfig.TypesGroupings
            };

            return(result);
        }