private List <ReportClientView> CreateFilters(Member memberImpersonated, List <Client> clients, int managerRoleId, List <Member> members, int memberRoleId)
        {
            var reportClientView = new List <ReportClientView>();

            foreach (var client in clients)
            {
                var reportProjectViewByUserId = new List <ReportProjectView>();

                foreach (var project in client.Projects)
                {
                    var reportProjectView = new ReportProjectView
                    {
                        ProjectId       = project.Id,
                        ProjectName     = project.Name,
                        RoleId          = project.MemberProjectRoles.FirstOrDefault(r => r.MemberId == memberImpersonated.Id)?.RoleId ?? 0,
                        IsProjectActive = project.IsActive,
                    };

                    #region Set all users at Project constrain only for: Admin, Manager at this project.

                    var isManagerOnProject = project.MemberProjectRoles.Exists(r => r.MemberId == memberImpersonated.Id && r.RoleId == managerRoleId);

                    if (memberImpersonated.User.IsAdmin || isManagerOnProject)
                    {
                        var usersDetailsView = project.MemberProjectRoles.Select(x => x.Member.GetViewReportUsers(x.RoleId, Mapper)).ToList();

                        // Add members, that is not assigned to this project directly.
                        if (!project.IsPrivate)
                        {
                            var notAssignedMembersAtProjView = members.Where(x => project.MemberProjectRoles.Select(y => y.MemberId).All(mi => x.Id != mi)).Select(u => u.GetViewReportUsers(memberRoleId, Mapper));
                            usersDetailsView.AddRange(notAssignedMembersAtProjView);
                        }

                        // Set all users of the project.
                        reportProjectView.UsersDetails = usersDetailsView;
                    }

                    #endregion

                    reportProjectView.IsUserManagerOnProject = isManagerOnProject;
                    reportProjectViewByUserId.Add(reportProjectView);
                }

                var reportClientViewlocal = new ReportClientView
                {
                    ClientId        = client.Id,
                    ClientName      = client.Name,
                    IsClientActive  = client.IsActive,
                    ProjectsDetails = reportProjectViewByUserId
                };

                reportClientView.Add(reportClientViewlocal);
            }

            return(reportClientView);
        }
