public static bool CheckAccessRight(SchedulerPage page, IClient currentUser)
        {
            var pageName = Path.GetFileName(page.AppRelativeVirtualPath).ToLower();

            if (pageName.StartsWith("admin"))
            {
                // Only administrator can see the admin related pages
                return(currentUser.HasPriv(ClientPrivilege.Administrator));
            }
            else
            {
                switch (pageName)
                {
                case "resourcedocs.aspx":
                case "resourceconfig.aspx":
                case "resourcemaintenance.aspx":
                    var resourceId = page.ContextBase.Request.SelectedPath().ResourceID;
                    if (resourceId > 0)
                    {
                        ClientAuthLevel authLevel = CacheManager.Current.GetAuthLevel(resourceId, currentUser);
                        // So far, only Tool Engineer can see the 3 pages
                        return((authLevel & ClientAuthLevel.ToolEngineer) > 0);
                    }
                    break;

                default:
                    return(true);
                }
            }

            return(false);
        }
Example #2
0
 public static string[] SelectEmailsByAuth(int resourceId, ClientAuthLevel auth)
 {
     return(ServiceProvider.Current.Scheduler.Resource
            .GetResourceClients(resourceId, authLevel: auth)
            .Where(x => !x.IsEveryone())
            .Select(x => x.Email)
            .ToArray());
 }
Example #3
0
 public static IEnumerable <string> AuthLevelText(ClientAuthLevel level)
 {
     foreach (Enum value in Enum.GetValues(typeof(ClientAuthLevel)))
     {
         if (level.HasFlag(value))
         {
             yield return(Enum.GetName(typeof(ClientAuthLevel), value));
         }
     }
 }
Example #4
0
        private bool CanCreateNewReservation(HttpContextBase context)
        {
            var currentView = context.GetCurrentViewType();

            // copied from the old EmptyCell_Click event handler in ReservationView.ascx.vb

            if (currentView == ViewType.UserView)
            {
                return(false);
            }

            DateTime date = context.Request.SelectedDate();
            TimeSpan time = GetReservationTime(context);

            // Check for past reservation date times
            if (date.Add(time) < DateTime.Now)
            {
                throw new Exception("You cannot create reservations in the past.");
            }

            // Check if user has accounts
            if (GetCurrentUserActiveClientAccountsCount(context) == 0)
            {
                throw new Exception("You do not have any accounts with which to make reservations.");
            }

            // The reservation fence cannot truly be checked until the activity type is selected
            // however, authorized users are always impacted by it/

            var       pathInfo    = context.Request.SelectedPath();
            IResource res         = Provider.Scheduler.Resource.GetResource(pathInfo.ResourceID);
            IClient   currentUser = context.CurrentUser(Provider);

            ClientAuthLevel authLevel = CacheManager.Current.GetAuthLevel(res.ResourceID, currentUser);

            if (authLevel < ClientAuthLevel.SuperUser)
            {
                if (DateTime.Now.AddMinutes(res.ReservFence) < date)
                {
                    throw new Exception("You are trying to make a reservation that is too far in the future.");
                }
            }

            if (currentView == ViewType.DayView || currentView == ViewType.WeekView)
            {
                context.SetWeekStartDate(GetWeekStartDate(context));
            }

            return(true);
        }
        public static IEnumerable <IActivity> AuthorizedActivities(this ICache c, ClientAuthLevel authLevel)
        {
            //procActivitySelect @Action = 'SelectAuthorizedActivities'

            //SELECT ActivityID, ActivityName, ListOrder, Chargeable, Editable, AccountType, UserAuth, InviteeType, InviteeAuth,
            //    StartEndAuth, NoReservFenceAuth, NoMaxSchedAuth, [Description], IsActive, IsFacilityDownTime
            //FROM Activity
            //WHERE UserAuth &@UserAuth > 0
            //    AND Editable = 1 AND IsActive = 1
            //    AND IsFacilityDownTime = 0--This keeps the Facility Down Time activity out of the select when making reservations. Staff should use the link at the top of the page instead.
            //ORDER BY ListOrder

            var result = c.Activities().Where(x => x.IsActive && (x.UserAuth & authLevel) > 0 && x.Editable && !x.IsFacilityDownTime).OrderBy(x => x.ListOrder).ToList();

            return(result);
        }
