public PostingJournalResult(IPostingLineCollection postingLineCollection, IPostingWarningCalculator postingWarningCalculator)
            : base(postingLineCollection)
        {
            NullGuard.NotNull(postingWarningCalculator, nameof(postingWarningCalculator));

            _postingWarningCalculator = postingWarningCalculator;
        }
        public async Task CalculateAsync_WhenCalled_ReturnsSamePostingJournalResultWherePostingWarningCollectionIsEqualToPostingWarningCollectionFromPostingWarningCalculator()
        {
            IPostingWarningCollection postingWarningCollection = _fixture.BuildPostingWarningCollectionMock().Object;
            IPostingWarningCalculator postingWarningCalculator = _fixture.BuildPostingWarningCalculatorMock(postingWarningCollection).Object;
            IPostingJournalResult     sut = CreateSut(postingWarningCalculator: postingWarningCalculator);

            IPostingJournalResult result = await sut.CalculateAsync(DateTime.Now.AddDays(_random.Next(1, 365) * -1));

            Assert.That(result.PostingWarningCollection, Is.SameAs(postingWarningCollection));
        }
Example #3
0
        public ApplyPostingJournalCommandHandler(IValidator validator, IAccountingRepository accountingRepository, ICommonRepository commonRepository, IPostingWarningCalculator postingWarningCalculator)
        {
            NullGuard.NotNull(validator, nameof(validator))
            .NotNull(accountingRepository, nameof(accountingRepository))
            .NotNull(commonRepository, nameof(commonRepository))
            .NotNull(postingWarningCalculator, nameof(postingWarningCalculator));

            _validator                = validator;
            _accountingRepository     = accountingRepository;
            _commonRepository         = commonRepository;
            _postingWarningCalculator = postingWarningCalculator;
        }
Example #4
0
        public async Task ApplyPostingJournalAsync_WhenCalled_ReturnsNonEmptyPostingJournalResult()
        {
            IAccountingRepository sut = CreateSut();

            IPostingJournal postingJournal = await BuildPostingJournalAsync(sut);

            IPostingWarningCalculator postingWarningCalculator = await BuildPostingWarningCalculator();

            IPostingJournalResult result = await sut.ApplyPostingJournalAsync(postingJournal, postingWarningCalculator);

            Assert.That(result, Is.Not.Null);
            Assert.That(result.PostingLineCollection, Is.Not.Null);
            Assert.That(result.PostingLineCollection, Is.Not.Empty);
            Assert.That(result.PostingLineCollection.Count(), Is.EqualTo(postingJournal.PostingLineCollection.Count()));
            Assert.That(result.PostingWarningCollection, Is.Not.Null);
            Assert.That(result.PostingWarningCollection, Is.Empty);
        }
Example #5
0
        public Task <IPostingJournalResult> ApplyPostingJournalAsync(IPostingJournal postingJournal, IPostingWarningCalculator postingWarningCalculator)
        {
            NullGuard.NotNull(postingJournal, nameof(postingJournal))
            .NotNull(postingWarningCalculator, nameof(postingWarningCalculator));

            return(ExecuteAsync(async() =>
            {
                IPostingLineCollection postingLineCollection = new PostingLineCollection();
                foreach (IGrouping <int, IPostingLine> group in postingJournal.PostingLineCollection.GroupBy(postingLine => postingLine.Accounting.Number))
                {
                    using PostingLineModelHandler postingLineModelHandler = new PostingLineModelHandler(DbContext, AccountingModelConverter.Create(), _eventPublisher, DateTime.MinValue, DateTime.Today, true, true, applyingPostingLines: true);

                    AccountingIdentificationState accountingIdentificationState = new AccountingIdentificationState(group.Key);

                    IPostingLine[] createdPostingLineCollection = (await postingLineModelHandler.CreateAsync(group.OrderBy(m => m.PostingDate).ThenBy(m => m.SortOrder), accountingIdentificationState, true)).ToArray();

                    IPostingLine[] updatedPostingLineCollection = (await postingLineModelHandler.UpdateAsync(createdPostingLineCollection.OrderBy(m => m.PostingDate.Date).ThenBy(m => m.SortOrder), accountingIdentificationState)).ToArray();
                    foreach (IPostingLine postingLine in updatedPostingLineCollection)
                    {
                        IPostingLine[] affectedPostingCollection = (await postingLineModelHandler.ReadAsync(m => m.AccountingIdentifier == accountingIdentificationState.AccountingIdentifier && (m.PostingDate == postingLine.PostingDate && m.PostingLineIdentifier > postingLine.SortOrder || m.PostingDate > postingLine.PostingDate), prepareReadState: accountingIdentificationState)).ToArray();
                        foreach (IPostingLine affectedPostingLine in affectedPostingCollection.Where(m => updatedPostingLineCollection.Contains(m) == false))
                        {
                            await postingLineModelHandler.UpdateAsync(affectedPostingLine, accountingIdentificationState);
                        }
                    }

                    postingLineCollection.Add(updatedPostingLineCollection);
                }

                return (IPostingJournalResult) new PostingJournalResult(postingLineCollection, postingWarningCalculator);
            },
                                MethodBase.GetCurrentMethod()));
        }
 private IPostingJournalResult CreateSut(IPostingLineCollection postingLineCollection = null, IPostingWarningCalculator postingWarningCalculator = null)
 {
     return(new Domain.Accounting.PostingJournalResult(postingLineCollection ?? _fixture.BuildPostingLineCollectionMock(isEmpty: true).Object, postingWarningCalculator ?? _fixture.BuildPostingWarningCalculatorMock(isEmpty: true).Object));
 }