protected override IEnumerable <FileParserInput> DownloadTransactions()
        {
            var downloadResults = new List <FileParserInput>();

            Browser.WaitForJavaScript(12000);
            Browser.FindElement(By.XPath("//*[@data-test='main-nav-kontozentrale']")).Click();
            Browser.WaitForJavaScript();

            //fist ist cumulative account
            for (var i = 1; i < GetAccountLinks().Count; i++)
            {
                GetAccountLinks()[i].Click();
                Browser.WaitForJavaScript(2000);
                var valueParser =
                    ComponentContext.ResolveKeyed <IValueParser>(Constants.UniqueContainerKeys.ValueParserGermanDecimal);
                var balance     = GetAccountBalance().Text.CleanNumberStringFromOther();
                var infoBox     = Browser.FindElement(By.ClassName("info-box"));
                var iban        = infoBox.FindElement(By.TagName("h2")).Text.CleanString();
                var bankAccount = BankAccountRepository.GetByIban(iban);
                if (bankAccount == null)
                {
                    bankAccount = new BankAccountEntity
                    {
                        AccountNumber = iban,
                        Iban          = iban,
                        BankName      = Constants.DownloadHandler.BankNameRaiffeisen,
                        AccountName   = i == 0 ? Constants.DownloadHandler.AccountNameGiro : Constants.DownloadHandler.AccountNameSaving
                    };
                    BankAccountRepository.Insert(bankAccount);
                }

                TakeScreenshot(iban);

                var resultingFile = DownloadFromWebElement(Browser.FindElement(By.ClassName("icon-csv")), iban);
                downloadResults.Add(new FileParserInput
                {
                    OwningEntity = bankAccount,
                    FileParser   =
                        ComponentContext.ResolveKeyed <IFileParser>(Constants.UniqueContainerKeys.FileParserRaiffeisenGiro),
                    FilePath            = resultingFile,
                    TargetEntity        = typeof(RaiffeisenTransactionEntity),
                    Balance             = (decimal)valueParser.Parse(balance),
                    BalanceSelectorFunc =
                        () => BankTransactionRepository.TransactionSumForAccountId(bankAccount.Id)
                });
            }
            downloadResults.AddRange(DownloadDepots());
            return(downloadResults);
        }
예제 #2
0
        protected override IEnumerable <FileParserInput> DownloadTransactions()
        {
            Browser.WaitForJavaScript(5000);

            var ibanRaw     = Browser.FindElement(By.ClassName("accountText")).Text; //First is Tagesgeld
            var iban        = ibanRaw.Split(':')[1].CleanString();
            var balanceStr  = Browser.FindElement(new ByChained(By.ClassName("currency"), By.ClassName("amountblock-wrapper"))).Text;
            var valueParser =
                ComponentContext.ResolveKeyed <IValueParser>(Constants.UniqueContainerKeys.ValueParserGermanDecimal);
            var balance = (decimal)valueParser.Parse(balanceStr);

            Browser.FindElement(By.ClassName("accountInfo-wrapper")).Click();
            Browser.WaitForJavaScript();

            var bankAccount = BankAccountRepository.GetByIban(iban);

            if (bankAccount == null)
            {
                bankAccount = new BankAccountEntity
                {
                    AccountNumber = iban,
                    Iban          = iban,
                    BankName      = Constants.DownloadHandler.BankNameRci,
                    AccountName   = Constants.DownloadHandler.AccountNameSaving
                };
                BankAccountRepository.Insert(bankAccount);
            }

            TakeScreenshot(iban);

            var exportButton = Browser.FindElement(By.ClassName("transactions-csv-export"));
            var file         = DownloadFromWebElement(exportButton, iban);

            yield return(new FileParserInput
            {
                Balance = balance,
                BalanceSelectorFunc = () => BankTransactionRepository.TransactionSumForAccountId(bankAccount.Id),
                FileParser = ComponentContext.ResolveKeyed <IFileParser>(Constants.UniqueContainerKeys.FileParserRci),
                FilePath = file,
                OwningEntity = bankAccount,
                TargetEntity = typeof(RciTransactionEntity)
            });
        }
