示例#1
0
        private CommentExtraAction? PerformFinanceOperation(FinanceOperationAction financeAction,
          Comment parentComment, Claim claim)
        {
            var finance = parentComment?.Finance;
            if (finance == null)
            {
                throw new InvalidOperationException();
            }

            if (!finance.RequireModeration)
            {
                throw new ValueAlreadySetException("Finance entry is already moderated.");
            }

            finance.RequestModerationAccess(CurrentUserId);
            finance.Changed = Now;
            switch (financeAction)
            {
                case FinanceOperationAction.Approve:
                    finance.State = FinanceOperationState.Approved;
                    if (finance.OperationType == FinanceOperationType.PreferentialFeeRequest)
                    {
                        claim.PreferentialFeeUser = true;
                    }
                    claim.UpdateClaimFeeIfRequired(finance.OperationDate);
                    return CommentExtraAction.ApproveFinance;
                case FinanceOperationAction.Decline:
                    finance.State = FinanceOperationState.Declined;
                    return CommentExtraAction.RejectFinance;
                case FinanceOperationAction.None:
                default:
                    throw new ArgumentOutOfRangeException(nameof(financeAction), financeAction, null);
            }
        }
示例#2
0
        public async Task AddComment(int projectId, int claimId, int?parentCommentId, bool isVisibleToPlayer, string commentText, FinanceOperationAction financeAction)
        {
            var claim = (await ClaimsRepository.GetClaim(projectId, claimId)).RequestAccess(CurrentUserId,
                                                                                            ExtraAccessReason.Player);

            SetDiscussed(claim, isVisibleToPlayer);

            var parentComment = claim.CommentDiscussion.Comments.SingleOrDefault(c => c.CommentId == parentCommentId);

            Func <UserSubscription, bool> predicate   = s => s.Comments;
            CommentExtraAction?           extraAction = null;

            if (financeAction != FinanceOperationAction.None)
            {
                extraAction = PerformFinanceOperation(financeAction, parentComment, claim);
                predicate   = s => s.Comments || s.MoneyOperation;
            }


            var email = await AddCommentWithEmail <AddCommentEmail>(commentText, claim, isVisibleToPlayer,
                                                                    predicate, parentComment, extraAction);

            await UnitOfWork.SaveChangesAsync();

            await EmailService.Email(email);
        }
示例#3
0
        public async Task AddComment(int projectId, int claimId, int currentUserId, int?parentCommentId, bool isVisibleToPlayer, string commentText, FinanceOperationAction financeAction)
        {
            var claim = (await ClaimsRepository.GetClaim(projectId, claimId)).RequestAccess(currentUserId);
            var now   = DateTime.UtcNow;

            if (claim.ClaimStatus == Claim.Status.AddedByMaster && currentUserId == claim.PlayerUserId)
            {
                claim.ClaimStatus = Claim.Status.Discussed;
            }

            if (claim.ClaimStatus == Claim.Status.AddedByUser && currentUserId != claim.PlayerUserId && isVisibleToPlayer)
            {
                claim.ClaimStatus = Claim.Status.Discussed;
            }

            var parentComment = claim.Comments.SingleOrDefault(c => c.CommentId == parentCommentId);

            Func <UserSubscription, bool> predicate   = s => s.Comments;
            CommentExtraAction?           extraAction = null;

            if (financeAction != FinanceOperationAction.None)
            {
                var finance = parentComment?.Finance;
                if (finance == null)
                {
                    throw new InvalidOperationException();
                }

                if (!finance.RequireModeration)
                {
                    throw new ValueAlreadySetException("Finance entry is already moderated.");
                }

                finance.RequestModerationAccess(currentUserId);
                finance.Changed = now;
                switch (financeAction)
                {
                case FinanceOperationAction.Approve:
                    finance.State = FinanceOperationState.Approved;
                    extraAction   = CommentExtraAction.ApproveFinance;
                    claim.UpdateClaimFeeIfRequired(finance.OperationDate);
                    break;

                case FinanceOperationAction.Decline:
                    finance.State = FinanceOperationState.Declined;
                    extraAction   = CommentExtraAction.RejectFinance;
                    break;

                default:
                    throw new ArgumentOutOfRangeException(nameof(financeAction), financeAction, null);
                }
                predicate = s => s.Comments || s.MoneyOperation;
            }


            var email = await AddCommentWithEmail <AddCommentEmail>(currentUserId, commentText, claim, now, isVisibleToPlayer,
                                                                    predicate, parentComment, extraAction);

            await UnitOfWork.SaveChangesAsync();

            await EmailService.Email(email);
        }