Ejemplo n.º 1
0
        private ICollection <BurndownLeftHoursByDay> GetHoursByDay_LEFT_HOURS_AHEAD(ICollection <BurndownLeftHoursByDay> leftHours, Project project)
        {
            if (DateTime.Today > project.LastSprint.EndDate || DateTime.Today < project.FirstSprint.StartDate)
            {
                return(new BurndownLeftHoursByDay[0]);
            }

            if (leftHours.Count == 0)
            {
                return(new BurndownLeftHoursByDay[0]);
            }

            BurndownLeftHoursByDay last = leftHours.OrderBy(h => h.Date).Last();

            BurndownLeftHoursByDay[] hoursAhead = new BurndownLeftHoursByDay[2];
            hoursAhead[0] = new BurndownLeftHoursByDay()
            {
                Date = last.Date.Date, TotalHours = last.TotalHours, LeftHoursMetric = LeftHoursMetrics.LEFT_HOURS_AHEAD
            };
            hoursAhead[1] = new BurndownLeftHoursByDay()
            {
                Date = project.LastSprint.EndDate.Date, TotalHours = last.TotalHours, LeftHoursMetric = LeftHoursMetrics.LEFT_HOURS_AHEAD, IsLastSprint = true
            };

            foreach (var h in hoursAhead)
            {
                h.Date = h.Date.Date; // removes the time part
            }

            return(hoursAhead);
        }
        private ICollection<BurndownLeftHoursByDay> GetHoursByDay_LEFT_HOURS_AHEAD(ICollection<BurndownLeftHoursByDay> leftHours, Project project)
        {
            if (DateTime.Today > project.LastSprint.EndDate || DateTime.Today < project.FirstSprint.StartDate)
                return new BurndownLeftHoursByDay[0];

            if(leftHours.Count==0)
                return new BurndownLeftHoursByDay[0];

            DateTime lastDay = leftHours.Max(h => h.Date);
            BurndownLeftHoursByDay last = leftHours.Single(b => b.Date == lastDay);

            BurndownLeftHoursByDay[] hoursAhead = new BurndownLeftHoursByDay[2];
            hoursAhead[0] = new BurndownLeftHoursByDay() { Date = lastDay, TotalHours = last.TotalHours, LeftHoursMetric = LeftHoursMetrics.LEFT_HOURS_AHEAD };
            hoursAhead[1] = new BurndownLeftHoursByDay() { Date = project.LastSprint.EndDate, TotalHours = last.TotalHours, LeftHoursMetric = LeftHoursMetrics.LEFT_HOURS_AHEAD, IsLastSprint = true };

            return hoursAhead;
        }
Ejemplo n.º 3
0
        private ICollection <BurndownLeftHoursByDay> GetHoursByDay_LEFT_HOURS(Project project, List <BacklogItem> items)
        {
            List <BurndownLeftHoursByDay> dayLeftHours = new List <BurndownLeftHoursByDay>();

            decimal  lastHours  = GetProjectPlannedHoursAtPlanning(0, project.FirstSprint.StartDate, items);
            DateTime lastDay    = project.FirstSprint.StartDate;
            Sprint   stopSprint = project.SprintForDate(DateTime.Today);

            if (project.LastSprint.EndDate < DateTime.Today)
            {
                stopSprint = project.LastSprint;
            }
            if (stopSprint == null)
            {
                return(dayLeftHours.ToArray());
            }
            foreach (Sprint s in project.Sprints.Where(s => s.SprintNumber <= stopSprint.SprintNumber).OrderBy(s => s.SprintNumber))
            {
                decimal sprintInitialHours = lastHours;

                if (s.SprintNumber <= project.CurrentPlanningNumber)
                {
                    sprintInitialHours = GetProjectPlannedHoursAtPlanning(s.SprintNumber, s.StartDate, items);
                }


                // adds sprint start date
                dayLeftHours.Add(new BurndownLeftHoursByDay()
                {
                    Date = s.StartDate.Date, TotalHours = sprintInitialHours, LeftHoursMetric = LeftHoursMetrics.LEFT_HOURS
                });

                // substract the finished items
                lastHours = sprintInitialHours;
                var sprintItems = items.Where(i => i.FinishedAt.HasValue && i.FinishedAt.Value.Date >= s.StartDate.Date && i.FinishedAt.Value.Date <= s.EndDate.Date).OrderBy(i => i.FinishedAt);
                foreach (BacklogItem item in sprintItems)
                {
                    lastDay   = (DateTime)item.FinishedAt.Value.Date;
                    lastHours = lastHours - item.CurrentTotalHours;
                    if (lastHours < 0)
                    {
                        lastHours = 0;
                    }
                    BurndownLeftHoursByDay bd = dayLeftHours.FirstOrDefault(b => b.Date.Equals(lastDay));
                    if (bd != null)
                    {
                        bd.TotalHours = lastHours;
                    }
                    else
                    {
                        dayLeftHours.Add(new BurndownLeftHoursByDay()
                        {
                            Date = lastDay, TotalHours = lastHours, LeftHoursMetric = LeftHoursMetrics.LEFT_HOURS
                        });
                    }
                }
            }

            // adds today
            if (DateTime.Today >= project.FirstSprint.StartDate.Date && DateTime.Today <= project.LastSprint.EndDate.Date)
            {
                if (dayLeftHours.SingleOrDefault(b => b.Date.Equals(DateTime.Today)) == null)
                {
                    dayLeftHours.Add(new BurndownLeftHoursByDay()
                    {
                        Date = DateTime.Today, TotalHours = lastHours, LeftHoursMetric = LeftHoursMetrics.LEFT_HOURS
                    });
                }
            }

            foreach (var h in dayLeftHours)
            {
                h.Date = h.Date.Date; // removes the time part
            }

            return(dayLeftHours.ToArray());
        }