public async Task <IPostingJournalResult> CalculateAsync(DateTime statusDate)
        {
            if (statusDate.Date == StatusDate)
            {
                while (_isCalculating)
                {
                    await Task.Delay(250);
                }

                return(this);
            }

            StatusDate = statusDate.Date;

            _isCalculating = true;
            try
            {
                PostingLineCollection = await PostingLineCollection.CalculateAsync(StatusDate);

                PostingWarningCollection = await _postingWarningCalculator.CalculateAsync(PostingLineCollection);

                return(this);
            }
            finally
            {
                _isCalculating = false;
            }
        }
        public IPostingLineCollection Top(int numberOfPostingLines)
        {
            IPostingLineCollection postingLineCollection = new PostingLineCollection
            {
                Ordered().Take(numberOfPostingLines)
            };

            return(postingLineCollection);
        }
        public IPostingLineCollection Ordered()
        {
            IPostingLineCollection postingLineCollection = new PostingLineCollection
            {
                this.AsParallel().OrderByDescending(postingLine => postingLine.PostingDate.Date).ThenByDescending(postingLine => postingLine.SortOrder)
            };

            return(postingLineCollection);
        }