コード例 #1
0
        public ParentItem FindOrCreateForItem(Item item, DateTime?when)
        {
            if (!ArgumentHelper.CheckMarket((MarketType?)item.Market))
            {
                throw new ArgumentNullException("market");
            }
            if (!ArgumentHelper.CheckMarketplaceId((MarketType?)item.Market, item.MarketplaceId))
            {
                throw new ArgumentNullException("marketplaceId");
            }

            var parentItem = unitOfWork.GetSet <ParentItem>().FirstOrDefault(i =>
                                                                             i.ASIN == item.ParentASIN &&
                                                                             i.Market == (int)item.Market &&
                                                                             i.MarketplaceId == item.MarketplaceId);

            if (parentItem == null)
            {
                parentItem               = new ParentItem();
                parentItem.ASIN          = item.ParentASIN;
                parentItem.Market        = item.Market;
                parentItem.MarketplaceId = item.MarketplaceId;

                parentItem.AmazonName  = item.Title;
                parentItem.ImageSource = item.PrimaryImage;

                parentItem.IsAmazonUpdated = false;
                parentItem.CreateDate      = when;

                unitOfWork.GetSet <ParentItem>().Add(parentItem);
                unitOfWork.Commit();
            }

            return(parentItem);
        }
コード例 #2
0
        public ParentItem GetByASIN(string parentASIN, MarketType market, string marketplaceId)
        {
            if (!ArgumentHelper.CheckMarket(market))
            {
                throw new ArgumentNullException("market");
            }
            if (!ArgumentHelper.CheckMarketplaceId(market, marketplaceId))
            {
                throw new ArgumentNullException("marketplaceId");
            }

            return(GetFiltered(p => p.ASIN == parentASIN &&
                               p.Market == (int)market &&
                               (String.IsNullOrEmpty(marketplaceId) || p.MarketplaceId == marketplaceId)).FirstOrDefault());
        }
コード例 #3
0
        public IList <Listing> GetByListingIdIncludeRemoved(string listingId, MarketType market, string marketplaceId)
        {
            if (!ArgumentHelper.CheckMarket(market))
            {
                throw new ArgumentNullException("market");
            }
            if (!ArgumentHelper.CheckMarketplaceId(market, marketplaceId))
            {
                throw new ArgumentNullException("marketplaceId");
            }

            return(GetAll().Where(l => l.ListingId == listingId &&
                                  l.Market == (int)market &&
                                  (String.IsNullOrEmpty(marketplaceId) || l.MarketplaceId == marketplaceId))
                   .ToList());
        }
コード例 #4
0
        public Listing GetBySKU(string sku, MarketType market, string marketplaceId)
        {
            if (!ArgumentHelper.CheckMarket(market))
            {
                throw new ArgumentNullException("market");
            }
            if (!ArgumentHelper.CheckMarketplaceId(market, marketplaceId))
            {
                throw new ArgumentNullException("marketplaceId");
            }

            return(GetAll().FirstOrDefault(l => l.SKU == sku &&
                                           !l.IsRemoved &&
                                           l.Market == (int)market &&
                                           (String.IsNullOrEmpty(marketplaceId) || l.MarketplaceId == marketplaceId)));
        }
コード例 #5
0
        public Item GetBySKU(string asin, MarketType market, string marketplaceId)
        {
            if (!ArgumentHelper.CheckMarket(market))
            {
                throw new ArgumentNullException("market");
            }
            if (!ArgumentHelper.CheckMarketplaceId(market, marketplaceId))
            {
                throw new ArgumentNullException("marketplaceId");
            }

            return(GetFiltered(i =>
                               i.ASIN == asin &&
                               i.Market == (int)market &&
                               (String.IsNullOrEmpty(marketplaceId) || i.MarketplaceId == marketplaceId)).FirstOrDefault());
        }
コード例 #6
0
        public List <ItemDTO> CheckForExistence(List <ItemDTO> parentItems,
                                                MarketType market,
                                                string marketplaceId)
        {
            if (!ArgumentHelper.CheckMarket(market))
            {
                throw new ArgumentNullException("market");
            }
            if (!ArgumentHelper.CheckMarketplaceId(market, marketplaceId))
            {
                throw new ArgumentNullException("marketplaceId");
            }

            var allParentList = GetAll()
                                .Where(e => e.Market == (int)market &&
                                       e.MarketplaceId == marketplaceId)
                                .Select(e => e.ASIN).ToList();

            return(parentItems.Where(r => !allParentList.Contains(r.ParentASIN)).ToList());
        }
