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);
            }
        }
예제 #4
0
        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;
        }
예제 #5
0
        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();
            }
        }
예제 #6
0
        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;
        }
예제 #7
0
        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;
                    }
                }
            }
        }
예제 #8
0
        /// <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);
        }
예제 #9
0
        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();
 }