protected override void OnCreate(Bundle bundle) { base.OnCreate(bundle); CashPredictorInstance = Code.clsCashPredictor.Instance(this); mClassName = this.GetType().Name; // Get reference to paramaters Code.clsParameters parameters = Code.clsParameters.Instance(); // Set our view from the "main" layout resource SetContentView(Resource.Layout.Main); mBankDebitListView = FindViewById <ListView>(Resource.Id.fldBankDebitsListView); Code.clsBankDebitsListViewAdapter adapter = new Code.clsBankDebitsListViewAdapter(this, Code.clsBankDebitDB.GetBankDebits()); mBankDebitListView.Adapter = adapter; mBankDebitListView.ItemClick += BankDebitListView_ItemClick; Console.WriteLine("[{0}] Registered the item click event for the bank debit list view..", mClassName); mBtnUpdateOutgoings = FindViewById <Button>(Resource.Id.btnUpdateOutgoings); mBtnUpdateOutgoings.Click += (object sender, EventArgs e) => { var ListOutgoingsActivity = new Intent(this, typeof(Code.clsListOutgoings_Activity)); StartActivity(ListOutgoingsActivity); }; EditText mfldCurrentBalance = FindViewById <EditText>(Resource.Id.fldCurrentBalance); mfldCurrentBalance.AfterTextChanged += MfldCurrentBalance_AfterTextChanged; ProgressBar mProgressBarDaysUntilPayday = FindViewById <ProgressBar>(Resource.Id.progressBar1); float mDaysUntilNextPayDay = Code.HelperMethods.DaysUntilNextPayDay(); float mDaysInThisPayPeriod = Code.HelperMethods.DaysInThisPayPeriod(); mProgressBarDaysUntilPayday.Progress = Convert.ToInt32(((mDaysInThisPayPeriod - mDaysUntilNextPayDay) / mDaysInThisPayPeriod) * 100); TextView txtDaysUntilNextPayDay = FindViewById <TextView>(Resource.Id.txtDaysTillPayDay); // txtDaysUntilNextPayDay.Text = mDaysUntilNextPayDay.ToString() + " days until pay day"; CheckBox mfldIncudeInCalculation = FindViewById <CheckBox>(Resource.Id.txtIncudeInCalculation); // mfldIncudeInCalculation.CheckedChange += mfldIncudeInCalculation_CheckedChange; // Set the Payday TextView txtPayDate = FindViewById <TextView>(Resource.Id.txtPayDate); string myText = ""; myText = "Pay Day is the: " + parameters.PayDay.ToString() + Code.HelperMethods.DaySuffix(parameters.PayDay).ToString(); // Set the todays day text.. myText += " - Today is the " + DateTime.Now.Day.ToString() + Code.HelperMethods.DaySuffix(DateTime.Now.Day); txtPayDate.Text = myText; // Register the update balance method for any changes in the include in clacluation checkbox //Code.clsBankDebitsListViewAdapter. }
public static clsParameters Instance() { if (mInstance == null) { mInstance = new clsParameters(); } return(mInstance); }
public void CalculateListOfBankDebits() { //TODO: Ensure this takes into consideration that user may of set an include-in-calculation manually // Generate the list List <clsBankDebit> ListOfAllBankDebits = new List <clsBankDebit>(); // Get reference to paramaters clsParameters parameters = clsParameters.Instance(); DateTime Today = DateTime.Now; // Today = new DateTime(2017, 10, 27); int PayDay = parameters.PayDay; bool PayDayIsNextMonth = Today.Day > PayDay; // Cycle through the outgoings foreach (clsOutgoing Outgoing in clsOutgoingDB.GetOutgoings()) { if (Outgoing.Reoccuring == true) { DateTime TodayDateToUse = Today; // Calculate number remaining before pay day List <clsBankDebit> bankDebits = new List <clsBankDebit>(); bool HaveMovedToNextMonth = false; int DaysSinceLastBankDebit = Outgoing.Frequency; // Generate a list of the debits from one payday to the next int LastDayToCheck = PayDay; // Set last day to check as payday intially // If payday is next month then set lastdaytocheck to lastday of the month if (PayDayIsNextMonth) { LastDayToCheck = Code.HelperMethods.LastDayInMonth(TodayDateToUse); } // Loop from today to lastdaytocheck for (int d = TodayDateToUse.Day; d <= LastDayToCheck; d++) { DaysSinceLastBankDebit++; // check if this day is the same day of week as the outgoing DateTime CheckDate = new DateTime(TodayDateToUse.Year, TodayDateToUse.Month, d); if (((int)CheckDate.DayOfWeek == Outgoing.DayOfWeekLeavesAccount) && (DaysSinceLastBankDebit >= Outgoing.Frequency)) { DateTime DateLeavesAccount = new DateTime(TodayDateToUse.Year, TodayDateToUse.Month, d); bankDebits.Add(new clsBankDebit(-1, Outgoing.Description, Outgoing.Amount, d, DateLeavesAccount)); DaysSinceLastBankDebit = 0; } if (d == LastDayToCheck) { if (PayDayIsNextMonth && !HaveMovedToNextMonth) { LastDayToCheck = PayDay; d = 0; HaveMovedToNextMonth = true; TodayDateToUse = TodayDateToUse.AddMonths(1); TodayDateToUse = new DateTime(TodayDateToUse.Year, TodayDateToUse.Month, 1); } } } // Loop from today to Payday // Cycle throught the debits and remove those that are not valid i.e. before todays date but after pay day // Add the bankdebits to the list of bank debits foreach (clsBankDebit theBankDebit in bankDebits) { ListOfAllBankDebits.Add(theBankDebit); } } else { // If not re-occuring, add to the list if before next payday DateTime DateLeavesAccount = new DateTime(Today.Year, Today.Month, Outgoing.DayleavesAccount); // check if date in outgoing is next month, if so need to ass one to the month if (Outgoing.DayleavesAccount < Today.Day) { DateLeavesAccount = DateLeavesAccount.AddMonths(1); } bool saveBankDebit = true; if (PayDayIsNextMonth && (DateLeavesAccount.Day > PayDay)) { saveBankDebit = false; } if (!PayDayIsNextMonth && (DateLeavesAccount.Day < Today.Day)) { saveBankDebit = false; } if (saveBankDebit) { ListOfAllBankDebits.Add(new clsBankDebit(-1, Outgoing.Description, Outgoing.Amount, Outgoing.DayleavesAccount, DateLeavesAccount)); } } } // Sort the list by date order, using a bubble sort routine Code.clsBankDebit tempBankDebit; bool ListIsInOrder = false; do { ListIsInOrder = true; for (int i = 0; i < ListOfAllBankDebits.Count - 1; i++) { if (ListOfAllBankDebits[i + 1].DateLeaveAccount < ListOfAllBankDebits[i].DateLeaveAccount) { // Swap the entries over tempBankDebit = ListOfAllBankDebits[i]; ListOfAllBankDebits[i] = ListOfAllBankDebits[i + 1]; ListOfAllBankDebits[i + 1] = tempBankDebit; ListIsInOrder = false; } } } while (!ListIsInOrder); // Loop through all the bank debits and set include in calculation to false if today is the day it is due to come out of account and it is set do do so in the parameters if (parameters.SetReoccuringToFalseIfSameDayAsCurrentDay) { foreach (clsBankDebit i in ListOfAllBankDebits) { if (i.DateLeaveAccount.Day == Today.Day) { i.IncludeInCalculation = false; } } } //Save the list to the database class so can be used by other scripts clsDatabase DatabaseInstance = clsDatabase.Instance(); DatabaseInstance.BankDebits = ListOfAllBankDebits; }