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)); } } }