public async Task <ActionResult <PersonViewModel> > GetPersonAsync(Guid id) { if (id == Guid.Empty) { return(BadRequest("No valid id.")); } try { TaskResult <User> userResult; TaskResult <Person> personResult; string oid = IdentityHelper.GetOid(HttpContext.User.Identity as ClaimsIdentity); bool userIsBoardmember = UserHasRole(UserRole.Boardmember, (ClaimsIdentity)HttpContext.User.Identity); //check if user != boardmember || != Committeemember bool userIsCommitteemember = UserHasRole(UserRole.Committeemember, (ClaimsIdentity)HttpContext.User.Identity); if (id.ToString() == oid || userIsBoardmember || userIsCommitteemember) { userResult = await personService.GetUserAsync(id); personResult = await personService.GetPersonAsync(id); } else { return(Unauthorized()); } if (!userResult.Succeeded) { return(UnprocessableEntity(new ErrorViewModel { Type = Type.Error, Message = userResult.Message })); } if (!personResult.Succeeded) { return(UnprocessableEntity(new ErrorViewModel { Type = Type.Error, Message = personResult.Message })); } if (userResult.Data == null || personResult.Data == null) { return(NotFound()); } PersonViewModel personVm = PersonViewModel.CreateVmFromUserAndPerson(userResult.Data, personResult.Data, Extensions.GetInstance(b2CExtentionApplicationId)); if (!userIsBoardmember && !userIsCommitteemember) { personVm.StaffRemark = null; } return(Ok(personVm)); } catch (Exception ex) { string message = GetType().Name + "Error in " + nameof(GetPersonAsync); logger.LogError(ex, message); return(UnprocessableEntity(new ErrorViewModel { Type = Type.Error, Message = message })); } }
public async Task <ActionResult <PersonViewModel> > RemoveManagerAsync(Guid projectId, Guid userId) { if (projectId == Guid.Empty || userId == Guid.Empty) { BadRequest("No valid Ids received."); } try { User user = (await personService.GetUserAsync(userId)).Data; if (user == null) { return(BadRequest("Could not find user")); } Manager manager = (await personService.GetManagerAsync(projectId, userId)).Data; if (manager == null) { return(BadRequest("User is not a manager of this project")); } PersonViewModel viewModel = PersonViewModel.CreateVmFromUserAndPerson(user, manager.Person, Extensions.GetInstance(b2CExtentionApplicationId)); if (viewModel == null) { return(BadRequest("Unable to create manager")); } manager.Person = null; manager.Project = null; TaskResult <Manager> result = await personService.RemoveManagerAsync(manager); TaskResult <List <Manager> > userManagesOtherProjects = await personService.UserManagesOtherProjectsAsync(manager.PersonId); if (userManagesOtherProjects?.Data != null && userManagesOtherProjects.Data.Count == 0) { if (viewModel.UserRole != "Boardmember") { await ModAdminAsync(userId, 4); //remove user as a manager in B2C} } } if (!result.Succeeded) { return(UnprocessableEntity(new ErrorViewModel { Type = Type.Error, Message = result.Message })); } return(Ok(PersonViewModel.CreateVmFromPerson(manager.Person))); } catch (Exception ex) { string message = GetType().Name + "Error in " + nameof(RemoveManagerAsync); logger.LogError(ex, message); return(UnprocessableEntity(new ErrorViewModel { Type = Type.Error, Message = message })); } }
public async Task <ActionResult <PersonViewModel> > MakeManagerAsync(Guid projectId, Guid userId) { if (projectId == Guid.Empty || userId == Guid.Empty) { BadRequest("No valid Ids received."); } try { Project project = (await projectService.GetProjectDetailsAsync(projectId)).Data; if (project == null) { return(BadRequest("Could not find project")); } User user = (await personService.GetUserAsync(userId)).Data; if (user == null) { return(BadRequest("Could not find user")); } Person person = (await personService.GetPersonAsync(userId)).Data; if (person == null) { return(BadRequest("Could not find person in DB")); } Manager manager = (await personService.GetManagerAsync(projectId, userId)).Data; if (manager != null) { return(BadRequest("User already manages this project")); } PersonViewModel viewModel = PersonViewModel.CreateVmFromUserAndPerson(user, person, Extensions.GetInstance(b2CExtentionApplicationId)); if (viewModel == null) { return(BadRequest("Unable to create manager")); } string oid = IdentityHelper.GetOid(HttpContext.User.Identity as ClaimsIdentity); manager = new Manager { ProjectId = project.Id, Project = project, PersonId = person.Id, Person = person, LastEditBy = oid }; TaskResult <Manager> result = await personService.MakeManagerAsync(manager); if (viewModel.UserRole != "Boardmember") { await ModAdminAsync(userId, 2); //make user a manager in B2C } if (!result.Succeeded) { return(UnprocessableEntity(new ErrorViewModel { Type = Type.Error, Message = result.Message })); } return(Ok(PersonViewModel.CreateVmFromUser(user, Extensions.GetInstance(b2CExtentionApplicationId)))); } catch (Exception ex) { string message = GetType().Name + "Error in " + nameof(MakeManagerAsync); logger.LogError(ex, message); return(UnprocessableEntity(new ErrorViewModel { Type = Type.Error, Message = message })); } }