public virtual ActionResult Index()
        {
            LogI("Index");
            var model = new OrderReportSearchFilterViewModel()
            {
                OrderStatus = String.Join(";", OrderStatusEnumEx.AllUnshippedWithShipped)
            };

            return(View(model));
        }
        public static MemoryStream ExportToExcel(ILogService log,
                                                 ITime time,
                                                 IUnitOfWork db,
                                                 OrderReportSearchFilterViewModel filter)
        {
            var templateName = AppSettings.OrderReportTemplate;
            var gridItems    = GetItems(db, filter);

            return(ExcelHelper.ExportIntoFile(HttpContext.Current.Server.MapPath(templateName),
                                              "Template",
                                              gridItems.Items,
                                              null,
                                              1));
        }
        public virtual ActionResult GetAll(GridRequest request,
                                           long?dropShipperId,
                                           string orderString,
                                           string orderStatus,
                                           int?market,
                                           DateTime?fromDate,
                                           DateTime?toDate)
        {
            LogI("GetAll, fromDate=" + fromDate
                 + ", toDate=" + toDate
                 + ", orderString=" + orderString
                 + ", dropShipperId=" + dropShipperId
                 + ", orderStatus=" + orderStatus
                 + ", market=" + market);

            var pageSize = request.ItemsPerPage;

            var searchFilter = new OrderReportSearchFilterViewModel()
            {
                FromDate      = fromDate,
                ToDate        = toDate,
                DropShipperId = dropShipperId,
                Market        = market,
                OrderString   = orderString,
                OrderStatus   = orderStatus,
                StartIndex    = (request.Page - 1) * pageSize,
                LimitCount    = pageSize,
                SortField     = request.SortField,
                SortMode      = request.SortMode == "asc" ? 0 : 1,
            };

            var gridResult = OrderReportViewModel.GetAll(Db, searchFilter);

            //var data = new GridResponse<StyleViewModel>(items, items.Count, Time.GetAppNowTime());

            return(Json(gridResult, JsonRequestBehavior.AllowGet));
        }
        public virtual ActionResult ExportToExcel(long?dropShipperId,
                                                  string orderString,
                                                  string orderStatus,
                                                  int?market,
                                                  DateTime?fromDate,
                                                  DateTime?toDate)
        {
            LogI("ExportToExcel, fromDate=" + fromDate
                 + ", toDate=" + toDate
                 + ", orderString=" + orderString
                 + ", dropShipperId=" + dropShipperId
                 + ", orderStatus=" + orderStatus
                 + ", market=" + market);

            var searchFilter = new OrderReportSearchFilterViewModel()
            {
                FromDate      = fromDate,
                ToDate        = toDate,
                DropShipperId = dropShipperId,
                Market        = market,
                OrderString   = orderString,
                OrderStatus   = orderStatus,
                StartIndex    = 0,
                LimitCount    = 100000,
            };

            string filename = "OrderReport_" + Time.GetAppNowTime().ToString("ddMMyyyyHHmmss") + ".xls";
            var    output   = OrderReportViewModel.ExportToExcel(LogService,
                                                                 Time,
                                                                 Db,
                                                                 searchFilter);

            return(File(output.ToArray(),           //The binary data of the XLS file
                        "application/vnd.ms-excel", //MIME type of Excel files
                        filename));                 //Suggested file name in the "Save as" dialog which will be displayed to the end user
        }
 public static GridResponse <OrderReportViewModel> GetAll(IUnitOfWork db,
                                                          OrderReportSearchFilterViewModel filter)
 {
     return(GetItems(db, filter));
 }
        public static GridResponse <OrderReportViewModel> GetItems(IUnitOfWork db,
                                                                   OrderReportSearchFilterViewModel filter)
        {
            if (filter.LimitCount == 0)
            {
                filter.LimitCount = 50;
            }

            var query = db.OrderReports.GetAllAsDto();

            if (filter.FromDate.HasValue)
            {
                query = query.Where(i => i.OrderDate >= filter.FromDate.Value);
            }

            if (filter.ToDate.HasValue)
            {
                query = query.Where(i => i.OrderDate <= filter.ToDate.Value);
            }

            if (filter.DropShipperId.HasValue)
            {
                query = query.Where(i => i.DropShipperId == filter.DropShipperId.Value);
            }

            if (filter.Market.HasValue)
            {
                query = query.Where(i => i.Market == filter.Market.Value);
            }

            if (!String.IsNullOrEmpty(filter.OrderString))
            {
                var digitalString = StringHelper.GetAllDigitSequences(filter.OrderString);
                query = query.Where(i =>
                                    (i.Market != (int)MarketType.eBay &&
                                     (i.CustomerOrderId.Contains(filter.OrderString) ||
                                      i.CustomerOrderId.Contains(digitalString))) ||
                                    (i.Market == (int)MarketType.eBay &&
                                     (i.AmazonIdentifier.Contains(filter.OrderString) ||
                                      i.AmazonIdentifier.Contains(digitalString)))
                                    ); //i.CustomerOrderId.Contains(filter.OrderString) ||
            }

            if (!String.IsNullOrEmpty(filter.OrderStatus))
            {
                var orderStatuses = new List <string>();
                if (filter.OrderStatus == OrderStatusEnumEx.Canceled)
                {
                    orderStatuses = new List <string>()
                    {
                        OrderStatusEnumEx.Canceled
                    };
                    query = query.Where(i => orderStatuses.Contains(i.OrderStatus) ||
                                        ((i.ItemRefunded ?? 0) + (i.ShippingRefunded ?? 0)
                                         == (i.ItemPaid ?? 0) + (i.ShippingPaid ?? 0)));
                }
                if (filter.OrderStatus == OrderStatusEnumEx.Refunded)
                {
                    orderStatuses = OrderStatusEnumEx.AllUnshippedWithShipped.ToList();
                    query         = query.Where(i =>
                                                //orderStatuses.Contains(i.OrderStatus)
                                                //    && ((i.ItemRefunded ?? 0) + (i.ShippingRefunded ?? 0)) > 0) ||
                                                (i.OrderStatus == "Refund"));
                }
                if (filter.OrderStatus == OrderStatusEnumEx.Shipped)
                {
                    orderStatuses = new List <string>()
                    {
                        OrderStatusEnumEx.Shipped
                    };
                    query = query.Where(i => orderStatuses.Contains(i.OrderStatus));
                }
                if (filter.OrderStatus == OrderStatusEnumEx.Unshipped)
                {
                    orderStatuses = new List <string>()
                    {
                        OrderStatusEnumEx.Unshipped
                    };
                    query = query.Where(i => orderStatuses.Contains(i.OrderStatus));
                }
                if (filter.OrderStatus == String.Join(";", OrderStatusEnumEx.AllUnshippedWithShipped))
                {
                    orderStatuses = OrderStatusEnumEx.AllUnshippedWithShipped.ToList();
                    orderStatuses.Add("Refund");
                    query = query.Where(i => orderStatuses.Contains(i.OrderStatus));
                }
            }

            var totalCount = query.Count();

            if (!String.IsNullOrEmpty(filter.SortField))
            {
                switch (filter.SortField)
                {
                case "DropShipperName":
                    if (filter.SortMode == 0)
                    {
                        query = query.OrderBy(s => s.DropShipperName).ThenByDescending(s => s.OrderDate);
                    }
                    else
                    {
                        query = query.OrderByDescending(s => s.DropShipperName).ThenByDescending(s => s.OrderDate);
                    }
                    break;

                case "OrderDate":
                    if (filter.SortMode == 0)
                    {
                        query = query.OrderBy(s => s.OrderDate);
                    }
                    else
                    {
                        query = query.OrderByDescending(s => s.OrderDate);
                    }
                    break;

                case "ShippingState":
                    if (filter.SortMode == 0)
                    {
                        query = query.OrderBy(s => s.ShippingState).ThenByDescending(s => s.OrderDate);
                    }
                    else
                    {
                        query = query.OrderByDescending(s => s.ShippingState).ThenByDescending(s => s.OrderDate);
                    }
                    break;

                default:
                    query = query.OrderByDescending(s => s.OrderDate);
                    break;
                }
            }
            else
            {
                query = query.OrderByDescending(s => s.OrderDate);
            }

            var itemList = query
                           .Skip(filter.StartIndex)
                           .Take(filter.LimitCount)
                           .ToList()
                           .Select(i => new OrderReportViewModel(i))
                           .ToList();

            return(new GridResponse <OrderReportViewModel>(itemList, totalCount));
        }