コード例 #7
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);
        }
コード例 #8
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);
        }
コード例 #9
0
        public bool FillOrderItemsByStyleAndSize(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 = false;

            foreach (var dto in orderItems)
            {
                long?styleId = unitOfWork.GetSet <Style>()
                               .Where(s => s.StyleID == dto.StyleID &&
                                      !s.Deleted)
                               .Select(s => s.Id)
                               .FirstOrDefault();

                StyleItem styleItem = null;
                if (styleId.HasValue)
                {
                    var styleItems = unitOfWork.GetSet <StyleItem>()
                                     .Where(si => si.StyleId == styleId.Value)
                                     .ToList();

                    var candidates = styleItems;
                    if (candidates.Count > 1)
                    {
                        if (!String.IsNullOrEmpty(dto.StyleSize))
                        {
                            candidates = styleItems.Where(si => si.Size == dto.StyleSize).ToList();
                            if (candidates.Count == 0)
                            {
                                var preparedSize = dto.StyleSize.Replace("Y", "").Replace("T", ""); //NOTE: for 5Y, 4T sizes
                                candidates = styleItems.Where(si => si.Size.Replace("Y", "").Replace("T", "") == preparedSize).ToList();
                            }
                        }

                        if (candidates.Count > 1)
                        {
                            if (!String.IsNullOrEmpty(dto.StyleColor))
                            {
                                candidates = styleItems.Where(si => si.Color == dto.StyleColor).ToList();
                            }
                        }
                    }

                    if (candidates.Count == 1)
                    {
                        styleItem = candidates.FirstOrDefault();
                    }
                }

                if (styleItem != null)
                {
                    var listingQuery = from vl in unitOfWork.GetSet <ViewListing>()
                                       join i in unitOfWork.GetSet <Item>() on vl.ItemId equals i.Id
                                       where vl.Market == (int)market &&
                                       (vl.MarketplaceId == marketplaceId || String.IsNullOrEmpty(marketplaceId)) &&
                                       vl.StyleId == styleItem.StyleId &&
                                       vl.StyleItemId == styleItem.Id
                                       orderby vl.IsRemoved descending
                                       select new { vl, i };

                    var listing = listingQuery.FirstOrDefault();

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

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

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

                        dto.RealQuantity         = listing.vl.Quantity;
                        dto.OnMarketTemplateName = listing.i.OnMarketTemplateName;

                        result = true;
                    }
                }
            }
            return(result);
        }
コード例 #10
0
        public bool FillOrderItemsBySKUOrBarcode(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 query = from vl in unitOfWork.GetSet <ViewListing>()
                            join i in unitOfWork.GetSet <Item>() on vl.ItemId equals i.Id
                            where vl.SKU == dto.SKU &&
                            vl.Market == (int)market &&
                            vl.StyleId != null &&
                            vl.StyleItemId != null
                            select new { vl, i };

                var view = query.ToList();

                //NOTE: Try by barcode
                if (view.Count == 0)
                {
                    view = (from vl in unitOfWork.GetSet <ViewListing>()
                            join i in unitOfWork.GetSet <Item>() on vl.ItemId equals i.Id
                            where i.Barcode == dto.Barcode &&
                            vl.Market == (int)market &&
                            vl.StyleId != null &&
                            vl.StyleItemId != null
                            select new { vl, i }).ToList();
                }

                //NOTE: Enable filtering by marketplace (only when we have there listings
                if (view.Count(v => v.i.MarketplaceId == marketplaceId) > 0)
                {
                    view = view.Where(v => v.i.MarketplaceId == marketplaceId).ToList();
                }

                var listing = view.FirstOrDefault();

                if (market == MarketType.Amazon || market == MarketType.AmazonEU || market == MarketType.AmazonAU)
                {
                    var listingsList = view.Where(l => l.vl.MarketplaceId == marketplaceId &&
                                                  !l.vl.IsRemoved).OrderBy(l => l.vl.CreateDate).ToList();

                    if (listingsList.Count > 0)
                    {
                        listing = listingsList.FirstOrDefault(l => l.vl.Quantity > 0);
                        if (listing == null)
                        {
                            listing = listingsList.LastOrDefault();
                        }
                    }

                    if (listing == null)
                    {
                        listing = view.FirstOrDefault(l => l.vl.MarketplaceId == marketplaceId); //Include removed
                    }
                    if (listing == null && market == MarketType.AmazonEU)
                    {
                        listing = view.FirstOrDefault(); //Ignore marketplaceId, temporary enable for EU
                    }
                }
                else
                {
                    //For other market
                    listing = view.FirstOrDefault();
                }

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

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

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

                    dto.RealQuantity         = listing.vl.Quantity;
                    dto.OnMarketTemplateName = listing.i.OnMarketTemplateName;
                }
                else
                {
                    result = false;
                }
            }
            return(result);
        }
