สร้างรายการคำสั่งซื้อที่กำหนดเองใน NopCommerce

ฉันกำลังพยายามสร้างรายการคำสั่งซื้อในคอนโทรลเลอร์ที่กำหนดเองในแอปพลิเคชัน NopCommerce/MVC และฉันต้องการให้รายการเรียงลำดับตามcreationDate และมีคำสั่งซื้อทั้งหมดสำหรับวันที่นั้น และแปลงค่าเหล่านี้เป็นรูปแบบสตริง

ประเด็นคือฉันไม่ต้องการให้ ActionResult แสดงตารางในมุมมองเหมือนในผู้ดูแลระบบ/คำสั่งซื้อ สิ่งที่ฉันต้องการคือรายการคำสั่งซื้อที่ชำระเงินทั้งหมดระหว่าง model.StartDate และ model.EndDate ที่มีพารามิเตอร์สองตัวคือ "CreationDateUtc" และ TotalOrders" ฉันแค่ต้องการรายการที่มีข้อมูลคำสั่งซื้อที่จัดเรียงตามวันที่สร้าง

ถ้าฉันเลือก StartDate 2014-03-29 และ EndDate 2014-04-02 ผลลัพธ์ที่ฉันต้องการจะมีลักษณะดังนี้:

แสดงรายการ OrderTotalList พร้อมพารามิเตอร์ 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 หนึ่งค่า) นอกจากนี้ยังมีการใช้ gridmodel ที่นี่ แต่ฉันไม่ต้องการ gridmodel จริงๆ ฉันแค่ต้องการข้อมูลจากฐานข้อมูล:

รายการสาธารณะ OrderList (คำสั่ง GridCommand, โมเดล OrderListModel, OrderModel Omodel) {

            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)


แก้ไขแล้ว

เพื่อให้ได้รายการคำสั่งซื้อทั้งหมด คุณสามารถสร้าง Constructor ใหม่ใน 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