Esempio n. 1
0
        public Project CreateProject(User owner, string projectName, string description, DateTime deadline, Role role)
        {
            Project project = new Project(
                projectName,
                description,
                deadline);

            ProjectUserReq req = new ProjectUserReq(
                "Automatic assignement",
                owner,
                role,
                project,
                true);

            req.Sender = owner;

            project.AddUserToProject(req);

            return(project);
        }
        public CreateResponse <ProjectUserRequestDTO> Create(Guid id, CreateProjectUserReqRequest req)
        {
            var res = new CreateResponse <ProjectUserRequestDTO>();

            var role = _roleRepository.FindById(req.RoleId);

            if (role == null)
            {
                return((CreateResponse <ProjectUserRequestDTO>)
                       res.ReturnErrorResponseWith("Role not found."));
            }

            var project = _projectRepository.FindById(req.ProjectId);

            if (project == null)
            {
                return((CreateResponse <ProjectUserRequestDTO>)
                       res.ReturnErrorResponseWith("Project not found."));
            }

            var sender = _userRepository.FindById(id);

            if (sender == null)
            {
                return((CreateResponse <ProjectUserRequestDTO>)
                       res.ReturnErrorResponseWith("Invalid sender."));
            }

            var userAssigned = _userRepository.FindById(req.UserAssignedId);

            if (userAssigned == null)
            {
                return((CreateResponse <ProjectUserRequestDTO>)
                       res.ReturnErrorResponseWith("Assigned user not found."));
            }

            var projectManagers = project.ProjectUsersReq
                                  .Where(pur => pur.Accepted == true && pur.Role.RoleName == "PROJECT_MANAGER").ToList();

            if (projectManagers.Find(pur => pur.UserAssigned.Id == id) == null)
            {
                return((CreateResponse <ProjectUserRequestDTO>)
                       res.ReturnErrorResponseWith("User must be project manager to send requests."));
            }

            if (project.ProjectUsersReq.ToList().Find(pur => pur.UserAssigned.Id == req.UserAssignedId) != null)
            {
                return((CreateResponse <ProjectUserRequestDTO>)
                       res.ReturnErrorResponseWith("User has alredy received an invitation."));
            }

            var projectUserReq = new ProjectUserReq()
            {
                Id           = Guid.NewGuid(),
                Message      = req.Message,
                UserAssigned = userAssigned,
                Sender       = sender,
                Role         = role,
                Project      = project,
                Accepted     = false,
                RequestSent  = DateTime.Now
            };

            projectUserReq.Validate();

            if (projectUserReq.GetBrokenRules().Count > 0)
            {
                return((CreateResponse <ProjectUserRequestDTO>)
                       res.ReturnErrorResponseWithMultiple(projectUserReq.GetBrokenRules()));
            }

            _projectUserReqRepository.Save(projectUserReq);

            try
            {
                _uow.Commit();
            }
            catch (Exception ex)
            {
                return((CreateResponse <ProjectUserRequestDTO>)
                       res.ReturnErrorResponseWith(ex.Message));
            }

            res.Success = true;
            return(res);
        }