예제 #3
0
        protected override IEnumerable <FileParserInput> DownloadTransactions()
        {
            var transactions = new List <FileParserInput>();

            try
            {
                Browser.WaitForJavaScript(5000);
                //Konto

                var accountNumber = Browser.FindElements(By.ClassName("C0"))[3].Text;
                var iban          = GetIban();

                //go to account transactions
                Browser.Navigate().GoToUrl("https://konto.flatex.at/banking-flatex.at/accountPostingsFormAction.do");
                Browser.WaitForJavaScript();
                var balanceString =
                    Browser.FindElements(new ByChained(By.ClassName("Details"), By.ClassName("Value")))[0].Text
                    .ExtractDecimalNumberString();
                var valueParserDe =
                    ComponentContext.ResolveKeyed <IValueParser>(Constants.UniqueContainerKeys.ValueParserGermanDecimal);
                var balance = (decimal)valueParserDe.Parse(balanceString);
                //Date range -1 year
                var fromDate = Browser.FindElement(By.Id("accountPostingsForm_dateRangeComponent_startDate"));
                fromDate.SetAttribute("value", DateTime.Today.AddMonths(-2).ToString("dd.MM.yyyy"));
                Browser.FindElement(By.Id("accountPostingsForm_applyFilterButton")).Click();
                //excel download
                TakeScreenshot(iban);
                var resultingFile =
                    DownloadFromWebElement(Browser.FindElement(By.Id("accountPostingsForm_excelExportButton")), iban);
                //check for account or create new
                var bankAccount = BankAccountRepository.GetByIban(iban);
                if (bankAccount == null)
                {
                    bankAccount = new BankAccountEntity
                    {
                        AccountNumber = accountNumber,
                        Iban          = iban,
                        BankName      = Constants.DownloadHandler.BankNameFlatex,
                        AccountName   = Constants.DownloadHandler.AccountNameGiro
                    };
                    BankAccountRepository.Insert(bankAccount);
                }
                transactions.Add(new FileParserInput
                {
                    OwningEntity = bankAccount,
                    FileParser   =
                        ComponentContext.ResolveKeyed <IFileParser>(Constants.UniqueContainerKeys.FileParserFlatexGiro),
                    FilePath            = resultingFile,
                    TargetEntity        = typeof(FlatexTransactionEntity),
                    Balance             = balance,
                    BalanceSelectorFunc =
                        () => BankTransactionRepository.GetAllForAccountId(bankAccount.Id).Sum(entity => entity.Amount)
                });
            }
            catch (Exception ex)
            {
                Logger.LogWarning(ex, "Exception occured while downloading Flatex Giro transactions");
            }
            try
            {
                //Depot
                NavigateHome();
                Browser.WaitForJavaScript(5000);
                var portfolioNumber = Browser.FindElements(By.ClassName("C0"))[5].Text;
                Browser.Navigate().GoToUrl("https://konto.flatex.at/banking-flatex.at/depositStatementFormAction.do");
                TakeScreenshot(portfolioNumber);
                var resultingFile = DownloadFromWebElement(
                    Browser.FindElement(By.Id("depositStatementForm_excelExportButton")), portfolioNumber);

                var portfolio = PortfolioRepository.GetByPortfolioNumberAndBankName(portfolioNumber,
                                                                                    Constants.DownloadHandler.BankNameFlatex);
                if (portfolio == null)
                {
                    portfolio = new PortfolioEntity
                    {
                        PortfolioNumber = portfolioNumber,
                        BankName        = Constants.DownloadHandler.BankNameFlatex,
                        AccountName     = Constants.DownloadHandler.AccountNameDepot
                    };
                    PortfolioRepository.Insert(portfolio);
                }

                transactions.Add(new FileParserInput
                {
                    OwningEntity = portfolio,
                    FileParser   = ComponentContext.ResolveKeyed <IFileParser>(Constants.UniqueContainerKeys.FileParserFlatexDepot),
                    FilePath     = resultingFile,
                    TargetEntity = typeof(FlatexPositionEntity)
                });
            }
            catch (Exception ex)
            {
                Logger.LogWarning(ex, "Exception occured while downloading Flatex Portfolio transactions");
            }
            return(transactions);
        }
