private void SetBookedDatesForVenues()
 {
     using (var Dbconnection = new MCDEntities())
     {
         foreach (Venue AvailableVenue in GetAllVenuesForSelectedCourse())
         {
             var SetOfVenueUtilisedDates = (from a in Dbconnection.Schedules
                                            where a.ScheduleStartDate >= InitalDate.Date &&
                                            a.Venue.VenueID == AvailableVenue.VenueID
                                            select new
             {
                 VenueID = a.Venue.VenueID,
                 VenueUtilisedFromDate = a.ScheduleStartDate,
                 VenueUtilisedTillDate = a.ScheduleCompletionDate
             }).OrderBy(a => a.VenueUtilisedFromDate).Distinct().ToList();
             foreach (var VenueBookedDates in SetOfVenueUtilisedDates)
             {
                 VenueBookedDateSet VBDS = new VenueBookedDateSet(
                     VenueID: VenueBookedDates.VenueID,
                     StartDate: VenueBookedDates.VenueUtilisedFromDate,
                     EndDate: VenueBookedDates.VenueUtilisedTillDate);
                 //add To List
                 VenueBookedDateSets.Add(VBDS);
             }
         }
     };
 }
        private VenueBookedDateSet IsDateInAnySet(List <VenueBookedDateSet> SetsOfBookedDatesPreVenue, DateTime DateIndex)
        {
            VenueBookedDateSet Rtn = null;

            foreach (VenueBookedDateSet VBDS in SetsOfBookedDatesPreVenue)
            {
                if ((VBDS.StartDate.Date <= DateIndex.Date) && (VBDS.EndDate.Date >= DateIndex))
                {
                    return(VBDS);
                }
            }

            return(Rtn);
        }
        private void SetAvailableDatesForVenues()
        {
            DateTime SearchEndDate;

            SearchEndDate = this.InitalDate.Date.AddMonths((int)this.AmountOfSearchTimeAhead).Date;

            //For EAch Facilitator
            if (VenueBookedDateSets.Count > 0)
            {
                foreach (int VenueID in (from a in VenueBookedDateSets
                                         select a.VenueID).Distinct <int>().ToList <int>())
                {
                    //Steps through their Set of Booked Dates to Determine Available DateSets
                    List <VenueBookedDateSet> VBDS = (from a in VenueBookedDateSets
                                                      where a.VenueID == VenueID
                                                      orderby a.StartDate
                                                      select a).ToList <VenueBookedDateSet>();
                    // {
                    DateTime INITIAL_DATE = this.InitalDate.Date;
                    DateTime CURRENT_SEARCH_INDEX_DATE = this.InitalDate.Date;

                    //Initial Check To Catch the first Day - IF It Booked
                    VenueBookedDateSet VBDS_RETURNED_AS_FOUND = IsDateInAnySet(SetsOfBookedDatesPreVenue: VBDS, DateIndex: CURRENT_SEARCH_INDEX_DATE);
                    ////If Null No DataSet Found.
                    while (VBDS_RETURNED_AS_FOUND != null)
                    {
                        //Date Index Is Currently In With In A Booked Set.
                        VenueAvailableDateSets.Add(new VenueAvailableDateSet(VenueID, INITIAL_DATE.Date, VBDS_RETURNED_AS_FOUND.StartDate.Date));
                        INITIAL_DATE = VBDS_RETURNED_AS_FOUND.EndDate.Date.AddDays(1);
                        CURRENT_SEARCH_INDEX_DATE = VBDS_RETURNED_AS_FOUND.EndDate.Date.AddDays(1);
                        VBDS_RETURNED_AS_FOUND    = IsDateInAnySet(SetsOfBookedDatesPreVenue: VBDS, DateIndex: CURRENT_SEARCH_INDEX_DATE);
                    }


                    //Checks Each Day Ahead to See If It Falls Into A Booked Time Period.
                    while (CURRENT_SEARCH_INDEX_DATE < SearchEndDate)
                    {
                        //Check if the Current Start Date Is In Any Of the Booked Date Sets
                        VBDS_RETURNED_AS_FOUND = IsDateInAnySet(SetsOfBookedDatesPreVenue: VBDS, DateIndex: CURRENT_SEARCH_INDEX_DATE.Date.AddDays(1));
                        //If Null No DataSet Found.
                        if (VBDS_RETURNED_AS_FOUND == null)
                        {
                            //Current DateIndex Not In Any Booked Date Sets
                            CURRENT_SEARCH_INDEX_DATE = CURRENT_SEARCH_INDEX_DATE.AddDays(1);
                        }
                        else
                        {
                            //Date Index Is Currently In With In A Booked Set.
                            VenueAvailableDateSets.Add(new VenueAvailableDateSet(VenueID, INITIAL_DATE.Date, VBDS_RETURNED_AS_FOUND.StartDate.AddDays(-1)));
                            INITIAL_DATE = VBDS_RETURNED_AS_FOUND.EndDate.Date.AddDays(1);
                            CURRENT_SEARCH_INDEX_DATE = VBDS_RETURNED_AS_FOUND.EndDate.Date;
                            // CURRENT_SEARCH_INDEX_DATE = CURRENT_SEARCH_INDEX_DATE.AddDays(1);
                        }
                    }
                    VBDS_RETURNED_AS_FOUND = IsDateInAnySet(SetsOfBookedDatesPreVenue: VBDS, DateIndex: CURRENT_SEARCH_INDEX_DATE);
                    //Capture the Last Possiable Dte Set Avaiable
                    if (VBDS_RETURNED_AS_FOUND == null)
                    {
                        //Date Index Is Currently In With In A Booked Set.
                        VenueAvailableDateSets.Add(new VenueAvailableDateSet(VenueID, INITIAL_DATE.Date, CURRENT_SEARCH_INDEX_DATE.Date));
                    }
                }
            }
            else
            {
                foreach (Venue v in GetAllVenuesForSelectedCourse())
                {
                    VenueAvailableDateSets.Add(new VenueAvailableDateSet(v.VenueID, InitalDate.Date, this.InitalDate.Date.AddMonths((int)this.AmountOfSearchTimeAhead).Date));
                }
            }
        }