Esempio n. 1
0
        private void Chart(string ChartTitle, string pno, BarChart barChart)
        {
            var lst = SALES_ESIORDERFORMService.QueryEntities(0, string.Format("a.[CustomerID] ='{0}' and a.[ProductNo] ='{1}'", CurrentUser.AccountInfo.Account_no, pno), string.Empty);

            string qty0 = Common.Util.GetMonthName(DateTime.Now.Month);
            string qty1 = Common.Util.GetMonthName(DateTime.Now.AddMonths(-1).Month);
            string qty2 = Common.Util.GetMonthName(DateTime.Now.AddMonths(-2).Month);
            string qty3 = Common.Util.GetMonthName(DateTime.Now.AddMonths(-3).Month);
            string qty4 = Common.Util.GetMonthName(DateTime.Now.AddMonths(-4).Month);
            string qty5 = Common.Util.GetMonthName(DateTime.Now.AddMonths(-5).Month);

            string[] xMonths = { qty5, qty4, qty3, qty2, qty1, qty0 };

            var Ser = from s in lst
                      group s by s.ProductNo into g
                      select new
            {
                ProductNo = g.Key,
                qty0      = g.Sum(p => p.Qty0),
                qty1      = g.Sum(p => p.Qty1),
                qty2      = g.Sum(p => p.Qty2),
                qty3      = g.Sum(p => p.Qty3),
                qty4      = g.Sum(p => p.Qty4),
                qty5      = g.Sum(p => p.Qty5),
            };          //所有的Series

            var sum = from t in Ser select(t.qty0 + t.qty1 + t.qty2 + t.qty3 + t.qty4 + t.qty5);

            if (sum.Sum() > 0)
            {
                //var barChart = new BarChart();
                barChart.ComplexData.Labels.AddRange(xMonths);

                var Series = new List <ComplexDataset>();
                foreach (var serie in Ser)
                {
                    var cd = new ComplexDataset
                    {
                        Data = new List <double> {
                            serie.qty5.Value, serie.qty4.Value, serie.qty3.Value, serie.qty2.Value, serie.qty1.Value, serie.qty0.Value
                        },
                        Label                = ChartTitle,
                        FillColor            = "rgba(220,220,220,0.2)",
                        StrokeColor          = "rgba(220,220,220,1)",
                        PointColor           = "rgba(220,220,220,1)",
                        PointStrokeColor     = "#fff",
                        PointHighlightFill   = "#fff",
                        PointHighlightStroke = "rgba(220,220,220,1)",
                    };
                    Series.Add(cd);
                }
                barChart.ComplexData.Datasets.AddRange(Series);
            }
            else
            {
                //barChart = null;
            }
        }
