Example #1
0
        public void TestBalanceSheetNoAccounts()
        {
            ILoggerFactory loggerFactory = new LoggerFactory();

            using (var sqliteMemoryWrapper = new SqliteMemoryWrapper())
            {
                var currencyFactory   = new CurrencyFactory();
                var usdCurrencyEntity = currencyFactory.Create(CurrencyPrefab.Usd, true);
                currencyFactory.Add(sqliteMemoryWrapper.DbContext, usdCurrencyEntity);

                var accountService = new AccountService(
                    loggerFactory,
                    sqliteMemoryWrapper.DbContext
                    );
                var currencyService = new CurrencyService(
                    loggerFactory,
                    sqliteMemoryWrapper.DbContext
                    );
                var balanceSheetService = new BalanceSheetService(
                    loggerFactory,
                    sqliteMemoryWrapper.DbContext
                    );

                BalanceSheet balanceSheet = balanceSheetService.Generate(new DateTime(2018, 1, 1));

                Assert.AreEqual(usdCurrencyEntity.Symbol, balanceSheet.CurrencySymbol);
                Assert.AreEqual(0, balanceSheet.TotalAssets);
                Assert.AreEqual(0, balanceSheet.TotalLiabilities);
                Assert.AreEqual(0, balanceSheet.Assets.Count());
                Assert.AreEqual(0, balanceSheet.Liabilities.Count());
            }
        }
Example #2
0
        public FinanceResponse Calc(BalanceSheetCalcRequest request)
        {
            if (request == null)
            {
                throw new FinanceException(FinanceResult.NULL);
            }
            var dict = BalanceSheetService.GetInstance(Request.Properties).Calc(request.filter, request.template);

            return(new BalanceSheetCalcResponse {
                Content = dict
            });
        }
Example #3
0
        public void TestBalanceSheetNoTransactions()
        {
            ILoggerFactory loggerFactory = new LoggerFactory();

            using (var sqliteMemoryWrapper = new SqliteMemoryWrapper())
            {
                var currencyFactory   = new CurrencyFactory();
                var usdCurrencyEntity = currencyFactory.Create(CurrencyPrefab.Usd, true);
                currencyFactory.Add(sqliteMemoryWrapper.DbContext, usdCurrencyEntity);

                var accountFactory = new AccountFactory();
                Entities.Account incomeAccountEntity =
                    accountFactory.Create(AccountPrefab.Income, usdCurrencyEntity);
                Entities.Account checkingAccountEntity =
                    accountFactory.Create(AccountPrefab.Checking, usdCurrencyEntity);
                Entities.Account capitalAccountEntity =
                    accountFactory.Create(AccountPrefab.Capital, usdCurrencyEntity);
                Entities.Account rentExpenseAccountEntity =
                    accountFactory.Create(AccountPrefab.RentExpense, usdCurrencyEntity);
                Entities.Account creditCardAccountEntity =
                    accountFactory.Create(AccountPrefab.CreditCard, usdCurrencyEntity);

                accountFactory.Add(sqliteMemoryWrapper.DbContext, incomeAccountEntity);
                accountFactory.Add(sqliteMemoryWrapper.DbContext, checkingAccountEntity);
                accountFactory.Add(sqliteMemoryWrapper.DbContext, capitalAccountEntity);
                accountFactory.Add(sqliteMemoryWrapper.DbContext, rentExpenseAccountEntity);
                accountFactory.Add(sqliteMemoryWrapper.DbContext, creditCardAccountEntity);

                var accountService = new AccountService(
                    loggerFactory,
                    sqliteMemoryWrapper.DbContext
                    );
                var currencyService = new CurrencyService(
                    loggerFactory,
                    sqliteMemoryWrapper.DbContext
                    );
                var balanceSheetService = new BalanceSheetService(
                    loggerFactory,
                    sqliteMemoryWrapper.DbContext
                    );

                BalanceSheet            balanceSheet            = balanceSheetService.Generate(new DateTime(2018, 1, 1));
                List <BalanceSheetItem> balanceSheetAssets      = balanceSheet.Assets.ToList();
                List <BalanceSheetItem> balanceSheetLiabilities = balanceSheet.Liabilities.ToList();

                Assert.AreEqual(usdCurrencyEntity.Symbol, balanceSheet.CurrencySymbol);
                Assert.AreEqual(0, balanceSheet.TotalAssets);
                Assert.AreEqual(0, balanceSheet.TotalLiabilities);
                Assert.AreEqual(0, balanceSheetAssets.Count);
                Assert.AreEqual(0, balanceSheetLiabilities.Count);
            }
        }
