/// <summary> /// Alloweds to add. /// </summary> /// <param name="toCompare">To compare.</param> /// <returns></returns> public bool AllowedToAdd(AppointmentObj toCompare) { if (Start <= toCompare.End && End >= toCompare.Start) { return(true); } else { return(false); } }
/// <summary> /// Splits the avaiable date from overlapping reservations. /// </summary> /// <param name = "avail">The avail.</param> /// <param name = "overlappingDates">The overlapping dates.</param> /// <returns></returns> private static IEnumerable<AppointmentObj> SplitAvaiableDateFromOverlappingReservations( AppointmentObj avail, IEnumerable<AppointmentObj> overlappingDates) { var aList = new List<AppointmentObj>(); //Stores current date placeholder DateTime? currentStart = null; //Stores how many hours are valid var currentHours = 1; //Iterates over times incrementing by 1 hour checking for overlap for (var date = avail.Start; date.Date < avail.End; date = date.AddHours(1)) { //if date is >= the end date then break; if (date >= avail.End) break; var dateForQuery = date; //Check current hour range 12-13 and detect any overlaps with reserved dates if (overlappingDates.Any(t => AppointmentObj.OverlapsWith(t, new AppointmentObj("Available", dateForQuery, dateForQuery.AddHours(1), "", "", "", avail.UserId, false, avail.DbId)))) { //Found Overlap //Current date is set but now out of range //Need to create appointment object); if (currentStart != null) { aList.Add(new AppointmentObj("Available", ((DateTime) currentStart), ((DateTime) currentStart).AddHours(currentHours), "", "", "", avail.UserId, false, avail.DbId)); currentStart = null; //Reset currentHours = 1; //Reset } } else { if (currentStart == null) //New valid date range found currentStart = date; else //Still current date range extend currentHours++; } } //Finished looping valid date still stored if (currentStart != null) { aList.Add(new AppointmentObj("Available", ((DateTime) currentStart), ((DateTime) currentStart).AddHours(currentHours), "", "", "", avail.UserId, false, avail.DbId)); } return aList; }
/// <summary> /// Overlapses the with. /// </summary> /// <param name="b">The b.</param> /// <returns></returns> public bool OverlapsWith(AppointmentObj b) { return(!(b.End <= Start || End <= b.Start)); }
/// <summary> /// Overlapses the with. /// </summary> /// <param name = "a">A.</param> /// <param name = "b">The b.</param> /// <returns></returns> public static bool OverlapsWith(AppointmentObj a, AppointmentObj b) { return(!(b.End <= a.Start || a.End <= b.Start)); }
/// <summary> /// Alloweds to add. /// </summary> /// <param name="toCompare">To compare.</param> /// <returns></returns> public bool AllowedToAdd(AppointmentObj toCompare) { if (Start <= toCompare.End && End >= toCompare.Start) return true; else return false; }
/// <summary> /// Overlapses the with. /// </summary> /// <param name="b">The b.</param> /// <returns></returns> public bool OverlapsWith(AppointmentObj b) { return !(b.End <= Start || End <= b.Start); }
/// <summary> /// Overlapses the with. /// </summary> /// <param name = "a">A.</param> /// <param name = "b">The b.</param> /// <returns></returns> public static bool OverlapsWith(AppointmentObj a, AppointmentObj b) { return !(b.End <= a.Start || a.End <= b.Start); }
/// <summary> /// Handles the Click event of the _btnAddDates control. /// </summary> /// <param name="sender">The source of the event.</param> /// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param> protected void _btnAddDates_Click(object sender, EventArgs e) { var date = (DateTime)_rdpDate.DbSelectedDate; var startTime = ((DateTime)_rtpStartTime.DbSelectedDate).TimeOfDay; var endTime = ((DateTime)_rtpEndTime.DbSelectedDate).TimeOfDay; var appt = new AppointmentObj { Busy = true, Days = String.Empty, End = date.Add(endTime), Start = date.Add(startTime), }; var isVald = GetIsValdAddDates(startTime, endTime); if (isVald == false) return; foreach(var d in ReservedAppt) { if((d.ToAppointmentObj().Start == appt.Start && d.ToAppointmentObj().End == appt.End) || (d.ToAppointmentObj().Start.Date == date && !appt.AllowedToAdd(d.ToAppointmentObj()))) { WriteToBothFeedback(FeedbackType.Error, "Date conflicts with existing reserved date"); return; } } var db = new UrbanDataContext(); var currentAvailabilityDates = RoomAvailabilityUtilities.GetAppointmentObjsWithRecurring(ref db, DateTime.MinValue, DateTime.MaxValue, RoomId).Where(t => t.Start.Date == date && t.End.Date == date).ToList(); var validToAdd = false; foreach(var c in currentAvailabilityDates) { if(c.Busy == false && appt.AllowedToAdd(c)) { validToAdd = true; } else if(c.Busy == true && appt.OverlapsWith(c)) { validToAdd = false; break; } } if (validToAdd) { WriteToBothFeedback(FeedbackType.Success, "Date Added"); ReservedAppt.Add(new ReserveRoomTempObject{Date = date,End = endTime,Start = startTime}); } else { WriteFeedBackMaster(FeedbackType.Error,"Date is not valid or overlaps with another date"); } _rgAvailableTimes.Rebind(); }