public static Schedule RetrieveSpawnedSchedule(int parentScheduleId, DateTime startTime)
 {
   using (IScheduleRepository scheduleRepository = new ScheduleRepository())
   {
     Schedule schedule =
       scheduleRepository.First<Schedule>(s => s.IdParentSchedule == parentScheduleId && s.StartTime == startTime);
     if (schedule == null)
     {
       schedule = scheduleRepository.First<Schedule>(s => s.IdParentSchedule == parentScheduleId);
     }
     return schedule;
   }
 }
    public static bool IsScheduleRecording(int idSchedule)
    {
      bool isScheduleRecording = false;
      using (IScheduleRepository scheduleRepository = new ScheduleRepository())
      {
        Schedule schedule = scheduleRepository.First<Schedule>(s => s.IdSchedule == idSchedule);

        if (schedule != null)
        {
          Schedule spawnedSchedule = RetrieveSpawnedSchedule(idSchedule, schedule.StartTime);
          if (spawnedSchedule != null)
          {
            schedule = spawnedSchedule;
          }
          isScheduleRecording = (RecordingManagement.GetActiveRecording(schedule.IdSchedule) != null);
        }
      }
      return isScheduleRecording;
    }
 /// <summary>
 /// Retreives the first found instance of a 'Series' typed schedule given its Channel,Title,Start and End Times 
 /// </summary>
 /// <param name="idChannel">Channel id to look for</param>    
 /// <param name="startTime">StartTime</param>
 /// <param name="endTime">EndTime</param>
 /// <returns>schedule instance or null</returns>
 public static Schedule RetrieveSeries(int idChannel, DateTime startTime, DateTime endTime)
 {
   using (IScheduleRepository scheduleRepository = new ScheduleRepository())
   {
     var retrieveSeries = scheduleRepository.First<Schedule>(
       s => s.ScheduleType != 0 && s.IdChannel == idChannel && s.StartTime == startTime && s.EndTime == endTime);
     return retrieveSeries;
   }
 }
    public static void DeleteSchedule(int idSchedule)
    {
      Schedule scheduleToDelete;
      using (IScheduleRepository scheduleRepository = new ScheduleRepository(true))
      {        
        SetRelatedRecordingsToNull(idSchedule, scheduleRepository);
        scheduleToDelete = scheduleRepository.First<Schedule>(schedule => schedule.IdSchedule == idSchedule);
        if (scheduleToDelete == null)
          return;

        scheduleRepository.Delete(scheduleToDelete);
        scheduleRepository.UnitOfWork.SaveChanges();
      }
      ProgramManagement.SynchProgramStates(new ScheduleBLL(scheduleToDelete));
    }
 /// <summary>
 /// Retreives the first found instance of a 'Series' typed schedule given its Channel,Title
 /// </summary>
 /// <param name="idChannel">Channel id to look for</param>
 /// <param name="programName">Title we wanna look for</param>    
 /// <returns>schedule instance or null</returns>
 public static Schedule RetrieveSeries(int idChannel, string programName)
 {
   using (IScheduleRepository scheduleRepository = new ScheduleRepository())
   {
     var retrieveSeries = scheduleRepository.First<Schedule>(
       s => s.ScheduleType != 0 && s.IdChannel == idChannel && s.ProgramName == programName);
     return retrieveSeries;
   }
 }