public StyleItemInfoViewModel(ItemShortInfoDTO itemInfo)
        {
            StyleId     = itemInfo.StyleId;
            StyleString = itemInfo.StyleString;
            StyleItemId = itemInfo.StyleItemId;

            StyleSize  = itemInfo.StyleSize;
            StyleColor = itemInfo.StyleColor;

            LinkedListingCount = itemInfo.LinkedListingCount;
            RemainingQuantity  = itemInfo.RemainingQuantity < 0 ? 0 : itemInfo.RemainingQuantity;
        }
Esempio n. 2
0
        public ItemShortInfoViewModel(int market, string marketplaceId, ItemShortInfoDTO itemInfo)
        {
            Id = itemInfo.Id;

            ASIN    = itemInfo.ASIN;
            SKU     = itemInfo.SKU;
            Barcode = itemInfo.Barcode;

            SourceMarketId = itemInfo.SourceMarketId;
            Market         = market;
            MarketplaceId  = marketplaceId;

            StyleId     = itemInfo.StyleId;
            StyleString = itemInfo.StyleString;
            StyleItemId = itemInfo.StyleItemId;
            StyleOnHold = itemInfo.StyleOnHold;

            StyleSize       = itemInfo.StyleSize;
            StyleColor      = itemInfo.StyleColor;
            StyleItemOnHold = itemInfo.StyleItemOnHold;

            IsFBA  = itemInfo.IsFBA;
            OnHold = itemInfo.OnHold;

            RealQuantity       = itemInfo.RealQuantity;
            DisplayQuantity    = itemInfo.DisplayQuantity;
            AmazonRealQuantity = itemInfo.AmazonRealQuantity;

            RemainingQuantity = itemInfo.RemainingQuantity < 0 ? 0 : itemInfo.RemainingQuantity;

            LinkedListingCount = itemInfo.LinkedListingCount;

            PublishedStatus = itemInfo.PublishedStatus;

            if (itemInfo.ListingDefects != null)
            {
                ListingDefects = itemInfo.ListingDefects
                                 .Select(d => new ListingDefectViewModel(d))
                                 .ToList();
            }
        }
