Exemplo n.º 1
0
        /// <summary>
        /// Retrieves Mail grid rows
        /// </summary>
        /// <param name="request"></param>
        /// <param name="orderId"></param>
        /// <returns></returns>
        public virtual ActionResult GetOrderById([DataSourceRequest] DataSourceRequest request, string orderId)
        {
            LogI("GetOrderById, orderId=" + orderId);

            if (String.IsNullOrWhiteSpace(orderId))
            {
                return new JsonResult {
                           Data = new List <OrderViewModel>(), JsonRequestBehavior = JsonRequestBehavior.AllowGet
                }
            }
            ;

            orderId = orderId.RemoveWhitespaces();

            try
            {
                var model = new OrderSearchFilterViewModel
                {
                    EqualOrderNumber = orderId
                };

                var items      = OrderViewModel.GetFilteredForDisplay(Db, LogService, WeightService, model, AccessManager.IsFulfilment);
                var dataSource = items.Items.ToDataSourceResult(request);
                return(new JsonResult {
                    Data = dataSource, JsonRequestBehavior = JsonRequestBehavior.AllowGet
                });
            }
            catch (Exception ex)
            {
                LogE("GetOrderById", ex);
                return(new JsonResult {
                    Data = new List <OrderViewModel>(), JsonRequestBehavior = JsonRequestBehavior.AllowGet
                });
            }
        }
Exemplo n.º 2
0
        public virtual ActionResult GetPickListWithLocation([DataSourceRequest] DataSourceRequest request,
                                                            long?batchId,
                                                            bool?useOnlyAllPending)
        {
            LogI("GetPickListWithLocation, batchId=" + batchId + ", useOnlyAllPending=" + useOnlyAllPending);

            try
            {
                bool     excludeOnHold = false;
                string[] orderStatus   = null;
                if (batchId != null)
                {
                    excludeOnHold = false;
                    orderStatus   = OrderStatusEnumEx.AllUnshippedWithShipped;
                }
                else
                {
                    excludeOnHold = false;
                    if (useOnlyAllPending == true)
                    {
                        orderStatus = new[] { OrderStatusEnumEx.Pending }
                    }
                    ;
                    else
                    {
                        orderStatus = OrderStatusEnumEx.AllUnshipped;
                    }
                }

                var model = new OrderSearchFilterViewModel
                {
                    ShippingStatus = "Select...",
                    BatchId        = batchId,
                    DropShipperId  = DSHelper.DefaultPAId,
                    //Pick list should never have pajamas for which labels were already generated (more accurate restriction in VM)
                    OrderStatus   = orderStatus,
                    ExcludeOnHold = excludeOnHold,
                    DateFrom      = null,
                    DateTo        = null,
                    BuyerName     = null,
                    OrderNumber   = null,
                };
                //Pick list should never have pajamas for which labels were already generated (if not in batch)
                if (!batchId.HasValue)
                {
                    model.ExcludeWithLabels = true;
                }

                var items      = PickListItemViewModel.GetPickListItems(Db, LogService, WeightService, model);
                var dataSource = items.ToDataSourceResult(request);
                return(JsonGet(dataSource));
            }
            catch (Exception ex)
            {
                LogE("GetPickListWithLocation", ex);
                return(new JsonResult {
                    Data = new List <PickListItemViewModel>(), JsonRequestBehavior = JsonRequestBehavior.AllowGet
                });
            }
        }
Exemplo n.º 3
0
        public virtual ActionResult GetPendingOrders([DataSourceRequest] DataSourceRequest request,
                                                     int?market,
                                                     string marketplaceId)
        {
            LogI("GetOrders, market=" + market
                 + ", marketplaceId=" + marketplaceId);

            var orderStatusList = new string[] { OrderStatusEnumEx.Pending };

            var model = new OrderSearchFilterViewModel
            {
                Market        = (MarketType)(market ?? (int)MarketHelper.DefaultUIMarket),
                MarketplaceId = marketplaceId ?? MarketHelper.DefaultUIMarketplaceId,
                OrderStatus   = orderStatusList,
            };

            var items = OrderViewModel.GetFilteredForDisplay(ReadDb,
                                                             LogService,
                                                             WeightService,
                                                             model,
                                                             AccessManager.IsFulfilment,
                                                             SortMode.ByShippingMethodThenLocation);

            var dataSource = items.Items.ToDataSourceResult(request);

            return(Json(dataSource, JsonRequestBehavior.AllowGet));
        }
