public static void SaveInputsFileAsync(string filename, DebtApp debtApp, Action callBack = null)
 {
   if (String.IsNullOrEmpty(InputsFileDatabase.Shared.CurrentInputsFile))
   {
     SaveNewInputsFile(debtApp, callBack);
   }
   else
   {
     InputsFileDatabase.Shared.SaveInputsFile(
       InputsFileDatabase.Shared.CurrentInputsFile, debtApp);
     if (callBack != null)
       callBack();
   }
 }
    async public static void SaveNewInputsFile(DebtApp debtApp, Action callBack)
    {
      var result = await UserDialogs.Instance.PromptAsync(new PromptConfig
        {
          Title = "Scenario Name",
          Text = "Sample Name",
          IsCancellable = true
        });

      if (result.Ok == true)
      {
        InputsFileDatabase.Shared.SaveInputsFile(Path.Combine(Paths.SavedFilesDirectory, result.Text), debtApp);
        if (callBack != null)
          callBack();
      }
    }
 public static void SaveUserDefaults(DebtApp debtApp)
 {
   InputsFileDatabase.Shared.SaveUserDefaults(debtApp);
 }
 public static void LoadOnAppLaunch(DebtApp debtApp)
 {
   InputsFileDatabase.Shared.LoadOnAppLaunch(debtApp);
 }
 public static void LoadInputsFile(string filePath, DebtApp debtApp, Action callBack)
 {
   InputsFileDatabase.Shared.LoadInputsFile(filePath, debtApp);
   callBack();
 }
        /// <summary>
        /// Function to load inputs for the aircraft from a save file.
        /// </summary>
        /// <param name="bFromInit">If we are getting inputs from application open</param>
        /// <param name="bUpdateAIUserDefault"></param>
        public bool LoadInputsFile(string openFilePath, DebtApp debtApp)
        {
            debtApp.DebtManager.Debts.Clear();
              debtApp.PaymentManager.WindfallEntries.Clear();
              debtApp.PaymentManager.SalaryEntries.Clear();
              debtApp.PaymentManager.SnowballEntries.Clear ();

              _currentInputsFile = openFilePath;

              foreach (var item in File.ReadAllLines(openFilePath))
              {
            Console.WriteLine(item);
              }

              try
              {
            using (XmlReader readInputs = XmlReader.Create(openFilePath))
            {
              while (readInputs.Read())
              {
            //only detect start elements.
            if (readInputs.IsStartElement())
            {
              //Get element name and switch on it
              switch (readInputs.Name)
              {
                case "FileInfo":
                DateTime temp = DateTime.Now;
                DateTime.TryParse(readInputs["Date"], out temp);
                debtApp.ModifiedDate = temp;
                  break;
                case "Debts":
                  //Detect this element.
                  Console.WriteLine("Start <Debts> element.");
                  break;
                case "Payments":
                  //Detect this element.
                  Console.WriteLine("Start <Payments> element.");
                  break;
                case "DebtEntry":
                  {
                    Console.WriteLine("Start <DebtEntry> element.");
                    debtApp.DebtManager.Debts.Add(
                      new DebtEntry(
                        (string)readInputs["Name"],
                        Double.Parse(readInputs["StartingBalance"]),
                        Double.Parse(readInputs["CurrentBalance"]),
                        Double.Parse(readInputs["YearlyInterestRate"]),
                        Int32.Parse(readInputs["LoanTerm"]),
                        (DebtType)Enum.Parse(typeof(DebtType), readInputs["DebtType"])));
                      break;
                  }
                case "SnowballEntry":
                  {
                    //Detect this element.
                    Console.WriteLine ("Start <SnowballEntry> element.");
                    debtApp.PaymentManager.SnowballEntries.Add (
                      new SnowballEntry (
                        (string)readInputs ["Name"],
                        Double.Parse (readInputs ["Amount"])));
                    break;
                  }
                case "SalaryEntry":
                  {
                    Console.WriteLine("Start <SalaryEntry> element.");
                    debtApp.PaymentManager.SalaryEntries.Add(
                      new SalaryEntry(
                        (string)readInputs["Name"],
                        Double.Parse(readInputs["StartingSalary"]),
                        Double.Parse(readInputs["YearlySnowballIncreasePercent"]),
                        DateTime.Parse(readInputs["YearlyIncreaseAppliedDate"])));

                    break;
                  }
                case "WindfallEntry":
                  {
                    Console.WriteLine("Start <SalaryEntry> element.");
                    debtApp.PaymentManager.WindfallEntries.Add(
                      new WindfallEntry(
                        (string)readInputs["Name"],
                        Double.Parse(readInputs["WindfallAmount"]),
                        DateTime.Parse(readInputs["WindfallDate"]),
                        Boolean.Parse(readInputs["IsRecurring"]),
                        Int32.Parse(readInputs["RecurringFrequency"])));
                    break;
                  }
              }
            }
              }
              readInputs.Close();
            }
              }
              catch (Exception ex)
              {
            return false;
              }
              return true;
        }
        private void SaveInputsFileWorker(string filename, DebtApp data)
        {
            if (!Directory.Exists(Paths.SavedFilesDirectory))
            Directory.CreateDirectory(Paths.SavedFilesDirectory);

              if (!Directory.Exists (Paths.DefaultsDirectory))
            Directory.CreateDirectory (Paths.DefaultsDirectory);

              bool fileAdded = false;

              if (File.Exists(filename) == false)
              {
            fileAdded = true;
              }

              XmlWriterSettings setting = new XmlWriterSettings();
              setting.Indent = true;

              using (XmlWriter input = XmlWriter.Create(filename, setting))
              {
            input.WriteStartDocument();
            input.WriteStartElement("Root");
            //Create a section for file info- date, time, version#
            input.WriteStartElement("FileInfo");
            input.WriteAttributeString("ProgramName", "Debt Calculator");
            input.WriteAttributeString("ProgramVersion", "0.0.0.3");
            input.WriteAttributeString("PathFileName", filename);
            input.WriteAttributeString("Date", DateTime.Now.ToString("MM.dd.yyyy"));
            input.WriteAttributeString("Time", DateTime.Now.ToString("HH:mm"));
            input.WriteAttributeString("VersionMajor", FileVersionMajor);
            input.WriteAttributeString("VersionMinor", FileVersionMinor);
            input.WriteEndElement(); // FileInfo

            input.WriteStartElement("Debts");
            //Iterate through Inputs to save their current values
            foreach (DebtEntry entry in data.DebtManager.Debts)
            {
              input.WriteStartElement("DebtEntry");
              input.WriteAttributeString("Name", entry.Name);
              input.WriteAttributeString("StartingBalance", entry.StartingBalance.ToString());
              input.WriteAttributeString("CurrentBalance", entry.CurrentBalance.ToString());
              input.WriteAttributeString("YearlyInterestRate", entry.YearlyInterestRate.ToString());
              input.WriteAttributeString("LoanTerm", entry.LoanTerm.ToString());
              input.WriteAttributeString("DebtType", entry.DebtType.ToString());
              input.WriteEndElement(); // DebtEntry
            }

            input.WriteEndElement(); // Debts

            input.WriteStartElement("Payments");

            foreach (SalaryEntry entry in data.PaymentManager.SalaryEntries)
            {
              input.WriteStartElement("SalaryEntry");
              input.WriteAttributeString("Name", entry.Name);
              input.WriteAttributeString("StartingSalary", entry.StartingSalary.ToString());
              input.WriteAttributeString("YearlyIncreaseAppliedDate", entry.YearlyIncreaseAppliedDate.ToString());
              input.WriteAttributeString("YearlySnowballIncreasePercent", entry.YearlySnowballIncreasePercent.ToString());
              input.WriteEndElement(); // SalaryEntry
            }

            foreach (WindfallEntry entry in data.PaymentManager.WindfallEntries)
            {
              input.WriteStartElement("WindfallEntry");
              input.WriteAttributeString("Name", entry.Name);
              input.WriteAttributeString("WindfallAmount", entry.Amount.ToString());
              input.WriteAttributeString("IsRecurring", entry.IsRecurring.ToString());
              input.WriteAttributeString("RecurringFrequency", entry.RecurringFrequency.ToString());
              input.WriteAttributeString("WindfallDate", entry.WindfallDate.ToString());
              input.WriteEndElement(); // WindfallEntry
            }

            foreach (SnowballEntry entry in data.PaymentManager.SnowballEntries)
            {
              input.WriteStartElement ("SnowballEntry");
              input.WriteAttributeString ("Name", entry.Name);
              input.WriteAttributeString ("Amount", entry.Amount.ToString ());
              input.WriteEndElement (); // WindfallEntry
            }

            input.WriteEndElement(); // Payments
            input.WriteEndElement(); // Root
            input.WriteEndDocument();
            input.Flush();
            input.Close();
              }

              if (fileAdded)
            OnFileListChanged();
        }
 public void SaveUserDefaults(DebtApp data)
 {
     SaveInputsFileWorker(_previousInputsFile, data);
 }
 public void SaveInputsFile(string filename, DebtApp data)
 {
     SaveInputsFileWorker(filename, data);
       _currentInputsFile = filename;
 }
 public void LoadOnAppLaunch(DebtApp data)
 {
     if (File.Exists(_previousInputsFile))
       {
     LoadInputsFile(_previousInputsFile, data);
       }
       _currentInputsFile = string.Empty;
 }