// 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); }
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; }