private DiagramSeries GetNbEurUsdRate()
 {
     var diagramSeries = new DiagramSeries() { Index = 5, Name = "Eur/Usd (НБ РБ)", OxyColor = OxyColors.Blue, Points = new List<DiagramPoint>() };
     foreach (var rate in _db.OfficialRates.Where(rate => rate.Date > new DateTime(1999, 1, 10)))
     {
         diagramSeries.Points.Add(new DiagramPoint(rate.Date, rate.EurRate/rate.UsdRate));
     }
     return diagramSeries;
 }
 private DiagramSeries GetNbBasket3()
 {
     var diagramSeries = new DiagramSeries() { Index = 33, Name = "Корзина НБ РБ 30-20-50", OxyColor = OxyColors.OrangeRed, Points = new List<DiagramPoint>() };
     foreach (var rate in _db.OfficialRates.Where(rate => rate.Date >= new DateTime(2009,1,1)))
     {
         diagramSeries.Points.Add(new DiagramPoint(rate.Date, rate.Busket3));
     }
     return diagramSeries;
 }
 private DiagramSeries GetNbRurRate()
 {
     var diagramSeries = new DiagramSeries() { Index = 2, Name = "Rur НБ РБ", OxyColor = OxyColors.Red, Points = new List<DiagramPoint>() };
     foreach (var rate in _db.OfficialRates)
     {
         diagramSeries.Points.Add(new DiagramPoint(rate.Date, rate.RurRate));
     }
     return diagramSeries;
 }
 private DiagramSeries GetNbUsdRate()
 {
     var diagramSeries = new DiagramSeries(){Index = 0, Name = "Usd НБ РБ", OxyColor = OxyColors.Green, Points = new List<DiagramPoint>()};
     foreach (var rate in _db.OfficialRates)
     {
         diagramSeries.Points.Add(new DiagramPoint(rate.Date,rate.UsdRate));
     }
     return diagramSeries;
 }
 private DiagramSeries GetRurUsdRate()
 {
     var diagramSeries = new DiagramSeries() { Index = 6, Name = "Rur / Usd ", OxyColor = OxyColors.LightPink, Points = new List<DiagramPoint>() };
     foreach (var rate in _db.OfficialRates)
     {
         diagramSeries.Points.Add(new DiagramPoint(rate.Date, rate.UsdRate / rate.RurRate));
     }
     return diagramSeries;
 }
 private DiagramSeries GetMyUsdRate()
 {
     var diagramSeries = new DiagramSeries() { Index = 4, Name = "Usd мой", OxyColor = OxyColors.LightGreen, Points = new List<DiagramPoint>() };
     foreach (var rate in _db.CurrencyRates.Where(rate => rate.Currency == CurrencyCodes.BYR))
     {
         diagramSeries.Points.Add(new DiagramPoint(rate.BankDay, rate.Rate));
     }
     return diagramSeries;
 }
示例#7
0
        public ActionResult Chart(DateTime startDate, DateTime endDate, string title, int id)
        {
            using (var c = new SqlConnection(ConfigurationManager.ConnectionStrings["udcADO"].ConnectionString)) {
                c.Open();
                var dicts = new List <DiagramSeries>();
                using (var command = c.CreateCommand()) {
                    command.CommandText = "EnvironmentByWeek";
                    command.CommandType = CommandType.StoredProcedure;
                    command.Parameters.Add("startDate", SqlDbType.DateTime2).Value = startDate;
                    command.Parameters.Add("endDate", SqlDbType.DateTime2).Value   = endDate;
                    command.Parameters.Add("envDataNameId", SqlDbType.Int).Value   = id;
                    using (var reader = command.ExecuteReader()) {
                        DiagramSeries dict = null;
                        while (reader.Read())
                        {
                            string val = reader.IsDBNull(0) ? "unknown" : reader.GetString(0);
                            if (dict == null || dict.Name != val)
                            {
                                dict = new DiagramSeries()
                                {
                                    Name = val
                                };
                                dicts.Add(dict);
                            }
                            DateTime week  = reader.GetDateTime(1);
                            int      count = reader.GetInt32(2);
                            dict[week] = count;
                        }
                    }
                }
                Chart chart = new Chart();
                chart.Titles.Add(title);
                List <DateTime> allDates = dicts.SelectMany(d => d.Keys).Distinct().OrderBy(d => d).ToList();
                if (dicts.Count > 10)
                {
                    var dictsToCombine = dicts.OrderByDescending(d => d.Values.Sum()).Skip(9).ToList();
                    dicts = dicts.OrderByDescending(d => d.Values.Sum()).Take(9).OrderBy(d => d.Name, new VersionNameComparer()).ToList();
                    DiagramSeries other = new DiagramSeries {
                        Name = "Other"
                    };
                    var q = from dict in dictsToCombine
                            from pair in dict
                            group pair.Value by pair.Key;
                    foreach (var g in q)
                    {
                        other.Add(g.Key, g.Sum());
                    }
                    dicts.Add(other);
                }
                else
                {
                    dicts = dicts.OrderBy(d => d.Name, new VersionNameComparer()).ToList();
                }

                foreach (var dict in dicts)
                {
                    Series series = chart.Series.Add(dict.Name);
                    series.ChartType = SeriesChartType.StackedArea100;
                    foreach (DateTime dt in allDates)
                    {
                        int count;
                        dict.TryGetValue(dt, out count);
                        series.Points.AddXY(dt + TimeSpan.FromDays(3.5), count);                         // add a half week so that the data points are in the middle of the week
                    }
                }

                chart.Width  = ChartWidth;
                chart.Height = ChartHeight;
                chart.ChartAreas.Add("Series 1");
                chart.Legends.Add("Legend 1");

                using (var ms = new MemoryStream()) {
                    chart.SaveImage(ms, System.Web.UI.DataVisualization.Charting.ChartImageFormat.Png);
                    ms.Position = 0;
                    return(File(ms.ToArray(), "image/png", title + ".png"));
                }
            }
        }