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; } }
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)); }