TvDatabase.TvBusinessLayer.AssignSchedulesToCard C# (CSharp) Method

AssignSchedulesToCard() private method

private AssignSchedulesToCard ( TvDatabase.Schedule schedule, List cardSchedules, List &overlappingSchedules, List &notViewabledSchedules ) : bool
schedule TvDatabase.Schedule
cardSchedules List
overlappingSchedules List
notViewabledSchedules List
return bool
    private bool AssignSchedulesToCard(Schedule schedule, List<Schedule>[] cardSchedules,
                                              out List<Schedule> overlappingSchedules, out List<Schedule> notViewabledSchedules)
    {
      overlappingSchedules = new List<Schedule>();
      notViewabledSchedules = new List<Schedule>();
      Log.Info("AssignSchedulesToCard: schedule = " + schedule);
      IList<Card> cards = Card.ListAllEnabled();
      bool assigned = false;
      bool canView = false;
      int count = 0;
      foreach (Card card in cards)
      {
        if (card.canViewTvChannel(schedule.IdChannel))
        {
          canView = true;
          // checks if any schedule assigned to this cards overlaps current parsed schedule
          bool free = true;
          foreach (Schedule assignedSchedule in cardSchedules[count])
          {
            Log.Info("AssignSchedulesToCard: card {0}, ID = {1} has schedule = " + assignedSchedule, count, card.IdCard);
            bool hasOverlappingSchedule = schedule.IsOverlapping(assignedSchedule);
            if (hasOverlappingSchedule)
            {
              bool _isSameTransponder = (isSameTransponder(schedule, assignedSchedule) && card.supportSubChannels);
              if (!_isSameTransponder)
              {
                overlappingSchedules.Add(assignedSchedule);
                Log.Info("AssignSchedulesToCard: overlapping with " + assignedSchedule + " on card {0}, ID = {1}", count,
                         card.IdCard);
                free = false;
              }
            }
          }
          if (free)
          {
            Log.Info("AssignSchedulesToCard: free on card {0}, ID = {1}", count, card.IdCard);
            cardSchedules[count].Add(schedule);                                                
            assigned = true;
            break;
          }
        }
        count++;
      }
      if (!canView)
      {
        notViewabledSchedules.Add(schedule);
      }
      return (canView && assigned);
    }
TvBusinessLayer