public static void NormaliseVersionEffectiveDates <TVersion>(this IHeaderEntity <TVersion> header, DateTime?latestEffectiveToDate = null) where TVersion : IApprovableEntity { var versions = header.GetApprovedVersions <TVersion>(); DateTime?previousEffectiveFrom = null; foreach (var item in versions.OrderByDescending(v => v.EffectiveFrom)) { if (previousEffectiveFrom != null) { item.EffectiveTo = ((DateTime)previousEffectiveFrom).AddSeconds(-1); } previousEffectiveFrom = item.EffectiveFrom; } if (latestEffectiveToDate != null) { versions.OrderByDescending(v => v.EffectiveFrom).First().EffectiveTo = (DateTime)latestEffectiveToDate; } }
public static TVersion GetApprovedVersion <TVersion>(this IHeaderEntity <TVersion> header, DateTime viewDate) where TVersion : IApprovableEntity { return(header.GetApprovedVersions <TVersion>().SingleOrDefault(h => h.EffectiveFrom <= viewDate && h.EffectiveTo >= viewDate)); }