예제 #1
0
        public async Task <IActionResult> Patch([FromBody] SaveAmountRecordRequest request)
        {
            var amountRecords             = request.AmountRecords.Select(x => AmountRecord.Load(x.Id, x.Description, x.Amount));
            SaveAmountRecordResult result = await _useCase.Execute <Income>(request.AccountId, request.Id, amountRecords);

            return(Ok(result));
        }
예제 #2
0
        public AccountBuilder WithInvestment(Guid investmentId, Guid firstAmountRecordId, params decimal[] amountRecordValues)
        {
            Investment investment = Investment.Load(investmentId, GenerateName(5), new AmountRecordCollection(), MonthYear.Now);

            investment.AmountRecords.Add(AmountRecord.Load(firstAmountRecordId, GenerateName(5), amountRecordValues[0]));
            for (int i = 1; i < amountRecordValues.Length; i++)
            {
                investment.AmountRecords.Add(AmountRecord.Load(Guid.NewGuid(), GenerateName(5), amountRecordValues[i]));
            }
            Investments.Add(investment);
            return(this);
        }
예제 #3
0
        public AccountBuilder WithExpense(Guid expenseId, Guid firstAmountRecordId, params decimal[] amountRecordValues)
        {
            Expense expense = Expense.Load(expenseId, GenerateName(5), new AmountRecordCollection(), MonthYear.Now);

            expense.AmountRecords.Add(AmountRecord.Load(firstAmountRecordId, GenerateName(5), amountRecordValues[0]));
            for (int i = 1; i < amountRecordValues.Length; i++)
            {
                expense.AmountRecords.Add(AmountRecord.Load(Guid.NewGuid(), GenerateName(5), amountRecordValues[i]));
            }
            Expenses.Add(expense);
            return(this);
        }
예제 #4
0
        public async Task <AccountQueryResult> GetAccount(System.Guid accountId)
        {
            Entities.Account account = await _context
                                       .Accounts
                                       .Find(x => x.Id == accountId)
                                       .SingleOrDefaultAsync();

            if (account == null)
            {
                throw new AccountNotFoundException($"The account {accountId} does not exists");
            }

            if (!account.Actived)
            {
                throw new AccountDeactivatedException($"The account {accountId} is deactivated!");
            }

            IEnumerable <Entities.FinanceStatement> incomes = await _context
                                                              .Incomes
                                                              .Find(x => x.AccountId == accountId)
                                                              .ToListAsync();

            IEnumerable <Entities.FinanceStatement> expenses = await _context
                                                               .Expenses
                                                               .Find(x => x.AccountId == accountId)
                                                               .ToListAsync();

            IEnumerable <Entities.FinanceStatement> investments = await _context
                                                                  .Investments
                                                                  .Find(x => x.AccountId == accountId)
                                                                  .ToListAsync();


            FinanceStatementCollection incomeCollection = new FinanceStatementCollection();

            foreach (var income in incomes)
            {
                IEnumerable <Entities.AmountRecord> amountRecords = await _context
                                                                    .AmountRecords
                                                                    .Find(x => x.FinanceStatementId == income.Id)
                                                                    .ToListAsync();

                AmountRecordCollection amountRecordCollection = new AmountRecordCollection(amountRecords.Select(x => AmountRecord.Load(x.Id, x.Description, x.Amount)));

                incomeCollection.Add(Income.Load(income.Id, income.Title, amountRecordCollection, income.ReferenceDate));
            }

            FinanceStatementCollection expenseCollection = new FinanceStatementCollection();

            foreach (var expense in expenses)
            {
                IEnumerable <Entities.AmountRecord> amountRecords = await _context
                                                                    .AmountRecords
                                                                    .Find(x => x.FinanceStatementId == expense.Id)
                                                                    .ToListAsync();

                AmountRecordCollection amountRecordCollection = new AmountRecordCollection(amountRecords.Select(x => AmountRecord.Load(x.Id, x.Description, x.Amount)));

                expenseCollection.Add(Expense.Load(expense.Id, expense.Title, amountRecordCollection, expense.ReferenceDate));
            }

            FinanceStatementCollection investmentsCollection = new FinanceStatementCollection();

            foreach (var investment in investments)
            {
                IEnumerable <Entities.AmountRecord> amountRecords = await _context
                                                                    .AmountRecords
                                                                    .Find(x => x.FinanceStatementId == investment.Id)
                                                                    .ToListAsync();

                AmountRecordCollection amountRecordCollection = new AmountRecordCollection(amountRecords.Select(x => AmountRecord.Load(x.Id, x.Description, x.Amount)));

                investmentsCollection.Add(Investment.Load(investment.Id, investment.Title, amountRecordCollection, investment.ReferenceDate));
            }

            AccountQueryResult result = new AccountQueryResult(account.Id, expenseCollection, incomeCollection, investmentsCollection);

            return(result);
        }
