Пример #1
0
        /// <summary>
        /// Checks the new override event has a valid date range. It cannot overlap existing override events.
        /// </summary>
        private bool ValidateNewOverrideEventAgainstExistingOverridingEvents <T>(IProductionEvents <OverrideEvent <T> > existingList, OverrideEventRequestArgument arg)
        {
            //Test if we override event within the range or we have overlapping overriding
            bool noOverlap = true;
            //Test if we have overlapping for the start date of the event
            //Note closest prior and closest subsequent include event at date itself
            var index = existingList.IndexOfClosestEventPriorToDate(arg.EndUTC);

            if (index >= 0)
            {
                existingList.GetStateAtIndex(index, out var startDate, out var evt);
                if (startDate != arg.EndUTC) //Ignore exact event time matches
                {
                    noOverlap = arg.StartUTC >= evt.EndDate;
                }
            }
            //Test if we have overlapping for the end date of the event
            index = existingList.IndexOfClosestEventSubsequentToDate(arg.StartUTC);
            if (index >= 0)
            {
                existingList.GetStateAtIndex(index, out var startDate, out _);
                if (startDate != arg.StartUTC)
                {
                    noOverlap = noOverlap && arg.EndUTC <= startDate;
                }
            }
            return(noOverlap);
        }