Exemple #1
0
        public void Write(IncomeExpenseStatement incomeExpenseStatement, string outputPath)
        {
            Console.WriteLine($"Income Expense Statement from {incomeExpenseStatement.StartAt} to {incomeExpenseStatement.EndAt}");
            Console.WriteLine();

            using (StreamWriter writer = new StreamWriter(outputPath))
            {
                StringBuilder header = new StringBuilder();
                header.Append("AccountName");
                foreach (DateTimeRange dateTimeRange in incomeExpenseStatement.DateTimeRanges)
                {
                    if (incomeExpenseStatement.Period == IncomeExpensePeriod.Quarterly)
                    {
                        int quarterIndex = (dateTimeRange.Start.Month - 1) / 3;
                        header.Append($",Q{quarterIndex + 1} {dateTimeRange.Start.Year}");
                    }
                }
                writer.WriteLine(header.ToString());

                foreach (IncomeExpenseAccount account in incomeExpenseStatement.IncomeAccounts.OrderBy(a => a.Name))
                {
                    if (account.Periods.All(p => p.Total == 0))
                    {
                        continue;
                    }

                    StringBuilder row = new StringBuilder();
                    row.Append(account.Name);
                    foreach (IncomeExpenseAccountPeriod period in account.Periods.OrderBy(i => i.Range.Start))
                    {
                        row.Append($",{period.Total}");
                    }
                    writer.WriteLine(row.ToString());
                }

                writer.WriteLine();
                writer.WriteLine(header.ToString());
                foreach (IncomeExpenseAccount account in incomeExpenseStatement.ExpenseAccounts.OrderBy(a => a.Name))
                {
                    if (account.Periods.All(p => p.Total == 0))
                    {
                        continue;
                    }

                    StringBuilder row = new StringBuilder();
                    row.Append(account.Name);
                    foreach (IncomeExpenseAccountPeriod period in account.Periods.OrderBy(i => i.Range.Start))
                    {
                        row.Append($",{period.Total}");
                    }
                    writer.WriteLine(row.ToString());
                }
            }
        }
Exemple #2
0
        public static void Configure(CommandLineApplication command)
        {
            command.Description = "Generate a cashflow statement from the database for a given period";

            CommandOption databaseConnectionOption = command.Option(
                "-d|--database",
                "The database connection to connect to",
                CommandOptionType.SingleValue);

            CommandOption passwordOption = command.Option(
                "-p|--password",
                "The password to connect with",
                CommandOptionType.SingleValue);

            CommandOption startAtOption = command.Option(
                "-s|--startAt",
                "The start of the cashflow period",
                CommandOptionType.SingleValue);

            CommandOption endAtOption = command.Option(
                "-e|--endAt",
                "The end of the cashflow period",
                CommandOptionType.SingleValue);

            CommandOption outputPathOption = command.Option(
                "-o|--output",
                "The path to write a CSV to",
                CommandOptionType.SingleValue);

            command.OnExecute(() =>
            {
                string databaseConnectionName = databaseConnectionOption.Value();
                string password = passwordOption.HasValue() ? passwordOption.Value() : String.Empty;
                ServiceCollection serviceCollection = ServiceCollectionSetup.SetupCoreServices(
                    databaseConnectionName,
                    password
                    );

                // Financier.Core services
                serviceCollection.AddSingleton <IAccountRelationshipService, AccountRelationshipService>();
                serviceCollection.AddSingleton <IAccountService, AccountService>();
                serviceCollection.AddSingleton <ICurrencyService, CurrencyService>();
                serviceCollection.AddSingleton <IIncomeExpenseService, IncomeExpenseService>();
                serviceCollection.AddSingleton <IEnvironmentService, EnvironmentService>();
                serviceCollection.AddSingleton <ITransactionService, TransactionService>();

                // Application services
                serviceCollection.AddSingleton <IIncomeExpenseStatementWriterService, IncomeExpenseStatementWriterService>();

                IServiceProvider serviceProvider = serviceCollection.BuildServiceProvider();

                IIncomeExpenseService incomeExpenseService = serviceProvider.GetRequiredService <IIncomeExpenseService>();
                DateTime startAt  = DateTime.Parse(startAtOption.Value());
                DateTime endAt    = DateTime.Parse(endAtOption.Value());
                string outputPath = outputPathOption.Value();
                IncomeExpenseStatement incomeExpenseStatement = incomeExpenseService.Generate(IncomeExpensePeriod.Quarterly, startAt, endAt);

                IIncomeExpenseStatementWriterService incomeExpenseStatementWriterService =
                    serviceProvider.GetRequiredService <IIncomeExpenseStatementWriterService>();
                incomeExpenseStatementWriterService.Write(incomeExpenseStatement, outputPath);

                return(0);
            });
        }