public void CreateMonthlyStatementWithRecurringInformation()
        {
            List <RecurringTransaction> recurringTransactions = new List <RecurringTransaction>()
            {
                new RecurringTransaction("Conta de Luz", -200m, 15, new ClassificationInfo("Moradia", ClassificationInfo.ResponsibleAll, Importance.Essential))
            };

            List <TransactionLine> statements = TransactionLineBuilder.BuildList()
                                                .Add(TransactionLineBuilder.BuildExecutedRecurringTransactionLine(-100m, description: "Conta de Luz", day: 15, month: 4))
                                                .Add(-800m, day: 22, month: 4)
                                                .Add(1_000m, day: 07, month: 4)
                                                .Add(-800m, day: 22, month: 6)
                                                .Add(1_000m, day: 07, month: 6)
                                                .Build();

            List <MonthlyView> months = new MonthlyViewBuilder(statements,
                                                               new List <IViewerPipeline>()
            {
                new RecurringTransactionsPipeline(recurringTransactions, new YearMonth(2019, 7))
            })
                                        .Build(100m);

            Assert.Equal(4, months.Count);
            ValitadeMonth(months[0], 4, 100m, 200m, 3);
            ValitadeMonth(months[1], 5, 200m, 0m, 1);
            ValitadeMonth(months[2], 6, 0m, 0m, 3);
            ValitadeMonth(months[3], 7, 0m, -200m, 1);
        }
        public void CreateMonthlyStatement()
        {
            List <TransactionLine> statements = TransactionLineBuilder.BuildList()
                                                .Add(1_000m, "salary", day: 07, category: "Entrada")
                                                .Add(-800m, "aluguel", day: 10, category: "Educação")
                                                .Build();

            List <MonthlyView> months = new MonthlyViewBuilder(statements).Build(100m);

            Assert.Single(months);
            ValitadeMonth(months.First(), 4, 100m, 300m, 2);
        }
        public void CreateMonthlyStatementWithEmptyInformation()
        {
            List <RecurringTransaction> recurringTransactions = new List <RecurringTransaction>();
            List <TransactionLine>      statements            = new List <TransactionLine>();

            List <MonthlyView> months = new MonthlyViewBuilder(statements,
                                                               new List <IViewerPipeline>()
            {
                new RecurringTransactionsPipeline(recurringTransactions, new YearMonth(2019, 7))
            })
                                        .Build(100m);

            Assert.Empty(months);
        }
        public void CreateMonthlyStatementForMoreMonthsFillingEmptyMonths()
        {
            List <TransactionLine> statements = TransactionLineBuilder.BuildList()
                                                .Add(-800m, day: 22, month: 4)
                                                .Add(1_000m, day: 07, month: 4)
                                                .Add(-800m, day: 22, month: 6)
                                                .Add(1_000m, day: 07, month: 6)
                                                .Build();

            List <MonthlyView> months = new MonthlyViewBuilder(statements).Build(100m);

            Assert.Equal(3, months.Count);
            ValitadeMonth(months[0], 4, 100m, 300m, 2);
            ValitadeMonth(months[1], 5, 300m, 300m, 0);
            ValitadeMonth(months[2], 6, 300m, 500m, 2);
        }
        public void CreateMonthlyStatementShouldDiplayOrderedData()
        {
            List <TransactionLine> statements = TransactionLineBuilder.BuildList()
                                                .Add(-240m, day: 22)
                                                .Add(1_000m, day: 07)
                                                .Add(-800m, day: 10)
                                                .Add(-90m, day: 09)
                                                .Build();

            List <MonthlyView> months = new MonthlyViewBuilder(statements).Build(100m);

            Assert.Equal(DateTime.Parse("2019-04-07"), months.First().Lines[0].TransactionDate);
            Assert.Equal(DateTime.Parse("2019-04-09"), months.First().Lines[1].TransactionDate);
            Assert.Equal(DateTime.Parse("2019-04-10"), months.First().Lines[2].TransactionDate);
            Assert.Equal(DateTime.Parse("2019-04-22"), months.First().Lines[3].TransactionDate);
        }
        public void CreateMonthlyStatementWithMonthlyBudget()
        {
            List <MontlyBudget> budgets = new List <MontlyBudget>()
            {
                new MontlyBudget(TransactionLineBuilder.DefaultCategory, 1_000m, 15)
            };

            List <TransactionLine> statements = TransactionLineBuilder.BuildList()
                                                .Add(-200m, day: 29, month: 4)
                                                .Add(-800m, day: 22, month: 4)
                                                .Add(1_000m, day: 07, month: 4, category: "Entrada")
                                                .Add(-800m, day: 22, month: 6)
                                                .Add(1_000m, day: 07, month: 6, category: "Entrada")
                                                .Build();

            List <MonthlyView> months = new MonthlyViewBuilder(
                statements, new List <IViewerPipeline>()
            {
                new MontlyBudgetPipeline(budgets)
            })
                                        .Build(100m);

            Assert.Equal(3, months.Count);
            ValitadeMonth(months[0], 4, 100m, 100m, 3);
            ValitadeMonth(months[1], 5, 100m, -900m, 1);
            ValitadeMonth(months[2], 6, -900m, -900m, 3);

            Assert.Single(months[0].Budgets);
            Assert.Equal(0m, months[0].Budgets.First().Available);
            Assert.Equal(1_000m, months[0].Budgets.First().Used);

            Assert.Single(months[1].Budgets);
            Assert.Equal(1_000m, months[1].Budgets.First().Available);
            Assert.Equal(0m, months[1].Budgets.First().Used);

            Assert.Single(months[2].Budgets);
            Assert.Equal(200m, months[2].Budgets.First().Available);
            Assert.Equal(800m, months[2].Budgets.First().Used);
        }
        public void CreateMonthlyStatementWithMonthlyBudgetForMultilineTransactions()
        {
            List <MontlyBudget> budgets = new List <MontlyBudget>()
            {
                new MontlyBudget(TransactionLineBuilder.DefaultCategory, 1_000m, 15)
            };

            var multiline = TransactionLineBuilder.BuildMultilineTransactionLine(month: 5);

            multiline.Add(TransactionLineBuilder.BuildMultilineDetailTransactionLine(-100m, "farmácia", month: 4));
            multiline.Add(TransactionLineBuilder.BuildMultilineDetailTransactionLine(-300m, "supermercado", month: 4));

            List <TransactionLine> statements = TransactionLineBuilder.BuildList()
                                                .Add(-500m, day: 22, month: 4)
                                                .Add(multiline)
                                                .Build();

            List <MonthlyView> months = new MonthlyViewBuilder(
                statements, new List <IViewerPipeline>()
            {
                new MontlyBudgetPipeline(budgets)
            })
                                        .Build(0m);

            Assert.Equal(2, months.Count);
            ValitadeMonth(months[0], 4, 0m, -600m, 2);
            ValitadeMonth(months[1], 5, -600m, -2_000m, 2);

            Assert.Single(months[0].Budgets);
            Assert.Equal(100m, months[0].Budgets.First().Available);
            Assert.Equal(900m, months[0].Budgets.First().Used);

            Assert.Single(months[1].Budgets);
            Assert.Equal(1_000m, months[1].Budgets.First().Available);
            Assert.Equal(0m, months[1].Budgets.First().Used);
        }
        public void CreateMonthlyWithOnlyRecurringInformation()
        {
            List <RecurringTransaction> recurringTransactions = new List <RecurringTransaction>()
            {
                new RecurringTransaction("Conta de Luz", -200m, 15, new ClassificationInfo("Moradia", ClassificationInfo.ResponsibleAll, Importance.Essential))
                {
                    StartYearMonth = new YearMonth(2019, 5)
                }
            };

            List <TransactionLine> statements = new List <TransactionLine>();

            List <MonthlyView> months = new MonthlyViewBuilder(statements,
                                                               new List <IViewerPipeline>()
            {
                new RecurringTransactionsPipeline(recurringTransactions, new YearMonth(2019, 7))
            })
                                        .Build(100m);

            Assert.Equal(3, months.Count);
            ValitadeMonth(months[0], 5, 100m, -100m, 1);
            ValitadeMonth(months[1], 6, -100m, -300m, 1);
            ValitadeMonth(months[2], 7, -300m, -500m, 1);
        }