예제 #5
0
        public AccountBuilder WithExpenses(Guid firstItemId, int length = 3)
        {
            var list = new List <Expense>();

            list.Add(Expense.Load(firstItemId, GenerateName(9), new AmountRecordCollection(new[] { AmountRecord.Load(Guid.NewGuid(), null, GenerateDecimal()) }), MonthYear.Now));
            for (int i = 0; i < length - 1; i++)
            {
                list.Add(Expense.Load(Guid.NewGuid(), GenerateName(9), new AmountRecordCollection(new[] { AmountRecord.Load(Guid.NewGuid(), null, GenerateDecimal()) }), MonthYear.Now));
            }

            Expenses = new FinanceStatementCollection(list);
            return(this);
        }
예제 #6
0
        public AccountBuilder WithExpenses(params decimal[] values)
        {
            var list = new List <Expense>();

            foreach (var value in values)
            {
                list.Add(Expense.Load(Guid.NewGuid(), GenerateName(9), new AmountRecordCollection(new[] { AmountRecord.Load(Guid.NewGuid(), null, value) }), MonthYear.Now));
            }
            Expenses = new FinanceStatementCollection(list);
            return(this);
        }
예제 #7
0
        public AccountBuilder WithIncomes(Guid firstItemId, params decimal[] values)
        {
            var list = new List <Income>();

            list.Add(Income.Load(firstItemId, GenerateName(9), new AmountRecordCollection(new[] { AmountRecord.Load(Guid.NewGuid(), null, values[0]) }), MonthYear.Now));

            for (int i = 1; i < values.Length; i++)
            {
                list.Add(Income.Load(Guid.NewGuid(), GenerateName(9), new AmountRecordCollection(new[] { AmountRecord.Load(Guid.NewGuid(), null, values[i]) }), MonthYear.Now));
            }

            Incomes = new FinanceStatementCollection(list);
            return(this);
        }
예제 #8
0
        public AccountBuilder WithIncomes(int length = 2)
        {
            var list = new List <Income>();

            for (int i = 0; i < length; i++)
            {
                list.Add(Income.Load(Guid.NewGuid(), GenerateName(9), new AmountRecordCollection(new[] { AmountRecord.Load(Guid.NewGuid(), null, GenerateDecimal()) }), MonthYear.Now));
            }
            Incomes = new FinanceStatementCollection(list);
            return(this);
        }
예제 #9
0
        public async Task <Account> Get(Guid accountId)
        {
            Entities.Account account = await _context
                                       .Accounts
                                       .Find(x => x.Id == accountId)
                                       .SingleOrDefaultAsync();


            IEnumerable <Entities.FinanceStatement> incomes = await _context
                                                              .Incomes
                                                              .Find(x => x.AccountId == accountId)
                                                              .ToListAsync();

            IEnumerable <Entities.FinanceStatement> expenses = await _context
                                                               .Expenses
                                                               .Find(x => x.AccountId == accountId)
                                                               .ToListAsync();

            IEnumerable <Entities.FinanceStatement> investments = await _context
                                                                  .Investments
                                                                  .Find(x => x.AccountId == accountId)
                                                                  .ToListAsync();


            FinanceStatementCollection incomeCollection = new FinanceStatementCollection();

            foreach (var income in incomes)
            {
                IEnumerable <Entities.AmountRecord> amountRecords = await _context
                                                                    .AmountRecords
                                                                    .Find(x => x.FinanceStatementId == income.Id)
                                                                    .ToListAsync();

                AmountRecordCollection amountRecordCollection = new AmountRecordCollection(amountRecords.Select(x => AmountRecord.Load(x.Id, x.Description, x.Amount)));

                incomeCollection.Add(Income.Load(income.Id, income.Title, amountRecordCollection, income.ReferenceDate));
            }

            FinanceStatementCollection expenseCollection = new FinanceStatementCollection();

            foreach (var expense in expenses)
            {
                IEnumerable <Entities.AmountRecord> amountRecords = await _context
                                                                    .AmountRecords
                                                                    .Find(x => x.FinanceStatementId == expense.Id)
                                                                    .ToListAsync();

                AmountRecordCollection amountRecordCollection = new AmountRecordCollection(amountRecords.Select(x => AmountRecord.Load(x.Id, x.Description, x.Amount)));

                expenseCollection.Add(Expense.Load(expense.Id, expense.Title, amountRecordCollection, expense.ReferenceDate));
            }

            FinanceStatementCollection investmentsCollection = new FinanceStatementCollection();

            foreach (var investment in investments)
            {
                IEnumerable <Entities.AmountRecord> amountRecords = await _context
                                                                    .AmountRecords
                                                                    .Find(x => x.FinanceStatementId == investment.Id)
                                                                    .ToListAsync();

                AmountRecordCollection amountRecordCollection = new AmountRecordCollection(amountRecords.Select(x => AmountRecord.Load(x.Id, x.Description, x.Amount)));

                investmentsCollection.Add(Investment.Load(investment.Id, investment.Title, amountRecordCollection, investment.ReferenceDate));
            }

            Account result = Account.Load(
                account.Id,
                account.Actived,
                incomeCollection,
                expenseCollection,
                investmentsCollection
                );

            return(result);
        }