Example #6
0
 public ReservationStateArgs(int reservationId, bool inlab, bool isReserver, bool isInvited, bool isAuthorized, bool isRepair, bool isFacilityDownTime, int minCancelTime, int minReservTime, DateTime beginDateTime, DateTime endDateTime, DateTime?actualBeginDateTime, DateTime?actualEndDateTime, ClientAuthLevel userAuth)
 {
     ReservationID       = reservationId;
     IsInLab             = inlab;
     IsReserver          = isReserver;
     IsInvited           = isInvited;
     IsAuthorized        = isAuthorized;
     IsRepair            = isRepair;
     IsFacilityDownTime  = isFacilityDownTime;
     MinCancelTime       = minCancelTime;
     MinReservTime       = minReservTime;
     BeginDateTime       = beginDateTime;
     EndDateTime         = endDateTime;
     ActualBeginDateTime = actualBeginDateTime;
     ActualEndDateTime   = actualEndDateTime;
     UserAuth            = userAuth;
 }
Example #7
0
        protected virtual IList <TabItem> GetTabs()
        {
            ClientAuthLevel authLevel = CacheManager.Current.GetAuthLevel(PathInfo.Parse(SelectedPath).ResourceID, CurrentUser);

            bool authorized = (authLevel & ClientAuthLevel.ToolEngineer) > 0;

            List <TabItem> tabs = new List <TabItem>
            {
                new TabItem()
                {
                    CssClass = GetTabCssClass(0), NavigateUrl = VirtualPathUtility.ToAbsolute(string.Format("~/ResourceDayWeek.aspx?TabIndex=0&Path={0}&Date={1:yyyy-MM-dd}", SelectedPath, ContextBase.Request.SelectedDate())), Text = "Day", Visible = true
                },
                new TabItem()
                {
                    CssClass = GetTabCssClass(1), NavigateUrl = VirtualPathUtility.ToAbsolute(string.Format("~/ResourceDayWeek.aspx?TabIndex=1&Path={0}&Date={1:yyyy-MM-dd}", SelectedPath, ContextBase.Request.SelectedDate())), Text = "Week", Visible = true
                },
                new TabItem()
                {
                    CssClass = GetTabCssClass(2), NavigateUrl = VirtualPathUtility.ToAbsolute(string.Format("~/ResourceClients.aspx?Path={0}&Date={1:yyyy-MM-dd}", SelectedPath, ContextBase.Request.SelectedDate())), Text = "Clients", Visible = true
                },
                new TabItem()
                {
                    CssClass = GetTabCssClass(3), NavigateUrl = VirtualPathUtility.ToAbsolute(string.Format("~/ResourceContact.aspx?Path={0}&Date={1:yyyy-MM-dd}", SelectedPath, ContextBase.Request.SelectedDate())), Text = "Helpdesk", Visible = true
                },
                new TabItem()
                {
                    CssClass = GetTabCssClass(4), NavigateUrl = VirtualPathUtility.ToAbsolute(string.Format("~/ResourceConfig.aspx?Path={0}&Date={1:yyyy-MM-dd}", SelectedPath, ContextBase.Request.SelectedDate())), Text = "Configuration", Visible = authorized
                },
                new TabItem()
                {
                    CssClass = GetTabCssClass(5), NavigateUrl = VirtualPathUtility.ToAbsolute(string.Format("~/ResourceMaintenance.aspx?Path={0}&Date={1:yyyy-MM-dd}", SelectedPath, ContextBase.Request.SelectedDate())), Text = "Repair", Visible = authorized
                },
                new TabItem()
                {
                    CssClass = GetTabCssClass(6), NavigateUrl = VirtualPathUtility.ToAbsolute(string.Format("~/ResourceDocs.aspx?Path={0}&Date={1:yyyy-MM-dd}", SelectedPath, ContextBase.Request.SelectedDate())), Text = "Docs", Visible = authorized
                }
            };

            return(tabs);
        }
