Example #1
0
        private static void UpdateParticipantRole(ReviewPackageRawData reviewPackageRawData, AssignParticipantRoleParameter content, IList <ReviewChangeItemsError> resultErrors)
        {
            int nonIntersecCount = 0;

            if (content.SelectionType == SelectionType.Selected)
            {
                foreach (var reviewer in reviewPackageRawData.Reviewers)
                {
                    if (content.ItemIds.Contains(reviewer.UserId))
                    {
                        reviewer.Permission = content.Role;
                    }
                }

                nonIntersecCount = content.ItemIds.Count() - content.ItemIds.Intersect(reviewPackageRawData.Reviewers.Select(r => r.UserId)).Count();
            }
            else
            {
                if (content.ItemIds != null && content.ItemIds.Any())
                {
                    foreach (var reviewer in reviewPackageRawData.Reviewers)
                    {
                        if (!content.ItemIds.Contains(reviewer.UserId))
                        {
                            reviewer.Permission = content.Role;
                        }
                    }
                }
                else
                {
                    foreach (var reviewer in reviewPackageRawData.Reviewers)
                    {
                        reviewer.Permission = content.Role;
                    }
                }
            }

            if (nonIntersecCount > 0)
            {
                resultErrors.Add(
                    new ReviewChangeItemsError
                {
                    ItemsCount   = nonIntersecCount,
                    ErrorCode    = ErrorCodes.UserNotInReview,
                    ErrorMessage = "Some users are not in the review."
                });
            }
        }
Example #2
0
        public async Task <ReviewChangeParticipantsStatusResult> AssignRoleToParticipantsAsync(int reviewId, AssignParticipantRoleParameter content, int userId)
        {
            if ((content.ItemIds == null || !content.ItemIds.Any()) && content.SelectionType == SelectionType.Selected)
            {
                throw new BadRequestException("Incorrect input parameters", ErrorCodes.OutOfRangeParameter);
            }

            if (!await _permissionsRepository.HasEditPermissions(reviewId, userId))
            {
                throw ReviewsExceptionHelper.UserCannotModifyReviewException(reviewId);
            }

            var reviewInfo = await GetReviewInfoAsync(reviewId, userId);

            if (reviewInfo.LockedByUserId.GetValueOrDefault() != userId)
            {
                throw ExceptionHelper.ArtifactNotLockedException(reviewId, userId);
            }

            var reviewData = await _reviewsRepository.GetReviewAsync(reviewId, userId);

            if (reviewData.ReviewStatus == ReviewPackageStatus.Closed)
            {
                const string errorMessage = "The approval status could not be updated because another user has changed the Review status.";
                throw new ConflictException(errorMessage, ErrorCodes.ApprovalRequiredIsReadonlyForReview);
            }

            if (reviewData.ReviewPackageRawData.Reviewers == null ||
                !reviewData.ReviewPackageRawData.Reviewers.Any())
            {
                throw ExceptionHelper.ArtifactDoesNotSupportOperation(reviewId);
            }

            if (reviewData.ReviewStatus == ReviewPackageStatus.Active)
            {
                if (content.Role == ReviewParticipantRole.Approver)
                {
                    var hasApproversAlready = reviewData.ReviewPackageRawData.Reviewers.FirstOrDefault(
                        r => r.Permission == ReviewParticipantRole.Approver) != null;
                    // If we have approvers before current action, it means that review already was converted to formal
                    if (!hasApproversAlready)
                    {
                        var artifactRequredApproval =
                            reviewData.Contents.Artifacts?.FirstOrDefault(a => !a.ApprovalNotRequested ?? true);
                        if (artifactRequredApproval != null)
                        {
                            throw new ConflictException(
                                      "Could not update review participants because review needs to be converted to Formal.",
                                      ErrorCodes.ReviewNeedsToMoveBackToDraftState);
                        }
                    }
                }
                else // If new role is reviewer
                {
                    ReviewsExceptionHelper.VerifyNotLastApproverInFormalReview(content, reviewData);
                }
            }

            var resultErrors = new List <ReviewChangeItemsError>();

            UpdateParticipantRole(reviewData.ReviewPackageRawData, content, resultErrors);

            await UpdateMeaningOfSignatureWhenAssignApprovalRoles(reviewId, userId, content, reviewData.ReviewPackageRawData);

            await _reviewsRepository.UpdateReviewPackageRawDataAsync(reviewId, reviewData.ReviewPackageRawData, userId);

            var changeResult = new ReviewChangeParticipantsStatusResult
            {
                ReviewType = await _reviewsRepository.GetReviewTypeAsync(reviewId, userId)
            };

            if (content.Role == ReviewParticipantRole.Approver)
            {
                await EnableRequireESignatureWhenProjectESignatureEnabledByDefaultAsync(reviewId, userId, reviewInfo.ProjectId, reviewData.ReviewPackageRawData);

                if (reviewData.ReviewPackageRawData.IsMoSEnabled && content.SelectionType == SelectionType.Selected && content.ItemIds.Count() == 1)
                {
                    changeResult.DropdownItems = reviewData.ReviewPackageRawData.Reviewers
                                                 .First(r => r.UserId == content.ItemIds.FirstOrDefault())
                                                 .SelectedRoleMoSAssignments.Select(mos => new DropdownItem(mos.GetMeaningOfSignatureDisplayValue(), mos.RoleId));
                }
            }

            if (resultErrors.Any())
            {
                changeResult.ReviewChangeItemErrors = resultErrors;
            }

            return(changeResult);
        }
Example #3
0
        private async Task UpdateMeaningOfSignatureWhenAssignApprovalRoles(int reviewId, int userId, AssignParticipantRoleParameter content,
                                                                           ReviewPackageRawData reviewRawData)
        {
            if (reviewRawData.IsMoSEnabled && content.Role == ReviewParticipantRole.Approver)
            {
                IEnumerable <MeaningOfSignatureParameter> meaningOfSignatureParameter;

                if (content.SelectionType == SelectionType.Selected)
                {
                    meaningOfSignatureParameter = content.ItemIds
                                                  .Select(i => new MeaningOfSignatureParameter {
                        ParticipantId = i
                    });
                }
                else
                {
                    if (!content.ItemIds.Any())
                    {
                        meaningOfSignatureParameter =
                            reviewRawData.Reviewers.Select(
                                reviewer => new MeaningOfSignatureParameter {
                            ParticipantId = reviewer.UserId
                        });
                    }
                    else
                    {
                        var meaningOfSignaturelist = new List <MeaningOfSignatureParameter>();

                        foreach (var reviewer in reviewRawData.Reviewers)
                        {
                            if (!content.ItemIds.Contains(reviewer.UserId))
                            {
                                meaningOfSignaturelist.Add(new MeaningOfSignatureParameter
                                {
                                    ParticipantId = reviewer.UserId
                                });
                            }
                        }

                        meaningOfSignatureParameter = meaningOfSignaturelist;
                    }
                }

                await
                UpdateMeaningOfSignaturesInternalAsync(reviewId, userId, reviewRawData, meaningOfSignatureParameter,
                                                       new MeaningOfSignatureUpdateSetDefaultsStrategy());
            }
        }
Example #4
0
 public Task <ReviewChangeParticipantsStatusResult> AssignRoleToParticipantAsync(int reviewId, [FromBody] AssignParticipantRoleParameter content)
 {
     return(_reviewsService.AssignRoleToParticipantsAsync(reviewId, content, Session.UserId));
 }