Создайте собственный список заказов в NopCommerce

Я пытаюсь создать список заказов в пользовательском контроллере в приложении NopCommerce/MVC, и я хочу, чтобы список был отсортирован по дате создания, содержал общее количество заказов на эту дату и преобразовывал эти значения в строковый формат.

Дело в том, что я не хочу, чтобы ActionResult отображал сетку в представлении, как в Admin/Orders. Все, что мне нужно, это список всех оплаченных заказов между model.StartDate и model.EndDate, который содержит два параметра «CreationDateUtc» и TotalOrders». Мне просто нужен список, содержащий данные заказов, отсортированных по дате создания.

Если я выберу StartDate 2014-03-29 и EndDate 2014-04-02, результат, который я хочу, будет выглядеть примерно так:

Список OrdersTotalList с параметрами CreationDateUtc и TotalOrders

CreationDateUtc "2014-03-29" 
TotalOrders "562"

CreationDateUtc "2014-03-30" 
TotalOrders "485"

CreationDateUtc "2014-03-31" 
TotalOrders "733"

CreationDateUtc "2014-04-01" 
TotalOrders "729"

CreationDateUtc "2014-04-02" 
TotalOrders "681

"

Я пытаюсь получить доступ к данным с помощью реализации OrderList из OrderController в моем CustomController. Проблема в том, что этот метод всегда возвращает 10 объектов, когда на самом деле общее количество заказов в этом временном пространстве равно 58. При отладке Total = orders.TotalCount фактически показывает 58 заказов как одно значение int). Также здесь используется модель сетки, но мне действительно не нужна модель сетки, мне просто нужны данные из базы данных:

общедоступный список OrderList (команда GridCommand, модель OrderListModel, модель OrderModel) {

            DateTime S = new DateTime(2014, 3, 29); //-- Dates for testing
            DateTime E = new DateTime(2014, 4, 02);

            model.StartDate = S;
            model.EndDate = E;

            DateTime? startDateValue = (model.StartDate == null) ? null
                            : (DateTime?)_dateTimeHelper.ConvertToUtcTime(model.StartDate.Value, _dateTimeHelper.CurrentTimeZone);

            DateTime? endDateValue = (model.EndDate == null) ? null
                            : (DateTime?)_dateTimeHelper.ConvertToUtcTime(model.EndDate.Value, _dateTimeHelper.CurrentTimeZone).AddDays(1);

            OrderStatus? orderStatus = model.OrderStatusId > 0 ? (OrderStatus?)(model.OrderStatusId) : null;
            PaymentStatus? paymentStatus = model.PaymentStatusId > 0 ? (PaymentStatus?)(model.PaymentStatusId) : null;
            ShippingStatus? shippingStatus = model.ShippingStatusId > 0 ? (ShippingStatus?)(model.ShippingStatusId) : null;

            //load orders
            var orders = _orderService.SearchOrders(startDateValue, endDateValue, orderStatus,
                paymentStatus, shippingStatus, model.CustomerEmail, model.OrderGuid, command.Page - 1, command.PageSize);
            var gridModel = new GridModel<OrderModel>
            {
                Data = orders.Select(x =>
                {
                    var customerCurrency = _currencyService.GetCurrencyByCode(x.CustomerCurrencyCode);
                    var totalInCustomerCurrency = _currencyService.ConvertCurrency(x.OrderTotal, x.CurrencyRate);

                    return new OrderModel()
                    {
                        Id = x.Id,
                        OrderTotal = _priceFormatter.FormatPrice(totalInCustomerCurrency, true, customerCurrency),
                        OrderStatus = x.OrderStatus.GetLocalizedEnum(_localizationService, _workContext),
                        PaymentStatus = x.PaymentStatus.GetLocalizedEnum(_localizationService, _workContext),
                        ShippingStatus = x.ShippingStatus.GetLocalizedEnum(_localizationService, _workContext),

                        CreatedOn = _dateTimeHelper.ConvertToUserTime(x.CreatedOnUtc, DateTimeKind.Utc)
                    };
                }),


                Total = orders.TotalCount <-- Returns all orders (58) but as an integer


            };



            var reportSummary = _orderReportService.GetOrderAverageReportLine
             (orderStatus, paymentStatus, shippingStatus, startDateValue, endDateValue, model.CustomerEmail);
            var profit = _orderReportService.ProfitReport
                (orderStatus, paymentStatus, shippingStatus, startDateValue, endDateValue, model.CustomerEmail);
            var aggregator = new OrderModel()
            {
                aggregatorprofit = _priceFormatter.FormatPrice(profit, true, false),
                aggregatortax = _priceFormatter.FormatPrice(reportSummary.SumTax, true, false),
                aggregatortotal = _priceFormatter.FormatPrice(reportSummary.SumOrders, true, false)
                //aggregatordates = 
            };

            List<Order> TotalProductsSold = new List<Order>();

        foreach (var o in orders)
        {

            TotalProductsSold.Add(o);


        }


            return TotalProductsSold.ToList(); //<-- returns 10 orders containing all order info
        }

