示例#1
0
        /// <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);
        }
示例#2
0
        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);
        }
示例#3
0
        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();
        }
示例#4
0
        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());
            }
        }
示例#5
0
        /// <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);
        }
示例#6
0
        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));
        }
示例#7
0
        /// <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);
            }
        }
示例#8
0
        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);
        }
示例#9
0
        /// <summary>
        /// Adds in key statistics data returned from a call to the IEX keystats RESTful method into the <see cref="corp"/>&apos;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);
        }
示例#10
0
        /// <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);
        }
示例#11
0
        /// <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);
        }
示例#12
0
 public static Uri GetUri(PublicCompany com)
 {
     return(new Uri($"http://{BLOOMBERG_HOST}/markets/symbolsearch?query={com.UrlEncodedName}&commit=Find+Symbols"));
 }