コード例 #11
0
        /// <summary>
        /// Create new listing (and checking for existing in case )
        /// </summary>
        /// <param name="dto"></param>
        /// <param name="item"></param>
        public Listing StoreOrUpdate(ItemDTO dto,
                                     Item item,
                                     MarketType market,
                                     string marketplaceId,
                                     DateTime when)
        {
            if (!ArgumentHelper.CheckMarket(market))
            {
                throw new ArgumentNullException("market");
            }
            if (!ArgumentHelper.CheckMarketplaceId(market, marketplaceId))
            {
                throw new ArgumentNullException("marketplaceId");
            }

            var listing = GetFiltered(l => l.ListingId == dto.ListingId &&
                                      l.Market == (int)market &&
                                      l.MarketplaceId == marketplaceId).FirstOrDefault();

            var     priceChangeType = PriceChangeSourceType.None;
            decimal?oldPrice        = null;

            if (listing == null)
            {
                priceChangeType = PriceChangeSourceType.Initial;

                listing = new Listing
                {
                    ListingId            = dto.ListingId,
                    Market               = (int)market,
                    MarketplaceId        = marketplaceId,
                    SKU                  = dto.SKU,
                    ASIN                 = dto.ASIN,
                    IsFBA                = dto.IsFBA,
                    CurrentPrice         = dto.CurrentPrice,
                    CurrentPriceCurrency = dto.CurrentPriceCurrency,
                    CurrentPriceInUSD    = dto.CurrentPriceInUSD,

                    BusinessPrice = dto.BusinessPrice,

                    RealQuantity    = dto.RealQuantity,
                    DisplayQuantity = dto.DisplayQuantity,

                    RestockDate = dto.RestockDate,

                    AmazonCurrentPrice = dto.CurrentPrice,
                    AmazonRealQuantity = dto.RealQuantity,

                    LowestPrice = dto.LowestPrice,

                    OpenDate   = dto.OpenDate,
                    CreateDate = when,
                    UpdateDate = when,
                    IsRemoved  = false,

                    ItemId = item.Id,
                };

                Add(listing);
                //NOTE: Commit to get db ID for the PriceHistories
                unitOfWork.Commit();

                unitOfWork.QuantityHistories.Add(new QuantityHistory()
                {
                    ListingId       = listing.Id,
                    Type            = (int)QuantityChangeSourceType.Initial,
                    QuantityChanged = listing.RealQuantity,
                    SKU             = listing.SKU,
                    StyleString     = item.StyleString,
                    Size            = item.Size,
                    CreateDate      = when,
                    CreatedBy       = null
                });
            }
            else
            {
                //NOTE: Enter here if listing has IsRemoved flag

                if (listing.CurrentPrice != dto.CurrentPrice)
                {
                    priceChangeType = PriceChangeSourceType.Initial;
                    oldPrice        = listing.CurrentPrice;
                }

                listing.SKU           = dto.SKU;
                listing.ASIN          = dto.ASIN;
                listing.Market        = (int)market;
                listing.MarketplaceId = marketplaceId;

                listing.IsFBA = dto.IsFBA;

                listing.CurrentPrice         = dto.CurrentPrice;
                listing.CurrentPriceCurrency = dto.CurrentPriceCurrency;
                listing.CurrentPriceInUSD    = dto.CurrentPriceInUSD;

                listing.BusinessPrice = dto.BusinessPrice;

                //NOTE: Not updating auto sale price change info

                listing.RealQuantity    = dto.RealQuantity;
                listing.DisplayQuantity = dto.DisplayQuantity;

                listing.RestockDate = dto.RestockDate;

                listing.AmazonCurrentPrice = dto.CurrentPrice;
                listing.AmazonRealQuantity = dto.RealQuantity;

                listing.LowestPrice = dto.LowestPrice;

                listing.UpdateDate = when;
                listing.IsRemoved  = false;

                //Item can be changed as well
                listing.ItemId = item.Id;
            }

            unitOfWork.Commit();

            if (priceChangeType != PriceChangeSourceType.None)
            {
                unitOfWork.PriceHistories.Add(new PriceHistory
                {
                    ListingId  = listing.Id,
                    SKU        = listing.SKU,
                    Type       = (int)priceChangeType,
                    Price      = dto.CurrentPrice,
                    OldPrice   = oldPrice,
                    ChangeDate = when,
                });
                unitOfWork.Commit();
            }

            return(listing);
        }
