internal CompanyAnnualData PopulateFinancialStatement(CompanyAnnualFilterItem item, CompanyAnnualData ann)
        {
            ann.CostOfDebt = GetAvgValue(item.CostOfDebt);
            ann.SharesOutstanding = GetMaxValue(item.SharesOutstanding);

            return ann;
        }
 public void UpdateCompanyAnnual(CompanyAnnualData comp)
 {
     if (CompanyAnnualExists(comp.Symbol, comp.Year))
     {
         _dao.UpdateCompanyAnnual(comp);
     }
     else if (comp.SharesOutstanding != 0)
     {
         _dao.InsertCompanyAnnual(comp);
     }
 }
        public CompanyAnnualData Populate(XbrlDocument xbrlDoc, string symbol, int year)
        {
            CompanyAnnualData ann = new CompanyAnnualData();
            ann.Symbol = symbol;
            ann.Year = year;

            CompanyAnnualFilterItem item = new CompanyAnnualFilterItem();

            foreach (XbrlFragment frag in xbrlDoc.XbrlFragments)
            {
                foreach (Item xbrlItem in frag.Facts)
                {
                    if (xbrlItem.ContextRef.InstantDate.Year == ann.Year)
                    {
                        if (!xbrlItem.Type.Name.Equals("monetaryItemType"))
                        {
                            item = CheckItem(xbrlItem, item);
                        }      
                    }
                }
            }
            ann = PopulateFinancialStatement(item, ann);

            if (ann.SharesOutstanding < 0)
            {
                ann.SharesOutstanding = ann.SharesOutstanding * -1;
            }
            if (ann.SharesOutstanding < 1000)
            {
                ann.SharesOutstanding = ann.SharesOutstanding * 1000000;
            }
            else if (ann.SharesOutstanding < 1000000)
            {
                ann.SharesOutstanding = ann.SharesOutstanding * 1000;
            }

            return ann;
        }
        public void ProcessXbrlInstanceDocument(string xmlUrl, Dictionary<string, List<string>> xbrlTaxonomyTree)
        {
            JeffFerguson.Gepsio.XbrlDocument xbrlDoc = new XbrlDocument();
            xbrlDoc.Load(xmlUrl);

            //AddXbrlNodes(xbrlDoc);

            int yearsToLoad = 3;

            string fileName = System.IO.Path.GetFileNameWithoutExtension(xmlUrl);
            string tickerSymbol = fileName.Split(new[] { '-' })[0];
            int year = GetFiscalYear(tickerSymbol, xbrlDoc.XbrlFragments[0]);

            IncomeStatement incToAdd = new IncomeStatement();
            BalanceSheet balToAdd = new BalanceSheet();
            CompanyAnnualData compAnnToAdd = new CompanyAnnualData();

            Dictionary<string, Object> yahooStats = GetYahooStatistics(tickerSymbol);

            CreateCompanyObject(tickerSymbol, xbrlDoc, yahooStats);

            for (int y = year; y > year - yearsToLoad; y--)
            {
                XbrlIncomeStatementFilter incFilter = new XbrlIncomeStatementFilter();
                XbrlBalanceSheetFilter bsFilter = new XbrlBalanceSheetFilter();
                XbrlCompanyAnnualFilter compAnFilter = new XbrlCompanyAnnualFilter();
                
                incToAdd = incFilter.Populate(this, xbrlDoc, tickerSymbol, y, xbrlTaxonomyTree);
                balToAdd = bsFilter.Populate(xbrlDoc, tickerSymbol, y, xbrlTaxonomyTree);
                compAnnToAdd = compAnFilter.Populate(xbrlDoc, tickerSymbol, y);

                compAnnToAdd.LeveredBeta = Convert.ToDecimal(yahooStats["Beta"]);
                compAnnToAdd.DividendYield = Convert.ToDecimal(yahooStats["DividendYield"]);

                IncomeStatementBL.Instance.UpdateIncomeStatement(incToAdd);
                BalanceSheetBL.Instance.UpdateBalanceSheet(balToAdd);
                CompanyAnnualDataBL.Instance.UpdateCompanyAnnual(compAnnToAdd);
            }
        }
 private static void SetCompanyAnnualParameters(CompanyAnnualData comp, MySqlParameter[] parms)
 {
     parms[0].Value = comp.Symbol;
     parms[1].Value = comp.Year;
     parms[2].Value = comp.CostOfDebt;
     parms[3].Value = comp.LeveredBeta;
     parms[4].Value = comp.SharesOutstanding;
     parms[5].Value = comp.DividendYield;
 }
        private CompanyAnnualData ConvertReaderToCompanyAnnualObject(MySqlDataReader rdr)
        {
            CompanyAnnualData cmp = new CompanyAnnualData();
            cmp.Symbol = MySqlHelper.ConvertReaderToString(rdr, "SYMBOL");
            cmp.Year = MySqlHelper.ConvertReaderToInt(rdr, "YEAR");
            cmp.CostOfDebt = MySqlHelper.ConvertReaderToDecimal(rdr, "COST_OF_DEBT");
            cmp.LeveredBeta = MySqlHelper.ConvertReaderToDecimal(rdr, "LEVERED_BETA");
            cmp.SharesOutstanding = MySqlHelper.ConvertReaderToDecimal(rdr, "SHARES_OUTSTANDING");
            cmp.DividendYield = MySqlHelper.ConvertReaderToDecimal(rdr, "DIVIDEND_YIELD");

            return cmp;
        }
 public void UpdateCompanyAnnual(CompanyAnnualData comp)
 {
     MySqlParameter[] parms = GetCompanyAnnualParameters();
     SetCompanyAnnualParameters(comp, parms);
     using (MySqlConnection conn = new MySqlConnection(MySqlHelper.SV_CONN_STRING))
     {
         conn.Open();
         MySqlHelper.ExecuteNonQuery(conn, SQL_UPDATE_COMPANYANNUAL, parms);
     }
 }
        public void PopulateCompanyFinancialStatisticsFromStatements(CompanyFinancialStatistics finStats, IncomeStatement inc, BalanceSheet bs, CompanyAnnualData cad)
        {
            finStats.BookValuePerShare = bs.ShareholdersEquity / cad.SharesOutstanding;
            finStats.DebtToEquity = bs.Debt / bs.ShareholdersEquity;
            finStats.ProfitMargin = inc.NetIncome / inc.Revenue;
            finStats.ReturnOnAssets = inc.NetIncome / bs.TotalAssets;

            if (bs.ShareholdersEquity == 0)
            {
                finStats.ReturnOnEquity = 0;
            }
            else
            {
                finStats.ReturnOnEquity = inc.NetIncome / bs.ShareholdersEquity;
            }
            
            finStats.RevenuePerShare = inc.Revenue / cad.SharesOutstanding;
            finStats.TotalDebt = bs.Debt;
        }
        private void EnterFinancialData(IncomeStatementCollection incs, BalanceSheetCollection bals, CompanyAnnualData cad, int year, int yearsToLoad)
        {
            CompanyAnnualDataBL.Instance.UpdateCompanyAnnual(cad);

            for (int y = year; y > year - yearsToLoad; y--)
            {
                IncomeStatementBL.Instance.UpdateIncomeStatement(incs.Find(y));
                BalanceSheetBL.Instance.UpdateBalanceSheet(bals.Find(y));
            }   
        }