Example #8
0
        protected override void Load()
        {
            ID                 = Item.ResourceID;
            Name               = Resources.CleanResourceName(Item.ResourceName);
            Description        = Item.ResourceDescription;
            IsSchedulable      = Item.IsSchedulable;
            State              = Item.State;
            StateNotes         = Item.StateNotes;
            RepairEndDateTime  = null;
            RepairNotes        = string.Empty;
            AuthLevel          = Item.AuthLevel;
            EveryoneAuthLevel  = Item.EveryoneAuthLevel;
            EffectiveAuthLevel = Item.EffectiveAuthLevel;

            if (State == ResourceState.Online && !IsSchedulable)
            {
                RepairInProgress repair = Reservations.GetRepairInProgress(Item);
                if (repair != null)
                {
                    RepairEndDateTime = repair.EndDateTime;
                    RepairNotes       = repair.Notes;
                }
            }
        }
Example #9
0
        private void Fill(ClientAuthLevel authLevel)
        {
            if ((authLevel & ClientAuthLevel.ToolEngineer) > 0)
            {
                FillToolEngineers();
            }

            if ((authLevel & ClientAuthLevel.Trainer) > 0)
            {
                FillTrainers();
            }

            if ((authLevel & ClientAuthLevel.SuperUser) > 0)
            {
                FillSuperUsers();
            }

            if ((authLevel & ClientAuthLevel.AuthorizedUser) > 0)
            {
                FillAuthorizedUsers();
            }

            FillEmailList();
        }
Example #10
0
 public IEnumerable <IResourceClient> GetActiveResourceClients(int resourceId = 0, int clientId = 0, ClientAuthLevel authLevel = 0)
 {
     throw new NotImplementedException();
 }
Example #11
0
 public static bool HasAuth(ClientAuthLevel auth1, ClientAuthLevel auth2) => (auth1 & auth2) > 0;
Example #12
0
 public static IEnumerable <IResourceClient> SelectByResource(int resourceId, ClientAuthLevel authLevel)
 {
     return(ServiceProvider.Current.Scheduler.Resource
            .GetResourceClients(resourceId, authLevel: authLevel)
            .Where(x => x.ClientActive).ToList());
 }
Example #13
0
        public static IQueryable <ResourceClientInfo> SelectResourceClients(this ISession session, int resourceId = 0, int clientId = 0, ClientAuthLevel authLevel = 0)
        {
            var query = session.Query <ResourceClientInfo>();

            if (resourceId > 0)
            {
                query = query.Where(x => x.ResourceID == resourceId);
            }

            if (clientId > 0)
            {
                query = query.Where(x => x.ClientID == clientId || x.ClientID == -1);
            }

            if (authLevel > 0)
            {
                query = query.Where(x => (x.AuthLevel & authLevel) > 0);
            }

            return(query);
        }
Example #14
0
 public bool HasAuth(ClientAuthLevel auths) => LNF.Scheduler.ResourceClients.HasAuth(AuthLevel, auths);
