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); }
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()); }
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()); }
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))); }
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()); }
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()); }
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); }
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); }
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); }
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); }
/// <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); }
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); }
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); }