/// <summary> /// The partial page that shows all of the orders. /// </summary> /// <param name="ordererName">Name of the orderer.</param> /// <param name="itemId">The item identifier.</param> /// <param name="currentOrderer">The current orderer.</param> /// <param name="currentItemId">The current item identifier.</param> /// <param name="sortOrder">The sort order.</param> /// <param name="page">The page.</param> /// <param name="currentSort">The current sort order.</param> /// <returns></returns> public PartialViewResult _orderDetails(string ordererName, int?itemId, string currentOrderer, int?currentItemId, string sortOrder, int?page, string currentSort) { //If there is a new filter, set the page back to one - the amount of pages may have changed if (!string.IsNullOrEmpty(ordererName) || itemId.HasValue) { page = 1; } else { ordererName = currentOrderer; itemId = currentItemId; } //Adding params to the ViewBag in order for the view to reference //If the sortOrder is empty, set the name sort param to descending - otherwise keep it empty ViewBag.NameSortParm = String.IsNullOrEmpty(sortOrder) ? "name_desc" : ""; //If the sort order is by Date, then set it to descending, because we want the opposite if they click it ViewBag.DateSortParm = sortOrder == "Date" ? "date_desc" : "Date"; //The list of items that are in the database are needed when computing the total cost of the orders ViewBag.ItemID = new SelectList(unitOfWork.ItemRepository.Get(), "ID", "Name"); //Store the current sorting order for the view ViewBag.CurrentOrdererFilter = ordererName; ViewBag.CurrentItemIdFilter = itemId; ViewBag.CurrentSort = sortOrder; Expression <Func <Order, bool> > filter = o => true; //If we are filtering by orderer name, then filter it by that name if (!string.IsNullOrEmpty(ordererName)) { filter = HelperMethods.AndCombineExpressions <Order>(filter, o => o.OrdererName.Contains(ordererName)); } //If we are filtering by item id, then filter it by ID if (itemId.HasValue) { filter = HelperMethods.AndCombineExpressions <Order>(filter, o => o.ItemID == itemId.Value); } IEnumerable <Order> orders; //Sort the list that we are showing - By default sort by orderer name switch (sortOrder) { case "name_desc": orders = unitOfWork.OrderRepository.Get(filter, query => query.OrderByDescending(o => o.OrdererName), "Item"); break; case "Date": orders = unitOfWork.OrderRepository.Get(filter, query => query.OrderBy(o => o.TimeOrdered), "Item"); break; case "date_desc": orders = unitOfWork.OrderRepository.Get(filter, query => query.OrderByDescending(o => o.TimeOrdered), "Item"); break; default: orders = unitOfWork.OrderRepository.Get(filter, query => query.OrderBy(o => o.OrdererName), "Item"); break; } //If there isn't a page number, default to the first page int pageNumber = (page ?? 1); return(PartialView(orders.ToPagedList(pageNumber, UNITS_PER_PAGE))); }