Example #15
0
        protected void SubmitButton_Command(object sender, CommandEventArgs e)
        {
            ShowErrorMessage(string.Empty);

            try
            {
                int             clientId;
                var             selectedAuthLevel = GetSelectedAuthLevel();
                var             resourceId        = GetCurrentResource().ResourceID;
                ClientAuthLevel refreshAuthLevel  = selectedAuthLevel;

                if (e.CommandName == "Authorize")
                {
                    clientId = int.Parse(ClientsDropDownList.SelectedValue);
                    var rc = new ResourceClient()
                    {
                        ResourceID             = resourceId,
                        ClientID               = clientId,
                        AuthLevel              = selectedAuthLevel,
                        Expiration             = null,
                        EmailNotify            = null,
                        PracticeResEmailNotify = null
                    };

                    SetExpiration(rc);

                    DataSession.Insert(rc);
                    ClearResourceClientsCache();

                    var lname    = string.Empty;
                    var fname    = string.Empty;
                    var splitter = ClientsDropDownList.SelectedItem.Text.Split(',');

                    if (splitter.Length > 0)
                    {
                        lname = splitter[0].Trim();
                    }

                    if (splitter.Length > 1)
                    {
                        fname = splitter[1].Trim();
                    }

                    CurrentClients.Add(new ResourceClientItem()
                    {
                        ResourceClientID = rc.ResourceClientID,
                        ClientID         = clientId,
                        AuthLevel        = selectedAuthLevel,
                        LName            = lname,
                        FName            = fname,
                        Expiration       = rc.Expiration,
                        ContactUrl       = GetContactUrl(clientId),
                        AuthDuration     = GetCurrentResource().AuthDuration,
                        Email            = GetEmailAddress(clientId)
                    });
                }
                else if (e.CommandName == "Modify")
                {
                    clientId = int.Parse(ClientIdHiddenField.Value);
                    var cc = CurrentClients.FirstOrDefault(x => x.ClientID == clientId);
                    if (cc != null)
                    {
                        refreshAuthLevel |= cc.AuthLevel;

                        var rc = DataSession.Single <ResourceClient>(cc.ResourceClientID);
                        rc.AuthLevel = selectedAuthLevel;
                        SetExpiration(rc);

                        DataSession.SaveOrUpdate(rc);
                        ClearResourceClientsCache();

                        cc.AuthLevel  = selectedAuthLevel;
                        cc.Expiration = rc.Expiration;

                        CancelEdit();
                    }
                }

                Fill(refreshAuthLevel);
                FillClients();
            }
            catch (Exception ex)
            {
                ShowErrorMessage(ex.Message);
            }
        }
Example #16
0
 private void SetHyperLinkNavigateUrl(HyperLink hyp, ClientAuthLevel authLevel)
 {
     hyp.NavigateUrl = $"~/Contact.aspx?Privs={(int)authLevel}&Path={ContextBase.Request.SelectedPath()}&Date={ContextBase.Request.SelectedDate():yyyy-MM-dd}";
 }
        public ReservationState GetReservationCell(CustomTableCell rsvCell, IReservationItem rsv, ReservationClient client, IEnumerable <IReservationProcessInfo> reservationProcessInfos, IEnumerable <IReservationInviteeItem> invitees, LocationPathInfo locationPath, ViewType view, DateTime now)
        {
            int reservationId = rsv.ReservationID;
            int resourceId    = rsv.ResourceID;

            // Reservation State
            var args  = ReservationStateArgs.Create(rsv, client, now);
            var state = ReservationStateUtility.Create(now).GetReservationState(args);

            // Tooltip Caption and Text
            string caption = Reservations.GetReservationCaption(state);
            string toolTip = Reservations.Create(Provider, now).GetReservationToolTip(rsv, state, reservationProcessInfos, invitees);

            rsvCell.Attributes["data-tooltip"] = toolTip;
            rsvCell.Attributes["data-caption"] = caption;

            // Remove the create reservation link if it was added.
            if (rsvCell.Controls.Count > 0)
            {
                rsvCell.Controls.Clear();
            }

            // BackGround color and cursor - set by CSS
            rsvCell.CssClass = state.ToString();

            var div = new HtmlGenericControl("div");

            div.Attributes.Add("class", "reservation-container");

            var cellText = rsv.DisplayName;

            if (rsv.RecurrenceID.GetValueOrDefault(-1) > 0)
            {
                cellText += " [R]";
            }

            // Reservation Text
            Literal litReserver = new Literal
            {
                Text = $"<div class=\"cell-text\">{cellText}</div>"
            };

            div.Controls.Add(litReserver);

            // Delete Button
            // 2/11/05 - GPR: allow tool engineers to cancel any non-started, non-repair reservation in the future
            ClientAuthLevel userAuth = args.UserAuth;

            PathInfo path = PathInfo.Create(rsv.BuildingID, rsv.LabID, rsv.ProcessTechID, rsv.ResourceID);
            string   navurl;

            //if (state == ReservationState.Editable || state == ReservationState.StartOrDelete || state == ReservationState.StartOnly || (userAuth == ClientAuthLevel.ToolEngineer && DateTime.Now < rsv.BeginDateTime && rsv.ActualBeginDateTime == null && state != ReservationState.Repair))
            // [2020-09-18 jg] StartOnly should not allow delete and NotInLab should allow delete
            if (CanDeleteReservation(state, args, now))
            {
                navurl = UrlUtility.GetDeleteReservationUrl(rsv.ReservationID, rsvCell.CellDate, state, view);
                var hypDelete = new HyperLink
                {
                    NavigateUrl = NavigateUrl(navurl, path, locationPath),
                    ImageUrl    = "~/images/deleteGrid.gif",
                    CssClass    = "ReservDelete"
                };

                hypDelete.Attributes["data-tooltip"] = "Click to cancel reservation";
                hypDelete.Attributes["data-caption"] = "Cancel this reservation";

                div.Controls.Add(hypDelete);

                rsvCell.HorizontalAlign = HorizontalAlign.Left;
                rsvCell.VerticalAlign   = VerticalAlign.Top;
            }

            // 2011/04/03 Modify button
            // [2020-09-18 jg] StartOnly should not allow modification (also NotInLab should not allow modification)
            //if (state == ReservationState.Editable || state == ReservationState.StartOrDelete || state == ReservationState.StartOnly)
            if (CanModifyReservation(state, args, now))
            {
                navurl = UrlUtility.GetModifyReservationUrl(rsv.ReservationID, rsvCell.CellDate, state, view);
                var hypModify = new HyperLink
                {
                    NavigateUrl = NavigateUrl(navurl, path, locationPath),
                    ImageUrl    = "~/images/edit.png",
                    CssClass    = "ReservModify"
                };

                hypModify.Attributes["data-tooltip"] = "Click to modify reservation";
                hypModify.Attributes["data-caption"] = "Modify this reservation";

                div.Controls.Add(hypModify);

                rsvCell.HorizontalAlign = HorizontalAlign.Left;
                rsvCell.VerticalAlign   = VerticalAlign.Top;
            }

            rsvCell.Controls.Add(div);

            return(state);
        }
