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); } }
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); } }