示例#1
0
        public IActionResult ShowEditProject(int projectId)
        {
            var           project           = projectRepository.GetProject(projectId);
            var           projectDevelopers = project.ProjectsDevelopers.Select(x => x.Developer).ToList();
            var           developers        = developerRepository.GetDevelopers();
            var           teamLeaders       = teamLeaderRepository.GetTeamLeaders();
            List <string> Ids = new List <string>();

            foreach (var developer in project.ProjectsDevelopers)
            {
                developers.Remove(developer.Developer);
            }
            foreach (var developer in project.ProjectsDevelopers)
            {
                Ids.Add(developer.DeveloperID);
            }
            ViewBag.unselectedDevelopers = developers;
            ViewBag.selectedDevelopers   = projectDevelopers;
            teamLeaders.Remove(project.TeamLeader);
            ViewBag.unselectedLeaders = teamLeaders;
            var projectDto = new EditProjectDto()
            {
                ID               = project.ID,
                ProjectTitle     = project.ProjectTitle,
                Description      = project.Description,
                Status           = project.Status,
                TeamLeader       = project.TeamLeader,
                TeamLeaderID     = project.TeamLeaderID,
                ProjectManagerID = project.ProjectManagerID,
                developersIds    = Ids
            };

            return(View("Edit", projectDto));
        }
        public void Add_ShouldReturnProjectDto()
        {
            // Arrange
            var mock = new Mock <IProjectRepository>();

            mock.Setup(x => x.Add(It.IsAny <Project>()));
            mock.Setup(x => x.Save()).Returns(true);

            var service        = new ProjectService(mock.Object, _mapper);
            var editProjectDto = new EditProjectDto
            {
                Code       = "FGDGDF",
                Name       = "Project test name",
                StartDate  = new DateTime(2019, 5, 10),
                FinishDate = new DateTime(2019, 5, 20)
            };

            // Act
            var projectDto = service.Add(editProjectDto);

            // Assert
            Assert.AreEqual("FGDGDF", projectDto.Code);
            Assert.AreEqual("Project test name", projectDto.Name);
            Assert.AreEqual(new DateTime(2019, 5, 10), projectDto.StartDate);
            Assert.AreEqual(new DateTime(2019, 5, 20), projectDto.FinishDate);
        }
        public void Update_ShouldThrowExceptionIfUpdateWasNotSucceed()
        {
            // Arrange
            var mock = new Mock <IProjectRepository>();

            mock.Setup(x => x.Update(It.IsAny <Project>()));
            mock.Setup(x => x.Save()).Returns(false);
            mock.Setup(x => x.Get(5)).Returns(new Project
            {
                Id         = 5,
                Code       = "JHGGGGG",
                Name       = "Old project name",
                State      = ProjectState.Completed,
                ParentId   = 2,
                StartDate  = new DateTime(2019, 2, 10),
                FinishDate = new DateTime(2019, 2, 20)
            });

            var service        = new ProjectService(mock.Object, _mapper);
            var editProjectDto = new EditProjectDto
            {
                Code       = "FGDGDF",
                Name       = "Project test name",
                StartDate  = new DateTime(2019, 5, 10),
                FinishDate = new DateTime(2019, 5, 20)
            };

            // Assert
            Assert.Throws <PmsException>(() => service.Update(5, editProjectDto));
        }
        public void EditProject(EditProjectDto editProject)
        {
            var project = db.Projects.Where(x => x.Id == editProject.Id).SingleOrDefault();

            project.Title        = editProject.Title;
            project.Description  = editProject.Description;
            project.TeamleaderId = editProject.TeamLeaderId;

            db.SaveChanges();

            //***********Developer***********
            var dev = db.ProjectDevelopers.Where(x => x.ProjectId == editProject.Id).ToList();

            db.SaveChanges();
            foreach (var item in dev)
            {
                db.ProjectDevelopers.Remove(item);
            }
            db.SaveChanges();
            foreach (var item in editProject.DeveloperIds)
            {
                db.ProjectDevelopers.Add(new ProjectDeveloper {
                    ProjectId = editProject.Id, DeveloperId = item
                });
            }
            db.SaveChanges();
        }