Example #18
0
        public IResourceActivityAuth AddResourceActivityAuth(int resourceId, int activityId, ClientAuthLevel userAuth, ClientAuthLevel inviteeAuth, ClientAuthLevel startEndAuth, ClientAuthLevel noReservFenceAuth, ClientAuthLevel noMaxSchedAuth)
        {
            var rauth = new ResourceActivityAuth
            {
                ResourceID        = resourceId,
                ActivityID        = activityId,
                UserAuth          = userAuth,
                InviteeAuth       = inviteeAuth,
                StartEndAuth      = startEndAuth,
                NoReservFenceAuth = noReservFenceAuth,
                NoMaxSchedAuth    = noMaxSchedAuth
            };

            Session.Save(rauth);

            return(rauth);
        }
Example #19
0
 public IEnumerable <IResourceClient> GetActiveResourceClients(int resourceId = 0, int clientId = 0, ClientAuthLevel authLevel = 0)
 {
     return(Session.SelectResourceClients(resourceId, clientId, authLevel)
            .Where(x => x.Expiration == null || x.Expiration.Value > DateTime.Now)
            .ToList());
 }
Example #20
0
 public IEnumerable <IResourceClient> GetResourceClients(int resourceId = 0, int clientId = 0, ClientAuthLevel authLevel = 0)
 {
     return(Session.SelectResourceClients(resourceId, clientId, authLevel).ToList());
 }
Example #21
0
 public virtual bool HasAuth(ClientAuthLevel auths) => ResourceClients.HasAuth(AuthLevel, auths);
Example #22
0
 public IResourceActivityAuth AddResourceActivityAuth(int resourceId, int activityId, ClientAuthLevel userAuth, ClientAuthLevel inviteeAuth, ClientAuthLevel startEndAuth, ClientAuthLevel noReservFenceAuth, ClientAuthLevel noMaxSchedAuth)
 {
     throw new NotImplementedException();
 }