public ReservationModel(SchedulerContextHelper helper, DateTime now) { Helper = helper; Now = now; int reservationId = helper.GetReservationID(); if (reservationId > 0) { IReservationItem rsv = helper.Provider.Scheduler.Reservation.GetReservation(reservationId); var res = helper.Provider.Scheduler.Resource.GetResource(rsv.ResourceID); Reservation = rsv; ActivityID = rsv.ActivityID; AccountID = rsv.AccountID; RecurrenceID = rsv.RecurrenceID; Notes = rsv.Notes; AutoEnd = rsv.ReservationAutoEnd; KeepAlive = rsv.KeepAlive; Resource = res; } if (Resource == null) { var resourceId = helper.Context.Request.SelectedPath().ResourceID; Resource = helper.Provider.Scheduler.Resource.GetResource(resourceId); } }
protected TreeViewNode(SchedulerContextHelper helper, SchedulerResourceTreeView view, T item) { Helper = helper; Item = item; View = view; Parent = null; }
public void CanConfirmYes() { var qs = new NameValueCollection { ["Path"] = "4-1-18-40061", ["Date"] = "2019-03-25" }; using (var test = new SchedulerContextManager(username: "******", queryString: qs)) { DateTime now = DateTime.Parse("2019-03-25 13:00"); var helper = new SchedulerContextHelper(test.ContextBase, ServiceProvider.Current); ReservationModel model = new ReservationModel(helper, now) { ActivityID = 6, //ddlActivity.SelectedValue AccountID = 67, //ddlAccount.SelectedValue AutoEnd = false, //chkAutoEnd.Checked KeepAlive = true, //chkKeepAlive.Checked Notes = string.Empty, //txtNotes.Text ReservationProcessInfoJson = string.Empty, //hidProcessInfoData.Value DurationText = string.Empty, //txtDuration.Text DurationSelectedValue = "60", //ddlDuration.SelectedValue StartTimeHourSelectedValue = "20", //ddlStartTimeHour.SelectedValue StartTimeMinuteSelectedValue = "0" //dlStartTimeMin.SelectedValue }; var rsv = model.CreateOrModifyReservation(); Assert.IsNull(test.ContextBase.Session["ErrorMessage"]); Assert.AreEqual("/sselscheduler/ResourceDayWeek.aspx?Path=4-1-18-40061&Date=2019-03-25", test.ContextBase.Response.RedirectLocation); } }
public static StartReservationItem CreateStartReservationItem(HttpContextBase context, IProvider provider, IReservationItem rsv) { var now = DateTime.Now; var item = new StartReservationItem { ReservationID = rsv.ReservationID, ResourceID = rsv.ResourceID, ResourceName = rsv.ResourceName, ReservedByClientID = rsv.ClientID, ReservedByClientName = string.Format("{0} {1}", rsv.FName, rsv.LName) }; var currentUser = context.CurrentUser(provider); if (rsv.ClientIDBegin.HasValue) { if (rsv.ClientIDBegin.Value > 0) { IClient startedBy = provider.Data.Client.GetClient(rsv.ClientIDBegin.Value); item.StartedByClientID = startedBy.ClientID; item.StartedByClientName = string.Format("{0} {1}", startedBy.FName, startedBy.LName); } else { item.StartedByClientID = 0; item.StartedByClientName = string.Empty; } } else { item.StartedByClientID = currentUser.ClientID; item.StartedByClientName = string.Format("{0} {1}", currentUser.FName, currentUser.LName); } var reservationItem = provider.Scheduler.Reservation.GetReservationWithInvitees(rsv.ReservationID); var helper = new SchedulerContextHelper(context, provider); var args = ReservationStateArgs.Create(reservationItem, helper.GetReservationClient(reservationItem), now); var stateUtil = ReservationStateUtility.Create(now); ReservationState state = stateUtil.GetReservationState(args); item.Startable = stateUtil.IsStartable(state); item.NotStartableMessage = GetNotStartableMessage(state); var inst = ActionInstances.Find(ActionType.Interlock, rsv.ResourceID); item.HasInterlock = inst != null; var res = provider.Scheduler.Resource.GetResource(rsv.ResourceID); item.ReturnUrl = GetResourceUrl(context, res); return(item); }
public void Initialize() { _requestMock = new Mock <HttpRequestBase>(); _requestMock.Setup(x => x.UserHostAddress).Returns("141.213.6.57"); _contextMock = new Mock <HttpContextBase>(); _contextMock.Setup(x => x.Request).Returns(_requestMock.Object); _contextMock.Setup(x => x.Items).Returns(_items); Context = _contextMock.Object; ContainerContextFactory.Current.NewThreadScopedContext(); var containerContext = ContainerContextFactory.Current.GetContext(); Container = containerContext.Container; var config = new ThreadStaticContainerConfiguration(containerContext); config.RegisterAllTypes(); ServiceProvider.Setup(Provider); Helper = new SchedulerContextHelper(Context, Provider); }
public static object Start(HttpContextBase context, IProvider provider, int reservationId, int clientId) { try { var helper = new SchedulerContextHelper(context, provider); var util = Reservations.Create(provider, DateTime.Now); var rsv = provider.Scheduler.Reservation.GetReservationWithInvitees(reservationId); var client = provider.Data.Client.GetClient(clientId); if (rsv != null) { util.Start(rsv, helper.GetReservationClient(rsv, client), context.CurrentUser(provider).ClientID); return(new { Error = false, Message = "OK" }); } else { return(new { Error = true, Message = $"Cannot find record for ReservationID {reservationId}" }); } } catch (Exception ex) { return(new { Error = true, ex.Message }); } }
public LocationLabNode(SchedulerContextHelper helper, SchedulerResourceTreeView view, LocationTreeItemCollection locationTree, ILab item) : base(helper, view, item) { _locationTree = locationTree ?? throw new ArgumentNullException("locationTree"); Load(); }
public void ProcessRequest(HttpContext context) { HttpContextBase ctx = new HttpContextWrapper(context); SchedulerContextHelper helper = GetContextHelper(ctx); string command = GetCommand(ctx); ViewType currentView = GetView(ctx); ctx.SetCurrentViewType(currentView); IClient currentUser = helper.CurrentUser(); string redirectUrl; var util = SchedulerUtility.Create(Provider); helper.AppendLog($"ReservationController.ProcessRequest: url = {ctx.Request.Url}"); try { ctx.Session.Remove("ErrorMessage"); if (command == "ReservationAction") { redirectUrl = GetReservationAction(ctx); } else { IReservationItem rsv; IResource res; switch (command) { case "ChangeHourRange": string range = ctx.Request.QueryString["Range"]; helper.AppendLog($"ReservationController.ProcessRequest: range = {range}"); if (range == "FullDay") { ctx.SetDisplayDefaultHours(false); } else { ctx.SetDisplayDefaultHours(true); } redirectUrl = util.GetReservationViewReturnUrl(currentView); break; case "NewReservation": var canCreate = CanCreateNewReservation(ctx); helper.AppendLog($"ReservationController.ProcessRequest: canCreate = {canCreate}"); if (canCreate) { redirectUrl = SchedulerUtility.GetReservationReturnUrl(ctx.Request.SelectedPath(), ctx.Request.SelectedLocationPath(), 0, ctx.Request.SelectedDate(), GetReservationTime(ctx), currentView); } else { redirectUrl = util.GetReservationViewReturnUrl(currentView); } break; case "ModifyReservation": rsv = helper.GetReservationWithInvitees(); res = helper.GetResourceTreeItemCollection().GetResource(rsv.ResourceID); var currentDate = ctx.Request.SelectedDate(); var currentTime = GetReservationTime(ctx); redirectUrl = SchedulerUtility.GetReservationReturnUrl(PathInfo.Create(res), ctx.Request.SelectedLocationPath(), rsv.ReservationID, currentDate, currentTime, currentView); break; case "DeleteReservation": rsv = helper.GetReservationWithInvitees(); Reservations.Create(Provider, DateTime.Now).Delete(rsv, currentUser.ClientID); redirectUrl = util.GetReservationViewReturnUrl(currentView); break; default: throw new NotImplementedException($"Command not implemented: {command}"); } } } catch (Exception ex) { string errmsg = ex.Message; ctx.Session["ErrorMessage"] = errmsg; helper.AppendLog($"ReservationController.ProcessRequest: errmsg = {errmsg}"); try { redirectUrl = util.GetReservationViewReturnUrl(currentView); } catch { redirectUrl = string.Empty; } } if (string.IsNullOrEmpty(redirectUrl)) { redirectUrl = "~"; } helper.AppendLog($"ReservationController.ProcessRequest: redirectUrl = {redirectUrl}"); ctx.Response.Redirect(redirectUrl); }
public string GetReservationAction(HttpContextBase context) { SchedulerContextHelper helper = GetContextHelper(context); context.Session.Remove("ActiveReservationMessage"); context.Session.Remove("ShowStartConfirmationDialog"); var now = DateTime.Now; var util = Reservations.Create(Provider, now); var requestedState = GetReservationState(context); var rsv = helper.GetReservation(); var res = helper.GetResource(rsv.ResourceID); var client = helper.GetReservationClient(rsv); var args = ReservationStateArgs.Create(rsv, client, now); var state = ReservationStateUtility.Create(now).GetReservationState(args); var currentView = GetView(context); var currentUser = context.CurrentUser(Provider); bool confirm = false; int reservationId = 0; helper.AppendLog($"ReservationController.GetReservationAction: reservationId = {rsv.ReservationID}, requestedState = {requestedState}, state = {state}, currentView = {currentView}"); switch (requestedState) { case ReservationState.StartOnly: case ReservationState.StartOrDelete: // If there are previous unended reservations, then ask for confirmation var endable = Provider.Scheduler.Reservation.SelectEndableReservations(rsv.ResourceID); if (endable.Count() > 0) { var endableReservations = string.Join(",", endable.Select(x => x.ReservationID)); context.Session["ActiveReservationMessage"] = $"[Previous ReservationID: {endableReservations}, Current ReservationID: {rsv.ReservationID}]"; confirm = true; reservationId = rsv.ReservationID; } else { util.Start(rsv, helper.GetReservationClient(rsv), currentUser.ClientID); } break; case ReservationState.Endable: // End reservation if (state == ReservationState.Endable) { util.End(rsv, DateTime.Now, currentUser.ClientID); } else { string actualBeginDateTime = rsv.ActualBeginDateTime.HasValue ? rsv.ActualBeginDateTime.Value.ToString("yyyy-MM-dd HH:mm:ss") : "null"; throw new InvalidOperationException($"ReservationID {rsv.ReservationID} state is {state}, not Endable. ActualBeginDateTime: {actualBeginDateTime}"); } break; case ReservationState.PastSelf: if (currentView == ViewType.DayView || currentView == ViewType.WeekView) { context.SetWeekStartDate(rsv.BeginDateTime.Date); } return(SchedulerUtility.GetReturnUrl("ReservationRunNotes.aspx", PathInfo.Create(res), context.Request.SelectedLocationPath(), rsv.ReservationID, context.Request.SelectedDate())); case ReservationState.Other: case ReservationState.Invited: case ReservationState.PastOther: return(SchedulerUtility.GetReturnUrl("Contact.aspx", PathInfo.Create(res), context.Request.SelectedLocationPath(), rsv.ReservationID, context.Request.SelectedDate())); default: // invalid state detected! // throw new NotImplementedException($"ReservationState = {state} is not implemented"); context.Session["ErrorMessage"] = $"The current reservation state, {state}, is invalid. No actions are defined for this state. [RequestedState = {requestedState}, ReservationID = {reservationId}]"; var vars = new Dictionary <string, object> { ["current state"] = state, ["requested state"] = requestedState, ["reservationId"] = reservationId, ["tool_engineer"] = args.IsToolEngineer, ["inlab"] = args.IsInLab, ["reserver"] = args.IsReserver, ["invited"] = args.IsInvited, ["authorized"] = args.IsAuthorized, ["before_mct"] = args.IsBeforeMinCancelTime(), ["startable"] = args.IsStartable() }; helper.SendDebugEmail("ReservationController.GetReservationAction", "Invalid state detected!", "Invalid state detected!", vars); return(SchedulerUtility.Create(Provider).GetReservationViewReturnUrl(currentView, false, reservationId)); } string result = SchedulerUtility.Create(Provider).GetReservationViewReturnUrl(currentView, confirm, reservationId); return(result); }
public BuildingNode(SchedulerContextHelper helper, SchedulerResourceTreeView view, IBuilding item) : base(helper, view, item) { Load(); }