Esempio n. 2
0
        public ActionResult Index()
        {
            ConnectionMultiplexer redis    = ConnectionMultiplexer.Connect("localhost");
            IDatabase             database = redis.GetDatabase();
            var                   values   = database.ListRange("counters:cpu");
            List <Moment>         moments  = new List <Moment>();
            List <double>         cpuData  = new List <double>();
            List <ComplexDataset> dataset  = new List <ComplexDataset>();

            foreach (string value in values)
            {
                Moment moment = JsonConvert.DeserializeObject <Moment>(value);
                moments.Add(moment);
            }
            moments = moments.OrderBy(m => m.TimeStamp).ToList();

            foreach (Moment moment in moments)
            {
                cpuData.Add(moment.Value);
            }

            ComplexDataset complexDataset = new ComplexDataset()
            {
                Data                 = cpuData,
                Label                = "My First dataset",
                FillColor            = "rgba(220,220,220,0.2)",
                StrokeColor          = "rgba(220,220,220,1)",
                PointColor           = "rgba(220,220,220,1)",
                PointStrokeColor     = "#fff",
                PointHighlightFill   = "#fff",
                PointHighlightStroke = "rgba(220,220,220,1)",
            };



            ViewBag.Title = "Home Page";

            return(View(complexDataset));
        }
        private PlayerDetailsDisplay PlayerDetails(int?id)
        {
            var player = db.Players.Include(p => p.Spec).Include(r => r.Rankings).Where(p => p.ID == id).FirstOrDefault(); //TODO add to repo

            var difficulties       = db.Difficulties.ToList();
            var coefficients       = db.Coefficients.ToList();
            var rankingPercentages = new List <RankingPercentageDisplay>();
            var benchmarks         = new List <BenchmarkDisplay>();
            var playerMetrics      = db.Rankings.Where(r => r.PlayerId == player.ID).Select(m => new { m.Metric }).Distinct();
            var dataSets           = new List <ComplexDataset>();

            foreach (var difficulty in difficulties)
            {
                // add player benchmarks to model
                foreach (var playerMetric in playerMetrics)
                {
                    foreach (var coefficient in coefficients.Where(c => c.MetricId == playerMetric.Metric.ID && c.DifficultyId == difficulty.ID).ToList())
                    {
                        benchmarks.Add(new BenchmarkDisplay
                        {
                            Difficulty = coefficient.Difficulty,
                            Metric     = playerMetric.Metric,
                            Value      = player.Sim * coefficient.Value
                        });
                    }
                }

                var rankings = db.Rankings.Include(p => p.Player).Include(s => s.Player.Spec).Include(m => m.Metric).Include(e => e.Encounter).Include(m => m.Metric)
                               .Where(r => r.DifficultyId == difficulty.ID && r.PlayerId == player.ID).ToList(); //TODO move to repo

                decimal percentageSum = 0;

                foreach (var rank in rankings)
                {
                    //get coefficient
                    var coefficient = coefficients.Where(c => c.DifficultyId == difficulty.ID && c.MetricId == rank.Metric.ID).FirstOrDefault();

                    //calculate percentage
                    var percentage = (rank.Total / (player.Sim * coefficient.Value)) - 1;

                    // get css class for overall percentage range
                    string cssClass = Utilities.CssClassForPercent(percentage);

                    percentageSum += percentage;

                    //construct WCL url
                    var    wclReportUrl = db.Configurations.Where(c => c.Key == "wclReportUrl").FirstOrDefault();
                    string reportUrl    = string.Format("{0}/{1}#fight={2}", wclReportUrl.Value, rank.WCLReportId, rank.WCLFightId.ToString());

                    rankingPercentages.Add(new RankingPercentageDisplay
                    {
                        ID           = rank.ID,
                        Player       = player,
                        Encounter    = rank.Encounter.Name,
                        Difficulty   = difficulty.Name,
                        PlayerILevel = rank.PlayerILevel,
                        ReportUrl    = reportUrl,
                        Metric       = rank.Metric.Description,
                        Total        = rank.Total,
                        Percentage   = percentage,
                        CssClass     = cssClass
                    });
                }

                decimal overallPercentage = 0;
                if (rankings.Count() != 0)
                {
                    overallPercentage = percentageSum / rankings.Count();
                }

                // add previous percentages to show trends
                foreach (var metric in db.Metrics.ToList())
                {
                    var percentages = db.OverallPercentages.Where(o => o.PlayerId == player.ID && o.DifficultyId == difficulty.ID && o.MetricId == metric.ID);

                    if (percentages.Count() > 0)
                    {
                        var dataPoints = new List <double>();
                        foreach (var percent in percentages)
                        {
                            dataPoints.Add(Convert.ToDouble(percent.Percentage * 100));
                        }

                        //generate random number for colors
                        Random random = new Random();
                        int    r1     = random.Next(0, 255);
                        int    r2     = random.Next(0, 255);
                        int    r3     = random.Next(0, 255);

                        var dataSet = new ComplexDataset();
                        dataSet.Label                = string.Format("{0} ({1}) {2} - {3}", player.Name, player.Spec.Name, difficulty.Name, metric.Description);
                        dataSet.FillColor            = "rgba(0, 0, 0, 0)";
                        dataSet.Data                 = dataPoints;
                        dataSet.PointColor           = string.Format("rgba({0}, {1}, {2}, 0.7)", r1, r2, r3);
                        dataSet.StrokeColor          = string.Format("rgba({0}, {1}, {2}, 0.7)", r1, r2, r3);
                        dataSet.PointHighlightFill   = string.Format("rgba({0}, {1}, {2}, 0.7)", r1, r2, r3);
                        dataSet.PointHighlightStroke = string.Format("rgba({0}, {1}, {2}, 0.7)", r1, r2, r3);
                        dataSet.PointStrokeColor     = string.Format("rgba({0}, {1}, {2}, 0.7)", r1, r2, r3);

                        dataSets.Add(dataSet);
                    }
                }
            }
            ;

            var dateLabels = new List <string>();

            var dates = db.OverallPercentages.Where(o => o.PlayerId == id).OrderBy(o => o.DateAdded).GroupBy(d => DbFunctions.TruncateTime(d.DateAdded)).ToList();

            foreach (var date in dates)
            {
                var temp = date.Select(d => new { d.DateAdded }).FirstOrDefault();

                dateLabels.Add(temp.DateAdded.ToShortDateString());
            }

            var overallPercentageTrends = new OverallPercentageTrendDisplay
            {
                Labels          = dateLabels,
                ComplexDataSets = dataSets
            };

            return(new PlayerDetailsDisplay {
                Player = player, Benchmarks = benchmarks, Rankings = rankingPercentages, OverallPercentageTrends = overallPercentageTrends
            });
        }
        public ActionResult Overall(int?metricId, int?difficultyId)
        {
            if (metricId == null || difficultyId == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }

            var rankingPercentages = new List <RankingPercentageDisplay>();
            var players            = db.Players;
            var dataSets           = new List <ComplexDataset>();

            //get coefficient
            var coefficient = db.Coefficients.Where(c => c.DifficultyId == difficultyId && c.MetricId == metricId).FirstOrDefault();

            foreach (var uniquePlayer in players.Where(p => p.Status == true).Select(n => n.Name).Distinct().ToList())
            {
                var rankingPercentageBySpec = new List <RankingPercentageBySpecDisplay>();

                List <decimal> sumOfAllRanks = new List <decimal>();

                foreach (var player in players.Include(s => s.Spec).Where(n => n.Name == uniquePlayer).ToList())
                {
                    var rankings = db.Rankings.Where(r => r.DifficultyId == difficultyId && r.PlayerId == player.ID && r.MetricId == metricId).ToList();

                    decimal specSum = 0, overallSpecPercentage = 0;

                    foreach (var rank in rankings)
                    {
                        var percentage = (rank.Total / (player.Sim * coefficient.Value)) - 1;
                        specSum += percentage;
                        sumOfAllRanks.Add(percentage);
                    }

                    if (rankings.Count() > 0)
                    {
                        overallSpecPercentage = specSum / rankings.Count();
                    }

                    // get css class for overall percentage range
                    string cssClassBySpec = Utilities.CssClassForPercent(overallSpecPercentage);

                    rankingPercentageBySpec.Add(new RankingPercentageBySpecDisplay
                    {
                        Player     = player,
                        Percentage = overallSpecPercentage,
                        CssClass   = cssClassBySpec
                    });

                    // add previous percentages to show trends
                    var percentages = db.OverallPercentages.Where(o => o.PlayerId == player.ID && o.DifficultyId == difficultyId && o.MetricId == metricId);

                    if (percentages.Count() > 0)
                    {
                        var dataPoints = new List <double>();
                        foreach (var percent in percentages)
                        {
                            dataPoints.Add(Convert.ToDouble(percent.Percentage * 100));
                        }

                        //generate random number for colors
                        Random random = new Random();
                        int    r1     = random.Next(0, 255);
                        int    r2     = random.Next(0, 255);
                        int    r3     = random.Next(0, 255);

                        var dataSet = new ComplexDataset();
                        dataSet.Label                = string.Format("{0} ({1})", player.Name, player.Spec.Name);
                        dataSet.FillColor            = "rgba(0, 0, 0, 0)";
                        dataSet.Data                 = dataPoints;
                        dataSet.PointColor           = string.Format("rgba({0}, {1}, {2}, 0.7)", r1, r2, r3);
                        dataSet.StrokeColor          = string.Format("rgba({0}, {1}, {2}, 0.7)", r1, r2, r3);
                        dataSet.PointHighlightFill   = string.Format("rgba({0}, {1}, {2}, 0.7)", r1, r2, r3);
                        dataSet.PointHighlightStroke = string.Format("rgba({0}, {1}, {2}, 0.7)", r1, r2, r3);
                        dataSet.PointStrokeColor     = string.Format("rgba({0}, {1}, {2}, 0.7)", r1, r2, r3);

                        dataSets.Add(dataSet);
                    }
                }

                // calculate your percentage across all specs and ranks
                decimal sum = 0, overallPercentage = 0;
                if (sumOfAllRanks.Count() > 0)
                {
                    foreach (var rankPercentage in sumOfAllRanks)
                    {
                        sum += rankPercentage;
                    }

                    overallPercentage = sum / sumOfAllRanks.Count();
                }

                string cssClass = Utilities.CssClassForPercent(overallPercentage);

                rankingPercentages.Add(new RankingPercentageDisplay {
                    PlayerName      = uniquePlayer,
                    SpecPercentages = rankingPercentageBySpec,
                    Percentage      = overallPercentage,
                    CssClass        = cssClass
                });
            }

            ViewBag.Difficulty = db.Difficulties.Where(d => d.ID == difficultyId).FirstOrDefault(); //TODO add to repo
            ViewBag.Metric     = db.Metrics.Where(m => m.ID == metricId).FirstOrDefault();          //TODO add to repo

            var overallRankingPercentages = new OverallRankingPercentageDisplay();

            overallRankingPercentages.RankingPercentages = rankingPercentages.OrderByDescending(p => p.Percentage).ToList();

            // construct trends object
            var dateLabels = new List <string>();
            var dates      = db.OverallPercentages.OrderBy(o => o.DateAdded).GroupBy(d => DbFunctions.TruncateTime(d.DateAdded)).ToList();

            foreach (var date in dates)
            {
                var temp = date.Select(d => new { d.DateAdded }).FirstOrDefault();

                dateLabels.Add(temp.DateAdded.ToShortDateString());
            }

            var overallPercentageTrends = new OverallPercentageTrendDisplay
            {
                Labels          = dateLabels,
                ComplexDataSets = dataSets
            };

            overallRankingPercentages.OverallPercentageTrends = overallPercentageTrends;

            return(View(overallRankingPercentages));
        }