예제 #1
0
        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
                }));
            }
        }
예제 #2
0
        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
                }));
            }
        }
예제 #3
0
        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
                }));
            }
        }