Exemple #1
0
        /// <summary>
        /// #16
        /// </summary>
        /// <returns></returns>
        public ActionResult ValidateChildWorkgroups()
        {
            //Example for comparing lists
            //var list1 = new[] {new {id = 1, name = "One"}}.ToList();
            //var list2 = new[] { new { id = 1, name = "One" } }.ToList();

            //list1.Add(new {id = 3, name = "Three"});
            //list1.Add(new { id = 4, name = "Four" });
            //list1.Add(new { id = 5, name = "Five" });

            //list2.Add(new { id = 2, name = "Two" });
            //list2.Add(new {id = 3, name = "Three"});
            //list2.Add(new { id = 4, name = "Four" });

            //var list2IsMissing = list1.Where(a => !list2.Any(b => b.id == a.id)); //5
            //var list1IsMissing = list2.Where(a => !list1.Any(b => b.id == a.id)); //2

            var view = new List <ValidateChildWorkgroupsViewModel>();

            var childWorkGroups = _repositoryFactory.WorkgroupRepository.Queryable.Where(a => a.IsActive && !a.Administrative);

            foreach (var childWorkGroup in childWorkGroups)
            {
                var parentWorkGroupIds = _workgroupService.GetParentWorkgroups(childWorkGroup.Id);
                var parentPermissions  = _repositoryFactory.WorkgroupPermissionRepository.Queryable.Where(a => parentWorkGroupIds.Contains(a.Workgroup.Id)).Select(s => new { s.Id, role = s.Role.Id, user = s.User.Id, parentWorkgroupId = s.Workgroup.Id, s.Workgroup.IsFullFeatured }).ToList();
                var childPermissions   = _repositoryFactory.WorkgroupPermissionRepository.Queryable.Where(a => a.Workgroup == childWorkGroup && a.IsAdmin).Select(s => new { s.Id, role = s.Role.Id, user = s.User.Id, parentWorkgroupId = s.ParentWorkgroup.Id, s.IsFullFeatured }).ToList();

                var missingChildPermissions = parentPermissions.Where(a => !childPermissions.Any(b => b.role == a.role && b.user == a.user && b.parentWorkgroupId == a.parentWorkgroupId && b.IsFullFeatured == a.IsFullFeatured)).ToList();
                var extraChildPermissions   = childPermissions.Where(a => !parentPermissions.Any(b => b.role == a.role && b.user == a.user && b.parentWorkgroupId == a.parentWorkgroupId && b.IsFullFeatured == a.IsFullFeatured)).ToList();

                if (missingChildPermissions.Count > 0 || extraChildPermissions.Count > 0)
                {
                    var temp = new ValidateChildWorkgroupsViewModel();
                    temp.ChildWorkgroup          = childWorkGroup;
                    temp.ExtraChildPermissions   = new List <WorkgroupPermission>();
                    temp.MissingChildPermissions = new List <WorkgroupPermission>();
                    if (missingChildPermissions.Count > 0)
                    {
                        foreach (var missingChildPermission in missingChildPermissions)
                        {
                            temp.MissingChildPermissions.Add(_repositoryFactory.WorkgroupPermissionRepository.Queryable.Single(a => a.Id == missingChildPermission.Id));
                        }
                    }
                    if (extraChildPermissions.Count > 0)
                    {
                        foreach (var extraChildPermission in extraChildPermissions)
                        {
                            temp.ExtraChildPermissions.Add(_repositoryFactory.WorkgroupPermissionRepository.Queryable.Single(a => a.Id == extraChildPermission.Id));
                        }
                    }
                    view.Add(temp);
                }
            }

            return(View(view));
        }