internal void GroupExpenseReportsByAge()
        {
            var query = from expenseReport in ExpenseReports
                        orderby expenseReport.DateResolved descending
                        group expenseReport by((DateTime)expenseReport.DateResolved).Year into g
                        select new
            {
                GroupName = g.Key,
                Count     = g.Count(),
                Amount    = g.Sum(e => e.Amount),
                Items     = g
            };

            this.GroupedExpenseReports.Clear();
            var groups = new GroupInfoList <object>();

            foreach (var group in query)
            {
                var items = new GroupInfoList <object>();
                items.Key     = group.GroupName;
                items.Amount  = System.Convert.ToDecimal(group.Amount);
                items.Summary = string.Format("{0} for {1:C}",
                                              group.Count, items.Amount);
                items.ImportList(group.Items.ToArray());
                this.GroupedExpenseReports.Add(items);
            }
        }
        private void GroupItemsByTypeAndAmount()
        {
            var query = from item in SummaryItems
                        orderby item.ItemType, item.Amount descending
            group item by item.ItemType into g
                select new
            {
                GroupName = g.Key,
                Count     = g.Count(),
                Amount    = g.Sum(e => e.Amount),
                Items     = g
            };

            this.GroupedSummaryItems.Clear();
            var groups = new GroupInfoList <object>();

            foreach (var group in query)
            {
                var      items        = new GroupInfoList <object>();
                string   itemTypeName = null;
                ItemType itemType     = (ItemType)group.GroupName;
                switch (itemType)
                {
                case ItemType.Charge:
                    itemTypeName = "Charges";
                    break;

                case ItemType.SavedReport:
                    itemTypeName = "Saved Reports";
                    break;

                case ItemType.PendingReport:
                    itemTypeName = "Pending Reports";
                    break;

                case ItemType.UnresolvedReport:
                    itemTypeName = "Needing Approval";
                    break;

                default:
                    break;
                }
                items.Key = string.Format(
                    "{0} ({1:C})", itemTypeName, group.Amount);
                items.Amount = System.Convert.ToDecimal(group.Amount);
                items.ImportList(group.Items.ToArray());
                this.GroupedSummaryItems.Add(items);
            }
        }
        private void GroupItemsByTypeAndAge()
        {
            var query = from item in this.SummaryItems
                        orderby item.ItemType, item.Date ascending
            group item by item.ItemType into g
                select new
            {
                GroupName = g.Key,
                Count     = g.Count(),
                Amount    = g.Sum(e => e.Amount),
                Items     = g
            };

            this.GroupedSummaryItems.Clear();
            var groups = new GroupInfoList <object>();

            foreach (var group in query)
            {
                var      items        = new GroupInfoList <object>();
                string   itemTypeName = null;
                ItemType itemType     = (ItemType)group.GroupName;
                switch (itemType)
                {
                case ItemType.Charge:
                    itemTypeName = "Charges";

                    string beginMonth = this.BeginDateOfCharges.ToString("M").Substring(0, 3);
                    int    beginDay   = this.BeginDateOfCharges.Day;
                    int    beginYear  = this.BeginDateOfCharges.Year;
                    string endMonth   = this.EndDateOfCharges.ToString("M").Substring(0, 3);
                    int    endDay     = this.EndDateOfCharges.Day;
                    int    endYear    = this.EndDateOfCharges.Year;

                    if (beginYear == endYear)
                    {
                        items.Details1 =
                            string.Format("{0} {1} - {2} {3}, {4}",
                                          beginMonth, beginDay, endMonth, endDay, endYear);
                    }
                    else
                    {
                        items.Details1 =
                            string.Format("{0} {1}, {2} - {3} {4}, {5}",
                                          beginMonth, beginDay, beginYear, endMonth, endDay, endYear);
                    }

                    items.Details2 = string.Format("{0} new for {1:C}",
                                                   this.NumberOfChargesLT30Days.ToString(),
                                                   this.AmountOfChargesLT30Days);
                    items.Details3 = string.Format("{0} old for {1:C}",
                                                   this.NumberOfCharges30To44Days.ToString(),
                                                   this.AmountOfCharges30To44Days);
                    items.Details4 = string.Format("{0} late for {1:C}",
                                                   this.NumberOfChargesGT45Days.ToString(),
                                                   this.AmountOfChargesGT45Days);
                    break;

                case ItemType.SavedReport:
                    itemTypeName = "Saved Reports";
                    break;

                case ItemType.PendingReport:
                    itemTypeName   = "Pending Reports";
                    items.Details1 = string.Format("{0:C} owed to employee",
                                                   this._amountOwedToEmployee);
                    items.Details2 = string.Format("{0:C} owed to card",
                                                   this._amountOwedToCreditCard);
                    break;

                case ItemType.UnresolvedReport:
                    itemTypeName = "Needing Approval";
                    break;

                case ItemType.ApprovedReport:
                    itemTypeName = "Past Reports";
                    break;

                default:
                    break;
                }
                items.Key    = itemTypeName;
                items.Amount = System.Convert.ToDecimal(group.Amount);
                if (group.Amount == 0)
                {
                    items.Summary  = "You have none";
                    items.Details1 = string.Empty;
                    items.Details2 = string.Empty;
                    items.Details3 = string.Empty;
                    items.Details4 = string.Empty;
                }
                else
                {
                    items.Summary = string.Format("{0} for {1:C}",
                                                  group.Count, items.Amount);
                }
                items.ImportList(group.Items.ToArray());
                if (!(itemTypeName == "Needing Approval" && !this._employeeViewModel.IsManager))
                {
                    this.GroupedSummaryItems.Add(items);
                }
            }
        }