示例#5
0
        private async Task UpdateProjectWallModeratorAsync(EditProjectDto dto, Project project)
        {
            if (project.Wall.Moderators.Any())
            {
                var currentModeratorId = project.Wall.Moderators.First().UserId;

                if (currentModeratorId == dto.OwningUserId)
                {
                    return;
                }

                if (!dto.MembersIds.Contains(currentModeratorId))
                {
                    await _wallService.RemoveMemberFromWallAsync(currentModeratorId, project.WallId);
                }

                await _wallService.RemoveModeratorAsync(project.WallId, project.Wall.Moderators.First().UserId, dto);

                await _wallService.AddModeratorAsync(project.WallId, dto.OwningUserId, dto);
            }
            else
            {
                await _wallService.AddModeratorAsync(project.WallId, dto.OwningUserId, dto);
            }
        }
示例#6
0
        public void EditProject(EditProjectDto projectDto)
        {
            var project = GetProject(projectDto.ID);

            project.ProjectTitle     = projectDto.ProjectTitle;
            project.Description      = projectDto.Description;
            project.TeamLeaderID     = projectDto.TeamLeaderID;
            project.ProjectManagerID = projectDto.ProjectManagerID;
            foreach (var projectDeveloper in project.ProjectsDevelopers)
            {
                context.ProjectsDevelopers.Remove(projectDeveloper);
            }
            context.SaveChanges();
            foreach (var developerId in projectDto.developersIds)
            {
                context.ProjectsDevelopers.Add(new ProjectsDevelopers()
                {
                    DeveloperID = developerId,
                    ProjectID   = project.ID
                });
            }
            context.SaveChanges();
            context.Projects.Update(project);
            context.SaveChanges();
        }
示例#7
0
        public IActionResult ApplayEdit(EditProjectDto projectDto)
        {
            var userId = User.FindFirst(ClaimTypes.NameIdentifier).Value;

            projectDto.ProjectManagerID = userId;
            projectRepository.EditProject(projectDto);
            return(RedirectToAction("ShowProjectManagerProjects"));
        }
示例#8
0
 public IActionResult EditProject(int projectId, [FromBody] EditProjectDto projectDto)
 {
     try
     {
         projectRepository.EditProject(projectDto);
         return(Ok());
     }
     catch (Exception)
     {
         return(BadRequest("Invalid data."));
     }
 }
示例#9
0
        private void UpdateWall(EditProjectDto dto, int wallId)
        {
            var updateWallDto = new UpdateWallDto
            {
                Id             = wallId,
                Description    = dto.Description,
                Logo           = dto.Logo,
                Name           = dto.Title,
                OrganizationId = dto.OrganizationId,
                UserId         = dto.UserId
            };

            _wallService.UpdateWall(updateWallDto);
        }
示例#10
0
        public ProjectDto Add(EditProjectDto projectDto)
        {
            var project = _mapper.Map <Project>(projectDto);

            project.State = ProjectState.Planned;
            _projectRepository.Add(project);

            if (!_projectRepository.Save())
            {
                throw new PmsException("Create a project failed on save");
            }

            return(_mapper.Map <ProjectDto>(project));
        }
示例#11
0
        private async Task UpdateWallAsync(EditProjectDto dto, int wallId)
        {
            var updateWallDto = new UpdateWallDto
            {
                Id             = wallId,
                Description    = dto.Description,
                Logo           = dto.Logo,
                Name           = dto.Title,
                OrganizationId = dto.OrganizationId,
                UserId         = dto.UserId
            };

            await _wallService.UpdateWallAsync(updateWallDto);
        }
