// TODO: use stored cached data to create VM (possibly ?)
        internal UniqueExpensesVM GetAllUniqueExpenses()
        {
            UniqueExpensesVM outputUniqueExpenses = new UniqueExpensesVM();

            try
            {
                using (SQLite.Net.SQLiteConnection conn = new SQLite.Net.SQLiteConnection(new SQLite.Net.Platform.WinRT.SQLitePlatformWinRT(), App.DB_PATH))
                {
                    var dbTable = conn.Table <UniqueExpenseItem>();

                    var listOfUniqueExpenses = (from r in dbTable
                                                orderby r.Date descending
                                                select new UniqueExpenseItem(r.Id, r.Date, r.Amount, r.Name)
                                                );

                    // build VM
                    int totalAmount = 0;

                    // 1) list
                    foreach (UniqueExpenseItem uei in listOfUniqueExpenses)
                    {
                        // eventually, store the current DB value
                        outputUniqueExpenses.AddExpense(new UniqueExpenseVM(uei.Id, uei.Date.ToLocalTime(), uei.Amount, uei.Name));

                        totalAmount += uei.Amount;
                    }

                    // 2) total
                    outputUniqueExpenses.SetTotal(totalAmount);
                }
            }
            catch
            {
            }

            // return built result
            return(outputUniqueExpenses);
        }
Пример #2
0
        private void ReadContactList_Loaded(object sender, RoutedEventArgs e)
        {
            ExpensesStorage dbcontacts  = new ExpensesStorage();
            AllExpensesVM   allExpenses = new AllExpensesVM();

            // everyday expenses
            ExpensesVM expenses = dbcontacts.GetAllExpenses();//Get all DB expenses

            allExpenses.Expenses = expenses;

            // unique expenses
            UniqueExpensesStorage db             = App.GlobalPersistanceService.GetUniqueExpensesStorage();
            UniqueExpensesVM      uniqueExpenses = db.GetAllUniqueExpenses();

            allExpenses.UniqueExpenses = uniqueExpenses;

            // overall
            // TODO: use DB
            //UniqueExpensesStorage db = new UniqueExpensesStorage();
            //OverallVM overall = db.GetAllUniqueExpenses();

            OverallVM overall = new OverallVM(new DateTime(2018, 03, 25), DateTime.Now, new DateTime(2018, 06, 22), App.GlobalPersistanceService.GetAverageSavingsPerDay(),
                                              new DateTime(2018, 03, 29), 7855);

            allExpenses.Overall = overall;


            this.DataContext = allExpenses;


            // use Binding, not setters!!

            //            TotalStatistics stats = new DatabaseHelperClass().GetTotalStatistics();

            //            w_TotalExpenses.Text = string.Format("{0:C}", DataConversion.ConvertCentsToCurrency(stats.m_TotalExpenses));

            // set list data - recent dates first
            //            listBoxobj.ItemsSource = DB_ContactList.OrderByDescending(i => i.Date).ToList();


            Random rand = new Random();
            List <FinancialStuff> financialStuffList = new List <FinancialStuff>();

            int   idx = 0;;
            float sum = 78.55f;

            // sum up unique expenses before first regular date
            if (allExpenses.Expenses.ExpensesList.Count > 0)
            {
                DateTime dateOnlyFrom = allExpenses.Expenses.ExpensesList[allExpenses.Expenses.ExpensesList.Count - 1].GetDateOnly().Date;
                var      uniqueExpensesBeforeTheDate = allExpenses.UniqueExpenses.ExpensesList.Where((v) => ((v.Date < dateOnlyFrom))).Sum((v) => v.SignedAmount);
                sum += uniqueExpensesBeforeTheDate;
            }

            DateTime now = DateTime.Now;

            for (int i = allExpenses.Expenses.ExpensesList.Count - 1, ei = 0; i >= ei; --i)
            {
                var r = allExpenses.Expenses.ExpensesList[i];
                sum += r.Amount;

                // get unique expenses for the date
                DateTime dateOnlyFrom             = r.GetDateOnly().Date;
                DateTime dateOnlyTo               = dateOnlyFrom.AddDays(1).Date;
                var      uniqueExpensesForTheDate = allExpenses.UniqueExpenses.ExpensesList.Where((v) => ((v.Date >= dateOnlyFrom) && (v.Date < dateOnlyTo))).Sum((v) => v.SignedAmount);

                sum += uniqueExpensesForTheDate;

                // display 30 last days (to limit amount of chart data)
                if ((DateTime.Now - r.GetDateOnly()).Days < 30)
                {
                    // add point to the chart
                    financialStuffList.Add(new FinancialStuff()
                    {
                        IdX = idx, Amount = sum
                    });
                    idx += 1;
                }
            }

            (LineChart.Series[0] as LineSeries).ItemsSource = financialStuffList;
        }