예제 #2
0
        private ReportsDropDownValues CreateDropDownValues(Member member)
        {
            var managerRoleId = Uow.ProjectRoleRepository.GetManagerRoleId();
            var memberRoleId  = Uow.ProjectRoleRepository.GetMemberRoleId();

            var projectsOfClients           = new List <Project>();
            var clientsFromProjectOfClients = new List <Client>();
            var members = Uow.MemberRepository.LinkedCacheGetList();

            #region GetProjects allProjectsForAdmin or projectsWithAssignUsersAndPublicProjects.

            if (member.User.IsAdmin)
            {
                var allProjectsForAdmin = Uow.ProjectRepository.LinkedCacheGetList().ToList();
                projectsOfClients = allProjectsForAdmin;
            }
            else
            {
                var projectsWithAssignUsersAndPublicProjects = Uow.ProjectRepository.LinkedCacheGetList()
                                                               .Where(x => x.MemberProjectRoles.Select(z => z.MemberId).Contains(member.Id) || !x.IsPrivate).ToList();

                projectsOfClients.AddRange(projectsWithAssignUsersAndPublicProjects);
            }

            #endregion

            #region Get Clients from Projects of clients.

            // 1. Get all clients from targeted projects where project is assign to client.
            var clientsWithProjects = projectsOfClients.Where(x => x.Client != null).Select(x => x.Client).Distinct().ToList();

            foreach (var client in clientsWithProjects)
            {
                client.Projects = client.Projects.Where(proj => projectsOfClients.Select(pc => pc.Id).Contains(proj.Id)).ToList();
            }

            clientsFromProjectOfClients.AddRange(clientsWithProjects);

            // 2. Get all projects where project is not assign to client and create client "WithoutClients" that we add projects to it.
            var hasClientsWithoutProjects = projectsOfClients.Where(x => x.Client == null).Any();
            if (hasClientsWithoutProjects)
            {
                var clientWithoutProjects = new Client
                {
                    Id       = Constants.WithoutClient.Id,
                    Name     = Constants.WithoutClient.Name,
                    IsActive = true,
                    Projects = projectsOfClients.Where(x => x.Client == null).ToList()
                };

                clientsFromProjectOfClients.Add(clientWithoutProjects);
            }

            #endregion

            var reportClientView = new List <ReportClientView>();

            foreach (var client in clientsFromProjectOfClients)
            {
                var reportProjectViewByUserId = new List <ReportProjectView>();

                foreach (var project in client.Projects)
                {
                    var reportProjectView = new ReportProjectView
                    {
                        ProjectId       = project.Id,
                        ProjectName     = project.Name,
                        RoleId          = project.MemberProjectRoles.FirstOrDefault(r => r.MemberId == member.Id)?.RoleId ?? 0,
                        IsProjectActive = project.IsActive,
                    };

                    #region Set all users at Project constrain only for: Admin, Manager at this project.

                    var isManagerOnProject = project.MemberProjectRoles.Exists(r => r.MemberId == member.Id && r.RoleId == managerRoleId);

                    if (member.User.IsAdmin || isManagerOnProject)
                    {
                        var usersDetailsView = project.MemberProjectRoles.Select(x => x.Member.GetViewReportUsers(x.RoleId, Mapper)).ToList();

                        // Add members, that is not assigned to this project directly.
                        if (!project.IsPrivate)
                        {
                            var notAssignedMembersAtProjView = members.Where(x => project.MemberProjectRoles.Select(y => y.MemberId).All(mi => x.Id != mi)).Select(u => u.GetViewReportUsers(memberRoleId, Mapper));
                            usersDetailsView.AddRange(notAssignedMembersAtProjView);
                        }

                        // Set all users of the project.
                        reportProjectView.UsersDetails = usersDetailsView;
                    }

                    #endregion

                    reportProjectView.IsUserManagerOnProject = isManagerOnProject;
                    reportProjectViewByUserId.Add(reportProjectView);
                }

                var reportClientViewlocal = new ReportClientView
                {
                    ClientId        = client.Id,
                    ClientName      = client.Name,
                    IsClientActive  = client.IsActive,
                    ProjectsDetails = reportProjectViewByUserId
                };

                reportClientView.Add(reportClientViewlocal);
            }

            var userDetails = new ReportsUserDetails
            {
                CurrentUserFullName  = member.FullName,
                CurrentUserId        = member.Id,
                IsAdminCurrentUser   = member.User.IsAdmin,
                IsManagerCurrentUser = member.User.IsManager,
            };

            var valuesCustomQueries = new List <ReportsSettingsView>();

            var customQueries = Uow.ReportsSettingsRepository.GetEntitiesFromContex_ByMemberid(member.Id).Where(x => x.QueryName != null);
            foreach (var customReportSettings in customQueries)
            {
                valuesCustomQueries.Add(CreateReportsSettingsEntity(customReportSettings));
            }

            var dropDownValues = new ReportsDropDownValues
            {
                Filters       = reportClientView,
                GroupBy       = _dropDownGroupBy,
                ShowColumns   = ReportsExportService.showColumnsInfo,
                UserDetails   = userDetails,
                CustomQueries = valuesCustomQueries.OrderBy(x => x.QueryName).ToList()
            };

            return(dropDownValues);
        }