Если я правильно понимаю, чтобы заархивировать это, я должен сначала выполнить поиск по заказам и определить, является ли их статус оплаты Оплаченным. Затем создайте список в методе сверху. Цикл foreach может перебирать заказы и добавлять заказы в список, хотя мне нужно указать, что я хочу только CreationDate и TotalOrders для этой даты в качестве параметров в списке.

Я знаю, что это неправильно, но я представляю нечто подобное. Дело в том, что мне нужен список объектов заказа, а не один объект с одним значением:

List<OrderModel> OrdersTotalList = new List<OrderModel>();

    foreach (var o in orders)
                {

                    OrderModel OM = new OrderModel(OM.OrderTotal, OM.CreatedOn);

                    OrdersTotalList.Add(OM);

                }

    return OrdersTotalList; //--

Я полностью или это правильный подход? Я надеялся, что кто-то, более знакомый с NopCommerce, знает об этом больше.

Извините за весь текст

Спасибо


person WhoAmI    schedule 03.04.2014    source источник
comment
Ваш вопрос немного трудно понять. Вы выбрасываете термины, относящиеся только к этому проекту, которых мы не знаем. Можете ли вы сжать свой вопрос?   -  person Botonomous    schedule 03.04.2014
comment
Извините, я обновлю пост и напишу больше о коде, чем о платформе/проекте.   -  person WhoAmI    schedule 03.04.2014
comment
Пожалуйста, проверьте размер страницы вашей сетки Telerik, он должен быть установлен на 10 в представлении.   -  person Nitin Varpe    schedule 04.04.2014
comment
Спасибо, Нитин. Что ж, может быть проблема, но дело в том, что я не хочу отображать данные в представлении. Все, что я хочу, это создать список с двумя параметрами. 1 для общего количества заказов по дате и 2 для фактической даты (CreatedOnUtc). Это должен быть простой способ получить эти данные из базы данных? Типа 2014-02-05 - 200 заказов, 2014-04-06 - 230 заказов и т.д.   -  person WhoAmI    schedule 07.04.2014


Ответы (1)


Решено.

Чтобы получить полный список заказов, вы можете создать в IOrderService/OrderService новый конструктор типа List вместо IPagedList. Метод, используемый для поиска заказов, называется «SearchOrders» и имеет тип IPagedList. IPagedList содержит свойство PageSize, которое приводит только к 10 заказам.

Вы можете создать новый метод с той же реализацией, что и SearchOrders, и изменить IPagedList на List, удалить «int pageIndex» и «int pageSize».

Затем используйте:

            _orderService.YourNewConstructor(DateTime? startTime, DateTime? endTime,
            OrderStatus? os, PaymentStatus? ps, ShippingStatus? ss, string billingEmail,
            string orderGuid)
            {
                 some code...
            }

Это даст вам доступ ко всем заказам.

person WhoAmI    schedule 07.04.2014