Пример #1
0
        public static void Update()
        {
            if (!DownloadFormsIndex())
            {
                return;
            }
            var filings    = ParseFormsIndex();
            var amendments = Get10KAmendments();

            if (filings.Count == 0) //If there's no filings relevant to updating the database
            {
                Console.WriteLine("No forms have been filed at this time");
                return;
            }
            var tickersToUpdate = EndingFiscalYearCompanies();

            //Queue of companies to DL from Morningstar
            //var queue = tickersToUpdate.Where(x => filings.Contains(x)).ToList();
            var queue = filings.Where(filing => tickersToUpdate.Contains(filing)).ToList();

            Console.Write("There ");
            var count = queue.Count + amendments.Count;

            Console.Write(count == 1 ? "is " : "are ");
            Console.Write(count + " ticker");
            if (count > 1)
            {
                Console.Write("s");
            }
            Console.WriteLine(" in the update queue.");
            Console.WriteLine("Updating database, please wait...");

            //Run add entry command
            AddEntry.Init();
            using (var db = new LiteDatabase(Database))
            {
                var dbKeyRatio = db.GetCollection <KeyRatio>("keyRatios");
                foreach (var q in queue)
                {
                    var r = dbKeyRatio.FindOne(Query.Contains("Cik", q));
                    if (r == null)
                    {
                        Utility.WriteToLog(q + ": Could not find in database", ErrorLog);
                    }
                    else
                    {
                        AddEntry.Add(r.Ticker, false);
                    }
                }

                foreach (var amendment in amendments)
                {
                    var r = dbKeyRatio.FindOne(Query.Contains("Cik", amendment));
                    if (r != null)
                    {
                        AddEntry.Add(r.Ticker, true);
                    }
                }
            }
            Utility.PurgeTempDirectory();

            Console.WriteLine("Database updated!");
            Console.WriteLine("Press any key to continue...");
            Console.ReadKey();

            /*
             * Console.WriteLine("Verifying integrity...");
             * var list = VerifyFiscalIntegrity();
             * if (list.Count != 0)
             * {
             *  var message = "The following ticker(s) lack financial info:\n";
             *  using (var db = new LiteDatabase(Database))
             *  {
             *      var dbKeyRatio = db.GetCollection<KeyRatio>("keyRatios");
             *      message = list
             *          .Select(l => dbKeyRatio.FindOne(Query.EQ("Cik", l)))
             *          .Aggregate(message, (current, r) => current + r.Ticker + "\n");
             *  }
             *  Utility.WriteToLog(message, "FiscalIntegrityAnalysisError.txt");
             *  Console.WriteLine("Some companies are missing information.");
             *  Console.WriteLine("More information written to desktop");
             * }
             * else
             * {
             *  Console.WriteLine("Database integrity analysis successful!");
             * }
             */
        }