private PieChart GetBasePieChart(String seriesName, Datum[] data) { return(new PieChart { chart = new Chart { plotBackgroundColor = null, plotBorderWidth = null, plotShadow = false, type = "pie" }, title = new QuickSoftwareMgmt.Models.Hicharts.PieChart.Title { text = "" }, tooltip = new QuickSoftwareMgmt.Models.Hicharts.PieChart.Tooltip { pointFormat = "{series.name}: <b>{point.percentage:.1f}%</b>" }, plotOptions = new Plotoptions { pie = new Pie { allowPointSelect = true, cursor = "pointer", dataLabels = new Datalabels { enabled = true, format = "{point.percentage:.1f} %", }, showInLegend = true } }, series = new QuickSoftwareMgmt.Models.Hicharts.PieChart.Series[] { new QuickSoftwareMgmt.Models.Hicharts.PieChart.Series { name = seriesName, colorByPoint = true, data = data } }, exporting = Exportable.GetDefault(seriesName), }); }
public async Task <JsonResult> GetChangesUrgencyByDateChart(String StartDate, String EndDate) { int maxDaysBack = -15; var startDate = DateTime.Today.AddDays(maxDaysBack);//Take changes from the last 15 days var endDate = DateTime.Today; if (!String.IsNullOrWhiteSpace(StartDate) && !String.IsNullOrWhiteSpace(EndDate)) { var initialDate = DateTime.ParseExact(StartDate, "dd/MM/yyyy", System.Globalization.CultureInfo.CurrentUICulture); var finalDate = DateTime.ParseExact(EndDate, "dd/MM/yyyy", System.Globalization.CultureInfo.CurrentUICulture); endDate = finalDate; maxDaysBack = (int)(initialDate - finalDate).TotalDays; startDate = finalDate.AddDays(maxDaysBack);//Take changes from the last 15 days } var priorities = await db.Priorities.ToListAsync(); var dates = new List <DateTime>(); for (int i = maxDaysBack; i <= 0; i++) { dates.Add(endDate.AddDays(i)); } var series = new Models.Hicharts.LineChart.Series[priorities.Count]; for (int i = 0; i < priorities.Count; i++) { var priorityId = priorities[i].Id; var changes = await db.ChangeRequests .Where(c => !c.Erased && c.ProjectId == SelectedProjectId && c.PriorityId == priorityId && c.CreationDate > startDate) .GroupBy(c => DbFunctions.CreateDateTime(c.CreationDate.Year, c.CreationDate.Month, c.CreationDate.Day, 0, 0, 0)) .Select(gc => new { TimeStamp = gc.Key.Value, Count = gc.Count() }) .ToArrayAsync(); series[i] = new Models.Hicharts.LineChart.Series { name = priorities[i].Name, data = dates.Select(d => { var change = changes.FirstOrDefault(c => c.TimeStamp == d); int count = 0; if (change != null) { count = change.Count; } return(count); }).ToArray() }; } var lineChart = new LineChart { title = new QuickSoftwareMgmt.Models.Hicharts.LineChart.Title { text = "" }, subtitle = new Subtitle { text = "" }, xAxis = new Xaxis { title = new QuickSoftwareMgmt.Models.Hicharts.LineChart.Title { text = "Fechas" }, categories = dates.Select(d => d.ToString("{dd/MM}")).ToArray() }, yAxis = new Yaxis { title = new Models.Hicharts.LineChart.Title { text = "Cantidad de cambios" }, plotLines = new Plotline[] { new Plotline { value = 0, width = 1, color = "#808080" } } }, tooltip = new Models.Hicharts.LineChart.Tooltip { valueSuffix = "Cambios" }, legend = new Legend { layout = "vertical", align = "right", verticalAlign = "middle", borderWidth = 0 }, series = series, exporting = Exportable.GetDefault("Urgencia de cambios por fecha"), }; return(Json(lineChart, JsonRequestBehavior.AllowGet)); }
public async Task <JsonResult> GetBurndownChart() { var sprintId = SelectedSprintId; var sprint = await db.Sprints .FindAsync(sprintId); //var team = await db.Teams // .Include(t => t.TeamMembers) // .FirstOrDefaultAsync(t => !t.Erased && t.ProjectId == SelectedProjectId); //var teamDailyCapacity = team.TeamMembers // .Where(t => !t.Erased) // .Sum(t => t.Capacity); int totalWorkLoad = await db.Tasks .Where(t => !t.Erased && t.SprintId == sprintId && !(t.BacklogItem is Test)) .SumAsync(t => t.EstimatedTime); var workableDates = new List <DateTime>(); var sprintDuration = (int)(sprint.EndDate - sprint.StartDate).TotalDays; for (int i = 0; i <= sprintDuration; i++) { var date = sprint.StartDate.AddDays(i); if (!(date.DayOfWeek == DayOfWeek.Saturday || date.DayOfWeek == DayOfWeek.Sunday)) { workableDates.Add(date); } } var actualSprintDuration = 1; if (workableDates.Count > 1) { actualSprintDuration = workableDates.Count - 1; } var sprintTaskUpdates = await db.TaskUpdates .Where(u => !u.Erased && u.Task.SprintId == sprintId && !(u.Task.BacklogItem is Test) && u.EventDate >= sprint.StartDate && u.EventDate <= sprint.EndDate) .ToListAsync(); float idealDailyBurn = 0; if (workableDates.Count > 0) { //idealDailyBurn = (int)Math.Ceiling(totalWorkLoad / (actualSprintDuration * 1.0f)); idealDailyBurn = totalWorkLoad / (actualSprintDuration * 1.0f); } var idealBurn = new List <int>(); var actualBurn = new List <int>(); var burned = totalWorkLoad; for (int i = 0; i < workableDates.Count; i++) { var date = workableDates[i]; //Ideal if (totalWorkLoad - i * idealDailyBurn > 0) { idealBurn.Add((int)Math.Ceiling(totalWorkLoad - i * idealDailyBurn)); } else { idealBurn.Add(0); } //Actual burned -= sprintTaskUpdates .Where(u => u.EventDate.Date == date) .Sum(u => u.ElapsedTime); if (burned < 0) { burned = 0; } actualBurn.Add(burned); } var series = new List <Series>(); series.Add(new Series { data = idealBurn.ToArray(), name = "Ideal burn" }); series.Add(new Series { data = actualBurn.ToArray(), name = "Actual burn" }); AreaChart areachart = null; areachart = new AreaChart { chart = new Chart { type = "areaspline" }, title = new Title { text = "" }, //subtitle = new Subtitle //{ // text = "" //}, xAxis = new Xaxis { //allowDecimals = false, title = new Title { text = "Fecha" }, labels = new Labels { format = "{value}" }, categories = workableDates.Select(d => d.ToString("{dd/MM}")).ToArray() }, yAxis = new Yaxis { title = new Title { text = "Horas" }, labels = new Labels { format = "{value}" } }, tooltip = new Tooltip { pointFormat = "{point.y} horas" }, plotOptions = new Plotoptions { area = new Area { pointStart = 0, marker = new Marker { enabled = false, symbol = "circle", radius = 2, states = new States { hover = new Hover { enabled = true } } } } }, series = series.ToArray(), exporting = Exportable.GetDefault("Burndown"), }; return(Json(areachart, JsonRequestBehavior.AllowGet)); }