using System.Collections.Generic;
public static void Main()
var caseCreateDate = new DateTime(2019, 5, 23, 1, 0, 0);
var escalation = GetEscalationDateTimes(type, caseCreateDate, caseCreateDate);
foreach(var dt in escalation.FollowUpDateTimes)
Console.WriteLine("Follow up page on " + dt);
Console.WriteLine("Due on " + escalation.DueDateTime);
private static Escalation GetEscalationDateTimes(string type, DateTime currentDate, DateTime caseCreateDate)
Escalation escalation = new Escalation();
escalation.FollowUpDateTimes.Add(caseCreateDate.AddMinutes(5));
escalation.FollowUpDateTimes.Add(caseCreateDate.AddMinutes(10));
escalation.FollowUpDateTimes.Add(caseCreateDate.AddMinutes(15));
escalation.DueDateTime = caseCreateDate.AddMinutes(20);
var dayOfWeek = (int)currentDate.DayOfWeek;
var timeOfDay = currentDate.TimeOfDay;
dayOfWeek >= 1 && dayOfWeek <= 5
&& timeOfDay >= (new TimeSpan(8, 30, 0)) && timeOfDay < (new TimeSpan(17, 0, 0))
escalation.FollowUpDateTimes.Add(caseCreateDate.AddMinutes(5));
escalation.FollowUpDateTimes.Add(caseCreateDate.AddMinutes(10));
escalation.FollowUpDateTimes.Add(caseCreateDate.AddMinutes(15));
escalation.DueDateTime = caseCreateDate.AddMinutes(20);
dayOfWeek >= 1 && dayOfWeek <= 5
&& timeOfDay >= (new TimeSpan(17, 0, 0)) && timeOfDay < (new TimeSpan(21, 0, 0))
(dayOfWeek == 6 || dayOfWeek == 0)
&& timeOfDay >= (new TimeSpan(8, 30, 0)) && timeOfDay < (new TimeSpan(21, 0, 0))
escalation.FollowUpDateTimes.Add(caseCreateDate.AddMinutes(30));
escalation.FollowUpDateTimes.Add(caseCreateDate.AddMinutes(35));
escalation.DueDateTime = caseCreateDate.AddMinutes(37);
timeOfDay >= (new TimeSpan(21, 0, 0)) || timeOfDay < (new TimeSpan(8, 30, 0))
var escalationDate = (timeOfDay >= (new TimeSpan(21, 0, 0)))
? currentDate.Date.AddDays(1).AddHours(8).AddMinutes(30)
: currentDate.Date.AddHours(8).AddMinutes(30);
(int)escalationDate.DayOfWeek == 6 || (int)escalationDate.DayOfWeek == 0
escalation.FollowUpDateTimes.Add(escalationDate);
escalation.FollowUpDateTimes.Add(escalationDate.AddMinutes(30));
escalation.FollowUpDateTimes.Add(escalationDate.AddMinutes(35));
escalation.DueDateTime = escalationDate.AddMinutes(37);
escalation.FollowUpDateTimes.Add(escalationDate);
escalation.FollowUpDateTimes.Add(escalationDate.AddMinutes(5));
escalation.FollowUpDateTimes.Add(escalationDate.AddMinutes(10));
escalation.FollowUpDateTimes.Add(escalationDate.AddMinutes(15));
escalation.DueDateTime = escalationDate.AddMinutes(20);
public DateTime? DueDateTime { get; set; }
public List<DateTime> FollowUpDateTimes { get; set; }
FollowUpDateTimes = new List<DateTime>();