Exemplo n.º 4
0
        public static IEnumerable <SecondDayViewModel> GetAll(IUnitOfWork db,
                                                              OrderSearchFilterViewModel search)
        {
            var orders = db.Orders.GetSecondDayOrders(search.DateFrom, search.DateTo).OrderByDescending(o => o.OrderDate).ToList();

            return(orders.Select(o => new SecondDayViewModel
            {
                OrderNumber = o.OrderNumber,
                Market = o.Market,
                MarketplaceId = o.MarketplaceId,

                TrackingNumber = o.TrackingNumber,
                EstDeliveryDate = o.EstDeliveryDate,
                OrderDate = o.OrderDate,
                ActualDeliveryDate = o.ActualDeliveryDate,
                PersonName = o.PersonName,
                BuyerName = o.BuyerName,
            }));
        }
Exemplo n.º 5
0
        public virtual ActionResult GetSecondDay([DataSourceRequest] DataSourceRequest request,
                                                 string dateFrom,
                                                 string dateTo)
        {
            LogI("GetSecondDay");

            var model = new OrderSearchFilterViewModel
            {
                DateFrom = dateFrom.HasValue()
                    ? (DateTime?)
                           DateTime.ParseExact(dateFrom, "MM/dd/yyyy", new CultureInfo("en-US"), DateTimeStyles.None)
                    : null,
                DateTo = dateTo.HasValue()
                    ? (DateTime?)
                         DateTime.ParseExact(dateTo, "MM/dd/yyyy", new CultureInfo("en-US"), DateTimeStyles.None)
                    : null
            };
            var items      = SecondDayViewModel.GetAll(Db, model);
            var dataSource = items.ToDataSourceResult(request);

            return(Json(dataSource, JsonRequestBehavior.AllowGet));
        }
Exemplo n.º 6
0
        public virtual ActionResult GetWFSOrders([DataSourceRequest] DataSourceRequest request,
                                                 string dateFrom,
                                                 string dateTo)
        {
            LogI("GetFBAOrders, DateFrom=" + dateFrom + ", DateTo=" + dateTo);

            //1. Let user to select timeframe and page should show orders between selected dates.
            //By default it should show orders from 10am. So at 9pm it will sow orders from 10am-9pm, at 9am from 10 am previous day till 9am today.
            var model = new OrderSearchFilterViewModel
            {
                FulfillmentChannel = FulfillmentChannelTypeEx.AFN,
                OrderStatus        = OrderStatusEnumEx.AllUnshippedWithShipped,
                //Set time to 10AM
                DateFrom = dateFrom.HasValue()
                    ? (DateTime?)
                           DateTime.ParseExact(dateFrom, "MM/dd/yyyy", new CultureInfo("en-US"), DateTimeStyles.None)
                           .AddHours(10)
                    : null,
                //Set time to 10AM
                DateTo = dateTo.HasValue()
                    ? (DateTime?)
                         DateTime.ParseExact(dateTo, "MM/dd/yyyy", new CultureInfo("en-US"), DateTimeStyles.None)
                         .AddHours(10)
                    : null,
                Market = MarketType.Walmart
            };

            var items = OrderViewModel.GetFilteredForDisplay(Db,
                                                             LogService,
                                                             WeightService,
                                                             model,
                                                             AccessManager.IsFulfilment,
                                                             resetTime: false);

            var dataSource = items.Items.ToDataSourceResult(request);

            return(Json(dataSource, JsonRequestBehavior.AllowGet));
        }
Exemplo n.º 7
0
        private static IEnumerable <DTOOrder> GetOrdersWithItemsForPickList(IUnitOfWork db,
                                                                            IWeightService weightService,
                                                                            OrderSearchFilterViewModel search)
        {
            var filter = search.GetModel();

            filter.UnmaskReferenceStyles = true;

            //if (filter.BatchId.HasValue)
            //{
            //    var batchOrderList = db.OrderToBatches.GetViewAllAsDto().Where(o => o.BatchId == filter.BatchId.Value).ToList();
            //    if (batchOrderList.Any()) //Batch created using OrderToBatch
            //    {
            //        filter.EqualOrderIds = batchOrderList.Select(o => o.OrderId).Distinct().ToArray();
            //        filter.BatchId = null;
            //    }
            //}

            var orders = db.ItemOrderMappings.GetFilteredOrdersWithItems(weightService, filter)
                         .ToList();

            return(orders);
        }
