public void CheckConfigurations(ValidationResults results) { if (AreOverlappingsAllowed) { return; } const string errorField = "CapacityCycleConfigurations"; string errorMessage = Translations.ContractModelConfigurationsInvalid; var configurations = CapacityCycleConfigurations.OrderBy(c => c.ValidFrom); configurations.ForEach(c => c.ClearValidationError(errorField)); bool overlaps = false; foreach (var configuration in configurations) { var currentPeriod = new TimeRange(configuration.ValidFrom.LocalDateTime, configuration.ValidTo.HasValue ? configuration.ValidTo.GetValueOrDefault().LocalDateTime : DateTime.MaxValue); overlaps = configurations.Any(c => !c.Equals(configuration) && currentPeriod.OverlapsWith(new TimeRange(c.ValidFrom.LocalDateTime, c.ValidTo.HasValue ? c.ValidTo.GetValueOrDefault().LocalDateTime : DateTime.MaxValue))); if (overlaps) { break; } } if (overlaps) { var validationResult = new ValidationResult(errorMessage, this, errorField, null, EntityValidator); results.AddResult(validationResult); SetValidationError(validationResult); } }
public CapacityCycleConfiguration NewConfiguration(User currentUser) { var configuration = CapacityCycleConfiguration.Create(this); if (CapacityCycleConfigurations != null && CapacityCycleConfigurations.Any()) { // first set the previous period to ended CapacityCycleConfiguration previousConfiguration = CapacityCycleConfigurations.FirstOrDefault(m => m.ValidTo == null); if (previousConfiguration != null) { previousConfiguration.ValidTo = DateTime.Today.AddDays(-1); previousConfiguration.AreDatesLocked = true; configuration.ValidFrom = DateTime.Today; } else { previousConfiguration = CapacityCycleConfigurations.OrderByDescending(m => m.ValidTo) .FirstOrDefault(); if (previousConfiguration != null) { previousConfiguration.AreDatesLocked = true; configuration.ValidFrom = previousConfiguration.ValidTo.Value.AddDays(1); } else { configuration.ValidFrom = DateTime.Today; } } } else { configuration.ValidFrom = DateTime.Today; } return(configuration); }