private (int count, Duration duration) GatherProgrammeUnplacedSpotsDuration( IProgrammeForBreakAvailCalculation programme, IEnumerable <ISpotForBreakAvailCalculation> spots) { int count = 0; Duration unplacedSpotDuration = Duration.Zero; foreach (var spot in spots.Where(spot => programme.DateTimeIsInProgramme(spot.StartDateTime) && !spot.IsBooked)) { ++count; unplacedSpotDuration = unplacedSpotDuration.Plus(spot.SpotLength); } return(count, unplacedSpotDuration); }
public static bool DateTimeIsInProgramme(this IProgrammeForBreakAvailCalculation programme, DateTime dateTime) { return(programme != null && programme.StartDateTime <= dateTime && dateTime < programme.StartDateTime.Add(programme.Duration.ToTimeSpan())); }