示例#1
0
 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));
 }
示例#2
0
        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)));
        }
示例#3
0
        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);
        }