public async Task Somewthing() { var accounts = GetChartOfAccounts(); Position position = Position.Start; foreach (var(accountNumber, accountName) in accounts.OrderBy(_ => Guid.NewGuid())) { position = await HttpClient.SendCommand("/chart-of-accounts", new DefineAccount { AccountName = accountName.ToString(), AccountNumber = accountNumber.ToInt32() }, TransactoSerializerOptions.BusinessTransactions()); } using var response = await HttpClient.ConditionalGetAsync("/chart-of-accounts", position); var body = await response.Content.ReadAsStreamAsync(); var chartOfAccounts = await JsonDocument.ParseAsync(body); using var resultEnumerator = chartOfAccounts.RootElement.EnumerateObject(); using var expectEnumerator = accounts.OrderBy(x => x.Item1.ToInt32()).GetEnumerator(); while (expectEnumerator.MoveNext() && resultEnumerator.MoveNext()) { Assert.Equal(expectEnumerator.Current.Item1.ToString(), resultEnumerator.Current.Name); Assert.Equal(expectEnumerator.Current.Item2.ToString(), resultEnumerator.Current.Value.ToString()); } Assert.False(expectEnumerator.MoveNext()); Assert.False(resultEnumerator.MoveNext()); Assert.Equal(HttpStatusCode.OK, response.StatusCode); }
public async Task Somewthing() { var now = DateTime.UtcNow; var period = AccountingPeriod.Open(LocalDate.FromDateTime(now)); var transactionId = Guid.NewGuid(); await HttpClient.SendCommand("/transactions", new PostGeneralLedgerEntry { BusinessTransaction = new BusinessTransaction { TransactionId = transactionId, ReferenceNumber = 1, Version = 1 }, Period = period.ToString(), CreatedOn = now, GeneralLedgerEntryId = transactionId }, TransactoSerializerOptions.BusinessTransactions(typeof(BusinessTransaction))); }
OpenBooks(DateTimeOffset now) { await HttpClient.SendCommand("/general-ledger", new OpenGeneralLedger { OpenedOn = now }, TransactoSerializerOptions.Commands); foreach (var(accountNumber, accountName) in GetChartOfAccounts().OrderBy(_ => Guid.NewGuid())) { await HttpClient.SendCommand("/chart-of-accounts", new DefineAccount { AccountName = accountName.ToString(), AccountNumber = accountNumber.ToInt32() }, TransactoSerializerOptions.BusinessTransactions()); yield return(accountNumber, accountName); } await Task.Delay(TimeSpan.FromMilliseconds(500)); }
public async Task when_an_entry_is_posted( GeneralLedgerEntryIdentifier generalLedgerEntryIdentifier, DateTimeOffset createdOn, Money[] amounts) { var period = Period.Open(createdOn); var accounts = await OpenBooks(createdOn).ToArrayAsync(); var debits = Array.ConvertAll(amounts, amount => new Debit(accounts.OrderBy(_ => Guid.NewGuid()).First().accountNumber, amount)); var credits = Array.ConvertAll(amounts, amount => new Credit(accounts.OrderBy(_ => Guid.NewGuid()).First().accountNumber, amount)); var command = new PostGeneralLedgerEntry { GeneralLedgerEntryId = generalLedgerEntryIdentifier.ToGuid(), CreatedOn = createdOn, BusinessTransaction = new JournalEntry { ReferenceNumber = 1, Credits = Array.ConvertAll(credits, credit => new JournalEntry.Item { Amount = credit.Amount.ToDecimal(), AccountNumber = credit.AccountNumber.Value }), Debits = Array.ConvertAll(debits, debit => new JournalEntry.Item { Amount = debit.Amount.ToDecimal(), AccountNumber = debit.AccountNumber.ToInt32() }) }, Period = period.ToString() }; await HttpClient.SendCommand("/general-ledger/entries", command, TransactoSerializerOptions.BusinessTransactions(typeof(JournalEntry))); await Task.Delay(TimeSpan.FromSeconds(2)); using var response = await HttpClient.GetAsync($"/balance-sheet/{createdOn.AddDays(1):O}"); Assert.Equal(HttpStatusCode.OK, response.StatusCode); var json = await response.Content.ReadAsStringAsync(); var balanceSheet = JsonSerializer.Deserialize <BalanceSheetReport>(json, TransactoSerializerOptions.Events); }
public static IEndpointRouteBuilder MapBusinessTransaction <T>(this IEndpointRouteBuilder builder, string route) where T : IBusinessTransaction => builder.MapCommandsInternal(route, TransactoSerializerOptions.BusinessTransactions(typeof(T)), typeof(PostGeneralLedgerEntry));