public IChartData <IAddressStatisticInfo> Build(IChartDataQueryingRestrictions restrictions, IAddressVisitsChartConfig config, ITimePeriod period, bool showLastCompletedOrCanceledStatus) { List <IDayAssign> dayAssignList = dayAssignsTimeSpanSelector.Get(period, restrictions).ToList(); IEnumerable <string> jobIds = dayAssignList.Select(d => d.JobId).Distinct(); IEnumerable <Guid> dayAssignIds = dayAssignList.Select(x => x.Id); IEnumerable <IJob> jobs = jobService.GetByIds(jobIds); IEnumerable <IJob> filteredJobs = jobs.Where(job => config.TaskTypesToInclude.Contains(job.JobTypeId)); Dictionary <Guid, IJobStatusLogModel> jobStatusLog = jobStatusLogService.GetStatusLogModelList(dayAssignIds, showLastCompletedOrCanceledStatus) .ToDictionary(log => log.DayAssignId, log => log); List <Tuple <string, JobAddress> > addressToJobRelation = filteredJobs .SelectMany(job => job.AddressList?.Select(a => new Tuple <string, JobAddress>(job.Id, a)) ?? Enumerable.Empty <Tuple <string, JobAddress> >()) .ToList(); List <Tuple <Guid, JobAddress> > addressToDayAssignRelationList = GetAddressToDayAssignRelationList(dayAssignList, addressToJobRelation); List <AddressStatisticInfo> addressStatisticInfoList = GetAddressStatisticInfoList(addressToDayAssignRelationList, jobStatusLog); var result = (IChartData <IAddressStatisticInfo>) new ChartData <IAddressStatisticInfo> { Data = GetAddressStatistic(addressStatisticInfoList) }; return(result); }
public IEnumerable <IDayAssign> Get(ITimePeriod period, IChartDataQueryingRestrictions restrictions) { switch (restrictions.QueryingAlgorithm) { case QueryingAlgorithmType.ByCompletitionDateCriteria: return(GetByCompletionDateCriteria(period, restrictions)); case QueryingAlgorithmType.ByDateCriteria: return(GetByDateCriteria(period, restrictions)); default: throw new ArgumentOutOfRangeException($"No such querying algorithm {restrictions.QueryingAlgorithm}"); } }
public IChartData <ITaskChartModel> Build(IChartDataQueryingRestrictions restrictions, ISpentTimeChartConfig config, ITimePeriod period, IDictionary <Guid, int> categorySortPriority) { IEnumerable <IDayAssign> dayAssigns = dayAssignsTimeSpanSelector.Get(period, restrictions); IEnumerable <ITaskChartModel> taskChartModels = taskChartModelBuilder.Build(restrictions.AccessibleManagementToHousingDepartmentsRelation, dayAssigns, categorySortPriority, restrictions.ShowLastCompletedOrCanceledStatus); IEnumerable <ITaskChartModel> filteredTaskChartModels = taskChartModels.Where(t => config.TaskTypesToInclude.Contains(t.JobType)); var result = new ChartData <ITaskChartModel> { Data = filteredTaskChartModels }; return(result); }
private IEnumerable <IDayAssign> GetByDateCriteria(ITimePeriod period, IChartDataQueryingRestrictions restrictions) { var result = Enumerable.Empty <IDayAssign>(); if (restrictions.CurrentMemberRole == RoleType.Coordinator) { var allowedHousingDepartments = restrictions.AccessibleManagementToHousingDepartmentsRelation.SelectMany(pair => pair.Value); result = dayAssignService.GetForStatisticTimeSpan(period.StartDate, period.EndDate, restrictions.AllowedStatuses, allowedHousingDepartments); } else { result = dayAssignService.GetForStatisticTimeSpan(period.StartDate, period.EndDate, restrictions.AllowedStatuses); } 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); }
private IEnumerable <IDayAssign> GetByCompletionDateCriteria(ITimePeriod period, IChartDataQueryingRestrictions restrictions) { var dayAssigns = Enumerable.Empty <IDayAssign>(); List <Guid> dayAssignIdList = jobStatusLogService.GetDayAssignIds(period.StartDate, period.EndDate, restrictions.AllowedStatuses).ToList(); if (restrictions.CurrentMemberRole == RoleType.Coordinator) { IEnumerable <Guid> allowedHousingDepartments = restrictions.AccessibleManagementToHousingDepartmentsRelation.SelectMany(pair => pair.Value); dayAssigns = dayAssignService.GetForStatisticByIdsWithRestrictions(dayAssignIdList, allowedHousingDepartments); } else { dayAssigns = dayAssignService.GetForStatisticByIdsWithRestrictions(dayAssignIdList); } return(dayAssigns); }