// TODO: use database ID for edit
        public EditUniqueItemVM(bool _IsAdd, int _ItemId)   // _RegularItemId could be NEW_REGULAR_ITEM_ID
        {
            m_ShowAddButton = _IsAdd;

            if (_ItemId != NEW_REGULAR_ITEM_ID)
            {
                UniqueExpenseItemId = _ItemId;

                UniqueExpensesStorage db = App.GlobalPersistanceService.GetUniqueExpensesStorage();
                UniqueExpenseItem     ri = db.GetUniqueExpense(_ItemId);

                this.Date = ri.Date.ToLocalTime();
                this.Name = ri.Name;
                int am = ri.Amount;
                m_IsIncome  = am > 0;                                                         // save "income" or "expense"
                this.Amount = DataConversion.ConvertCentsToCurrency(Math.Abs(am)).ToString(); // display abs amount
            }
            else
            {
                UniqueExpenseItemId = NEW_REGULAR_ITEM_ID;

                Name   = "";
                Amount = "";
                Date   = DateTimeOffset.Now.Date;
            }

            UpdateButtonColor = m_IsIncome ? "ForestGreen" : "DarkRed";

            UpdateButtonText = m_IsIncome ? "Update Income" : "Update Expense";
        }
        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;
        }