Exemplo n.º 8
0
        public virtual ActionResult GetOrders(GridRequest request,
                                              int?market,
                                              string marketplaceId,
                                              string orderStatus,
                                              string shippingStatus,
                                              string dateFrom,
                                              string dateTo,
                                              string buyerName,
                                              string orderNumber,
                                              long?batchId,
                                              long?dropShipperId,
                                              string styleId,
                                              long?styleItemId)
        {
            LogI("Begin GetOrders, market=" + market
                 + ", marketplaceId=" + marketplaceId
                 + ", orderStatus=" + orderStatus
                 + ", shipppingStatus=" + shippingStatus
                 + ", DateFrom=" + dateFrom
                 + ", DateTo=" + dateTo
                 + ", BuyerName=" + buyerName
                 + ", OrderNumber=" + orderNumber
                 + ", BatchId=" + batchId
                 + ", dropShipperId=" + dropShipperId
                 + ", StyleId=" + styleId
                 + ", StyleItemId=" + styleItemId);

            bool excludeWithLabels   = false;
            bool includeForceVisible = false;

            string[] orderStatusList = null;
            if (!String.IsNullOrEmpty(orderStatus))
            {
                orderStatusList = new[] { orderStatus }
            }
            ;
            //Exclude canceled from batch on UI


            if (batchId == 0)
            {
                batchId = null;
            }

            if (orderStatus == null)
            {
                if (batchId != null)
                {
                    orderStatusList = OrderStatusEnumEx.AllUnshippedWithShipped;
                }
                else
                {
                    orderStatusList     = OrderStatusEnumEx.AllUnshipped;
                    excludeWithLabels   = true;
                    includeForceVisible = true;
                }
            }

            buyerName   = StringHelper.TrimWhitespace(buyerName);
            orderNumber = StringHelper.TrimWhitespace(orderNumber);
            styleId     = StringHelper.TrimWhitespace(styleId);

            var pageSize = request.ItemsPerPage;
            var model    = new OrderSearchFilterViewModel
            {
                //FulfillmentChannel = FulfillmentChannelTypeEx.MFN,
                Market              = (MarketType)(market ?? (int)MarketHelper.DefaultUIMarket),
                MarketplaceId       = marketplaceId ?? MarketHelper.DefaultUIMarketplaceId,
                DropShipperId       = dropShipperId,
                OrderStatus         = orderStatusList,
                ShippingStatus      = shippingStatus,
                ExcludeWithLabels   = excludeWithLabels,
                IncludeForceVisible = includeForceVisible,
                DateFrom            = dateFrom.HasValue()
                    ? (DateTime?)
                                      DateTime.ParseExact(dateFrom, "MM/dd/yyyy", new CultureInfo("en-US"), DateTimeStyles.None)
                    : null,
                DateTo = dateTo.HasValue()
                    ? (DateTime?)
                         DateTime.ParseExact(dateTo, "MM/dd/yyyy", new CultureInfo("en-US"), DateTimeStyles.None)
                    : null,
                BuyerName   = string.IsNullOrEmpty(buyerName) ? null : buyerName.Trim(),
                BatchId     = batchId,
                StyleId     = string.IsNullOrEmpty(styleId) ? null : styleId.Trim(),
                StyleItemId = styleItemId,

                StartIndex = (request.Page - 1) * pageSize,
                LimitCount = pageSize,
                SortField  = request.SortField,
                SortMode   = request.SortMode == "asc" ? 0 : 1,
            };

            if (!string.IsNullOrEmpty(orderNumber))
            {
                //model.EqualOrderNumber = orderNumber;
                if (orderNumber.Contains("-"))
                {
                    model.OrderNumber = orderNumber.Trim();
                }
                else
                {
                    model.OrderNumber = OrderHelper.FormatDisplayOrderNumber(orderNumber, MarketType.None);
                }
            }

            var searchResult = OrderViewModel.GetFilteredForDisplay(ReadDb,
                                                                    LogService,
                                                                    WeightService,
                                                                    model,
                                                                    AccessManager.IsFulfilment,
                                                                    SortMode.ByShippingMethodThenLocation);

            for (int i = 0; i < searchResult.Items.Count(); i++)
            {
                searchResult.Items[i].NumberByLocation = i;
            }

            if (!String.IsNullOrEmpty(model.OrderNumber))
            {
                OrderPageViewModel.AddSearchHistory(Db,
                                                    model.OrderNumber,
                                                    Time.GetUtcTime(),
                                                    AccessManager.UserId);
            }

            LogI("End GetOrders");
            var data = new GridResponse <OrderViewModel>(searchResult.Items, searchResult.Items.Count);

            data.RequestTimeStamp = request.TimeStamp;
            return(JsonGet(data));
        }
    }
