Ejemplo n.º 1
0
        public virtual ActionResult GetAllParents(GridRequest request,
                                                  string keywords,
                                                  string styleName,
                                                  string gender,
                                                  string brand,
                                                  long?styleId,
                                                  long?dropShipperId,
                                                  decimal?priceFrom,
                                                  decimal?priceTo,
                                                  int?publishedStatus,
                                                  int?availability,
                                                  int?listingsMode,
                                                  int?market,
                                                  string marketplaceId)
        {
            var pageSize = request.ItemsPerPage;

            var genderIds = (gender ?? "").Split(", ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)
                            .Select(g => Int32.Parse(g))
                            .ToList();

            var filter = new ProductSearchFilterViewModel
            {
                Keywords  = keywords,
                StyleName = styleName,
                StyleId   = styleId,

                Brand   = brand,
                Genders = genderIds,

                MinPrice = priceFrom,
                MaxPrice = priceTo,

                PublishedStatus = publishedStatus,

                DropShipperId = dropShipperId,
                Availability  = availability.HasValue ? (ProductAvailability)availability : ProductAvailability.InStock,
                ListingsMode  = (ListingsModeType?)listingsMode,

                Market        = market.HasValue ? (MarketType)market.Value : MarketType.Amazon,
                MarketplaceId = marketplaceId,
                StartIndex    = (request.Page - 1) * pageSize,
                LimitCount    = pageSize,
            };

            LogI("GetAllParents, filter=" + filter);
            var cacheService = new DbCacheService(Time);

            var data = ParentItemViewModel.GetAll(LogService,
                                                  cacheService,
                                                  DbFactory,
                                                  request.ClearCache,
                                                  filter);

            return(Json(data, JsonRequestBehavior.AllowGet));
        }
        //public static ProductSearchResult GetIdListByFilters(IUnitOfWork db,
        //    ProductSearchFilterViewModel filter)
        //{
        //    var result = new ProductSearchResult();

        //    if (filter.NoneSoldPeriod.HasValue && filter.NoneSoldPeriod > 0)
        //    {
        //        //NOTE: using styleId to hide parent item with that style but without sold
        //        //получаем список продающихся styleId
        //        //выводим список item у которых styleId not in Sold Style List
        //        var fromDate = DateTime.Today.AddDays(-filter.NoneSoldPeriod.Value);
        //        var soldStyleIds = db.StyleCaches.GetAll()
        //            .Where(sc => sc.LastSoldDateOnMarket < fromDate)
        //            .GroupBy(sc => sc.Id)
        //            .Select(gsc => gsc.Key).ToList();

        //        result.StyleIdList = GeneralUtils.IntersectIfNotNull(result.StyleIdList, soldStyleIds);
        //    }

        //    if (filter.Gender.HasValue)
        //    {
        //        var genderStyleIds = db.StyleCaches
        //            .GetAll()
        //            .Where(s => s.Gender == filter.Gender.Value.ToString())
        //            .Select(s => s.Id).ToList();

        //        result.StyleIdList = GeneralUtils.IntersectIfNotNull(result.StyleIdList, genderStyleIds);
        //    }

        //    if (filter.MainLicense.HasValue)
        //    {
        //        var mainLicenseStyleIds = db.StyleCaches
        //            .GetAll()
        //            .Where(s => s.MainLicense == filter.MainLicense.Value.ToString())
        //            .Select(s => s.Id)
        //            .ToList();

        //        result.StyleIdList = GeneralUtils.IntersectIfNotNull(result.StyleIdList, mainLicenseStyleIds);
        //    }

        //    if (filter.SubLicense.HasValue)
        //    {
        //        var subLicenseStyleIds = db.StyleCaches
        //            .GetAll()
        //            .Where(s => s.SubLicense == filter.SubLicense.Value.ToString())
        //            .Select(s => s.Id)
        //            .ToList();

        //        result.StyleIdList = GeneralUtils.IntersectIfNotNull(result.StyleIdList, subLicenseStyleIds);
        //    }

        //    if (filter.MinPrice.HasValue || filter.MaxPrice.HasValue)
        //    {
        //        var priceQuery = db.Items.GetAllViewAsDto().Where(i => i.Market == (int)filter.Market);
        //        if (!String.IsNullOrEmpty(filter.MarketplaceId))
        //            priceQuery = priceQuery.Where(p => p.MarketplaceId == filter.MarketplaceId);

        //        if (filter.MinPrice.HasValue)
        //            priceQuery = priceQuery.Where(p => p.CurrentPrice >= filter.MinPrice.Value);

        //        if (filter.MaxPrice.HasValue)
        //            priceQuery = priceQuery.Where(p => p.CurrentPrice <= filter.MaxPrice.Value);

        //        result.ChildItemIdList = priceQuery.Select(p => p.Id).ToList();
        //    }

        //    return result;
        //}

        //public static IEnumerable<ListingDefectDTO> GetListingDefects(ILogService log,
        //    IDbFactory dbFactory)
        //{
        //    using (var db = dbFactory.GetRDb())
        //    {
        //        log.Debug("GetAll Info begin");
        //        var defectList = db.ListingDefects.GetAllAsDto()
        //            .Where()
        //        log.Debug("GetAll Info end");
        //    }
        //}

        public static GridResponse <ParentItemViewModel> GetAll(ILogService log,
                                                                IDbCacheService cacheService,
                                                                IDbFactory dbFactory,
                                                                bool clearCache,
                                                                ProductSearchFilterViewModel filter)
        {
            if (filter.LimitCount == 0)
            {
                filter.LimitCount = 50;
            }

            using (var db = dbFactory.GetRDb())
            {
                log.Debug("GetAll begin");

                var forceStyleImage = filter.MarketplaceId == MarketplaceKeeper.AmazonAuMarketplaceId ||
                                      filter.MarketplaceId == MarketplaceKeeper.AmazonComMarketplaceId;
                var gridResponse = db.ParentItems.GetWithChildSizesWithPaging(log,
                                                                              cacheService,
                                                                              clearCache,
                                                                              forceStyleImage,
                                                                              filter.GetDto());

                var results = (from p in gridResponse.Items
                               select new ParentItemViewModel
                {
                    Id = p.Id,
                    Market = (MarketType)p.Market,
                    MarketplaceId = p.MarketplaceId,

                    SourceMarketId = p.SourceMarketId,

                    ImageSource = p.ImageSource,
                    AmazonName = p.AmazonName,

                    FirstStyleString = GetFirstStyle(p.ChildItems, p.ASIN),
                    ASIN = p.ASIN,
                    SKU = p.SKU,
                    OnHold = p.OnHold,
                    LockMarketUpdate = p.LockMarketUpdate,
                    PublishRequestedDate = p.PublishRequestedDate,

                    ChildItems = p.ChildItems
                                 .Select(i => new ItemShortInfoViewModel(p.Market, p.MarketplaceId, i))
                                 .ToList(),

                    StyleItems = p.StyleItems.Select(i => new StyleItemInfoViewModel(i))
                                 .ToList(),

                    Rank = p.Rank,
                    Positions = p.PositionsInfo != null ? p.PositionsInfo.Replace(";", ",<br/>") : String.Empty,
                    Comment = p.LastComment?.Message,
                    CommentByName = p.LastComment?.CreatedByName,
                    CommentDate = p.LastComment?.CreateDate,

                    HasPriceDifferencesWithAmazon = p.HasPriceDifferencesWithAmazon,
                    HasQuantityDifferencesWithAmazon = p.HasQuantityDifferencesWithAmazon,
                    HasChildWithFakeParentASIN = p.HasChildWithFakeParentASIN,

                    LastChildOpenDate = p.LastChildOpenDate,
                    MinChildPrice = p.MinChildPrice,
                    MaxChildPrice = p.MaxChildPrice,

                    IsAmazonUpdated = p.IsAmazonUpdated,
                }).ToList();

                log.Debug("GetAll end");

                return(new GridResponse <ParentItemViewModel>(results.OrderBy(r => r.FirstStyleString).ToList(), gridResponse.TotalCount));
            }
        }