private void EvaluateOpenHours()
{
if (this.disabled)
return;
if (this.forced.HasValue)
{
IsOpen = this.forced.Value;
return;
}
bool isOpenNow = false;
if (!this.ranges.Any())
isOpenNow = !this.noRangesMeansClosed;
var now = DateTime.Now.TimeOfDay;
foreach (var range in this.ranges)
{
if (range.From.TimeOfDay < range.To.TimeOfDay)
{
if (now >= range.From.TimeOfDay &&
now <= range.To.TimeOfDay)
{
if (range.DayOfWeek.Count > 0 && !range.DayOfWeek.Contains(DateTime.Today.DayOfWeek))
continue;
isOpenNow = true;
break;
}
}
else
{
// Assume the To timestamp is the following day
if (now >= range.From.TimeOfDay ||
now <= range.To.TimeOfDay)
{
if (range.DayOfWeek.Count > 0 && !range.DayOfWeek.Contains(DateTime.Today.DayOfWeek))
continue;
isOpenNow = true;
break;
}
}
}
IsOpen = isOpenNow;
}