public void CreateData() { StatisticData.Add(new Data("Aktywne zadania: ", repository.AmountOfActiveTasks())); StatisticData.Add(new Data("Skończone zadania: ", repository.AmountOfFinishedTasks())); StatisticData.Add(new Data("Ilość zadań znajdujących się w koszu: ", repository.AmountOfFDeletedTasks())); StatisticData.Add(new Data("Średnia ilość dni potrzebnych na wykonanie zadania: ", repository.AverageFinishTime())); StatisticData.Add(new Data("Ilość dni najdłuższej trwającego zakończonego zadania: ", repository.DaysOfLongestTask())); StatisticData.Add(new Data("Wykonanych zadań na poziomie trudne: ", repository.AmountOfFinishedHardTasks())); StatisticData.Add(new Data("Wykonanych zadań na poziomie średnie: ", repository.AmountOfFinishedMediumTasks())); StatisticData.Add(new Data("Wykonanych zadań na poziomie łatwe: ", repository.AmountOfFinishedEasyTasks())); StatisticData.Add(new Data("Wykonanych zadań bez określonego poziomu: ", repository.AmountOfFinishedUndefinedTasks())); StatisticData.Add(new Data("Wykonanych zadań o priorytecie normalnym: ", repository.AmountOfFinishedHardTasks())); StatisticData.Add(new Data("Wykonanych zadań o priorytecie ważnym: ", repository.AmountOfFinishedImportantTasks())); StatisticData.Add(new Data("Wykonanych zadań o priorytecie krytycznym: ", repository.AmountOfFinishedCriticalTasks())); StatisticData.Add(new Data("Wykonanych zadań bez określonego priorytetu: ", repository.AmountOfFinishedUndefinedPriorityTasks())); StatisticData.Add(new Data("Średnia ilość dni potrzebna na wykonanie zadania o priorytecie normlanym: ", repository.AmountOfDaysNeededForFinishingNormalTasks())); StatisticData.Add(new Data("Średnia ilość dni potrzebna na wykonanie zadania o priorytecie ważnym: ", repository.AmountOfDaysNeededForFinishingImportantTasks())); StatisticData.Add(new Data("Średnia ilość dni potrzebna na wykonanie zadania o priorytecie krytycznym: ", repository.AmountOfDaysNeededForFinishingCriticalTasks())); StatisticData.Add(new Data("Średnia ilość dni potrzebna na wykonanie zadania bez określonego priorytetu: ", repository.AmountOfDaysNeededForFinishingUndefinedTasks())); StatisticData.Add(new Data("Średnia ilość dni potrzebna na wykonanie trudnych zadań: ", repository.AmountOfDaysNeededForFinishingHardTasks())); StatisticData.Add(new Data("Średnia ilość dni potrzebna na wykonanie średnich zadań: ", repository.AmountOfDaysNeededForFinishingMediumTasks())); StatisticData.Add(new Data("Średnia ilość dni potrzebna na wykonanie łatwych zadań: ", repository.AmountOfDaysNeededForFinishingCriticalTasks())); StatisticData.Add(new Data("Średnia ilość dni potrzebna na wykonanie zadań bez okreśłonego poziomu: ", repository.AmountOfDaysNeededForFinishingEasyTasks())); }
public GlobalStatisticsPerYear(int[] calculatedYears, IEnumerable <StatisticsSubjectPerYear <T> > dataForAllIcos, Func <T, bool> allowedItems = null) { this.CalculatedYears = calculatedYears; allowedItems = allowedItems ?? alwaysTrue; // kdyby nás někoho náhodou napadlo dát do statistik string, tak tohle by to mělo pohlídat var numericProperties = typeof(T).GetProperties().Where(p => IsNumericType(p.PropertyType)); //todo: asi by se dalo zrychlit, kdyby se nejelo po jednotlivých property, ale všechny property najednou // dneska na to už ale mentálně nemam :) // případně by se dalo paralelizovat do threadů (udělat paralel foreach a jet každý rok v samostatném threadu) // musel by se jen zamykat zápis do statistic data (třeba v setteru) Util.Consts.Logger.Debug($"Starting calculation of all properties for {string.Join(",", this.CalculatedYears)}"); foreach (var year in CalculatedYears) { Devmasters.Batch.Manager.DoActionForAll <PropertyInfo>(numericProperties, property => { Util.Consts.Logger.Debug($"Starting property {property} for {year}"); IEnumerable <decimal> globalData = dataForAllIcos .Select(d => d[year]) .Where(allowedItems) .Select(d => GetDecimalValueOfNumericProperty(property, d)) .Where(d => d.HasValue) .Select(d => d.Value); Util.Consts.Logger.Debug($"calc percentiles for property {property} for {year}"); var val = new PropertyYearPercentiles(property.Name, year, globalData); StatisticData.Add(val); Util.Consts.Logger.Debug($"Done property {property} for {year}"); return(new Devmasters.Batch.ActionOutputData()); }, true); } Util.Consts.Logger.Debug($"Done calculation of all properties for {string.Join(",", this.CalculatedYears)}"); }