コード例 #12
0
        public ParentItem CreateOrUpdateParent(ParentItemDTO dto,
                                               MarketType market,
                                               string marketplaceId,
                                               DateTime?when)
        {
            if (!ArgumentHelper.CheckMarket(market))
            {
                throw new ArgumentNullException("market");
            }
            if (!ArgumentHelper.CheckMarketplaceId(market, marketplaceId))
            {
                throw new ArgumentNullException("marketplaceId");
            }

            var parentItem = unitOfWork.GetSet <ParentItem>().FirstOrDefault(i =>
                                                                             i.ASIN == dto.ASIN &&
                                                                             i.Market == (int)market &&
                                                                             i.MarketplaceId == marketplaceId);

            if (parentItem == null)
            {
                parentItem = new ParentItem
                {
                    ASIN           = dto.ASIN,
                    Market         = (int)market,
                    MarketplaceId  = marketplaceId,
                    SourceMarketId = dto.ASIN,

                    AmazonName  = dto.AmazonName,
                    SKU         = dto.SKU,
                    ImageSource = dto.ImageSource,

                    Rank           = dto.Rank,
                    RankUpdateDate = when,

                    //Additional fields
                    BrandName        = dto.BrandName,
                    Type             = dto.Type,
                    ListPrice        = dto.ListPrice,
                    Color            = dto.Color,
                    Department       = dto.Department,
                    Features         = dto.Features,
                    AdditionalImages = dto.AdditionalImages,
                    SearchKeywords   = dto.SearchKeywords,

                    //System
                    CreateDate           = when,
                    IsAmazonUpdated      = dto.IsAmazonUpdated,
                    LastUpdateFromAmazon = dto.LastUpdateFromAmazon
                };
                Add(parentItem);
            }
            else
            {
                UpdateParentItemInfo(parentItem, dto, when);
            }

            unitOfWork.Commit();

            return(parentItem);
        }
コード例 #13
0
        public Item StoreItemIfNotExist(IItemHistoryService itemHistory,
                                        string calledFrom,
                                        ItemDTO dto,
                                        MarketType market,
                                        string marketplaceId,
                                        long companyId,
                                        DateTime?when)
        {
            if (!ArgumentHelper.CheckMarket(market))
            {
                throw new ArgumentNullException("market");
            }
            if (!ArgumentHelper.CheckMarketplaceId(market, marketplaceId))
            {
                throw new ArgumentNullException("marketplaceId");
            }

            var item = GetByASIN(dto.ASIN, market, marketplaceId);

            if (item == null)
            {
                item = new Item
                {
                    ASIN          = dto.ASIN,
                    Market        = (int)market,
                    MarketplaceId = marketplaceId,

                    SourceMarketId = dto.SourceMarketId,

                    Title      = dto.Name,
                    ParentASIN = dto.ParentASIN ?? String.Empty,
                    Size       = StringHelper.Substring(dto.Size, 50),
                    Barcode    = dto.Barcode,

                    //SKU = dto.SKU,
                    StyleString = dto.StyleString,
                    StyleId     = dto.StyleId,
                    StyleItemId = dto.StyleItemId,

                    IsAmazonParentASIN   = dto.IsAmazonParentASIN,
                    LastUpdateFromAmazon = dto.LastUpdateFromAmazon,
                    IsExistOnAmazon      = dto.IsExistOnAmazon,

                    CreateDate  = when,
                    CompanyId   = companyId,
                    Description = dto.Description,

                    //Additional fields
                    PrimaryImage     = dto.ImageUrl,
                    BrandName        = dto.BrandName,
                    Type             = StringHelper.Substring(dto.Type, 50),
                    ListPrice        = dto.ListPrice,
                    Color            = StringHelper.Substring(dto.Color, 50),
                    Department       = dto.Department,
                    Features         = dto.Features,
                    AdditionalImages = dto.AdditionalImages,
                    SearchKeywords   = dto.SearchKeywords
                };
                Add(item);

                unitOfWork.Commit();

                if (itemHistory != null)
                {
                    itemHistory.AddRecord(item.Id,
                                          ItemHistoryHelper.SizeKey,
                                          null,
                                          calledFrom,
                                          item.Size,
                                          null,
                                          null);
                }
            }

            return(item);
        }