/// <summary> /// Parses the web response html content from <see cref="SecForm.HtmlFormLink"/> /// locating the .xml Uri therein. /// </summary> /// <param name="webResponseBody"></param> /// <param name="srcUri"></param> /// <param name="pc"></param> /// <returns></returns> public static bool TryGetXmlLink(object webResponseBody, Uri srcUri, ref PublicCompany pc) { var pcAnnualRpt = pc.SecReports?.FirstOrDefault(x => x.HtmlFormLink == srcUri); if (pcAnnualRpt == null) { return(false); } var myDynData = DynamicDataFactory.GetDataParser(srcUri); var myDynDataRslt = myDynData.ParseContent(webResponseBody); if (myDynDataRslt == null || !myDynDataRslt.Any()) { return(false); } var xrblUriStr = myDynDataRslt.First().XrblUri; pcAnnualRpt.XmlLink = new Uri(xrblUriStr); var irsId = myDynDataRslt.First <dynamic>().IrsId as string; if (!String.IsNullOrWhiteSpace(irsId)) { pc.EIN = new EmployerIdentificationNumber { Value = irsId } } ; return(true); }
public void TestTryGetCorpData() { var xmlContent = System.IO.File.ReadAllText(SEC_BY_CIK_XML_PATH); var testResultOut = new PublicCompany(); var testResult = Copula.TryParseSecEdgarCikSearch(xmlContent, new Uri( "http://www.sec.gov/cgi-bin/browse-edgar?action=getcompany&CIK=041215216456&type=10-K&dateb=&owner=exclude&count=100&output=atom"), ref testResultOut); Assert.IsTrue(testResult); Assert.IsNotNull(testResultOut); Assert.AreEqual("0000717538", testResultOut.CIK.Value); Assert.AreEqual("6021", testResultOut.SIC.Value); Assert.AreEqual("ARROW FINANCIAL CORP", testResultOut.Name); Assert.IsNotNull(testResultOut.MailingAddress); Assert.IsNotNull(testResultOut.BusinessAddress); Assert.IsInstanceOf(typeof(UsStreetPo), testResultOut.MailingAddress.Street); Assert.IsInstanceOf(typeof(UsCityStateZip), testResultOut.MailingAddress.CityArea); var mailingAddrStreet = (UsStreetPo)testResultOut.MailingAddress.Street; var mailingAddrCity = (UsCityStateZip)testResultOut.MailingAddress.CityArea; Assert.IsInstanceOf(typeof(UsStreetPo), testResultOut.BusinessAddress.Street); Assert.IsInstanceOf(typeof(UsCityStateZip), testResultOut.BusinessAddress.CityArea); var bizAddrStreet = (UsStreetPo)testResultOut.BusinessAddress.Street; var bizAddrCity = (UsCityStateZip)testResultOut.BusinessAddress.CityArea; Assert.AreEqual("250", mailingAddrStreet.PostBox); Assert.AreEqual("250", bizAddrStreet.PostBox); Assert.AreEqual("GLEN", bizAddrStreet.StreetName); Assert.AreEqual("ST", bizAddrStreet.StreetKind); Assert.AreEqual("GLENS FALLS", bizAddrCity.City); Assert.AreEqual("NY", bizAddrCity.StateAbbrev); Assert.AreEqual("12801", bizAddrCity.ZipCode); Assert.AreEqual("GLENS FALLS", mailingAddrCity.City); Assert.AreEqual("NY", mailingAddrCity.StateAbbrev); Assert.AreEqual("12801", mailingAddrCity.ZipCode); Assert.IsNotNull(testResultOut.PhoneNumbers); var testResultPhones = testResultOut.PhoneNumbers.ToList(); var testResultPhone = testResultPhones[0]; Assert.IsNotNull(testResultPhone); Assert.IsInstanceOf <NorthAmericanPhone>(testResultPhone); var testResultNAmerPhone = (NorthAmericanPhone)testResultPhone; Assert.AreEqual("518", testResultNAmerPhone.AreaCode); Assert.AreEqual("415", testResultNAmerPhone.CentralOfficeCode); Assert.AreEqual("4299", testResultNAmerPhone.SubscriberNumber); }
public void UpdateDerivedTypePropertyClientTest() { TestClientContext = this.CreateWrappedContext <InMemoryEntities>().Context; TestClientContext.MergeOption = Microsoft.OData.Client.MergeOption.OverwriteChanges; //Query Singleton var queryCompany = TestClientContext.PublicCompany; var queryCompanyAr = queryCompany.BeginGetValue(null, null).EnqueueWait(this); var company = queryCompany.EndGetValue(queryCompanyAr); //Update DerivedType Property and Verify PublicCompany publicCompany = company as PublicCompany; publicCompany.Name = "UpdatedName"; publicCompany.StockExchange = "Updated StockExchange"; TestClientContext.UpdateObject(publicCompany); var updateCompanyAr = TestClientContext.BeginSaveChanges(null, null).EnqueueWait(this); TestClientContext.EndSaveChanges(updateCompanyAr); //Query Singleton Property - Select var queryName = TestClientContext.PublicCompany.Select(c => c.Name) as DataServiceQuerySingle <string>; var queryNameAr = queryName.BeginGetValue(null, null).EnqueueWait(this); var name = queryName.EndGetValue(queryNameAr); Assert.True(name == "UpdatedName"); //Projection with properties of DerivedType var queryStockExchange = TestClientContext.PublicCompany.Select(c => (c as PublicCompany).StockExchange) as DataServiceQuerySingle <string>; var queryStockExchangeAr = queryStockExchange.BeginGetValue(null, null).EnqueueWait(this); var stockExchange = queryStockExchange.EndGetValue(queryStockExchangeAr); Assert.True(stockExchange == "Updated StockExchange"); //Projection with properties - Select var queryPublicCompany = TestClientContext.PublicCompany.Select(c => new PublicCompany { CompanyID = c.CompanyID, Name = c.Name, StockExchange = (c as PublicCompany).StockExchange }) as DataServiceQuerySingle <PublicCompany>; var queryPublicCompanyAr = queryPublicCompany.BeginGetValue(null, null).EnqueueWait(this); publicCompany = queryPublicCompany.EndGetValue(queryPublicCompanyAr); Assert.True(publicCompany.Name == "UpdatedName"); Assert.True(publicCompany.StockExchange == "Updated StockExchange"); this.EnqueueTestComplete(); }
public void TestTryParseIexKeyStatsJson() { var testContent = System.IO.File.ReadAllText(TestAssembly.TestDataDir + @"\IexKeyStatsResponse.json"); var corp = new PublicCompany(); var testResult = Copula.TryParseIexKeyStatsJson(testContent, IexKeyStats.GetUri("AAPL"), ref corp); Assert.IsTrue(testResult); Assert.IsTrue(corp.NetUris.Any()); foreach (var uri in corp.NetUris) { Console.WriteLine(uri.ToString()); } }
/// <summary> /// Adds in company data returned from a call to the IEX Company RESTful method /// </summary> /// <param name="rawJsonContent">The raw JSON returned from IEX</param> /// <param name="srcUri"></param> /// <param name="corp"></param> /// <returns></returns> public static bool TryParseIexCompanyJson(string rawJsonContent, Uri srcUri, ref PublicCompany corp) { if (string.IsNullOrWhiteSpace(rawJsonContent)) { return(false); } if (corp == null) { return(false); } var myDynData = DynamicDataFactory.GetDataParser(srcUri); var myDynDataRslt = myDynData.ParseContent(rawJsonContent); if (myDynDataRslt == null || !myDynDataRslt.Any()) { return(false); } var pd = myDynDataRslt.First(); var tickerSymbol = pd.symbol.Value; var exchange = pd.exchange.Value; var description = pd.description.Value; var website = pd.website.Value; if (string.IsNullOrWhiteSpace(corp.Name)) { corp.Name = pd.companyName.Value; } var nfTicker = corp.TickerSymbols.FirstOrDefault(t => t.Symbol == tickerSymbol) ?? new TickerSymbol { Symbol = tickerSymbol, Src = srcUri.ToString() }; nfTicker.Exchange = exchange; if (corp.TickerSymbols.All(t => t.Symbol != tickerSymbol)) { corp.AddTickerSymbol(nfTicker); } corp.Description = description; corp.AddUri((string)website); return(true); }
public void TestTryParseIexCompanyJson() { var testContent = System.IO.File.ReadAllText(TestAssembly.TestDataDir + @"\IexCompanyResponse.json"); var corp = new PublicCompany(); var testResult = Copula.TryParseIexCompanyJson(testContent, IexCompany.GetUri("AAPL"), ref corp); Assert.IsTrue(testResult); Assert.IsFalse(string.IsNullOrWhiteSpace(corp.Description)); var ticker = corp.TickerSymbols.FirstOrDefault(); Assert.IsNotNull(ticker); Assert.AreEqual("AAPL", ticker.Symbol); Assert.IsTrue(ticker.Exchange.Contains("Nasdaq")); var uri = corp.NetUris.FirstOrDefault(); Assert.IsNotNull(uri); Assert.AreEqual("http://www.apple.com/", uri.ToString()); Assert.IsFalse(string.IsNullOrWhiteSpace(corp.Description)); Assert.IsFalse(string.IsNullOrWhiteSpace(corp.Name)); }
/// <summary> /// Merges the ticker symbol data contained in <see cref="webResponseBody"/> into the instance of <see cref="PublicCompany"/> /// </summary> /// <param name="webResponseBody"></param> /// <param name="srcUri"></param> /// <param name="pc"></param> /// <returns></returns> public static bool TryMergeTickerLookup(object webResponseBody, Uri srcUri, ref PublicCompany pc) { try { var myDynData = DynamicDataFactory.GetDataParser(srcUri); var myDynDataRslt = myDynData.ParseContent(webResponseBody); if (myDynDataRslt == null) { return(false); } foreach (var dd in myDynDataRslt) { var existing = pc.TickerSymbols.FirstOrDefault(x => x.Symbol == dd.Symbol && x.Country == dd.Country); if (existing != null) { existing.Src = myDynData.SourceUri.ToString(); existing.InstrumentType = dd.InstrumentType; continue; } pc.AddTickerSymbol(new TickerSymbol { Symbol = dd.Symbol, InstrumentType = dd.InstrumentType, Country = dd.Country, Src = myDynData.SourceUri.ToString() }); } return(pc.TickerSymbols.ToArray().Length > 0); } catch { return(false); } }
public void DerivedTypeSingletonClientTest() { //Query Singleton TestClientContext.MergeOption = Microsoft.OData.Client.MergeOption.OverwriteChanges; var company = TestClientContext.PublicCompany.GetValue(); Assert.IsTrue(company != null); //Update DerivedType Property and Verify PublicCompany publicCompany = company as PublicCompany; publicCompany.Name = "UpdatedName"; publicCompany.StockExchange = "Updated StockExchange"; TestClientContext.UpdateObject(publicCompany); TestClientContext.SaveChanges(Microsoft.OData.Client.SaveChangesOptions.ReplaceOnUpdate); //Query Singleton Property - Select var name = TestClientContext.PublicCompany.Select(c => c.Name).GetValue(); Assert.IsTrue(name == "UpdatedName"); company = TestClientContext.CreateSingletonQuery <Company>("PublicCompany").Single(); Assert.IsTrue((company as PublicCompany).StockExchange == "Updated StockExchange"); //Query properties of DerivedType var stockExchange = TestClientContext.PublicCompany.Select(c => (c as PublicCompany).StockExchange).GetValue(); Assert.IsTrue(stockExchange == "Updated StockExchange"); //Projection with properties - Select publicCompany = TestClientContext.PublicCompany.Select(c => new PublicCompany { CompanyID = c.CompanyID, Name = c.Name, StockExchange = (c as PublicCompany).StockExchange }).GetValue(); Assert.IsTrue(publicCompany != null); Assert.IsTrue(publicCompany.Name == "UpdatedName"); Assert.IsTrue(publicCompany.StockExchange == "Updated StockExchange"); company = TestClientContext.CreateSingletonQuery <Company>("PublicCompany").Single(); //Load Navigation Property //Collection TestClientContext.LoadProperty(company, "Assets"); Assert.IsTrue((company as PublicCompany).Assets != null); Assert.IsTrue((company as PublicCompany).Assets.Count == 2); ////Single Enity TestClientContext.LoadProperty(company, "Club"); Assert.IsTrue((company as PublicCompany).Club != null); //Singleton TestClientContext.LoadProperty(publicCompany, "LabourUnion"); Assert.IsTrue((company as PublicCompany).LabourUnion != null); //Add Contained Navigation Property - Collection of derived type Random rand = new Random(); int tmpAssertId = rand.Next(); Asset tmpAssert = new Asset() { AssetID = tmpAssertId, Name = tmpAssertId + "Name", Number = tmpAssertId }; TestClientContext.AddRelatedObject(publicCompany, "Assets", tmpAssert); TestClientContext.SaveChanges(); //Query contained Navigation Property - Collection of derived type company = TestClientContext.PublicCompany.Expand(c => (c as PublicCompany).Assets).GetValue(); Assert.IsTrue(company != null); Assert.IsTrue((company as PublicCompany).Assets.Any(a => a.AssetID == tmpAssertId)); TestClientContext.DeleteObject(tmpAssert); TestClientContext.SaveChanges(); company = TestClientContext.PublicCompany.Expand(c => (c as PublicCompany).Assets).GetValue(); Assert.IsTrue(company != null); Assert.IsTrue(!(company as PublicCompany).Assets.Any(a => a.AssetID == tmpAssertId)); company = TestClientContext.PublicCompany.Expand(c => (c as PublicCompany).Club).GetValue(); Assert.IsTrue(company != null); Assert.IsTrue((company as PublicCompany).Club != null); //Updated Conatined Navigation Property - SingleEntity of derived type var club = (company as PublicCompany).Club; club.Name = "UpdatedClubName"; TestClientContext.UpdateRelatedObject(company, "Club", club); TestClientContext.SaveChanges(); //Query Contained Navigation Property - Single Entity of derived type publicCompany = TestClientContext.PublicCompany.Select(c => new PublicCompany { CompanyID = c.CompanyID, Club = (c as PublicCompany).Club }).GetValue(); Assert.IsTrue(publicCompany != null); Assert.IsTrue(publicCompany.Club != null); Assert.IsTrue(publicCompany.Club.Name == "UpdatedClubName"); //Projection with Navigation property of derived type - Singleton company = TestClientContext.PublicCompany.Expand(c => (c as PublicCompany).LabourUnion).GetValue(); //Update Navigation property of derived Type - Singleton var labourUnion = (company as PublicCompany).LabourUnion; labourUnion.Name = "UpdatedLabourUnionName"; TestClientContext.UpdateRelatedObject(publicCompany, "LabourUnion", labourUnion); TestClientContext.SaveChanges(); //Query singleton of derived type. publicCompany = TestClientContext.PublicCompany.Select(c => new PublicCompany { CompanyID = c.CompanyID, LabourUnion = (c as PublicCompany).LabourUnion }).GetValue(); Assert.IsTrue(publicCompany != null); Assert.IsTrue(publicCompany.LabourUnion != null); }
/// <summary> /// Adds in key statistics data returned from a call to the IEX keystats RESTful method into the <see cref="corp"/>'s URI collection. /// </summary> /// <param name="rawJsonContent">The raw JSON returned from IEX</param> /// <param name="srcUri"></param> /// <param name="corp"></param> /// <param name="atTime">Optional, allows caller to assign the timestamp, defaults to universal time</param> /// <returns></returns> public static bool TryParseIexKeyStatsJson(string rawJsonContent, Uri srcUri, ref PublicCompany corp, DateTime?atTime = null) { if (string.IsNullOrWhiteSpace(rawJsonContent)) { return(false); } if (corp == null) { return(false); } var dt = Util.Core.Etc.ToUnixTime(atTime.GetValueOrDefault(DateTime.UtcNow)); var myDynData = DynamicDataFactory.GetDataParser(srcUri); var myDynDataRslt = myDynData.ParseContent(rawJsonContent); if (myDynDataRslt == null || !myDynDataRslt.Any()) { return(false); } var pd = myDynDataRslt.First(); var symbol = pd.symbol; if (string.IsNullOrWhiteSpace(corp.Name)) { corp.Name = pd.companyName; } corp.AddUri(new NetUri { Value = $"iex://keystats/{symbol}/year5ChangePercent?value={pd.year5ChangePercent}&dt={dt}" }); corp.AddUri(new NetUri { Value = $"iex://keystats/{symbol}/year2ChangePercent?value={pd.year2ChangePercent}&dt={dt}" }); corp.AddUri(new NetUri { Value = $"iex://keystats/{symbol}/year1ChangePercent?value={pd.year1ChangePercent}&dt={dt}" }); corp.AddUri(new NetUri { Value = $"iex://keystats/{symbol}/day200MovingAvg?value={pd.day200MovingAvg}&dt={dt}" }); corp.AddUri(new NetUri { Value = $"iex://keystats/{symbol}/day50MovingAvg?value={pd.day50MovingAvg}&dt={dt}" }); corp.AddUri(new NetUri { Value = $"iex://keystats/{symbol}/beta?value={pd.beta}&dt={dt}" }); corp.AddUri(new NetUri { Value = $"iex://keystats/{symbol}/week52high?value={pd.week52high}&dt={dt}" }); corp.AddUri(new NetUri { Value = $"iex://keystats/{symbol}/week52low?value={pd.week52low}&dt={dt}" }); corp.AddUri(new NetUri { Value = $"iex://keystats/{symbol}/week52change?value={pd.week52change}&dt={dt}" }); return(true); }
/// <summary> /// Try to parse the xml (atom) content from the SEC returned from a search on a CIK. /// </summary> /// <param name="xmlContent"></param> /// <param name="srcUri"></param> /// <param name="publicCompany"></param> /// <returns></returns> public static bool TryParseSecEdgarCikSearch(string xmlContent, Uri srcUri, ref PublicCompany publicCompany) { if (String.IsNullOrWhiteSpace(xmlContent)) { return(false); } var myDynData = DynamicDataFactory.GetDataParser(srcUri); var myDynDataRslt = myDynData.ParseContent(xmlContent); if (myDynDataRslt == null || !myDynDataRslt.Any <dynamic>()) { return(false); } var pr = myDynDataRslt.First <dynamic>(); if (publicCompany == null) { publicCompany = new PublicCompany(); } if (!String.IsNullOrWhiteSpace(pr.Name)) { publicCompany.AddName(KindsOfNames.Legal, pr.Name); } publicCompany.CIK = String.IsNullOrWhiteSpace(pr.Cik) ? publicCompany.CIK : new CentralIndexKey { Value = pr.Cik, Src = myDynData.SourceUri.ToString() }; publicCompany.SIC = String.IsNullOrWhiteSpace(pr.Sic) ? publicCompany.SIC : new StandardIndustryClassification { Value = pr.Sic, Src = myDynData.SourceUri.ToString() }; publicCompany.UsStateOfIncorporation = pr.IncorpState; if (publicCompany.SIC != null && !String.IsNullOrWhiteSpace(pr.SicDesc)) { publicCompany.SIC.Description = pr.SicDesc; } var bizAddr = new AddressData(); if (!String.IsNullOrWhiteSpace(pr.BizAddrStreet)) { UsStreetPo temp; if (UsStreetPo.TryParse(pr.BizAddrStreet, out temp)) { bizAddr = temp.GetData(); } } if (!String.IsNullOrWhiteSpace(pr.BizAddrCity)) { bizAddr.Locality = pr.BizAddrCity; } if (!String.IsNullOrWhiteSpace(pr.BizAddrState)) { bizAddr.RegionAbbrev = pr.BizAddrState; } if (!String.IsNullOrWhiteSpace(pr.BizPostalCode)) { bizAddr.PostalCode = pr.BizPostalCode; } publicCompany.BusinessAddress = new PostalAddress { Street = new UsStreetPo(bizAddr) { Src = myDynData.SourceUri.ToString() }, CityArea = new UsCityStateZip(bizAddr) { Src = myDynData.SourceUri.ToString() } }; var mailAddr = new AddressData(); if (!String.IsNullOrWhiteSpace(pr.MailAddrStreet)) { UsStreetPo temp; if (UsStreetPo.TryParse(pr.MailAddrStreet, out temp)) { mailAddr = temp.GetData(); } } if (!String.IsNullOrWhiteSpace(pr.MailAddrCity)) { mailAddr.Locality = pr.MailAddrCity; } if (!String.IsNullOrWhiteSpace(pr.MailAddrState)) { mailAddr.RegionAbbrev = pr.MailAddrState; } if (!String.IsNullOrWhiteSpace(pr.MailPostalCode)) { mailAddr.PostalCode = pr.MailPostalCode; } publicCompany.MailingAddress = new PostalAddress { Street = new UsStreetPo(mailAddr) { Src = myDynData.SourceUri.ToString() }, CityArea = new UsCityStateZip(mailAddr) { Src = myDynData.SourceUri.ToString() } }; NorthAmericanPhone phOut; if (NorthAmericanPhone.TryParse(pr.BizPhone, out phOut) && publicCompany.PhoneNumbers.All(x => !x.Equals(phOut))) { phOut.Src = myDynData.SourceUri.ToString(); publicCompany.AddPhone(phOut); } if (NorthAmericanPhone.TryParse(pr.MailPhone, out phOut) && publicCompany.PhoneNumbers.All(x => !x.Equals(phOut))) { phOut.Src = myDynData.SourceUri.ToString(); publicCompany.AddPhone(phOut); } if (pr.FormerNames != null) { foreach (var fn in pr.FormerNames) { var strFnDt = fn.FormerDate ?? String.Empty; var strFnVal = fn.FormerName ?? String.Empty; publicCompany.AddName(KindsOfNames.Former, $"{strFnVal}[{strFnDt}]"); } } if (pr.FiscalYearEnd != null && pr.FiscalYearEnd.Length == 4) { int fyed; if (TryGetDayOfYearFiscalEnd(pr.FiscalYearEnd, out fyed)) { publicCompany.FiscalYearEndDay = fyed; } } return(true); }
/// <summary> /// Merges the XBRL xml from the SEC filing for the given <see cref="pc"/> /// </summary> /// <param name="webResponseBody">The raw XML content from the SEC</param> /// <param name="srcUri"></param> /// <param name="pc"></param> /// <returns></returns> public static bool TryMergeXbrlInto10K(object webResponseBody, Uri srcUri, ref PublicCompany pc) { var rptTenK = pc?.SecReports.FirstOrDefault(x => x is Form10K && ((Form10K)x).XmlLink == srcUri) as Form10K; if (rptTenK == null) { return(false); } var myDynData = DynamicDataFactory.GetDataParser(srcUri); var myDynDataRslt = myDynData.ParseContent(webResponseBody); if (myDynDataRslt == null || !myDynDataRslt.Any()) { return(false); } var xbrlDyn = myDynDataRslt.First(); var cik = xbrlDyn.Cik; if (pc.CIK.Value != cik) { return(false); } if (rptTenK.CIK == null) { rptTenK.CIK = new CentralIndexKey { Value = cik } } ; var ticker = xbrlDyn.Ticker ?? srcUri?.LocalPath.Split('/').LastOrDefault()?.Split('-').FirstOrDefault()?.ToUpper(); if (ticker != null && pc.TickerSymbols.All(x => !String.Equals(x.Symbol, ticker, StringComparison.OrdinalIgnoreCase))) { ticker = ticker.ToUpper(); pc.AddTickerSymbol(new TickerSymbol { Symbol = ticker, Country = "USA", Src = srcUri.ToString() }); } var legalName = xbrlDyn.Name; pc.AddName(KindsOfNames.Legal, legalName); rptTenK.NumOfShares = xbrlDyn.NumOfShares; if (xbrlDyn.EndOfYear > 0) { pc.FiscalYearEndDay = xbrlDyn.EndOfYear; } var assets = xbrlDyn.Assets as List <Tuple <int, decimal> >; var rptVal = assets?.OrderByDescending(x => x.Item1).FirstOrDefault(); if (rptVal != null) { rptTenK.TotalAssets = rptVal.Item2; rptTenK.FiscalYear = rptTenK.FiscalYear < rptVal.Item1 ? rptVal.Item1 : rptTenK.FiscalYear; } var lias = xbrlDyn.Liabilities as List <Tuple <int, decimal> >; rptVal = lias?.OrderByDescending(x => x.Item1).FirstOrDefault(); if (rptVal != null) { rptTenK.TotalLiabilities = rptVal.Item2; rptTenK.FiscalYear = rptTenK.FiscalYear < rptVal.Item1 ? rptVal.Item1 : rptTenK.FiscalYear; } var nis = xbrlDyn.NetIncome as List <Tuple <int, decimal> >; rptVal = nis?.OrderByDescending(x => x.Item1).FirstOrDefault(); if (rptVal != null) { rptTenK.NetIncome = rptVal.Item2; rptTenK.FiscalYear = rptTenK.FiscalYear < rptVal.Item1 ? rptVal.Item1 : rptTenK.FiscalYear; } var ois = xbrlDyn.OperatingIncome as List <Tuple <int, decimal> >; rptVal = ois?.OrderByDescending(x => x.Item1).FirstOrDefault(); if (rptVal != null) { rptTenK.OperatingIncome = rptVal.Item2; rptTenK.FiscalYear = rptTenK.FiscalYear < rptVal.Item1 ? rptVal.Item1 : rptTenK.FiscalYear; } var revs = xbrlDyn.Revenue as List <Tuple <int, decimal> >; rptVal = revs?.OrderByDescending(x => x.Item1).FirstOrDefault(); if (rptVal != null) { rptTenK.Revenue = rptVal.Item2; rptTenK.FiscalYear = rptTenK.FiscalYear < rptVal.Item1 ? rptVal.Item1 : rptTenK.FiscalYear; } rptTenK.Src = srcUri?.ToString(); if (xbrlDyn.TextBlocks is IEnumerable <Tuple <string, string> > textBlocks && textBlocks.Any()) { rptTenK.AddRangeTextBlocks(textBlocks); } return(true); }
public static Uri GetUri(PublicCompany com) { return(new Uri($"http://{BLOOMBERG_HOST}/markets/symbolsearch?query={com.UrlEncodedName}&commit=Find+Symbols")); }