Esempio n. 9
0
        static void Main(string[] args)
        {
            string lines = GetData();

            StatementParser parser = new StatementParser();
            List <ClassifiedTransactionLine> statements = parser.Parse(lines)
                                                          .Select(x => (ExecutedTransactionLine)x)
                                                          .ToList <ClassifiedTransactionLine>();

            Classificar(statements, "NET SERVIÇOS", new ClassificationInfo("Moradia", ClassificationInfo.ResponsibleAll, Importance.Essential));
            Classificar(statements, "ELETROPAULO", new ClassificationInfo("Moradia", ClassificationInfo.ResponsibleAll, Importance.Essential));
            Classificar(statements, "IPVA", new ClassificationInfo("Transporte", ClassificationInfo.ResponsibleAll, Importance.HardToCut));

            List <MonthlyView> months = new MonthlyViewBuilder(
                statements.ToList <TransactionLine>(),
                new List <IViewerPipeline>()
            {
                new RecurringTransactionsPipeline(BuildRecurrences(), new YearMonth(2019, 6))
            })
                                        .Build(-3_175.16m);

            foreach (var item in months)
            {
                Console.WriteLine(item.YearMonth.ToString());
                Console.WriteLine("Saldo inicial: " + String.Format("{0:C}", item.InitialAmount));
                foreach (var line in item.Lines)
                {
                    Console.WriteLine("\t" + string.Format("{0:dd/MM}", line.TransactionDate) +
                                      "\t" + line.Description +
                                      "\t" + string.Format("{0:C}", line.Amount) +
                                      "\t" + ((ClassifiedTransactionLine)line).Category);
                }
                Console.WriteLine("Saldo final: " + String.Format("{0:C}", item.FinalAmount));
            }
            Console.ReadLine();
        }
        public void CreateMonthlyStatementWithEmptyTransactionLines()
        {
            List <MonthlyView> months = new MonthlyViewBuilder(new List <TransactionLine>()).Build(100m);

            Assert.Empty(months);
        }