Ejemplo n.º 1
0
        public bool FillOrderItemsByListingId(IList <ListingOrderDTO> orderItems, MarketType market, string marketplaceId)
        {
            if (!ArgumentHelper.CheckMarket(market))
            {
                throw new ArgumentNullException("market");
            }
            if (!ArgumentHelper.CheckMarketplaceId(market, marketplaceId))
            {
                throw new ArgumentNullException("marketplaceId");
            }

            var result = true;

            foreach (var dto in orderItems)
            {
                var listingList = (from vi in unitOfWork.GetSet <ViewListing>()
                                   join i in unitOfWork.GetSet <Item>() on vi.ItemId equals i.Id
                                   where (vi.ListingId == dto.ListingId ||
                                          vi.ASIN == dto.ListingId ||
                                          i.Barcode == dto.ListingId) &&
                                   vi.Market == (int)market &&
                                   (String.IsNullOrEmpty(marketplaceId) || vi.MarketplaceId == marketplaceId)
                                   orderby vi.CreateDate
                                   select vi)
                                  .ToList();

                //TODO: Not sure is it safely to take by ASIN (m.b. better to wait while appear the listing)
                //?? unitOfWork.GetSet<ViewListing>().FirstOrDefault(v => v.ASIN == dto.ASIN);
                ViewListing listing = null;
                if (listingList.Count > 0)
                {
                    listing = listingList.OrderByDescending(l => l.StyleItemId.HasValue ? 1 : 0)
                              .ThenByDescending(l => l.CreateDate)
                              .FirstOrDefault(l => l.Quantity > 0);
                    if (listing == null)
                    {
                        listing = listingList.OrderByDescending(l => l.StyleItemId.HasValue ? 1 : 0)
                                  .ThenByDescending(l => l.CreateDate).FirstOrDefault();
                    }
                }

                if (listing == null &&
                    !String.IsNullOrEmpty(dto.SKU))
                {
                    listing = (from vi in unitOfWork.GetSet <ViewListing>()
                               where vi.SKU == dto.SKU &&
                               vi.Market == (int)market &&
                               (String.IsNullOrEmpty(marketplaceId) || vi.MarketplaceId == marketplaceId)
                               select vi).FirstOrDefault();
                }

                if (listing == null &&
                    !String.IsNullOrEmpty(dto.ListingId))
                {
                    listing = (from vi in unitOfWork.GetSet <ViewListing>()
                               where vi.ListingId == dto.ListingId &&
                               vi.Market == (int)market &&
                               (String.IsNullOrEmpty(marketplaceId) || vi.MarketplaceId == marketplaceId)
                               select vi).FirstOrDefault();
                }

                if (listing != null &&
                    listing.StyleItemId.HasValue)    //NOTE: only if listing has linked styleItemId, otherwise we skipped that listing!!! No needed listing w/o style item
                {
                    dto.Id            = listing.Id;
                    dto.SKU           = listing.SKU;
                    dto.ASIN          = listing.ASIN;
                    dto.ListingId     = listing.ListingId;
                    dto.DropShipperId = listing.DropShipperId;

                    dto.Weight               = listing.Weight;
                    dto.ShippingSize         = listing.ShippingSize;
                    dto.PackageLength        = listing.PackageLength;
                    dto.PackageWidth         = listing.PackageWidth;
                    dto.PackageHeight        = listing.PackageHeight;
                    dto.InternationalPackage = listing.InternationalPackage;
                    dto.ItemStyle            = listing.ItemStyle;
                    dto.RestockDate          = listing.RestockDate;
                    dto.Size       = listing.Size;
                    dto.ParentASIN = listing.ParentASIN;
                    dto.Picture    = listing.Picture;

                    dto.StyleItemId = listing.StyleItemId;
                    dto.StyleId     = listing.StyleId;
                    dto.StyleID     = listing.StyleString;
                    dto.StyleSize   = listing.StyleSize;
                    dto.StyleColor  = listing.StyleColor;

                    dto.RealQuantity = listing.Quantity;
                }
                else
                {
                    result = false;
                }
            }
            return(result);
        }