Esempio n. 3
0
        public GridResponse <ParentItemDTO> GetWithChildSizesWithPaging(ILogService log,
                                                                        IDbCacheService cacheService,
                                                                        bool clearCache,
                                                                        bool useStyleImage,
                                                                        ItemSearchFiltersDTO filters)
        {
            log.Debug("begin GetWithChildSizes");

            var baseParentQuery = from p in unitOfWork.GetSet <ParentItem>()
                                  where p.Market == (int)filters.Market &&
                                  (String.IsNullOrEmpty(filters.MarketplaceId) || p.MarketplaceId == filters.MarketplaceId)
                                  select p;

            if (!String.IsNullOrEmpty(filters.Keywords) ||
                !String.IsNullOrEmpty(filters.StyleName) ||
                filters.StyleId.HasValue ||
                filters.DropShipperId.HasValue ||
                (filters.Genders != null && filters.Genders.Any()) ||
                !String.IsNullOrEmpty(filters.Brand) ||
                filters.MinPrice.HasValue ||
                filters.MaxPrice.HasValue ||
                filters.PublishedStatus.HasValue ||
                filters.Availability != (int)ProductAvailability.All)
            {
                var keywordQuery = from vi in unitOfWork.GetSet <ViewItem>()
                                   where vi.Market == (int)filters.Market &&
                                   (String.IsNullOrEmpty(filters.MarketplaceId) || vi.MarketplaceId == filters.MarketplaceId)
                                   select vi;

                if (!String.IsNullOrEmpty(filters.Keywords))
                {
                    keywordQuery = keywordQuery.Where(vi => vi.StyleString.Contains(filters.Keywords) ||
                                                      vi.SKU.Contains(filters.Keywords) ||
                                                      vi.ASIN.Contains(filters.Keywords) ||
                                                      vi.ParentASIN.Contains(filters.Keywords) ||
                                                      vi.Title.Contains(filters.Keywords));
                }

                if (filters.StyleId.HasValue)
                {
                    keywordQuery = keywordQuery.Where(vi => vi.StyleId == filters.StyleId);
                }

                if (!String.IsNullOrEmpty(filters.StyleName))
                {
                    keywordQuery = keywordQuery.Where(vi => vi.StyleString.Contains(filters.StyleName));
                }

                if (filters.DropShipperId.HasValue)
                {
                    keywordQuery = keywordQuery.Where(vi => vi.DropShipperId == filters.DropShipperId);
                }

                if (filters.MinPrice.HasValue)
                {
                    keywordQuery = keywordQuery.Where(vi => vi.CurrentPrice >= filters.MinPrice);
                }

                if (filters.MaxPrice.HasValue)
                {
                    keywordQuery = keywordQuery.Where(vi => vi.CurrentPrice <= filters.MaxPrice);
                }

                if (filters.PublishedStatus.HasValue)
                {
                    keywordQuery = keywordQuery.Where(vi => vi.ItemPublishedStatus == filters.PublishedStatus);
                }

                if (filters.Availability == (int)ProductAvailability.InStock)
                {
                    keywordQuery = keywordQuery.Where(vi => vi.RealQuantity > 0);
                }

                if ((filters.Genders != null && filters.Genders.Any()) ||
                    !String.IsNullOrEmpty(filters.Brand))
                {
                    var featureQuery = from sc in unitOfWork.GetSet <StyleCache>()
                                       select sc;

                    if (filters.Genders != null && filters.Genders.Any())
                    {
                        var genderIds = filters.Genders.Select(g => g.ToString()).ToList();

                        featureQuery = from f in featureQuery
                                       where genderIds.Contains(f.Gender)
                                       select f;
                    }

                    if (!String.IsNullOrEmpty(filters.Brand))
                    {
                        featureQuery = from f in featureQuery
                                       where f.Brand == filters.Brand
                                       select f;
                    }

                    if (filters.MainLicense.HasValue)
                    {
                        var mainLicenseStr = filters.MainLicense.ToString();
                        featureQuery = from f in featureQuery
                                       where f.MainLicense == mainLicenseStr
                                       select f;
                    }

                    keywordQuery = from k in keywordQuery
                                   join f in featureQuery on k.StyleId equals f.Id
                                   select k;
                }

                var parentFilterQuery = keywordQuery.Select(vi => vi.ParentASIN).Distinct();

                baseParentQuery = from p in baseParentQuery
                                  join k in parentFilterQuery on p.ASIN equals k
                                  select p;
            }

            var totalCount = baseParentQuery.Count();

            baseParentQuery = baseParentQuery
                              .OrderBy(p => p.Id)
                              .Skip(filters.StartIndex)
                              .Take(filters.LimitCount);

            var dropShipperInfo = from vi in unitOfWork.GetSet <ViewItem>()
                                  group vi by vi.ParentASIN into byParent
                                  select new
            {
                ASIN          = byParent.Key,
                DropShipperId = byParent.Max(i => i.DropShipperId)
            };


            var parentItemQuery = from pi in baseParentQuery
                                  join dsInfo in dropShipperInfo on pi.ASIN equals dsInfo.ASIN into withDsInfo
                                  from dsInfo in withDsInfo.DefaultIfEmpty()
                                  join pCache in unitOfWork.GetSet <ParentItemCache>() on pi.Id equals pCache.Id into withPCache
                                  from pCache in withPCache.DefaultIfEmpty()
                                  join c in unitOfWork.GetSet <ViewActualProductComment>() on pi.Id equals c.ProductId into withC
                                  from c in withC.DefaultIfEmpty()
                                  join ds in unitOfWork.GetSet <DropShipper>() on dsInfo.DropShipperId equals ds.Id into withDs
                                  from ds in withDs.DefaultIfEmpty()

                                  select new ParentItemDTO
            {
                Id            = pi.Id,
                Market        = pi.Market,
                MarketplaceId = pi.MarketplaceId,

                DropShipperId   = ds.Id,
                DropShipperName = ds.Name,

                AmazonName  = pi.AmazonName,
                ImageSource = pi.ImageSource,

                SourceMarketId  = pi.SourceMarketId,
                SourceMarketUrl = pi.SourceMarketUrl,

                ASIN        = pi.ASIN,
                SKU         = pi.SKU,
                OnHold      = pi.OnHold,
                Rank        = pi.Rank,
                LastComment = new CommentDTO()
                {
                    Message       = c.Message,
                    CreateDate    = c.CreateDate,
                    CreatedBy     = c.CreatedBy,
                    CreatedByName = c.CreatedByName,
                },

                HasListings = pCache == null || pCache.HasListings,

                IsAmazonUpdated = pi.IsAmazonUpdated,

                HasPriceDifferencesWithAmazon    = pCache != null ? pCache.HasPriceDifferences : false,
                HasQuantityDifferencesWithAmazon = pCache != null ? pCache.HasQtyDifferences : false,
                HasChildWithFakeParentASIN       = pCache != null ? pCache.HasChildWithFakeParentASIN : false,

                LastChildOpenDate = pCache != null ? pCache.LastOpenDate : null,
                MinChildPrice     = pCache != null ? pCache.MinPrice : null,
                MaxChildPrice     = pCache != null ? pCache.MaxPrice : null,

                PositionsInfo = pCache != null ? pCache.PositionsInfo : null,
            };

            var parentItems = parentItemQuery.AsNoTracking().ToList();

            //if (filters.Market == (int)MarketType.Amazon
            //    || filters.Market == (int)MarketType.AmazonEU)
            //{
            //    parentItemQuery = parentItemQuery.Where(pi => pi.HasListings);
            //}



            log.Debug("Get ParentItems end");

            var parentASINList   = parentItems.Select(pi => pi.ASIN).ToList();
            var childItemsResult = GetChildItemInfoList(parentASINList, (MarketType)filters.Market, filters.MarketplaceId);

            var childItems = childItemsResult.Select(i => new ItemShortInfoDTO()
            {
                Id = i.Id,

                AmazonRealQuantity = i.AmazonRealQuantity,
                RealQuantity       = i.RealQuantity,
                DisplayQuantity    = i.DisplayQuantity,

                ASIN       = i.ASIN, //NOTE: for search filters
                ParentASIN = i.ParentASIN,
                SKU        = i.SKU,
                Barcode    = i.Barcode,

                SourceMarketId = i.SourceMarketId,

                StyleItemId = i.StyleItemId,
                StyleId     = i.StyleId,

                StyleString     = i.StyleString,
                StyleOnHold     = i.StyleOnHold,
                StyleItemOnHold = i.StyleItemOnHold,
                StyleColor      = i.StyleColor,
                StyleSize       = i.StyleSize,

                IsFBA     = i.IsFBA,
                IsDefault = i.IsDefault,
                OnHold    = i.OnHold,

                PublishedStatus = i.PublishedStatus,

                ListingDefects = i.ListingDefects,
            }).ToList();


            log.Debug("Get ChildItems end");

            var styleIdList = childItems.Where(ci => ci.StyleId.HasValue)
                              .Select(ci => ci.StyleId.Value)
                              .Distinct().ToList();

            var styleItemResult = GetStyleItemInfoList(styleIdList, true);

            var forceStyleImage = filters.Market == (int)MarketType.Walmart ||
                                  filters.Market == (int)MarketType.WalmartCA ||
                                  filters.Market == (int)MarketType.Shopify ||
                                  filters.Market == (int)MarketType.Magento ||
                                  filters.Market == (int)MarketType.OverStock ||
                                  filters.Market == (int)MarketType.Jet ||
                                  filters.Market == (int)MarketType.eBay ||
                                  filters.Market == (int)MarketType.Groupon ||
                                  filters.Market == (int)MarketType.DropShipper ||
                                  filters.Market == (int)MarketType.OfflineOrders ||
                                  filters.Market == (int)MarketType.WooCommerce;
            var styleItems = styleItemResult.Where(si => si.StyleId.HasValue && styleIdList.Contains(si.StyleId.Value))
                             .Select(si => new ItemShortInfoDTO()
            {
                Id = si.Id,

                StyleId     = si.StyleId,
                StyleString = si.StyleString,

                StyleOnHold     = si.StyleOnHold,
                StyleItemOnHold = si.OnHold,

                StyleSize   = si.StyleSize,
                StyleColor  = si.StyleColor,
                StyleItemId = si.StyleItemId,

                RemainingQuantity = si.RemainingQuantity,

                Image = forceStyleImage ? si.Image : null,

                LinkedListingCount = si.MarketplacesInfo != null ?
                                     (si.MarketplacesInfo.Contains(filters.MarketCode) ? 1 : 0) : 0,
            }).ToList();

            var publishRequestInfoes = unitOfWork.GetSet <SystemAction>().Where(i => i.Type == (int)SystemActionType.UpdateOnMarketProductData &&
                                                                                i.Status == (int)SystemActionStatus.None)
                                       .Select(i => new
            {
                ItemId     = i.Tag,
                CreateDate = i.CreateDate,
            })
                                       .ToList();

            log.Debug("Get StyleItems end");


            foreach (var parentItem in parentItems)
            {
                var item = parentItem;

                item.ChildItems = childItems
                                  .Where(ch => ch.ParentASIN == item.ASIN)
                                  .ToList();

                var childItemIdStrs    = item.ChildItems.Select(i => i.Id.ToString()).ToList();
                var publishRequestInfo = publishRequestInfoes.FirstOrDefault(i => childItemIdStrs.Contains(i.ItemId));

                item.PublishRequestedDate = publishRequestInfo?.CreateDate;

                var itemStyleIdList = item.ChildItems.Select(ch => ch.StyleId).ToList();

                item.StyleItems = styleItems
                                  .Where(si => itemStyleIdList.Contains(si.StyleId))
                                  .ToList();

                if (item.StyleItems.Any() && (forceStyleImage || useStyleImage))
                {
                    var defaultItem = item.ChildItems.FirstOrDefault(ch => ch.IsDefault);
                    ItemShortInfoDTO mainStyleItem = null;
                    if (defaultItem != null)
                    {
                        mainStyleItem = item.StyleItems.FirstOrDefault(si => si.Id == defaultItem.StyleItemId);
                    }
                    if (mainStyleItem == null)
                    {
                        mainStyleItem = item.StyleItems[0];
                    }
                    item.ImageSource = mainStyleItem.Image;
                }

                foreach (var childItem in item.ChildItems)
                {
                    var styleItem = item.StyleItems.FirstOrDefault(si => si.Id == childItem.StyleItemId);
                    childItem.RemainingQuantity = styleItem != null ? styleItem.RemainingQuantity : 0;
                }
            }

            log.Debug("Get Positions end");

            return(new GridResponse <ParentItemDTO>(parentItems, totalCount));
        }