Example #1
0
 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);
 }
Example #2
0
        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));
        }
Example #3
0
        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");
        }
Example #4
0
        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();
        }