Beispiel #1
0
        /// <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)));
        }