private void UpdateBookDeltas()
        {
            // clear the list and the counts
            BookDeltas.Clear();
            if (BooksRead.Count < 1)
            {
                return;
            }
            DateTime startDate = BooksRead[0].Date;

            // get all the dates a book has been read (after the first quarter)
            Dictionary <DateTime, DateTime> bookReadDates = GetBookReadDates(startDate);

            // then add the delta made up of the books up to that date
            foreach (var date in bookReadDates.Keys.ToList())
            {
                BooksDelta delta = new BooksDelta(date, startDate);
                foreach (var book in BooksRead)
                {
                    if (book.Date <= date)
                    {
                        delta.BooksReadToDate.Add(book);
                    }
                    else
                    {
                        break;
                    }
                }
                delta.UpdateTallies();
                BookDeltas.Add(delta);
            }
        }
示例#2
0
        private void BuildLanguageDeltasTable()
        {
            _languageDeltasTable = new DataTable("LanguageDeltasTable");
            if (!BookDeltas.Any())
            {
                return;
            }

            // get all the languages from the last delta item in order
            BooksDelta.DeltaTally latestTally = BookDeltas.Last().OverallTally;
            List <string>         languages   = (from item in latestTally.LanguageTotals
                                                 orderby item.Item2 descending
                                                 select item.Item1).ToList();

            // add the date & total columns
            _languageDeltasTable.Columns.Add(
                new DataColumn("Date", _book.Date.GetType()));
            _languageDeltasTable.Columns.Add(
                new DataColumn("TotalBooks", latestTally.TotalBooks.GetType()));
            _languageDeltasTable.Columns.Add(
                new DataColumn("TotalPages", latestTally.TotalPages.GetType()));

            // add the 4 columns for each of languages: ttl books, % book, ttl pages, % pages
            foreach (var language in languages)
            {
                _languageDeltasTable.Columns.Add(
                    new DataColumn(language + "TotalBooks", typeof(UInt32)));
                _languageDeltasTable.Columns.Add(
                    new DataColumn(language + "PercentageBooks", typeof(double)));
                _languageDeltasTable.Columns.Add(
                    new DataColumn(language + "TotalPages", typeof(UInt32)));
                _languageDeltasTable.Columns.Add(
                    new DataColumn(language + "PercentagePages", typeof(double)));
            }

            // loop through the deltas adding rows foreach
            for (int row = 0; row < BookDeltas.Count; ++row)
            {
                var     delta  = BookDeltas[row];
                DataRow newRow = _languageDeltasTable.NewRow();
                newRow["Date"]       = delta.Date;
                newRow["TotalBooks"] = delta.OverallTally.TotalBooks;
                newRow["TotalPages"] = delta.OverallTally.TotalPages;

                foreach (var language in languages)
                {
                    UInt32 ttlBooks, ttlPages;
                    double pctBooks, pctPages;
                    GetLanguageTotalsForDelta(delta, language,
                                              out ttlBooks, out ttlPages, out pctBooks, out pctPages);

                    newRow[language + "TotalBooks"]      = ttlBooks;
                    newRow[language + "PercentageBooks"] = pctBooks;
                    newRow[language + "TotalPages"]      = ttlPages;
                    newRow[language + "PercentagePages"] = pctPages;
                }

                _languageDeltasTable.Rows.Add(newRow);
            }
        }