public TestTransaction(GeneralLedgerEntryNumber referenceNumber, Debit[]?debits = null, Credit[]?credits = null) { ReferenceNumber = referenceNumber; _debits = debits ?? Array.Empty <Debit>(); _credits = credits ?? Array.Empty <Credit>(); }
public Task entry_date_not_in_current_or_next_period_throws( GeneralLedgerEntryIdentifier generalLedgerEntryIdentifier, GeneralLedgerEntryNumber generalLedgerEntryNumber, LocalDate openedOn) { var createdOn = openedOn.PlusMonths(2).AtMidnight(); return(new Scenario() .Given(GeneralLedger.Identifier, new GeneralLedgerOpened { OpenedOn = Time.Format.LocalDate(openedOn) }) .When(new PostGeneralLedgerEntry { GeneralLedgerEntryId = generalLedgerEntryIdentifier.ToGuid(), Period = AccountingPeriod.Open(openedOn).Next().Next().ToString(), BusinessTransaction = new TestTransaction(generalLedgerEntryNumber), CreatedOn = createdOn.ToDateTimeUnspecified() }) .Throws(new GeneralLedgerEntryNotInPeriodException(generalLedgerEntryNumber, createdOn, AccountingPeriod.Open(openedOn).Next())) .Assert(new GeneralLedgerEntryHandlers(new GeneralLedgerTestRepository(_facts), new GeneralLedgerEntryTestRepository(_facts), _ => false), _facts)); }
public Task unposted_entry_throws(LocalDate openedOn, GeneralLedgerEntryNumber generalLedgerEntryNumber, EquityAccount retainedEarnings, GeneralLedgerEntryIdentifier generalLedgerEntryIdentifier, GeneralLedgerEntryIdentifier closingGeneralLedgerEntryIdentifier) { var period = AccountingPeriod.Open(openedOn); var closingOn = openedOn.AtMidnight(); var accountingPeriodClosing = new AccountingPeriodClosing { Period = period.ToString(), ClosingOn = Time.Format.LocalDateTime(closingOn), RetainedEarningsAccountNumber = retainedEarnings.AccountNumber.ToInt32(), ClosingGeneralLedgerEntryId = closingGeneralLedgerEntryIdentifier.ToGuid(), GeneralLedgerEntryIds = new[] { generalLedgerEntryIdentifier.ToGuid() } }; return(new Scenario() .Given(GeneralLedger.Identifier, new GeneralLedgerOpened { OpenedOn = Time.Format.LocalDate(openedOn) }, accountingPeriodClosing) .Given(ChartOfAccounts.Identifier, new AccountDefined { AccountName = retainedEarnings.AccountName.ToString(), AccountNumber = retainedEarnings.AccountNumber.ToInt32() }) .Given(GeneralLedgerEntry.FormatStreamIdentifier(generalLedgerEntryIdentifier), new GeneralLedgerEntryCreated { GeneralLedgerEntryId = generalLedgerEntryIdentifier.ToGuid(), Number = generalLedgerEntryNumber.ToString(), Period = period.ToString(), CreatedOn = Time.Format.LocalDateTime(openedOn.AtMidnight()) }) .When(accountingPeriodClosing) .Throws(new GeneralLedgerEntryWasNotPostedException(generalLedgerEntryIdentifier)) .Assert(_handler, _facts)); }