public async Task <HttpResponseMessage> FetchBookings(CalendarInput input) { GetFloorAndRooms getFloorAndRooms = new GetFloorAndRooms(); IList <CalendarOutput> calendarOutputList = getFloorAndRooms.GetRoomsAvailabilityByCalendateInput(System.Configuration.ConfigurationManager.AppSettings["Connection"], input); return(Request.CreateResponse(HttpStatusCode.OK, calendarOutputList)); }
public async Task <HttpResponseMessage> BookCalandar(CalendarInputForBooking inputForRoomBooking) { CalendarInput input = new CalendarInput(); CalendarOutputForBooking output = new CalendarOutputForBooking(); input.BookingSlots = inputForRoomBooking.BookingSlots.Select( q => new Slot() { StartDateTime = q.StartDateTime, EndDateTime = q.EndDateTime }).ToList(); input.Capacity = inputForRoomBooking.Capacity; input.FloorID = inputForRoomBooking.FloorID; input.UserId = inputForRoomBooking.UserId; input.Password = inputForRoomBooking.Password; GetFloorAndRooms getFloorAndRooms = new GetFloorAndRooms(); IList <CalendarOutput> calendarOutputList = getFloorAndRooms.GetRoomsAvailabilityByCalendateInput(System.Configuration.ConfigurationManager.AppSettings["Connection"], input); if (calendarOutputList.Count > 0 && !(calendarOutputList.Any(t => t.IsAvailable == false))) { output = getFloorAndRooms.BookRooms(System.Configuration.ConfigurationManager.AppSettings["Connection"], inputForRoomBooking); } else { output.Message = "Conflict occured for provided slots against system bookings."; } return(Request.CreateResponse(HttpStatusCode.OK, output)); }
public void FillRoute() { route = RouteCreator.WithAllProperties(); DepartureCity.SendKeys(route.DepartureCity); ArrivalCity.SendKeys(route.ArrivalCity); Body.Click(2); CalendarInput.Click(); GetTomorrow().Click(); }
/// <summary> /// 添加日历 /// </summary> /// <param name="input"></param> public static void AddCalendar(CalendarInput input) { var calendar = new BaseCalendar(); switch (input.EnumCalendar) { case EnumCalendar.Cron表达式: calendar = new CronCalendar(input.Expression); break; } calendar.TimeZone = TimeZoneInfo.Local; calendar.Description = input.Description; Scheduler.AddCalendar(input.CalendarName, calendar, input.ReplaceExists, input.UpdateTriggers); }
public async Task <JsonResult> CalendarEdit(string calendarName) { var model = new CalendarInput(); if (!calendarName.IsNullOrEmpty()) { model.ReplaceExists = true; var calendar = await StdSchedulerManager.GetCalendar(calendarName); //model.Expression = ((CronCalendar)calendar).CronExpression.ToString(); model.Description = calendar.Description; } return(Json(model)); }
public JsonResult SaveCalendar(CalendarInput input) { var status = new OperateStatus(); try { if (!input.ReplaceExists && RemoteShedulerManager.GetCalendar(input.CalendarName) != null) { status.Message = "日历已存在,请换个其它名称或选择替换现有日历"; return(Json(status)); } RemoteShedulerManager.AddCalendar(input); status.ResultSign = ResultSign.Successful; status.Message = "保存日历成功"; } catch (Exception ex) { status.Message = ex.Message; } return(Json(status)); }
public JsonResult FetchNewAvailableSlot(RecurrenceInfo info) { using (var client = new HttpClient()) { BookingResponse output = new BookingResponse(); string apiURL = ConfigurationManager.AppSettings["APIRefenenceURL"]; CalendarInput input = new CalendarInput(); input.Capacity = info.Capacity; input.FloorID = info.FloorID; input.UserId = (string)Session["UserName"]; input.Password = (string)Session["Password"]; int durationInMinutes = 0; if (!string.IsNullOrEmpty(info.Duration)) { durationInMinutes = int.Parse(info.Duration.Split(Convert.ToChar(":"))[0]) * 60 + int.Parse(info.Duration.Split(Convert.ToChar(":"))[1]); } List <Slot> slots = new List <Slot>(); DateTime start = DateTime.MinValue; DateTime end = DateTime.MinValue; if (DateTime.TryParse(info.StartDate + " " + info.StartTime, out start) && DateTime.TryParse(info.EndtDate, out end)) { if (info.IsEveryDay || info.IsEveryDayWorking) { while (start.Date <= end.Date) { if (info.IsEveryDayWorking && (start.DayOfWeek == DayOfWeek.Saturday || start.DayOfWeek == DayOfWeek.Sunday)) { start = start.AddDays(1); continue; } slots.Add(new Slot() { StartDateTime = start, EndDateTime = start.AddMinutes(durationInMinutes) }); start = start.AddDays(1); } } else if (info.EverySpecifiedWorkingDate > 0) { slots.Add(new Slot() { StartDateTime = start, EndDateTime = start.AddMinutes(durationInMinutes) }); start = start.AddDays(info.EverySpecifiedWorkingDate); while (start.Date <= end.Date) { slots.Add(new Slot() { StartDateTime = start, EndDateTime = start.AddMinutes(durationInMinutes) }); start = start.AddDays(info.EverySpecifiedWorkingDate); } } } input.BookingSlots = slots; Task <HttpResponseMessage> response = client.PostAsJsonAsync(apiURL + "FetchBookings", input); response.Wait(); if (response.Result.StatusCode == System.Net.HttpStatusCode.OK) { var roomsJsonString = response.Result.Content.ReadAsStringAsync().Result; var availableRooms = JsonConvert.DeserializeObject <IList <CalendarOutput> >(roomsJsonString); Session["newfloor"] = availableRooms; if (availableRooms.Any(i => i.IsAvailable == false) && availableRooms.Any(x => x.RoomName != null)) { output.Errors.Add("Time slot is already booked for " + info.StartDate + ", please select another time slot."); return(Json(output, JsonRequestBehavior.AllowGet)); } else if (availableRooms.Any(i => i.IsAvailable == false) && availableRooms.Any(x => x.RoomName == null)) { output.Errors.Add("No any room is available for (" + input.Capacity + ") no of attendees."); return(Json(output, JsonRequestBehavior.AllowGet)); } else { return(Json(availableRooms, JsonRequestBehavior.AllowGet)); } } } return(Json(null, JsonRequestBehavior.AllowGet)); }
public JsonResult FetchAvailability(RecurrenceInfo info) { using (var client = new HttpClient()) { string apiURL = ConfigurationManager.AppSettings["APIRefenenceURL"]; CalendarInput input = new CalendarInput(); FetchRoomsRtesponse fetchRoomsRtesponse = new FetchRoomsRtesponse(); if (Convert.ToString(Session["UserName"]) == string.Empty || Convert.ToString(Session["Password"]) == string.Empty) { fetchRoomsRtesponse.NeedToLogout = true; } input.Capacity = info.Capacity; input.FloorID = info.FloorID; input.UserId = (string)Session["UserName"]; input.Password = (string)Session["Password"]; int durationInMinutes = 0; if (!string.IsNullOrEmpty(info.Duration)) { durationInMinutes = int.Parse(info.Duration.Split(Convert.ToChar(":"))[0]) * 60 + int.Parse(info.Duration.Split(Convert.ToChar(":"))[1]); } if (durationInMinutes <= 0) { fetchRoomsRtesponse.Errors.Add("Duration can not be zero"); } List <Slot> slots = new List <Slot>(); DateTime start = DateTime.MinValue; DateTime startOriginal = DateTime.MinValue; DateTime end = DateTime.MinValue; if (DateTime.TryParse(info.StartDate + " " + info.StartTime, out start) && DateTime.TryParse(info.EndtDate, out end)) { startOriginal = start; switch (info.RecurrenceType) { #region For Daily case 1: // For Daily { if (info.IsEveryDay || info.IsEveryDayWorking) { while (start.Date <= end.Date) { if (info.IsEveryDayWorking && (start.DayOfWeek == DayOfWeek.Saturday || start.DayOfWeek == DayOfWeek.Sunday)) { start = start.AddDays(1); continue; } if (start > DateTime.Now) { slots.Add(new Slot() { StartDateTime = start, EndDateTime = start.AddMinutes(durationInMinutes) }); } start = start.AddDays(1); } } else if (info.EverySpecifiedWorkingDate > 0) { if (start > DateTime.Now) { slots.Add(new Slot() { StartDateTime = start, EndDateTime = start.AddMinutes(durationInMinutes) }); } start = start.AddDays(info.EverySpecifiedWorkingDate); while (start.Date <= end.Date) { slots.Add(new Slot() { StartDateTime = start, EndDateTime = start.AddMinutes(durationInMinutes) }); start = start.AddDays(info.EverySpecifiedWorkingDate); } } } break; #endregion For Daily #region For Weekly case 2: // For Weekly { do { if ( (info.IsSaturday && start.DayOfWeek == DayOfWeek.Saturday) || (info.IsSunday && start.DayOfWeek == DayOfWeek.Sunday) || (info.IsMonday && start.DayOfWeek == DayOfWeek.Monday) || (info.IsTuesday && start.DayOfWeek == DayOfWeek.Tuesday) || (info.IsWednesday && start.DayOfWeek == DayOfWeek.Wednesday) || (info.IsThursday && start.DayOfWeek == DayOfWeek.Thursday) || (info.IsFriday && start.DayOfWeek == DayOfWeek.Friday) ) { slots.Add(new Slot() { StartDateTime = start, EndDateTime = start.AddMinutes(durationInMinutes) }); } start = start.AddDays(1); }while (start.Date <= end.Date); } break; #endregion For Weekly #region For Monthly case 3: // For Monthly { DateTime startDateAsPerCriteria = new DateTime(start.Year, start.Month, 1, start.Hour, start.Minute, start.Second); start = startDateAsPerCriteria; if (info.DayVise) { #region For Monthly Day wise start = start.AddDays(info.Nthday - 1); while (start.Date <= end.Date) { if (start > startOriginal.Date && startDateAsPerCriteria <= end.Date) { slots.Add(new Slot() { StartDateTime = start, EndDateTime = start.AddMinutes(durationInMinutes) }); } start = start.AddMonths(info.DayMonth); } #endregion For Monthly Day wise } else if (info.DayTypeVise) { #region For Monthly Day Type wise List <string> weekAllDays = new List <string>() { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" }; if (info.DayTypeMonth == "Day") { #region For Monthly Day Type wise -Day do { if (info.NthMonthDay == "First") { startDateAsPerCriteria = startDateAsPerCriteria.AddDays(0); } else if (info.NthMonthDay == "Second") { startDateAsPerCriteria = startDateAsPerCriteria.AddDays(1); } else if (info.NthMonthDay == "Third") { startDateAsPerCriteria = startDateAsPerCriteria.AddDays(2); } else if (info.NthMonthDay == "Fourth") { startDateAsPerCriteria = startDateAsPerCriteria.AddDays(3); } else if (info.NthMonthDay == "Last") { startDateAsPerCriteria = startDateAsPerCriteria.AddMonths(1).AddDays(-1); } if (startDateAsPerCriteria > startOriginal.Date && startDateAsPerCriteria <= end.Date) { slots.Add(new Slot() { StartDateTime = startDateAsPerCriteria, EndDateTime = startDateAsPerCriteria.AddMinutes(durationInMinutes) }); } startDateAsPerCriteria = startDateAsPerCriteria.AddMonths(info.MonthNumber); startDateAsPerCriteria = new DateTime(startDateAsPerCriteria.Year, startDateAsPerCriteria.Month, 1, startDateAsPerCriteria.Hour, startDateAsPerCriteria.Minute, startDateAsPerCriteria.Second); }while (startDateAsPerCriteria <= end.Date); #endregion For Monthly Day Type wise -Day } else if (info.DayTypeMonth == "WeekDay") { #region For Monthly Day Type wise -Weekday do { if (info.NthMonthDay == "First") { startDateAsPerCriteria = GetNextWeekDays(startDateAsPerCriteria); } else if (info.NthMonthDay == "Second") { startDateAsPerCriteria = GetNextWeekDays(startDateAsPerCriteria); for (int i = 0; i < 1; i++) { startDateAsPerCriteria = startDateAsPerCriteria.AddDays(1); startDateAsPerCriteria = GetNextWeekDays(startDateAsPerCriteria); } } else if (info.NthMonthDay == "Third") { startDateAsPerCriteria = GetNextWeekDays(startDateAsPerCriteria); for (int i = 0; i < 2; i++) { startDateAsPerCriteria = startDateAsPerCriteria.AddDays(1); startDateAsPerCriteria = GetNextWeekDays(startDateAsPerCriteria); } } else if (info.NthMonthDay == "Fourth") { startDateAsPerCriteria = GetNextWeekDays(startDateAsPerCriteria); for (int i = 0; i < 3; i++) { startDateAsPerCriteria = startDateAsPerCriteria.AddDays(1); startDateAsPerCriteria = GetNextWeekDays(startDateAsPerCriteria); } } else if (info.NthMonthDay == "Last") { startDateAsPerCriteria = startDateAsPerCriteria.AddMonths(1).AddDays(-1); while ((startDateAsPerCriteria.DayOfWeek == DayOfWeek.Saturday) || (startDateAsPerCriteria.DayOfWeek == DayOfWeek.Sunday)) { startDateAsPerCriteria = startDateAsPerCriteria.AddDays(-1); } } if (startDateAsPerCriteria > startOriginal.Date && startDateAsPerCriteria <= end.Date) { slots.Add(new Slot() { StartDateTime = startDateAsPerCriteria, EndDateTime = startDateAsPerCriteria.AddMinutes(durationInMinutes) }); } startDateAsPerCriteria = startDateAsPerCriteria.AddMonths(info.MonthNumber); startDateAsPerCriteria = new DateTime(startDateAsPerCriteria.Year, startDateAsPerCriteria.Month, 1, startDateAsPerCriteria.Hour, startDateAsPerCriteria.Minute, startDateAsPerCriteria.Second); }while (startDateAsPerCriteria <= end.Date); #endregion For Monthly Day Type wise -Weekday } if (info.DayTypeMonth == "Weekend") { #region For Monthly Day Type wise -Weekend do { if (info.NthMonthDay == "First") { startDateAsPerCriteria = GetNextWeekendDate(startDateAsPerCriteria); } else if (info.NthMonthDay == "Second") { startDateAsPerCriteria = GetNextWeekendDate(startDateAsPerCriteria); for (int i = 0; i < 1; i++) { startDateAsPerCriteria = startDateAsPerCriteria.AddDays(1); startDateAsPerCriteria = GetNextWeekendDate(startDateAsPerCriteria); } } else if (info.NthMonthDay == "Third") { startDateAsPerCriteria = GetNextWeekendDate(startDateAsPerCriteria); for (int i = 0; i < 2; i++) { startDateAsPerCriteria = startDateAsPerCriteria.AddDays(1); startDateAsPerCriteria = GetNextWeekendDate(startDateAsPerCriteria); } } else if (info.NthMonthDay == "Fourth") { startDateAsPerCriteria = GetNextWeekendDate(startDateAsPerCriteria); for (int i = 0; i < 3; i++) { startDateAsPerCriteria = startDateAsPerCriteria.AddDays(1); startDateAsPerCriteria = GetNextWeekendDate(startDateAsPerCriteria); } } else if (info.NthMonthDay == "Last") { startDateAsPerCriteria = startDateAsPerCriteria.AddMonths(1).AddDays(-1); while (!((startDateAsPerCriteria.DayOfWeek == DayOfWeek.Saturday) || (startDateAsPerCriteria.DayOfWeek == DayOfWeek.Sunday))) { startDateAsPerCriteria = startDateAsPerCriteria.AddDays(-1); } } if (startDateAsPerCriteria > startOriginal.Date && startDateAsPerCriteria <= end.Date) { slots.Add(new Slot() { StartDateTime = startDateAsPerCriteria, EndDateTime = startDateAsPerCriteria.AddMinutes(durationInMinutes) }); } startDateAsPerCriteria = startDateAsPerCriteria.AddMonths(info.MonthNumber); startDateAsPerCriteria = new DateTime(startDateAsPerCriteria.Year, startDateAsPerCriteria.Month, 1, startDateAsPerCriteria.Hour, startDateAsPerCriteria.Minute, startDateAsPerCriteria.Second); }while (startDateAsPerCriteria <= end.Date); #endregion For Monthly Day Type wise -Weekend } else if (weekAllDays.Contains(info.DayTypeMonth)) { #region For Monthly Day Type wise -SpecificDay do { if (info.NthMonthDay == "First") { startDateAsPerCriteria = startDateAsPerCriteria.AddDays(0); } else if (info.NthMonthDay == "Second") { startDateAsPerCriteria = startDateAsPerCriteria.AddDays(7); } else if (info.NthMonthDay == "Third") { startDateAsPerCriteria = startDateAsPerCriteria.AddDays(14); } else if (info.NthMonthDay == "Fourth") { startDateAsPerCriteria = startDateAsPerCriteria.AddDays(21); } else if (info.NthMonthDay == "Last") { startDateAsPerCriteria = startDateAsPerCriteria.AddMonths(1).AddDays(-8); } for (int i = 0; i < 7; i++) { if ( (startDateAsPerCriteria.DayOfWeek == DayOfWeek.Sunday && info.DayTypeMonth == "Sunday") || (startDateAsPerCriteria.DayOfWeek == DayOfWeek.Monday && info.DayTypeMonth == "Monday") || (startDateAsPerCriteria.DayOfWeek == DayOfWeek.Tuesday && info.DayTypeMonth == "Tuesday") || (startDateAsPerCriteria.DayOfWeek == DayOfWeek.Wednesday && info.DayTypeMonth == "Wednesday") || (startDateAsPerCriteria.DayOfWeek == DayOfWeek.Thursday && info.DayTypeMonth == "Thursday") || (startDateAsPerCriteria.DayOfWeek == DayOfWeek.Friday && info.DayTypeMonth == "Friday") || (startDateAsPerCriteria.DayOfWeek == DayOfWeek.Saturday && info.DayTypeMonth == "Saturday") ) { break; } startDateAsPerCriteria = startDateAsPerCriteria.AddDays(1); } if (startDateAsPerCriteria > startOriginal.Date && startDateAsPerCriteria <= end.Date) { slots.Add(new Slot() { StartDateTime = startDateAsPerCriteria, EndDateTime = startDateAsPerCriteria.AddMinutes(durationInMinutes) }); } startDateAsPerCriteria = startDateAsPerCriteria.AddMonths(info.MonthNumber); startDateAsPerCriteria = new DateTime(startDateAsPerCriteria.Year, startDateAsPerCriteria.Month, 1, startDateAsPerCriteria.Hour, startDateAsPerCriteria.Minute, startDateAsPerCriteria.Second); }while (startDateAsPerCriteria <= end.Date); #endregion For Monthly Day Type wise -SpecificDay } #endregion For Monthly Day Type wise } } break; #endregion For Monthly case 4: // For Custom { foreach (var item in info.AppointmentDates) { if (DateTime.TryParse(item + " " + info.StartTime, out start)) { if (start > DateTime.Now) { slots.Add(new Slot() { StartDateTime = start, EndDateTime = start.AddMinutes(durationInMinutes) }); } } else { fetchRoomsRtesponse.Errors.Add("Date is not proper."); } } } break; default: break; } } else { fetchRoomsRtesponse.Errors.Add("Start date, end date must be proper."); } if (DateTime.Parse(info.StartDate) > DateTime.Parse(info.EndtDate)) { fetchRoomsRtesponse.Errors.Add("Start date must be less then or equal to end date."); } input.BookingSlots = slots; if (slots.Count == 0) { fetchRoomsRtesponse.Errors.Add("No slots to book room."); } if (fetchRoomsRtesponse.Errors.Count > 0 || fetchRoomsRtesponse.NeedToLogout) { return(Json(fetchRoomsRtesponse, JsonRequestBehavior.AllowGet)); } Task <HttpResponseMessage> response = client.PostAsJsonAsync(apiURL + "FetchBookings", input); response.Wait(); if (response.Result.StatusCode == System.Net.HttpStatusCode.OK) { var roomsJsonString = response.Result.Content.ReadAsStringAsync().Result; fetchRoomsRtesponse.AvailableRooms = JsonConvert.DeserializeObject <System.Collections.Generic.IList <CalendarOutput> >(roomsJsonString); Session["floors"] = fetchRoomsRtesponse.AvailableRooms; return(Json(fetchRoomsRtesponse, JsonRequestBehavior.AllowGet)); } } return(Json(null, JsonRequestBehavior.AllowGet)); }
public IList <CalendarOutput> GetRoomsAvailabilityByCalendateInput(string connKey, CalendarInput input) { IList <CalendarOutput> calendarOutputList = new List <CalendarOutput>(); SqlConnection connection = new SqlConnection(SqlHelper.GetDBConnectionString(connKey)); try { IList <Room> lstRooms = GetRoomsByFloorID(connKey, input.FloorID); IList <Room> lstPriorityRooms = lstRooms.Where(t => (t.Capacity >= input.Capacity)).OrderBy(t => t.Capacity).ToList(); string commonMessage = string.Empty; ExchangeService service = GetExchangeService(input.UserId, input.Password); if (service == null) { commonMessage = "Service is not initialized. Please check credentails."; } if (lstPriorityRooms.Count <= 0) { commonMessage = "Room is not available for matching capacity"; } foreach (Slot slot in input.BookingSlots) { CalendarOutput calendarOutput = new CalendarOutput(); calendarOutput.BookingSlot = slot; if (commonMessage != string.Empty) { calendarOutput.Messages.Add(commonMessage); } calendarOutputList.Add(calendarOutput); } if (service != null) { DateTime startDate = input.BookingSlots.OrderBy(t => t.StartDateTime).FirstOrDefault().StartDateTime.Date; DateTime endtDate = input.BookingSlots.OrderByDescending(t => t.StartDateTime).FirstOrDefault().StartDateTime.Date.AddDays(1); Dictionary <string, FindItemsResults <Appointment> > fapts = null; FillAllRoomsAvailability(service, lstPriorityRooms.ToList(), startDate, endtDate, ref fapts); GetRoomAvailabilityRecursivly(calendarOutputList, lstPriorityRooms, service, 0, startDate, endtDate, fapts); } } finally { if (connection.State != ConnectionState.Closed) { connection.Close(); } } return(calendarOutputList); }
public void OpenCalendar() { ArrivalCity.Click(); CalendarInput.Click(); }