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); }
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); }
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); }