Example #4
0
        public HomeController()
        {
            var unitOfWork = new EFUnitOfWork();

            _balanceSheetService = new Service.BalanceSheetService(unitOfWork);
        }
Example #5
0
        public void TestBalanceSheetWithLogicalAccounts()
        {
            ILoggerFactory loggerFactory = new LoggerFactory();

            using (var sqliteMemoryWrapper = new SqliteMemoryWrapper())
            {
                var currencyFactory   = new CurrencyFactory();
                var usdCurrencyEntity = currencyFactory.Create(CurrencyPrefab.Usd, true);
                currencyFactory.Add(sqliteMemoryWrapper.DbContext, usdCurrencyEntity);

                var accountFactory = new AccountFactory();
                Entities.Account incomeAccountEntity =
                    accountFactory.Create(AccountPrefab.Income, usdCurrencyEntity);
                Entities.Account checkingAccountEntity =
                    accountFactory.Create(AccountPrefab.Checking, usdCurrencyEntity);
                Entities.Account rentPrepaymentAccountEntity =
                    accountFactory.Create(AccountPrefab.RentPrepayment, usdCurrencyEntity);
                Entities.Account groceriesPrepaymentAccountEntity =
                    accountFactory.Create(AccountPrefab.GroceriesPrepayment, usdCurrencyEntity);
                accountFactory.Add(sqliteMemoryWrapper.DbContext, incomeAccountEntity);
                accountFactory.Add(sqliteMemoryWrapper.DbContext, checkingAccountEntity);
                accountFactory.Add(sqliteMemoryWrapper.DbContext, rentPrepaymentAccountEntity);
                accountFactory.Add(sqliteMemoryWrapper.DbContext, groceriesPrepaymentAccountEntity);

                var checkingToRentPrepaymentRelationship = new Entities.AccountRelationship
                {
                    SourceAccount      = checkingAccountEntity,
                    DestinationAccount = rentPrepaymentAccountEntity,
                    Type = AccountRelationshipType.PhysicalToLogical
                };
                var checkingToGroceriesPrepaymentRelationship = new Entities.AccountRelationship
                {
                    SourceAccount      = checkingAccountEntity,
                    DestinationAccount = groceriesPrepaymentAccountEntity,
                    Type = AccountRelationshipType.PhysicalToLogical
                };

                sqliteMemoryWrapper.DbContext.AccountRelationships.Add(checkingToRentPrepaymentRelationship);
                sqliteMemoryWrapper.DbContext.AccountRelationships.Add(checkingToGroceriesPrepaymentRelationship);
                sqliteMemoryWrapper.DbContext.SaveChanges();

                var transactions = new Entities.Transaction[]
                {
                    new Entities.Transaction
                    {
                        CreditAccount = incomeAccountEntity,
                        DebitAccount  = checkingAccountEntity,
                        Amount        = 100m,
                        At            = new DateTime(2018, 1, 1)
                    },// income=100CR,checking=100DR
                    new Entities.Transaction
                    {
                        CreditAccount = checkingAccountEntity,
                        DebitAccount  = rentPrepaymentAccountEntity,
                        Amount        = 40m,
                        At            = new DateTime(2018, 1, 1)
                    },// income=100CR,(checking=60DR,rent-prepayment=40DR)=100DR
                    new Entities.Transaction
                    {
                        CreditAccount = checkingAccountEntity,
                        DebitAccount  = groceriesPrepaymentAccountEntity,
                        Amount        = 20m,
                        At            = new DateTime(2018, 1, 1)
                    }// income=100CR,(checking=40DR,rent-prepayment=40DR,groceries-prepayment=20DR)=100DR
                };
                sqliteMemoryWrapper.DbContext.Transactions.AddRange(transactions);
                sqliteMemoryWrapper.DbContext.SaveChanges();

                var accountService = new AccountService(
                    loggerFactory,
                    sqliteMemoryWrapper.DbContext
                    );
                var currencyService = new CurrencyService(
                    loggerFactory,
                    sqliteMemoryWrapper.DbContext
                    );
                var balanceSheetService = new BalanceSheetService(
                    loggerFactory,
                    sqliteMemoryWrapper.DbContext
                    );

                BalanceSheet            balanceSheet            = balanceSheetService.Generate(new DateTime(2018, 1, 1));
                List <BalanceSheetItem> balanceSheetAssets      = balanceSheet.Assets.ToList();
                List <BalanceSheetItem> balanceSheetLiabilities = balanceSheet.Liabilities.ToList();

                Assert.AreEqual(usdCurrencyEntity.Symbol, balanceSheet.CurrencySymbol);
                Assert.AreEqual(100, balanceSheet.TotalAssets);
                Assert.AreEqual(0, balanceSheet.TotalLiabilities);
                Assert.AreEqual(100, balanceSheet.NetWorth);
                Assert.AreEqual(1, balanceSheetAssets.Count);
                Assert.AreEqual(0, balanceSheetLiabilities.Count);
                Assert.AreEqual(checkingAccountEntity.Name, balanceSheetAssets[0].Name);
                Assert.AreEqual(100, balanceSheetAssets[0].Balance);
            }
        }
