Esempio n. 1
0
 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),
     });
 }
Esempio n. 2
0
        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));
        }
Esempio n. 3
0
        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));
        }