/// <summary>
        /// SaveCashFlowStatement
        /// </summary>
        /// <param name="contract"></param>
        /// <param name="fmpSymbol"></param>
        /// <param name="xmlDocument"></param>
        /// <param name="date"></param>
        private void SaveCashFlowStatement(Contract contract, string fmpSymbol, FundamentalsXmlDocument xmlDocument, string date)
        {
            if (DataContext.Instance.CashFlowStatements.Any(i => i.Symbol == fmpSymbol && i.Date == date))
            {
                LogCurrent.Add($"Cash flow statement for {contract.Company} and date {date} already exists in database.");
                return;
            }

            if (xmlDocument.NetIncomeFromCashStatement == 0 && xmlDocument.OperatingCashFlow == 0 && xmlDocument.InvestmentsInPropertyPlantAndEquipment == 0)
            {
                LogCurrent.Add($"No IB data for cash flow statement for {contract.Company} for year {date}.");
                return;
            }

            var cashFlowStatement = new CashFlowStatement()
            {
                Symbol            = fmpSymbol,
                Date              = date,
                NetIncome         = xmlDocument.NetIncomeFromCashStatement,
                OperatingCashFlow = xmlDocument.OperatingCashFlow,
                InvestmentsInPropertyPlantAndEquipment = xmlDocument.InvestmentsInPropertyPlantAndEquipment
            };

            try
            {
                DataContext.Instance.CashFlowStatements.Add(cashFlowStatement);
                DataContext.Instance.SaveChanges();
                LogCurrent.Add($"OK! Cash flow statement for {contract.Company} {date} saved in database.");
            }
            catch (Exception exception)
            {
                LogCurrent.Add(exception.ToString());
            }
        }
        /// <summary>
        /// SaveIncomeStatement
        /// </summary>
        /// <param name="contract"></param>
        /// <param name="fmpSymbol"></param>
        /// <param name="xmlDocument"></param>
        /// <param name="date"></param>
        private void SaveIncomeStatement(Contract contract, string fmpSymbol, FundamentalsXmlDocument xmlDocument, string date)
        {
            if (DataContext.Instance.IncomeStatements.Any(i => i.Symbol == fmpSymbol && i.Date == date))
            {
                LogCurrent.Add($"Income statement for {contract.Company} for year {date} already exists in database.");
                return;
            }

            if (xmlDocument.Revenue == 0 && xmlDocument.OperatingIncome == 0 && xmlDocument.Eps == 0 && xmlDocument.NetIncome == 0)
            {
                LogCurrent.Add($"No IB data for income statement for {contract.Company} for year {date}.");
                return;
            }

            var incomeStatement = new IncomeStatement()
            {
                Symbol          = fmpSymbol,
                Date            = date,
                Revenue         = xmlDocument.Revenue,
                OperatingIncome = xmlDocument.OperatingIncome,
                Epsdiluted      = xmlDocument.Eps,
                NetIncome       = xmlDocument.NetIncome
            };

            try
            {
                DataContext.Instance.IncomeStatements.Add(incomeStatement);
                DataContext.Instance.SaveChanges();
                LogCurrent.Add($"OK! Income statement for {contract.Company} {date} saved in database.");
            }
            catch (Exception exception)
            {
                LogCurrent.Add(exception.ToString());
            }
        }
        /// <summary>
        /// SaveBalanceSheet
        /// </summary>
        /// <param name="contract"></param>
        /// <param name="fmpSymbol"></param>
        /// <param name="xmlDocument"></param>
        /// <param name="date"></param>
        private void SaveBalanceSheet(Contract contract, string fmpSymbol, FundamentalsXmlDocument xmlDocument, string date)
        {
            if (DataContext.Instance.BalanceSheets.Any(i => i.Symbol == fmpSymbol && i.Date == date))
            {
                LogCurrent.Add($"Balance sheet for {contract.Company} ad date {date} already exists in database.");
                return;
            }

            if (xmlDocument.Equity == 0)
            {
                LogCurrent.Add($"No IB data for balance sheet for {contract.Company} for year {date}.");
                return;
            }

            var balanceSheet = new BalanceSheet()
            {
                Symbol = fmpSymbol,
                Date   = date,
                TotalStockholdersEquity = xmlDocument.Equity
            };

            try
            {
                DataContext.Instance.BalanceSheets.Add(balanceSheet);
                DataContext.Instance.SaveChanges();
                LogCurrent.Add($"OK! Balance sheet for {contract.Company} {date} saved in database.");
            }
            catch (Exception exception)
            {
                LogCurrent.Add(exception.ToString());
            }
        }
        /// <summary>
        /// ResponseHandlerFundamentalData
        /// </summary>
        /// <param name="obj"></param>
        private void ResponseHandlerFundamentalData(IBSampleApp.messages.FundamentalsMessage obj)
        {
            BackgroundLog = Brushes.White;
            var message = string.Empty;

            LogCurrent.Add($"Processing {CurrentContract.Company} ... {ContractList.Count()} companies more.");
            ContractList.Remove(CurrentContract);

            string fmpSymbol = QueryFactory.SymbolByCompanyNameQuery.Run(CurrentContract.Company);

            if (string.IsNullOrWhiteSpace(fmpSymbol))
            {
                LogCurrent.Add($"ERROR! FMP symbol for {CurrentContract.Company} could not be found.");
                return;
            }

            foreach (string date in Dates)
            {
                FundamentalsXmlDocument xmlDocument = XmlFactory.Instance.CreateXml(obj, date);
                SaveIncomeStatement(CurrentContract, fmpSymbol, xmlDocument, date);
                SaveBalanceSheet(CurrentContract, fmpSymbol, xmlDocument, date);
                SaveCashFlowStatement(CurrentContract, fmpSymbol, xmlDocument, date);
            }
        }