Exemple #1
0
        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));
        }
Exemple #4
0
        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));