public KontoEntriesHolder() { KontoEntries = new SortedList(new DescendingComparer()); NewKontoEntries = new SortedList(); SaldoHolder = new SaldoHolder(); }
public static void GetAllEntriesFromMobileHandelsBanken( HtmlElement htmlBody, SortedList kontoEntries, SortedList newKontoEntries, SaldoHolder saldoHolder) { var baseElement = htmlBody.FirstChild.FirstChild.FirstChild.FirstChild.NextSibling.NextSibling.FirstChild; var saldoElement = GetSaldoElement(baseElement); GetMobileHandelsBankenSaldo(saldoElement, saldoHolder); var kontoEntriesElement = GetKontoEntriesElement(baseElement); GetHtmlEntriesFromMobileHandelsbanken(kontoEntriesElement, kontoEntries, newKontoEntries); }
/// <summary> /// Körs flera gånger en per sida och får då ut flera olika konton och uppdaterar dess värde i saldo-tabellen. /// </summary> /// <param name="saldoElement"></param> /// <param name="saldon"></param> private static void GetMobileHandelsBankenSaldo(HtmlElement saldoElement, SaldoHolder saldoHolder) { var saldoName = saldoElement.FirstChild.FirstChild.InnerText; var saldoValueElem = saldoElement.FirstChild.NextSibling.NextSibling; var saldoValue = 0.0; if (saldoHolder.HasSaldoName(AllkortName) || saldoHolder.HasSaldoName("Allkortskonto")) { if (saldoName.Contains(AllkortName)) { // allkortHas = true; saldoName = AllkortName; } } if (saldoElement != null) { saldoValue = StringFuncions.RemoveSekFromMoneyString(saldoValueElem.InnerText). GetDoubleValueFromStringEntry(); saldoHolder.AddToOrChangeValueInDictionaryForKey(saldoName, saldoValue); } // Kolla disp. belopp var saldoNameDispBelopp = AllkortEjFaktureratName; saldoValueElem = saldoElement.FirstChild.NextSibling.NextSibling.NextSibling.FirstChild.NextSibling; var saldoValueDisp = 0.0; if (saldoElement != null && saldoName != LönekontoName) { saldoValueDisp = StringFuncions.RemoveSekFromMoneyString(saldoValueElem.InnerText). GetDoubleValueFromStringEntry(); // Räkna ut mellanskillnaden som motsvarar fakturerat och ej förfallet etc const int KreditBelopp = 10000; saldoValueDisp = saldoValue + KreditBelopp - saldoValueDisp; saldoHolder.AddToOrChangeValueInDictionaryForKey(saldoNameDispBelopp, -saldoValueDisp); } }
private static object[] GetTopRowWithHeaders(SaldoHolder saldoHolder) { // saldon var saldoColumnNumber = 11 + 1; var columnNames = new object[] { "y", "m", "d", "n", "t", "g", "s", "b", "", "", "", "c" }; var logArray = new object[columnNames.Length + saldoHolder.Saldon.Count]; var index = 0; foreach (var s in columnNames) { logArray[index++] = s; } foreach (var s in saldoHolder.Saldon) { logArray[saldoColumnNumber++] = s.SaldoValue; } return logArray; }
internal static LoadOrSaveResult Save( KontoutdragInfoForSave kontoutdragInfoForSave, SortedList kontoEntries, SaldoHolder saldoHolder) { try { // If nothing to save, return if (kontoEntries == null || kontoEntries.Count == 0) { return new LoadOrSaveResult(); } var logArray = GetTopRowWithHeaders(saldoHolder); var logThis = GetWhatToLogWithHeaders(ProgramSettings.BankType, logArray, kontoEntries); ReIndexKontoentriesToLatestOnTop(kontoEntries, logThis); // Gör någon backup el. likn. för att inte förlora data. Backupa dynamiskt. Så att om man skickar in en fil så backas den upp istället för huvudfilen...men de e rätt ok att backa huvudfilen BackupOrginialFile( "Before.Save", kontoutdragInfoForSave.excelFileSavePath, kontoutdragInfoForSave.excelFileSavePathWithoutFileName, kontoutdragInfoForSave.excelFileSaveFileName); // spara över gammalt, innan skrevs det på sist Logger.WriteToWorkBook( kontoutdragInfoForSave.excelFileSavePath, kontoutdragInfoForSave.sheetName, true, logThis); return new LoadOrSaveResult { skippedOrSaved = logThis.Count - 1, somethingLoadedOrSaved = false }; } catch (Exception savExcp) { MessageBox.Show(@"Error: " + savExcp.Message); return new LoadOrSaveResult(); } }
private static LoadOrSaveResult SkapaKontoEntries( SortedList saveToTable, Hashtable entriesLoadedFromDataStore, SaldoHolder saldoHolder) { var loadResult = new LoadOrSaveResult(); foreach (DictionaryEntry item in entriesLoadedFromDataStore) { if (item.Value != null) { var entryArray = ((ExcelRowEntry)item.Value).Args; // Om det är tomt if (entryArray == null) { continue; } // Om det är kolumnbeskrivning, skippa... if ((string)entryArray[0] == "y") { // var saldoAllkortKreditFakturerat = entryArray.Length > 15 ? entryArray[15] ?? saldoAllkortKreditFakturerat : saldoAllkortKreditFakturerat; var saldoColumnNumber = 11; if (ProgramSettings.BankType == BankType.Swedbank) { foreach (var saldoName in SwedbankSaldonames) { var saldot = entryArray.Length > saldoColumnNumber ? entryArray[saldoColumnNumber + 1] ?? string.Empty : string.Empty; // Todo, byt empty mot värden i saldon saldoHolder.AddToOrChangeValueInDictionaryForKey(saldoName, (double)saldot); saldoColumnNumber++; } } else if (ProgramSettings.BankType == BankType.Mobilhandelsbanken) { // Spara saldon, använd det gamla värdet om inget nytt hittats från fil. //var saldoLöne = saldoHolder.GetSaldoForName(LönekontoName); //var saldoAllkort = saldoHolder.GetSaldoForName(AllkortName); //var saldoAllkortKreditEjFakturerat = saldoHolder.GetSaldoForName(EjFaktureratEtcName); //var saldoLöne = GetValueIfNotEmpty(entryArray, 12); //var saldoAllkort = (string)(entryArray.Length > 13 ? entryArray[13] ?? saldoAllkort : saldoAllkort); //var saldoAllkortKreditEjFakturerat = (string)(entryArray.Length > 14 // ? entryArray[14] ?? saldoAllkortKreditEjFakturerat // : saldoAllkortKreditEjFakturerat); saldoHolder.AddToOrChangeValueInDictionaryForKey(LönekontoName, GetValueIfNotEmpty(entryArray, 12)); saldoHolder.AddToOrChangeValueInDictionaryForKey(AllkortName, GetValueIfNotEmpty(entryArray, 13)); saldoHolder.AddToOrChangeValueInDictionaryForKey( AllkortEjFaktureratName, GetValueIfNotEmpty(entryArray, 14) // + saldoAllkortKreditFakturerat.GetValueFromEntry() ); } // Hoppa över continue; } var newKe = new KontoEntry(entryArray, true); var key = newKe.KeyForThis; // item.Key as string; // Lägg till orginalraden, gör i UI-hanterare if (!saveToTable.ContainsKey(key)) { #region old debug // AddToRichTextBox(richTextBox1, newKE.RowToSaveForThis); // test debug // if (_newKontoEntries.Count < 6) // { // if (!_newKontoEntries.ContainsKey(key)) // { // _newKontoEntries.Add(key, newKE); // //AddToListview(m_newIitemsListOrg, newKE); // } // } // else #endregion saveToTable.Add(key, newKe); // CreateKE(entryArray, true) loadResult.somethingLoadedOrSaved = true; } else { // Detta ordnar sig, så länge saldot är med i nyckeln, det är den, så det gäller bara att ha rätt saldo i xls //Om man tagit utt t.ex. 100kr 2 ggr samma dag, från samma bankomat. hm, sätt 1 etta efteråt, men det göller ju bara det som är såna, hm, får ta dem manuellt // skulle kunna tillåta någon inläsning här ev. // om man kan förutsätta att xls:en är kollad, // det får bli här man lägger till specialdubbletter manuellt Console.WriteLine("Entry Double found. Key = " + key); // meddela detta till usern, man ser de på skipped... loadResult.skippedOrSaved++; } } } return loadResult; }
private static void GetSwedbankSaldo(HtmlElement htmlElement, SaldoHolder saldoHolder) { // foreach (HtmlElement currentElem in htmlElement.Children) { // if (currentElem.InnerText != null && currentElem.InnerText.Contains("Saldo")) { var nextIsSaldo = false; // var nextIsLöne = false; var saldoName = string.Empty; foreach (HtmlElement currentSubElem in htmlElement.All) { if (nextIsSaldo) { if (saldoName != string.Empty) { var saldoValue = currentSubElem.InnerText; saldoHolder.AddToOrChangeValueInDictionaryForKey(saldoName, saldoValue); break; } } if (currentSubElem.InnerText != null) { if (!currentSubElem.TagName.Equals("OPTION") && // h3 currentSubElem.TagName.Equals("H3")) { foreach (var currentSaldoName in SwedbankSaldonames) { if (currentSubElem.InnerText.Contains(currentSaldoName)) { saldoName = currentSaldoName; } } // if (currentSubElem.InnerText.Contains("8417-8,4 751 687-7")) // nextIsLöne = true; // else if (currentSubElem.InnerText.Contains("Privatkonto 8417-8,4 751 687-7")) // saldoNameNnumber = "Privatkonto 8417-8,4 751 687-7"; } if (currentSubElem.InnerText.Equals("Saldo")) { nextIsSaldo = true; } } } }
/// <summary> /// Sparar till Excel-fil /// </summary> public static LoadOrSaveResult GetAllEntriesFromExcelFile( KontoutdragInfoForLoad kontoutdragInfoForLoad, SortedList saveToTable, SaldoHolder saldoHolder, Hashtable entriesLoadedFromDataStore) { // Töm alla tidigare entries i minnet om det ska laddas helt ny fil el. likn. if (kontoutdragInfoForLoad.clearContentBeforeReadingNewFile) { saveToTable.Clear(); } // Görs i Ui-handling, UpdateEntriesToSaveMemList(); // Skapa kontoentries // För att se om det laddats något, så UI-uppdateras etc. Så returneras bool om det... return SkapaKontoEntries(saveToTable, entriesLoadedFromDataStore, saldoHolder); }
public static DialogResult SaveCheckWithArgs( KontoutdragInfoForLoad kontoutdragInfoForSave, SortedList kontoEntries, SaldoHolder saldoHolder) { var saveOr = DialogResult.None; if (kontoutdragInfoForSave.somethingChanged) { saveOr = MessageBox.Show(@"Läget ej sparat! Spara nu?", @"Spara?", MessageBoxButtons.YesNoCancel); // Cancel if (saveOr == DialogResult.Yes) { SaveKonton.Save (kontoutdragInfoForSave, kontoEntries, saldoHolder); } } return saveOr; }
public KontoutdragInfo() { KontoEntries = new SortedList(new DescendingComparer()); saldoHolder = new SaldoHolder(); }