示例#12
0
        public void Update(int id, EditProjectDto projectDto)
        {
            var project = _projectRepository.Get(id);

            project.Code       = projectDto.Code;
            project.Name       = projectDto.Name;
            project.StartDate  = projectDto.StartDate;
            project.FinishDate = projectDto.FinishDate;
            _projectRepository.Update(project);

            if (!_projectRepository.Save())
            {
                throw new PmsException($"Updating project {project.Id} failed on save.");
            }
        }
示例#13
0
        public ActionResult CreateProject([FromBody] EditProjectDto projectDto)
        {
            if (projectDto == null)
            {
                return(BadRequest());
            }

            if (!ModelState.IsValid)
            {
                return(new UnprocessableEntityObjectResult(ModelState));
            }

            var addedProject = _projectService.Add(projectDto);

            return(CreatedAtAction("CreateProject", new { id = addedProject.Id }, addedProject));
        }
示例#14
0
        public async Task EditProject(EditProjectDto dto)
        {
            var project = await _projectsDbSet
                          .Include(p => p.Members)
                          .Include(p => p.Wall.Members)
                          .Include(p => p.Wall.Moderators)
                          .Include(p => p.Attributes)
                          .FirstOrDefaultAsync(p =>
                                               p.Id == dto.Id &&
                                               p.OrganizationId == dto.OrganizationId);

            if (project == null)
            {
                throw new ValidationException(ErrorCodes.ContentDoesNotExist, "Project not found");
            }

            ValidateOwnershipPermissions(project.OwnerId, dto);

            if (project.OwnerId != dto.OwningUserId)
            {
                var owningUserExists = await _usersDbSet.AnyAsync(u => u.Id == dto.OwningUserId && u.OrganizationId == dto.OrganizationId);

                if (!owningUserExists)
                {
                    throw new ValidationException(ErrorCodes.ContentDoesNotExist, "User not found");
                }
            }

            project.Members = await _usersDbSet.Where(x => dto.MembersIds.Contains(x.Id)).ToListAsync();

            _wallService.ReplaceMembersInWall(project.Members.ToList(), project.WallId, dto.UserId);

            var completeListOfAttributes = await ManageProjectAttributes(dto.Attributes);

            project.Name       = dto.Title;
            project.Desc       = dto.Description;
            project.Logo       = dto.Logo;
            project.OwnerId    = dto.OwningUserId;
            project.Attributes = completeListOfAttributes.ToList();
            UpdateProjectWallModerator(dto, project);

            UpdateWall(dto, project.WallId);

            await _uow.SaveChangesAsync(dto.UserId);
        }
