private void AdjustLengthAndActivities(IActivitiesSequence activitiesContainer) { // adjust channel start times to be equal or later to instance/channel start and activitiesContainer.Activities[0].StartTime = activitiesContainer.StartTime; for (int i = 1; i < activitiesContainer.Activities.Count; i++) { var firstActiv = activitiesContainer.Activities[i - 1]; var secondActiv = activitiesContainer.Activities[i]; if (secondActiv.StartTime < firstActiv.EndTime) { secondActiv.StartTime = firstActiv.EndTime; secondActiv.EndTime = secondActiv.StartTime + secondActiv.Span; } } if (activitiesContainer.Activities.Count > 0) { activitiesContainer.EndTime = activitiesContainer.Activities.Last().EndTime; activitiesContainer.Span = activitiesContainer.EndTime - activitiesContainer.StartTime; if (Instance.UnitSizeInSeconds != 0) { Helpers.NearestDivisibleBy(activitiesContainer.Span.TotalSeconds, Instance.UnitSizeInSeconds, out int numberOfUnits); activitiesContainer.SpanUnits = numberOfUnits; } } }
private void AdjustStartTime(IActivitiesSequence activitiesContainer, DateTime earliestPossibleStart) { if (activitiesContainer.StartTime < earliestPossibleStart) { activitiesContainer.StartTime = earliestPossibleStart; } TimeSpan span = activitiesContainer.StartTime - earliestPossibleStart; double spanSeconds = Helpers.NearestDivisibleBy(span.TotalSeconds, Instance.UnitSizeInSeconds, out int number); TimeSpan timeAfterStart = new TimeSpan(0, 0, Convert.ToInt32(spanSeconds)); activitiesContainer.StartTime = earliestPossibleStart + timeAfterStart; var activity = activitiesContainer.Activities.FirstOrDefault(); if (activity != null) { activity.StartTime = activitiesContainer.StartTime; activity.EndTime = activity.StartTime + activity.Span; } }