public ProjectMemberRoleModel(ProjectMemberRole memberRole) { Id = memberRole.Id; if (memberRole.Department != null) { Department = memberRole.Department.Title; } Title = memberRole.Title; DepartmentId = memberRole.DepartmentId; CreatedOn = memberRole.CreatedOn; RoleType = GetEnumDescription(memberRole.Role); }
public JsonResult Update(ProjectMemberRoleModel memberRolesModel) { ApiResult <ProjectMemberRole> apiResult; if (ModelState.IsValid) { if (memberRolesModel.Id > 0) { apiResult = TryExecute(() => { var memberRole = _projectMemberRoleRepository.Get(memberRolesModel.Id); memberRole.DepartmentId = memberRolesModel.DepartmentId; memberRole.Title = memberRolesModel.Title; memberRole.Description = memberRolesModel.Description; memberRole.Role = memberRolesModel.Role; memberRole.UpdatedByUserId = WebUser.Id; memberRole.UpdatedOn = DateTime.UtcNow; _projectMemberRoleRepository.Update(memberRole); _unitOfWork.Commit(); return(memberRole); }, "Member Role updated sucessfully"); } else { apiResult = TryExecute(() => { var memberRole = new ProjectMemberRole { Title = memberRolesModel.Title, Description = memberRolesModel.Description, DepartmentId = memberRolesModel.DepartmentId, Id = memberRolesModel.Id, Role = memberRolesModel.Role, CreatedByUserId = WebUser.Id, CreatedOn = DateTime.UtcNow, }; _projectMemberRoleRepository.Create(memberRole); _unitOfWork.Commit(); return(memberRole); }, "Member Role created sucessfully"); } } else { apiResult = ApiResultFromModelErrors <ProjectMemberRole>(); } return(Json(apiResult, JsonRequestBehavior.AllowGet)); }
private async Task <string> MoveMembersToProjectAsync(string messageString) { Console.WriteLine("Prepare members stage started"); MoveTaskMoveMembersMessage message = JsonConvert.DeserializeObject <MoveTaskMoveMembersMessage>(messageString); string transactionId = message.TransactionId; var transaction = await _transactionsRepository.GetTransactionAsync(transactionId); if (transaction != null && transaction.State == TransactionStates.Denied) { return($"Transaction {transactionId} already denied"); } IEnumerable <string> taskMembers = message.TaskMembers; var moveTransaction = transaction == null ? MoveTaskTransaction.Create(transactionId, message.TargetProjectId) : MoveTaskTransaction.CreateFromBase(transaction); moveTransaction.State = TransactionStates.Processing; if (taskMembers.IsNullOrEmpty()) { // nothing to move await HandleNoMembersToMoveAsync(moveTransaction); return($"No task members to move"); } //Check project string projectId = message.TargetProjectId; var project = await _projectsRepository.GetProjectAsync(projectId); if (project == null) { string reason = $"Project {projectId} not found"; var rollbackOutboxMessage = OutboxMessageModel.Create( new RollbackTransactionMessage { TransactionId = transactionId, Reason = reason }, Topics.ProjectMembers, TransactionMessageActions.MoveTask_Rollback); moveTransaction.State = TransactionStates.Denied; moveTransaction.Message = reason; moveTransaction.UpdateData(); await _transactionsRepository.CreateOrUpdateTransactionAsync(moveTransaction, rollbackOutboxMessage); return(reason); } var targetProjectMembers = await _projectMembersRepository.GetProjectsMembersAsync(projectId : projectId); var targetMembersIds = targetProjectMembers?.Select(m => m.UserId).ToList() ?? new List <string>(); var movingMembersIds = taskMembers.Except(targetMembersIds).ToList(); if (!movingMembersIds.Any()) { await HandleNoMembersToMoveAsync(moveTransaction); return($"All members already in target"); } var allUsersById = (await _usersRepository.GetAllUsersAsync()).ToDictionary(u => u.Id); var allUsersIds = allUsersById.Keys.ToList(); var notFoundMembers = movingMembersIds.Except(allUsersIds).ToList(); // Check all members exists if (notFoundMembers.Any()) { string reason = $"Members {string.Join(", ", notFoundMembers)} not found"; var rollbackOutboxMessage = OutboxMessageModel.Create( new RollbackTransactionMessage { TransactionId = transactionId, Reason = reason }, Topics.ProjectMembers, TransactionMessageActions.MoveTask_Rollback); moveTransaction.State = TransactionStates.Denied; moveTransaction.Message = reason; moveTransaction.UpdateData(); await _transactionsRepository.CreateOrUpdateTransactionAsync(moveTransaction, rollbackOutboxMessage); return(reason); } var sourceProjectMembersById = (await _projectMembersRepository.GetProjectsMembersAsync(projectId: message.SourceProjectId)) .ToDictionary(m => m.UserId); //probably will be better rollback this insterts in case of exception foreach (var movingMemberId in movingMembersIds) { ProjectMemberRole role = ProjectMemberRole.Implementer; //try use role from source project if (sourceProjectMembersById.TryGetValue(movingMemberId, out var sourceProjectMember)) { role = sourceProjectMember.Role; } var projectMemberModel = new ProjectMemberModel { UserId = movingMemberId, ProjectId = projectId, Role = role }; var outboxMessage = OutboxMessageModel.Create( new ProjectMemberCreatedUpdatedMessage { Role = role, UserId = movingMemberId, Username = allUsersById[movingMemberId].Username, ProjectId = projectId, ProjectTitle = project.Title }, Topics.ProjectMembers, MessageActions.Created); await _projectMembersRepository.AddMemberToProjectAsync(projectMemberModel, outboxMessage); } moveTransaction.MovedMembers = movingMembersIds.ToList(); moveTransaction.UpdateData(); var movedOutboxMessage = OutboxMessageModel.Create( new MoveTaskMembersMovedMessage { TransactionId = transactionId, }, Topics.ProjectMembers, TransactionMessageActions.MoveTask_MoveMembersCompleted); await _transactionsRepository.CreateOrUpdateTransactionAsync(moveTransaction, movedOutboxMessage); return($"Moving task members completed successful"); }
protected override void Seed(GridDataContext context) { var department = new Department { Title = "Development", Description = "", MailAlias = "", ParentId = null }; var createDepartment = context.Departments.Add(department); context.SaveChanges(); var department1 = new Department { Title = "Sales", Description = "", MailAlias = "", ParentId = null }; var createDepartment1 = context.Departments.Add(department1); context.SaveChanges(); var department2 = new Department { Title = "Testing", Description = "", MailAlias = "", ParentId = null }; var createDepartment2 = context.Departments.Add(department2); context.SaveChanges(); var memberRole = new ProjectMemberRole { Title = "Developer", Description = "", Role = Features.PMS.Entities.Enums.MemberRole.Developer, DepartmentId = department.Id }; var createMemberRole = context.ProjectMemberRoles.Add(memberRole); context.SaveChanges(); var memberRole1 = new ProjectMemberRole { Title = "Tester", Description = "", Role = Features.PMS.Entities.Enums.MemberRole.Tester, DepartmentId = department2.Id }; var createMemberRole1 = context.ProjectMemberRoles.Add(memberRole1); context.SaveChanges(); var memberRole2 = new ProjectMemberRole { Title = "Sales", Description = "", Role = Features.PMS.Entities.Enums.MemberRole.Sales, DepartmentId = department1.Id }; var createMemberRole2 = context.ProjectMemberRoles.Add(memberRole2); context.SaveChanges(); var memberRole4 = new ProjectMemberRole { Title = "Project Manager", Description = "", Role = Features.PMS.Entities.Enums.MemberRole.ProjectManager, DepartmentId = department.Id }; var createMemberRole4 = context.ProjectMemberRoles.Add(memberRole4); context.SaveChanges(); }