예제 #4
0
        protected override IEnumerable <FileParserInput> DownloadTransactions()
        {
            var downloadResults = new List <FileParserInput>();
            var valueParser     =
                ComponentContext.ResolveKeyed <IValueParser>(Constants.UniqueContainerKeys.ValueParserGermanDecimal);

            //bankaccount
            var iban    = GetAccounts()[0].FindElement(By.ClassName("iban")).Text.CleanString();
            var balance = (decimal)valueParser.Parse(
                GetAccounts()[0].FindElement(new ByChained(By.ClassName("amount"), By.TagName("span"))).Text);

            GetAccounts()[0].FindElement(By.ClassName("evt-paymentTransaction")).Click();

            var bankAccount = BankAccountRepository.GetByIban(iban);

            if (bankAccount == null)
            {
                bankAccount = new BankAccountEntity
                {
                    AccountNumber = iban,
                    Iban          = iban,
                    BankName      = Constants.DownloadHandler.BankNameDkb,
                    AccountName   = Constants.DownloadHandler.AccountNameGiro
                };
                BankAccountRepository.Insert(bankAccount);
            }
            var resultingFile = DownloadAndScreenshot(iban, "[id*=transactionDate]", "[id*=toTransactionDate]");

            downloadResults.Add(new FileParserInput
            {
                OwningEntity         = bankAccount,
                FileParser           = ComponentContext.ResolveKeyed <IFileParser>(Constants.UniqueContainerKeys.FileParserDkbGiro),
                FilePath             = resultingFile,
                TargetEntity         = typeof(DkbTransactionEntity),
                UniqueIdGroupingFunc = entity => ((DkbTransactionEntity)entity).AvailabilityDate.Date,
                OrderingFuncs        = new List <Func <object, object> > {
                    o => ((DkbTransactionEntity)o).AvailabilityDate.Date, o => ((DkbTransactionEntity)o).Text, o => ((DkbTransactionEntity)o).Amount
                },
                Balance             = balance,
                BalanceSelectorFunc =
                    () => BankTransactionRepository.TransactionSumForAccountId(bankAccount.Id)
            });

            NavigateHome();

            //credit card
            var creditCardNumberMasked = GetAccounts()[1].FindElement(By.XPath("td[1]/div[2]")).Text.CleanString();
            var creditBalance          = (decimal)valueParser.Parse(
                GetAccounts()[1].FindElement(new ByChained(By.ClassName("amount"), By.TagName("span"))).Text);

            GetAccounts()[1].FindElement(By.ClassName("evt-paymentTransaction")).Click();

            var creditCardAccount = CreditCardAccountRepository.GetByAccountNumberAndBankName(creditCardNumberMasked,
                                                                                              Constants.DownloadHandler.BankNameDkb);

            if (creditCardAccount == null)
            {
                creditCardAccount = new CreditCardEntity
                {
                    AccountNumber    = creditCardNumberMasked,
                    CreditCardNumber = null,
                    BankName         = Constants.DownloadHandler.BankNameDkb,
                    AccountName      = Constants.DownloadHandler.AccountNameVisa
                };
                CreditCardAccountRepository.Insert(creditCardAccount);
            }
            resultingFile = DownloadAndScreenshot(creditCardNumberMasked, "[id*=postingDate]", "[id*=toPostingDate]");
            downloadResults.Add(new FileParserInput
            {
                OwningEntity = creditCardAccount,
                FileParser   =
                    ComponentContext.ResolveKeyed <IFileParser>(Constants.UniqueContainerKeys.FileParserDkbCredit),
                FilePath             = resultingFile,
                TargetEntity         = typeof(DkbCreditTransactionEntity),
                UniqueIdGroupingFunc = entity => ((DkbCreditTransactionEntity)entity).AvailabilityDate.Date,
                OrderingFuncs        = new List <Func <object, object> > {
                    o => ((DkbCreditTransactionEntity)o).AvailabilityDate.Date, o => ((DkbCreditTransactionEntity)o).Text, o => ((DkbCreditTransactionEntity)o).Amount
                },
                Balance             = creditBalance,
                BalanceSelectorFunc = () => BankTransactionRepository.TransactionSumForAccountId(creditCardAccount.Id)
            });
            return(downloadResults);
        }