protected void Bind() { UserTotals ut = new UserTotals(Username, m_fq, true); ut.DataBind(); IEnumerable <TotalsItemCollection> tic = TotalsItemCollection.AsGroups(ut.Totals); rptGroups.DataSource = tic; rptGroups.DataBind(); lblNoTotals.Visible = !tic.Any(); gvTotals.DataSource = ut.Totals; gvTotals.DataBind(); }
private static Dictionary <string, TotalsItem> TotalsForQuery(FlightQuery fq, bool fBind) { Dictionary <string, TotalsItem> d = new Dictionary <string, TotalsItem>(); if (fBind) { UserTotals ut = new UserTotals(fq.UserName, fq, true); ut.DataBind(); foreach (TotalsItem ti in ut.Totals) { d[ti.Description] = ti; } } return(d); }
public void BindTotalsForUser(string szUser, bool fLast7Days, bool fMonthToDate, bool fPreviousMonth, bool fPreviousYear, bool fYearToDate, bool fTrailing12, FlightQuery fqSupplied = null) { if (String.IsNullOrEmpty(szUser)) { throw new ArgumentNullException(nameof(szUser)); } Profile pf = Profile.GetUser(szUser); UseHHMM = pf.UsesHHMM; // Get All time totals. This will also give us the entire space of totals items FlightQuery fq = (fqSupplied == null) ? new FlightQuery(szUser) : new FlightQuery(fqSupplied); UserTotals ut = new UserTotals(szUser, new FlightQuery(fq), false); // if the supplied query has a date range, then don't do any of the subsequent queries; the date range overrides. bool fSuppliedQueryHasDates = fq.DateRange != FlightQuery.DateRanges.AllTime; if (fSuppliedQueryHasDates) { fLast7Days = fMonthToDate = fPreviousMonth = fPreviousYear = fYearToDate = fTrailing12 = false; } Dictionary <string, TotalsItem> dMonthToDate = new Dictionary <string, TotalsItem>(); Dictionary <string, TotalsItem> dPrevMonth = new Dictionary <string, TotalsItem>(); Dictionary <string, TotalsItem> dYTD = new Dictionary <string, TotalsItem>(); Dictionary <string, TotalsItem> dTrailing12 = new Dictionary <string, TotalsItem>(); Dictionary <string, TotalsItem> dPrevYear = new Dictionary <string, TotalsItem>(); Dictionary <string, TotalsItem> dLast7 = new Dictionary <string, TotalsItem>(); // Get all of the results asynchronously, but block until they're all done. Task.WaitAll( Task.Run(() => { ut.DataBind(); }), Task.Run(() => { TotalsForQuery(new FlightQuery(fq) { DateRange = FlightQuery.DateRanges.ThisMonth }, fMonthToDate, dMonthToDate); }), Task.Run(() => { TotalsForQuery(new FlightQuery(fq) { DateRange = FlightQuery.DateRanges.PrevMonth }, fPreviousMonth, dPrevMonth); }), Task.Run(() => { TotalsForQuery(new FlightQuery(fq) { DateRange = FlightQuery.DateRanges.YTD }, fYearToDate, dYTD); }), Task.Run(() => { TotalsForQuery(new FlightQuery(fq) { DateRange = FlightQuery.DateRanges.Trailing12Months }, fTrailing12, dTrailing12); }), Task.Run(() => { TotalsForQuery(new FlightQuery(fq) { DateRange = FlightQuery.DateRanges.PrevYear }, fPreviousYear, dPrevYear); }), Task.Run(() => { TotalsForQuery(new FlightQuery(fq) { DateRange = FlightQuery.DateRanges.Custom, DateMin = DateTime.Now.Date.AddDays(-7), DateMax = DateTime.Now.Date.AddDays(1) }, fLast7Days, dLast7); }) ); IEnumerable <TotalsItemCollection> allTotals = TotalsItemCollection.AsGroups(ut.Totals); tblTotals.Controls.Clear(); // Determine which columns we'll show ColumnCount = 2; // All time is always shown, as are its labels (in adjacent table column) if (fLast7Days &= dLast7.Any()) { ColumnCount++; } if (fMonthToDate &= dMonthToDate.Any()) { ColumnCount++; } if (fPreviousMonth &= dPrevMonth.Any()) { ColumnCount++; } if (fTrailing12 &= dTrailing12.Any()) { ColumnCount++; } if (fPreviousYear &= dPrevYear.Any()) { ColumnCount++; } if (fYearToDate &= dYTD.Any()) { ColumnCount++; } mvTotals.SetActiveView(allTotals.Any() ? vwTotals : vwNoTotals); string szPreviousMonth = DateTime.Now.AddCalendarMonths(-1).ToString("MMM yyyy", CultureInfo.CurrentCulture); string szPreviousYear = (DateTime.Now.Year - 1).ToString(CultureInfo.CurrentCulture); foreach (TotalsItemCollection tic in allTotals) { TableRow trGroup = new TableRow() { CssClass = "totalsGroupHeaderRow" }; tblTotals.Rows.Add(trGroup); TableCell tcGroup = new TableCell() { ColumnSpan = ColumnCount, Text = tic.GroupName }; trGroup.Cells.Add(tcGroup); TableRow trHeader = new TableRow(); tblTotals.Rows.Add(trHeader); const string cssDateRange = "totalsDateRange"; AddTextCellToRow(trHeader, string.Empty, true); // no header above the total description itself. AddTextCellToRow(trHeader, fSuppliedQueryHasDates ? string.Empty : Resources.FlightQuery.DatesAll, true, cssDateRange); AddTextCellToRow(trHeader, Resources.Profile.EmailWeeklyTotalsLabel, fLast7Days, cssDateRange); AddTextCellToRow(trHeader, Resources.FlightQuery.DatesThisMonth, fMonthToDate, cssDateRange); AddTextCellToRow(trHeader, szPreviousMonth, fPreviousMonth, cssDateRange); AddTextCellToRow(trHeader, Resources.FlightQuery.DatesYearToDate, fYearToDate, cssDateRange); AddTextCellToRow(trHeader, Resources.FlightQuery.DatesPrev12Month, fTrailing12, cssDateRange); AddTextCellToRow(trHeader, szPreviousYear, fPreviousYear, cssDateRange); foreach (TotalsItem ti in tic.Items) { TableRow tr = new TableRow() { CssClass = "totalsGroupRow" }; tblTotals.Rows.Add(tr); // Add the description tr.Cells.Add(new TableCell() { Text = ti.Description }); decimal rowTotal = AddCellForTotalsItem(tr, ti, true) + AddCellForTotalsItem(tr, dLast7.ContainsKey(ti.Description) ? dLast7[ti.Description] : null, fLast7Days) + AddCellForTotalsItem(tr, dMonthToDate.ContainsKey(ti.Description) ? dMonthToDate[ti.Description] : null, fMonthToDate) + AddCellForTotalsItem(tr, dPrevMonth.ContainsKey(ti.Description) ? dPrevMonth[ti.Description] : null, fPreviousMonth) + AddCellForTotalsItem(tr, dYTD.ContainsKey(ti.Description) ? dYTD[ti.Description] : null, fYearToDate) + AddCellForTotalsItem(tr, dTrailing12.ContainsKey(ti.Description) ? dTrailing12[ti.Description] : null, fTrailing12) + AddCellForTotalsItem(tr, dPrevYear.ContainsKey(ti.Description) ? dPrevYear[ti.Description] : null, fPreviousYear); // Remove rows of empty data if (rowTotal == 0) { tblTotals.Rows.Remove(tr); } } } }