Exemplo n.º 9
0
        public static IList <PickListItemViewModel> GetPickListItems(IUnitOfWork db,
                                                                     ILogService log,
                                                                     IWeightService weightService,
                                                                     OrderSearchFilterViewModel search)
        {
            var orders = GetOrdersWithItemsForPickList(db, weightService, search);

            var styleIdList = orders.SelectMany(o => o.Items.Where(i => i.StyleId.HasValue).Select(i => i.StyleId.Value).ToList()).ToList();

            var styleItems = db.StyleItems.GetAllAsDto()
                             .Where(s => styleIdList.Contains(s.StyleId))
                             .ToList();

            var remainingQties = db.StyleItemCaches.GetAllCacheItems()
                                 .Where(s => styleIdList.Contains(s.StyleId))
                                 .Select(ch => new SoldSizeInfo()
            {
                StyleItemId   = ch.Id,
                StyleId       = ch.StyleId,
                TotalQuantity = ch.RemainingQuantity
            }).ToList();

            var pendingAndNoBatchSoldQtyes = db.ItemOrderMappings.GetPendingAndOtherUnshippedOrderItemQtyes(search.BatchId);

            var styles       = db.Styles.GetAllActive().Where(s => styleIdList.Contains(s.Id)).ToList();
            var stylesValues = db.StyleFeatureValues.GetFeatureValueByStyleIdByFeatureId(
                styleIdList,
                new int[]
            {
                StyleFeatureHelper.MAIN_LICENSE,
                StyleFeatureHelper.SUB_LICENSE1,
                StyleFeatureHelper.GENDER
            });
            var styleLocations = db.StyleLocations.GetAllAsDTO().Where(l => styleIdList.Contains(l.StyleId)).ToList();

            //Step #1. Detect which styles have color variations
            //Note: we set variate true only if items into one parent item has color variation

            //NOTE: Using only for color variation calculation
            var items = db.Items.GetAllViewAsDto(MarketType.Amazon, String.Empty).Where(l =>
                                                                                        l.StyleId.HasValue && styleIdList.Contains(l.StyleId.Value)).ToList(); //TODO: for all marketplaces
            var isItemVariate = GetSKUColorVariationStatus(items);

            var summaryItems = new List <PickListItemViewModel>();

            //Filling summary items list with variation detections
            //If one item has color variation all item of his style is color variating
            foreach (var order in orders)
            {
                foreach (var item in order.Items)
                {
                    try
                    {
                        //Correct price for WM second day
                        if (order.Market == (int)MarketType.Walmart &&
                            item.IsPrime)
                        {
                            if (item.IsPrime)
                            {
                                item.ItemPrice = item.ItemPrice - 5;
                            }
                        }

                        var style   = styles.FirstOrDefault(s => s.StyleID == item.StyleID);
                        var styleId = style != null ? style.Id : (long?)null;

                        //Has color variation (Parent Item have more then 1 item with same size)
                        var itemStatus        = isItemVariate.FirstOrDefault(v => v.SKU == item.SKU);
                        var hasColorVariation = itemStatus != null ? itemStatus.HasColorVariation : false;

                        //If has color variation check with color
                        var existGroup = summaryItems.FirstOrDefault(i => i.StyleId == styleId);

                        //Update exist group
                        if (existGroup != null)
                        {
                            UpdateExistGroup(existGroup,
                                             hasColorVariation,
                                             item,
                                             order);
                        }
                        else
                        {
                            var newGroup = ComposeNewGroup(item,
                                                           hasColorVariation,
                                                           style,
                                                           styleItems,
                                                           order);

                            summaryItems.Add(newGroup);
                        }
                    }
                    catch (Exception ex)
                    {
                        log.Fatal("Print Pick List. PickListItemViewModel.", ex);
                    }
                }
            }

            foreach (var item in summaryItems)
            {
                ItemPostProcessing(item,
                                   styleLocations,
                                   remainingQties,
                                   pendingAndNoBatchSoldQtyes,
                                   stylesValues);
            }

            var sortedItems = summaryItems
                              .OrderBy(m => m.SortIsle)
                              .ThenBy(m => m.SortSection)
                              .ThenBy(m => m.SortShelf)
                              .ThenBy(m => m.StyleString)
                              .ToList();

            for (int i = 0; i < sortedItems.Count; i++)
            {
                sortedItems[i].Number = i + 1;
            }

            return(sortedItems);
        }