Exemple #1
0
        public static void ReassignAllTasksForUserChangingRoleFromAdmin(ApplicationDbContext db, Guid appUserId)
        {
            List <UserTaskAssignment> list = (from uta in db.UserTaskAssignments
                                              where uta.AppUserId == appUserId
                                              select uta).ToList();

            List <Guid> taskGuidsFromList = (from l in list
                                             select l.UserTaskId).Distinct().ToList();

            //Find current admins for the company
            List <AppUser> admins = AppUserHelpers.GetAdminAppUsersForCompany(db, BranchHelpers.GetBranch(db, AppUserHelpers.GetAppUser(db, appUserId).CurrentBranchId).CompanyId);

            //now match up admins to tasks and if any are missing add them
            foreach (Guid task in taskGuidsFromList)
            {
                foreach (AppUser admin in admins)
                {
                    List <Guid> assignedToTask = (from l in list
                                                  where l.UserTaskId == task
                                                  select l.AppUserId).ToList();

                    Guid result = assignedToTask.Find(x => x == admin.AppUserId);

                    if (result == Guid.Empty)
                    {
                        CopyTaskFromUserAToUserB(db, task, appUserId, admin.AppUserId);
                    }
                }
            }
        }
        public static List <UserActionAssignment> CreateActionAssignmentForGroupMembers(ApplicationDbContext db, Guid userActionId, Group group)
        {
            List <UserActionAssignment> list = new List <UserActionAssignment>();

            //get list of members that are accepted within this group only
            List <GroupMember> groupMembers = (from gm in db.GroupMembers
                                               where gm.Status == GroupMemberStatusEnum.Accepted
                                               select gm).ToList();

            //depdending on type of group will depend on the users we need to find, i.e. branch group = members are branches, therefore only find SuperAdmin, Admin or Manager for that branch to send this to
            foreach (GroupMember member in groupMembers)
            {
                switch (group.Type)
                {
                case LevelEnum.Company:
                    List <AppUser> adminUsers = AppUserHelpers.GetAdminAppUsersForCompany(db, member.ReferenceId);
                    foreach (AppUser adminUser in adminUsers)
                    {
                        UserActionAssignment adminUserAssignment = CreateActionAssignment(db, userActionId, adminUser.AppUserId);
                        list.Add(adminUserAssignment);
                    }
                    break;

                case LevelEnum.Branch:
                    List <AppUser> branchUsers = AppUserHelpers.GetManagerAppUsersForBranch(db, member.ReferenceId);
                    foreach (AppUser branchUser in branchUsers)
                    {
                        UserActionAssignment branchUserAssignment = CreateActionAssignment(db, userActionId, branchUser.AppUserId);
                        list.Add(branchUserAssignment);
                    }
                    //Note, Admin users can also approve these requests so list them in the assignment list also
                    List <AppUser> adminUsersForBranchApproval = AppUserHelpers.GetAdminAppUsersForCompany(db, BranchHelpers.GetBranch(member.ReferenceId).CompanyId);
                    foreach (AppUser adminUser in adminUsersForBranchApproval)
                    {
                        //Don't duplicate user entries
                        if (GetActionAssignmentForActionAndUser(db, userActionId, adminUser.AppUserId) == null)
                        {
                            UserActionAssignment adminUserAssignment = CreateActionAssignment(db, userActionId, adminUser.AppUserId);
                            list.Add(adminUserAssignment);
                        }
                    }
                    break;

                case LevelEnum.User:
                    UserActionAssignment assignment = CreateActionAssignment(db, userActionId, member.ReferenceId);
                    list.Add(assignment);
                    break;
                }
            }

            return(list);
        }
        /// <summary>
        /// Adds all Admin users for the company of the new branch to the new branch
        /// </summary>
        /// <param name="db"></param>
        /// <param name="branchId">new branch id</param>
        public static void CreateBranchAdminUsersForNewBranch(ApplicationDbContext db, Branch branch, UserRoleEnum role)
        {
            List <AppUser> adminAppUsersForCompany = AppUserHelpers.GetAdminAppUsersForCompany(db, branch.CompanyId);

            foreach (AppUser adminUser in adminAppUsersForCompany)
            {
                BranchUser branchUser = BranchUserHelpers.GetBranchUser(db, adminUser.AppUserId, branch.BranchId, branch.CompanyId);

                //Only add if not already there
                if (branchUser == null)
                {
                    BranchUserHelpers.CreateBranchUser(db, adminUser.AppUserId, branch.BranchId, branch.CompanyId, role, EntityStatusEnum.Active);
                }
            }
        }
        /// <summary>
        /// Build the list of assignments for this Action.  At user level there is the one, at Branch level there is the 'Manager' of the branch and the 'Admin' of the company, and at
        ///     Admin level there is the 'Admin' of the company.  There could be multiple for Branch and Admin levels
        /// </summary>
        /// <param name="db"></param>
        /// <param name="level">level of request, User, Branch, Company</param>
        /// <param name="ofReferenceId">id based on level, so AppUserId, BranchId, CompanyId</param>
        /// <param name="byReferenceId">id based on level, so AppUserId, BranchId, CompanyId</param>
        /// <returns></returns>
        public static List <UserActionAssignment> CreateUserAssignmentForAction(ApplicationDbContext db, Guid userActionId, LevelEnum level, Guid ofReferenceId, Guid byReferenceId)
        {
            List <UserActionAssignment> list = new List <UserActionAssignment>();

            switch (level)
            {
            case LevelEnum.Company:
                List <AppUser> adminUsers = AppUserHelpers.GetAdminAppUsersForCompany(db, ofReferenceId);
                foreach (AppUser adminUser in adminUsers)
                {
                    UserActionAssignment adminUserAssignment = CreateActionAssignment(db, userActionId, adminUser.AppUserId);
                    list.Add(adminUserAssignment);
                }
                break;

            case LevelEnum.Branch:
                List <AppUser> branchUsers = AppUserHelpers.GetManagerAppUsersForBranch(db, ofReferenceId);
                foreach (AppUser branchUser in branchUsers)
                {
                    UserActionAssignment branchUserAssignment = CreateActionAssignment(db, userActionId, branchUser.AppUserId);
                    list.Add(branchUserAssignment);
                }
                //Note, Admin users can also approve these requests so list them in the assignment list also
                List <AppUser> adminUsersForBranchApproval = AppUserHelpers.GetAdminAppUsersForCompany(db, BranchHelpers.GetBranch(ofReferenceId).CompanyId);
                foreach (AppUser adminUser in adminUsersForBranchApproval)
                {
                    //Don't duplicate user entries
                    if (GetActionAssignmentForActionAndUser(db, userActionId, adminUser.AppUserId) == null)
                    {
                        UserActionAssignment adminUserAssignment = CreateActionAssignment(db, userActionId, adminUser.AppUserId);
                        list.Add(adminUserAssignment);
                    }
                }
                break;

            case LevelEnum.User:
                UserActionAssignment assignment = CreateActionAssignment(db, userActionId, ofReferenceId);
                list.Add(assignment);
                break;
            }

            return(list);
        }