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