示例#15
0
        public IActionResult Edit(EditProjectDto editProjectDto)
        {
            var id = editProjectDto.Id;

            if (ModelState.IsValid)
            {
                managerRepository.EditProject(editProjectDto);
                return(Redirect("ShowProjets"));
            }
            else
            {
                ViewBag.userId      = User.FindFirst(ClaimTypes.NameIdentifier).Value;
                ViewBag.Developers  = userDeveloperRepository.GetAllDevelopers();
                ViewBag.TeamLeaders = userTeamLeaderRepository.GetAllTeamLeaders();
                ViewBag.project     = userManagerRepository.GetProjectById(id);
                return(View());
            }
        }
        public IActionResult UpdateProject(Guid projectId, [FromBody] EditProjectDto projectDto)
        {
            if (projectDto == null || projectId != projectDto.Id || !ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var projectExists = _db.Projects.Any(x => x.Id == projectId);

            if (!projectExists)
            {
                return(NotFound("پروژه یافت نشد."));
            }

            var projectNameExists = _db.Projects.Any(x => x.Id != projectDto.Id && x.Name == projectDto.Name);

            if (projectNameExists)
            {
                ModelState.AddModelError("", "نام پروژه تکراری می باشد.");
                return(StatusCode(409, ModelState));
            }

            if (!Enum.IsDefined(typeof(Priority), projectDto.Priority))
            {
                ModelState.AddModelError("", "اولویت پروژه مشخص نشده است.");
                return(StatusCode(400, ModelState));
            }

            var project = _mapper.Map <Project>(projectDto);

            try
            {
                _db.Projects.Update(project);
                _db.SaveChanges();
            }
            catch (Exception ex)
            {
                ModelState.AddModelError("", ex.Message);
                return(StatusCode(500, ModelState));
            }

            return(NoContent());
        }
        public void Add_ShouldThrowExceptionIfSaveWasNotSucceed()
        {
            // Arrange
            var mock = new Mock <IProjectRepository>();

            mock.Setup(x => x.Add(It.IsAny <Project>()));
            mock.Setup(x => x.Save()).Returns(false);

            var service        = new ProjectService(mock.Object, _mapper);
            var editProjectDto = new EditProjectDto
            {
                Code       = "FGDGDF",
                Name       = "Project test name",
                StartDate  = new DateTime(2019, 5, 10),
                FinishDate = new DateTime(2019, 5, 20)
            };

            // Assert
            Assert.Throws <PmsException>(() => service.Add(editProjectDto));
        }
示例#18
0
        public ActionResult UpdateProject(int id, [FromBody] EditProjectDto projectDto)
        {
            if (projectDto == null)
            {
                return(BadRequest());
            }

            if (!ModelState.IsValid)
            {
                return(new UnprocessableEntityObjectResult(ModelState));
            }

            if (!_projectService.Exist(id))
            {
                return(NotFound());
            }

            _projectService.Update(id, projectDto);
            return(NoContent());
        }
        public void Update_ShouldPassProjectToRepositoryMethod()
        {
            // Arrange
            var updatedProject = new Project();
            var mock           = new Mock <IProjectRepository>();

            mock.Setup(x => x.Update(It.IsAny <Project>()))
            .Callback <Project>(proj => updatedProject = proj);
            mock.Setup(x => x.Save()).Returns(true);
            mock.Setup(x => x.Get(5)).Returns(new Project
            {
                Id         = 5,
                Code       = "JHGGGGG",
                Name       = "Old project name",
                State      = ProjectState.Completed,
                ParentId   = 2,
                StartDate  = new DateTime(2019, 2, 10),
                FinishDate = new DateTime(2019, 2, 20)
            });

            var service        = new ProjectService(mock.Object, _mapper);
            var editProjectDto = new EditProjectDto
            {
                Code       = "FGDGDF",
                Name       = "Project test name",
                StartDate  = new DateTime(2019, 5, 10),
                FinishDate = new DateTime(2019, 5, 20)
            };

            // Act
            service.Update(5, editProjectDto);

            // Assert
            Assert.AreEqual("FGDGDF", updatedProject.Code);
            Assert.AreEqual("Project test name", updatedProject.Name);
            Assert.AreEqual(new DateTime(2019, 5, 10), updatedProject.StartDate);
            Assert.AreEqual(new DateTime(2019, 5, 20), updatedProject.FinishDate);
            Assert.AreEqual(5, updatedProject.Id);
            Assert.AreEqual(ProjectState.Completed, updatedProject.State);
            Assert.AreEqual(2, updatedProject.ParentId);
        }
示例#20
0
        private void UpdateProjectWallModerator(EditProjectDto dto, Project project)
        {
            if (project.Wall.Moderators.Any())
            {
                var currentModeratorId = project.Wall.Moderators.First().UserId;

                if (currentModeratorId != dto.OwningUserId)
                {
                    if (!dto.MembersIds.Contains(currentModeratorId))
                    {
                        _wallService.RemoveMemberFromWall(currentModeratorId, project.WallId);
                    }

                    _wallService.RemoveModerator(project.WallId, project.Wall.Moderators.First().UserId, dto);
                    _wallService.AddModerator(project.WallId, dto.OwningUserId, dto);
                }
            }
            else
            {
                _wallService.AddModerator(project.WallId, dto.OwningUserId, dto);
            }
        }
示例#21
0
 public IActionResult Edit(EditProjectDto editProjectDto)
 {
     projectRepository.EditProject(editProjectDto);
     return(Redirect("AllProjects"));
 }