public ActionResult PartialTable() { ViewBag.StartYear = 2005; ViewBag.EndYear = 2012; if (CacheViewModel == null) { IRepository repository = new MongoRepository("mongodb://tserakhau.cloudapp.net", "Projects"); var regions = repository.All <Region>().ToList(); CacheViewModel = GenerateViewModel(regions); } return(PartialView(CacheViewModel)); }
public ActionResult PartialTableRegion(string id) { ViewBag.StartYear = 2005; ViewBag.EndYear = 2012; if (CacheViewModel == null) { IRepository repository = new MongoRepository("mongodb://tserakhau.cloudapp.net", "Projects"); var regions = repository.All <Region>().ToList(); CacheViewModel = GenerateViewModel(regions); } ViewBag.AveragesTotal = CacheViewModel.AveragesTotal; return(PartialView(CacheViewModel.Regions.FirstOrDefault(t => t.RegionName == id))); }
private PartialTableViewModel GenerateViewModel(List <Region> regions) { var allGrowth = new Dictionary <string, List <double> >(); var result = new PartialTableViewModel(); result.Regions = new List <RegionDataViewModel>(); result.AveragesParametrGrowth = new List <AvgParametr>(); var tempModel = new List <TempModel>(); foreach (var item in regions) { var region = new RegionDataViewModel(); region.RegionName = item.RegionName; region.Parametrs = new List <ParametrViewModel>(); foreach (var inner in item.Parametrs) { foreach (var child in inner.ChildParametrs) { if (tempModel.All(t => t.name != child.ParametrName)) { tempModel.Add(new TempModel() { name = child.ParametrName, Data = new List <TempParametr>() }); } var tempItem = tempModel.First(t => t.name == child.ParametrName); var avgGrowth = 0.0; var count = 0; var par = new ParametrViewModel(); par.Name = child.ParametrName; par.ParentParametrName = inner.ParametrName; par.Data = new Dictionary <int, double>(); par.Growthes = new Dictionary <int, double>(); foreach (var pair in child.Values) { par.Data.Add(pair.Key, pair.Value); } double growth = 0.0; for (int i = 1; i < child.Values.Count; i++) { if (child.Values[i].Value != 0.0 && child.Values[i - 1].Value != 0.0) { growth += child.Values[i].Value / child.Values[i - 1].Value; par.Growthes.Add(child.Values[i].Key, child.Values[i].Value / child.Values[i - 1].Value); if (tempItem.Data.All(t => t.Year != child.Values[i].Key)) { tempItem.Data.Add(new TempParametr() { Year = child.Values[i].Key, Values = new List <double>() }); } tempItem.Data.First(t => t.Year == child.Values[i].Key).Values.Add(child.Values[i].Value / child.Values[i - 1].Value); count++; } } par.Growth = growth / count; if (count != 0) { avgGrowth = growth / count; } if (!allGrowth.ContainsKey(child.ParametrName)) { allGrowth.Add(child.ParametrName, new List <double>()); } if (avgGrowth != 0.0) { allGrowth[child.ParametrName].Add(avgGrowth); } region.Parametrs.Add(par); } } result.Regions.Add(region); } result.AveragesTotal = new List <KeyValuePair <string, double> >(); foreach (var pair in allGrowth) { result.AveragesTotal.Add(new KeyValuePair <string, double>(pair.Key, pair.Value.Average())); } foreach (var model in tempModel) { var avgPar = new AvgParametr(); avgPar.Name = model.name; avgPar.Data = new Dictionary <int, double>(); foreach (var data in model.Data) { avgPar.Data.Add(data.Year, data.Values.Average()); } result.AveragesParametrGrowth.Add(avgPar); } return(result); }