예제 #3
0
        public ReportDropDownView GetReportsDropDowns(string userName)
        {
            var managerRoleId     = Uow.ProjectRoleRepository.GetManagerRoleId();
            var memberRoleId      = Uow.ProjectRoleRepository.GetMemberRoleId();
            var currentUserByName = Uow.MemberRepository.LinkedCacheGetByName(userName);

            var reportClientViewByUserId = new List <ReportClientView>();

            var projectsOfClients           = new List <Project>();
            var clientsFromProjectOfClients = new List <Client>();
            var members = Uow.MemberRepository.LinkedCacheGetList();

            #region GetProjects allProjectsForAdmin or projectsWithAssignUsersAndPublicProjects.

            if (currentUserByName.User.IsAdmin)
            {
                var allProjectsForAdmin = Uow.ProjectRepository.LinkedCacheGetList().ToList();
                projectsOfClients = allProjectsForAdmin;
            }
            else
            {
                var projectsWithAssignUsersAndPublicProjects = Uow.ProjectRepository.LinkedCacheGetList()
                                                               .Where(x => x.MemberProjectRoles.Select(z => z.MemberId).Contains(currentUserByName.Id) || !x.IsPrivate).ToList();

                projectsOfClients.AddRange(projectsWithAssignUsersAndPublicProjects);
            }

            #endregion

            #region Get Clients from Projects of clients.

            // 1. Get all clients from targeted projects where project is assign to client.
            var clientsWithProjects = projectsOfClients.Where(x => x.Client != null).Select(x => x.Client).Distinct().ToList();

            foreach (var client in clientsWithProjects)
            {
                client.Projects = client.Projects.Where(proj => projectsOfClients.Select(pc => pc.Id).Contains(proj.Id)).ToList();
            }

            clientsFromProjectOfClients.AddRange(clientsWithProjects);

            // 2. Get all projects where project is not assign to client and create client "WithoutClients" that we add projects to it.
            var hasClientsWithoutProjects = projectsOfClients.Where(x => x.Client == null).Any();
            if (hasClientsWithoutProjects)
            {
                var clientWithoutProjects = new Client
                {
                    Id       = Constants.WithoutClient.Id,
                    Name     = Constants.WithoutClient.Name,
                    IsActive = true,
                    Projects = projectsOfClients.Where(x => x.Client == null).ToList()
                };

                clientsFromProjectOfClients.Add(clientWithoutProjects);
            }

            #endregion

            var reportClientView = new List <ReportClientView>();

            foreach (var client in clientsFromProjectOfClients)
            {
                var reportProjectViewByUserId = new List <ReportProjectView>();

                foreach (var project in client.Projects)
                {
                    var reportProjectView = new ReportProjectView
                    {
                        ProjectId       = project.Id,
                        ProjectName     = project.Name,
                        RoleId          = project.MemberProjectRoles.FirstOrDefault(r => r.MemberId == currentUserByName.Id)?.RoleId ?? 0,
                        IsProjectActive = project.IsActive,
                    };

                    #region Set all users at Project constrain only for: Admin, Manager at this project.

                    var isManagerOnProject = project.MemberProjectRoles.Exists(r => r.MemberId == currentUserByName.Id && r.RoleId == managerRoleId);

                    if (currentUserByName.User.IsAdmin || isManagerOnProject)
                    {
                        var usersDetailsView = project.MemberProjectRoles.Select(x => x.Member.GetViewReportUsers(x.RoleId, Mapper)).ToList();

                        // Add members, that is not assigned to this project directly.
                        if (!project.IsPrivate)
                        {
                            var notAssignedMembersAtProjView = members.Where(x => project.MemberProjectRoles.Select(y => y.MemberId).All(mi => x.Id != mi)).Select(u => u.GetViewReportUsers(memberRoleId, Mapper));
                            usersDetailsView.AddRange(notAssignedMembersAtProjView);
                        }

                        // Set all users of the project.
                        reportProjectView.UsersDetails = usersDetailsView;
                    }

                    #endregion

                    reportProjectView.IsUserManagerOnProject = isManagerOnProject;
                    reportProjectViewByUserId.Add(reportProjectView);
                }

                var reportClientViewlocal = new ReportClientView
                {
                    ClientId        = client.Id,
                    ClientName      = client.Name,
                    IsClientActive  = client.IsActive,
                    ProjectsDetails = reportProjectViewByUserId
                };

                reportClientView.Add(reportClientViewlocal);
            }

            reportClientViewByUserId = reportClientView;

            // Create responce with all projecs and all users of thise projects and info about current user.
            var reportsDetail = new ReportDropDownView
            {
                CurrentUserFullName  = currentUserByName.FullName,
                CurrentUserId        = currentUserByName.Id,
                IsAdminCurrentUser   = currentUserByName.User.IsAdmin,
                IsManagerCurrentUser = currentUserByName.User.IsManager,
                ClientsDetails       = reportClientViewByUserId
            };

            return(reportsDetail);
        }