Example #6
0
        public void TestBalanceSheetWithTransactions()
        {
            ILoggerFactory loggerFactory = new LoggerFactory();

            using (var sqliteMemoryWrapper = new SqliteMemoryWrapper())
            {
                var currencyFactory   = new CurrencyFactory();
                var usdCurrencyEntity = currencyFactory.Create(CurrencyPrefab.Usd, true);
                currencyFactory.Add(sqliteMemoryWrapper.DbContext, usdCurrencyEntity);

                var accountFactory = new AccountFactory();
                Entities.Account incomeAccountEntity =
                    accountFactory.Create(AccountPrefab.Income, usdCurrencyEntity);
                Entities.Account checkingAccountEntity =
                    accountFactory.Create(AccountPrefab.Checking, usdCurrencyEntity);
                Entities.Account capitalAccountEntity =
                    accountFactory.Create(AccountPrefab.Capital, usdCurrencyEntity);
                Entities.Account rentExpenseAccountEntity =
                    accountFactory.Create(AccountPrefab.RentExpense, usdCurrencyEntity);
                Entities.Account creditCardAccountEntity =
                    accountFactory.Create(AccountPrefab.CreditCard, usdCurrencyEntity);

                accountFactory.Add(sqliteMemoryWrapper.DbContext, incomeAccountEntity);
                accountFactory.Add(sqliteMemoryWrapper.DbContext, checkingAccountEntity);
                accountFactory.Add(sqliteMemoryWrapper.DbContext, capitalAccountEntity);
                accountFactory.Add(sqliteMemoryWrapper.DbContext, rentExpenseAccountEntity);
                accountFactory.Add(sqliteMemoryWrapper.DbContext, creditCardAccountEntity);

                var transactions = new Entities.Transaction[]
                {
                    new Entities.Transaction
                    {
                        CreditAccount = capitalAccountEntity,
                        DebitAccount  = checkingAccountEntity,
                        Amount        = 100m,
                        At            = new DateTime(2018, 1, 1)
                    },// capital=100CR,checking=100DR
                    new Entities.Transaction
                    {
                        CreditAccount = creditCardAccountEntity,
                        DebitAccount  = rentExpenseAccountEntity,
                        Amount        = 40m,
                        At            = new DateTime(2018, 1, 2)
                    },// capital=100CR,checking=100DR,credit-card=40CR,rent=40DR
                    new Entities.Transaction
                    {
                        CreditAccount = checkingAccountEntity,
                        DebitAccount  = creditCardAccountEntity,
                        Amount        = 40m,
                        At            = new DateTime(2018, 1, 3)
                    },// capital=100CR,checking=60DR,rent=40DR
                    new Entities.Transaction
                    {
                        CreditAccount = incomeAccountEntity,
                        DebitAccount  = checkingAccountEntity,
                        Amount        = 200m,
                        At            = new DateTime(2018, 1, 4)
                    }// capital=100CR,checking=260DR,rent=40DR,income=200CR
                };
                sqliteMemoryWrapper.DbContext.Transactions.AddRange(transactions);
                sqliteMemoryWrapper.DbContext.SaveChanges();

                var accountService = new AccountService(
                    loggerFactory,
                    sqliteMemoryWrapper.DbContext
                    );
                var currencyService = new CurrencyService(
                    loggerFactory,
                    sqliteMemoryWrapper.DbContext
                    );
                var balanceSheetService = new BalanceSheetService(
                    loggerFactory,
                    sqliteMemoryWrapper.DbContext
                    );

                BalanceSheet            balanceSheetBeforeTransactions            = balanceSheetService.Generate(new DateTime(2017, 1, 1));
                List <BalanceSheetItem> balanceSheetBeforeTransactionsAssets      = balanceSheetBeforeTransactions.Assets.ToList();
                List <BalanceSheetItem> balanceSheetBeforeTransactionsLiabilities = balanceSheetBeforeTransactions.Liabilities.ToList();

                Assert.AreEqual(usdCurrencyEntity.Symbol, balanceSheetBeforeTransactions.CurrencySymbol);
                Assert.AreEqual(0, balanceSheetBeforeTransactions.TotalAssets);
                Assert.AreEqual(0, balanceSheetBeforeTransactions.TotalLiabilities);
                Assert.AreEqual(0, balanceSheetBeforeTransactions.NetWorth);
                Assert.AreEqual(0, balanceSheetBeforeTransactionsAssets.Count);
                Assert.AreEqual(0, balanceSheetBeforeTransactionsLiabilities.Count);

                BalanceSheet            balanceSheetTwoTransactions            = balanceSheetService.Generate(new DateTime(2018, 1, 2));
                List <BalanceSheetItem> balanceSheetTwoTransactionsAssets      = balanceSheetTwoTransactions.Assets.ToList();
                List <BalanceSheetItem> balanceSheetTwoTransactionsLiabilities = balanceSheetTwoTransactions.Liabilities.ToList();

                Assert.AreEqual(usdCurrencyEntity.Symbol, balanceSheetTwoTransactions.CurrencySymbol);
                Assert.AreEqual(100, balanceSheetTwoTransactions.TotalAssets);
                Assert.AreEqual(-40, balanceSheetTwoTransactions.TotalLiabilities);
                Assert.AreEqual(60, balanceSheetTwoTransactions.NetWorth);
                Assert.AreEqual(1, balanceSheetTwoTransactionsAssets.Count);
                Assert.AreEqual(1, balanceSheetTwoTransactionsLiabilities.Count);
                Assert.AreEqual(checkingAccountEntity.Name, balanceSheetTwoTransactionsAssets[0].Name);
                Assert.AreEqual(100, balanceSheetTwoTransactionsAssets[0].Balance);
                Assert.AreEqual(creditCardAccountEntity.Name, balanceSheetTwoTransactionsLiabilities[0].Name);
                Assert.AreEqual(-40, balanceSheetTwoTransactionsLiabilities[0].Balance);

                BalanceSheet            balanceSheetAtEnd            = balanceSheetService.Generate(new DateTime(2018, 2, 1));
                List <BalanceSheetItem> balanceSheetAtEndAssets      = balanceSheetAtEnd.Assets.ToList();
                List <BalanceSheetItem> balanceSheetAtEndLiabilities = balanceSheetAtEnd.Liabilities.ToList();

                Assert.AreEqual(usdCurrencyEntity.Symbol, balanceSheetAtEnd.CurrencySymbol);
                Assert.AreEqual(260, balanceSheetAtEnd.TotalAssets);
                Assert.AreEqual(0, balanceSheetAtEnd.TotalLiabilities);
                Assert.AreEqual(260, balanceSheetAtEnd.NetWorth);
                Assert.AreEqual(1, balanceSheetAtEndAssets.Count);
                Assert.AreEqual(1, balanceSheetAtEndLiabilities.Count);
                Assert.AreEqual(checkingAccountEntity.Name, balanceSheetAtEndAssets[0].Name);
                Assert.AreEqual(260, balanceSheetAtEndAssets[0].Balance);
                Assert.AreEqual(creditCardAccountEntity.Name, balanceSheetAtEndLiabilities[0].Name);
                Assert.AreEqual(0, balanceSheetAtEndLiabilities[0].Balance);
            }
        }