public bool AddWorkingDates(WorkingDates days) { TimeRange timeRange = new TimeRange(days.HourFrom, days.HourTo); string employeeId = _context.GetTable <ServiceOffer>().Where(x => x.ID == days.ServiceOffer_ID).Select(x => x.Employee_ID).First(); //string employeeId = _context.GetTable<WorkingDates>().Where(x => x.ServiceOffer_ID == days.ServiceOffer_ID).Select(x => x.ServiceOffer).Select(x => x.Employee_ID).First(); bool result = true; bool resultDb = false; var allServicesForThatDayForThatEmployee = _context.GetTable <WorkingDates>().Where(x => x.NameOfDay == days.NameOfDay).Select(x => x.ServiceOffer).Where(x => x.Employee_ID == employeeId); foreach (var item in allServicesForThatDayForThatEmployee) { foreach (var time in item.WorkingDates.Where(x => x.NameOfDay == days.NameOfDay)) { TimeRange itemTime = new TimeRange(time.HourFrom, time.HourTo); if (itemTime.Clashes(timeRange)) { result = false; break; } else { result = true; } } if (!result) { break; } } if (result) { using (SqlConnection objConn = new SqlConnection(connection)) { objConn.Open(); try { WorkingDates workingDates = new WorkingDates { NameOfDay = days.NameOfDay, HourFrom = days.HourFrom, HourTo = days.HourTo, ServiceOffer_ID = days.ServiceOffer_ID, }; _context.GetTable <WorkingDates>().InsertOnSubmit(workingDates); _context.SubmitChanges(); resultDb = true; } catch { resultDb = false; } finally { objConn.Close(); } } } return(resultDb); }
public IList <TimeSpan> GetHoursTo(int serviceId, DateTime date, TimeSpan timefrom) { IList <TimeSpan> hourTo = new List <TimeSpan>(); DayOfWeek day = date.DayOfWeek; var workingdates = _context.GetTable <WorkingDates>().Where(x => x.NameOfDay == day.ToString() && x.ServiceOffer_ID == serviceId && x.HourFrom <= timefrom && x.HourTo >= timefrom).OrderBy(x => x.HourFrom); var unavailable = _context.GetTable <Saleline>().Where(x => x.ServiceOffer_ID == serviceId).Select(x => x.BookedDate).Where(x => x.BookedDate1 == date).ToArray(); for (TimeSpan from = timefrom; from < workingdates.Select(x => x.HourTo).Max(); from = +from.Add(new TimeSpan(01, 00, 00))) { TimeSpan time = from; TimeRange timeRange = new TimeRange(time, time.Add(new TimeSpan(01, 30, 00))); bool result = true; if (unavailable.Count() != 0) { result = false; } unavailable.OrderBy(x => x.HourFrom); foreach (var i in unavailable) { TimeRange range = new TimeRange(i.HourFrom, i.HourTo); if (!range.Clashes(timeRange)) { result = true; } else { result = false; // break; } } if (result) { hourTo.Add(time.Add(new TimeSpan(01, 00, 00))); } else { break; } } return(hourTo.ToList()); }
public IHttpActionResult PostBookingNew(BookingNew bookingNew) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } TimeZoneInfo indiaZone = TimeZoneInfo.FindSystemTimeZoneById("India Standard Time"); DateTime indianTime = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, indiaZone); bookingNew.BookingTime = indianTime; var temp = db.BookingNews.Where(x => x.StartDate == bookingNew.StartDate && x.RoomNumber == bookingNew.RoomNumber).ToList(); TimeRange range = new TimeRange(bookingNew.StartTime, bookingNew.EndTime); string ErrorInvalidDateTime = "Select valid date and/or times"; string ErrorRestriction = "You are not allowed to book room for more than 2 hours."; foreach (var item in temp) { string ErrorClash = "Booking timings are clashing with a meeting. Booking Id: " + item.BookingId + " | Start Time:" + item.StartTime + " | End Time:" + item.EndTime + " | Booked By:" + item.EmpId; TimeRange rangeItem = new TimeRange(item.StartTime, item.EndTime); if (rangeItem.Clashes(range, true)) { return(BadRequest(ErrorClash)); } } if ((bookingNew.StartTime < indianTime.TimeOfDay || bookingNew.EndTime <= indianTime.TimeOfDay) && bookingNew.StartDate <= indianTime) { return(BadRequest(ErrorInvalidDateTime)); } if (bookingNew.EndTime > bookingNew.StartTime.Add(new TimeSpan(2, 0, 0))) { return(BadRequest(ErrorRestriction)); } db.BookingNews.Add(bookingNew); db.SaveChanges(); return(CreatedAtRoute("DefaultApi", new { id = bookingNew.BookingId }, bookingNew)); }
public IList <TimeSpan> GetHoursFrom(int serviceId, DateTime date) { try { IList <TimeSpan> hourTo = new List <TimeSpan>(); DayOfWeek day = date.DayOfWeek; var workingdates = _context.GetTable <WorkingDates>().Where(x => x.NameOfDay == day.ToString() && x.ServiceOffer_ID == serviceId).OrderBy(x => x.HourFrom); var unavailable = _context.GetTable <Saleline>().Where(x => x.ServiceOffer_ID == serviceId).Select(x => x.BookedDate).Where(x => x.BookedDate1 == date).ToArray(); foreach (var t in workingdates) { for (TimeSpan from = t.HourFrom; from < t.HourTo; from = +from.Add(new TimeSpan(01, 00, 00))) { TimeSpan time = from; TimeRange timeRange = new TimeRange(time, time.Add(new TimeSpan(01, 30, 00))); bool result = true; foreach (var i in unavailable) { TimeRange range = new TimeRange(i.HourFrom, i.HourTo); if (!range.Clashes(timeRange, true)) { result = true; } else { result = false; break; } } if (result) { hourTo.Add(time); } } } return(hourTo.ToList()); } catch (InvalidOperationException) { throw new Exception(); } }
public bool HoursAvailable(int serviceOfferId, DateTime date, TimeSpan from, TimeSpan to) { ServiceOffer s = _context.GetTable <ServiceOffer>().FirstOrDefault(x => x.ID == serviceOfferId); TimeRange timeRange = new TimeRange(from, to); IList <TimeRange> times = new List <TimeRange>(); var salelines = _context.GetTable <Saleline>().Where(x => x.ServiceOffer_ID == s.ID); foreach (var t in salelines) { if (t.BookedDate.BookedDate1.ToShortDateString() == date.ToShortDateString()) { times.Add(new TimeRange(t.BookedDate.HourFrom, t.BookedDate.HourTo)); } } foreach (var w in times) { if (timeRange.Clashes(w)) { return(false); } } return(true); }