Ejemplo n.º 2
0
        public bool FillOrderItemsBySourceMarketId(IList <ListingOrderDTO> orderItems, MarketType market, string marketplaceId)
        {
            if (!ArgumentHelper.CheckMarket(market))
            {
                throw new ArgumentNullException("market");
            }
            if (!ArgumentHelper.CheckMarketplaceId(market, marketplaceId))
            {
                throw new ArgumentNullException("marketplaceId");
            }

            var result = true;

            foreach (var dto in orderItems)
            {
                var listingList = (from vi in unitOfWork.GetSet <ViewListing>()
                                   join pi in unitOfWork.GetSet <ParentItem>() on new { vi.ParentASIN, vi.Market, vi.MarketplaceId }
                                   equals new { ParentASIN = pi.ASIN, pi.Market, pi.MarketplaceId }
                                   where (pi.SourceMarketId == dto.ParentSourceMarketId ||
                                          vi.IsRemoved == true) && //NOTE: Parent Ids should be same or listing marked as removed (in that case skip checking parent Ids, it had value from new listing)
                                   vi.SourceMarketId == dto.SourceMarketId &&
                                   vi.Market == (int)market &&
                                   (String.IsNullOrEmpty(marketplaceId) || vi.MarketplaceId == marketplaceId)
                                   orderby vi.CreateDate descending
                                   select vi).ToList();


                //TODO: I'm not sure is safely to take by ASIN (m.b. better to wait while appear the listing)
                //?? unitOfWork.GetSet<ViewListing>().FirstOrDefault(v => v.ASIN == dto.ASIN);
                ViewListing listing = null;
                if (listingList.Count > 0)
                {
                    listing = listingList.FirstOrDefault(l => l.Quantity > 0);
                    if (listing == null)
                    {
                        listing = listingList.LastOrDefault();
                    }
                }

                if (listing == null &&
                    !String.IsNullOrEmpty(dto.SKU))
                {
                    var candidateQuery = from vi in unitOfWork.GetSet <ViewListing>()
                                         where vi.SKU == dto.SKU &&
                                         vi.Market == (int)market &&
                                         (String.IsNullOrEmpty(marketplaceId) || vi.MarketplaceId == marketplaceId)
                                         select vi;
                    var listingCandidates = candidateQuery.Count();

                    if (listingCandidates > 1)
                    {
                        var withNotRemovedCandidateQuery = candidateQuery.Where(c => !c.IsRemoved);
                        listingCandidates = withNotRemovedCandidateQuery.Count();
                        if (listingCandidates == 0) //All removed we get any of them
                        {
                            listingCandidates = 1;
                        }
                        else
                        {
                            candidateQuery = withNotRemovedCandidateQuery;
                        }
                    }

                    if (listingCandidates == 1)
                    {
                        listing = candidateQuery.FirstOrDefault();
                    }
                }

                if (listing != null &&
                    listing.StyleItemId.HasValue)    //NOTE: only if listing has linked styleItemId, otherwise we skipped that listing!!! No needed listing w/o style item
                {
                    dto.Id            = listing.Id;
                    dto.SKU           = listing.SKU;
                    dto.ASIN          = listing.ASIN;
                    dto.ListingId     = listing.ListingId;
                    dto.DropShipperId = listing.DropShipperId;

                    dto.Weight                 = listing.Weight;
                    dto.ShippingSize           = listing.ShippingSize;
                    dto.PackageLength          = listing.PackageLength;
                    dto.PackageWidth           = listing.PackageWidth;
                    dto.PackageHeight          = listing.PackageHeight;
                    dto.InternationalPackage   = listing.InternationalPackage;
                    dto.ItemStyle              = listing.ItemStyle;
                    dto.RestockDate            = listing.RestockDate;
                    dto.FulfillDate            = listing.FulfillDate;
                    dto.PreOrderExpReceiptDate = listing.PreOrderExpReceiptDate;

                    dto.Size       = listing.Size;
                    dto.Color      = listing.Color;
                    dto.ParentASIN = listing.ParentASIN;
                    dto.Picture    = listing.Picture;

                    dto.StyleItemId = listing.StyleItemId;
                    dto.StyleId     = listing.StyleId;
                    dto.StyleID     = listing.StyleString;
                    dto.StyleSize   = listing.StyleSize;
                    dto.StyleColor  = listing.StyleColor;

                    dto.RealQuantity = listing.Quantity;
                }
                else
                {
                    result = false;
                }
            }
            return(result);
        }