public void SubmitTestPriceFeed(WalmartCAApi api) { var item1 = new ItemDTO() { StyleId = 1158, SKU = "21TE062ERDZA-1-3T", // "21TE062ERDZA-1-3T", CurrentPrice = 19.89M }; using (var db = _dbFactory.GetRWDb()) { if (item1.StyleId.HasValue) { var itemStyle = db.StyleFeatureValues.GetFeatureValueByStyleIdByFeatureId( item1.StyleId.Value, StyleFeatureHelper.ITEMSTYLE); if (!item1.ListPrice.HasValue && itemStyle != null) { item1.ListPrice = PriceHelper.GetDefaultMSRP(itemStyle.Value); } } } //var result = api.GetFeed("20F17E0B509143B89023AD9B8036D158@AQYBAQA"); //_log.Info(result.ToString()); //var result = api.SendPrice(item1); //_log.Info(result.ToString()); api.SubmitPriceFeed("1", new List <ItemDTO>() { item1 }, AppSettings.WalmartFeedBaseDirectory); }
public void SendPriceUpdates() { _log.Info("Begin PriceUpdates"); var today = _time.GetAppNowTime().Date; var beforeDate = _time.GetAppNowTime().AddMinutes(-180); //NOTE: update not often, every 3 hours using (var db = _dbFactory.GetRWDb()) { var itemQuery = from l in db.Listings.GetAll() join i in db.Items.GetAll() on l.ItemId equals i.Id join s in db.Styles.GetAll() on i.StyleId equals s.Id join sale in db.StyleItemSaleToListings.GetAllListingSaleAsDTO() on l.Id equals sale.ListingId into withSale from sale in withSale.DefaultIfEmpty() where l.PriceUpdateRequested && (i.ItemPublishedStatus == (int)PublishedStatuses.Published || i.ItemPublishedStatus == (int)PublishedStatuses.HasChanges) && (!l.LastPriceUpdatedOnMarket.HasValue || l.LastPriceUpdatedOnMarket < beforeDate) && i.Market == (int)_api.Market && !l.IsRemoved select new ItemDTO() { ListingEntityId = l.Id, SKU = l.SKU, StyleId = i.StyleId, CurrentPrice = l.CurrentPrice, ListPrice = s.MSRP, SalePrice = sale != null && sale.SaleStartDate <= today ? sale.SalePrice : null, }; var items = itemQuery.ToList(); if (items.Any()) { _log.Info("Listings to sync=" + String.Join(", ", items.Select(i => i.SKU).ToList())); foreach (var item in items) { var dbListing = db.Listings.GetAll().FirstOrDefault(i => i.Id == item.ListingEntityId); if (dbListing == null) { _log.Info("Item haven't listing, item=" + item.Id); continue; } if (item.StyleId.HasValue) { var itemStyle = db.StyleFeatureValues.GetFeatureValueByStyleIdByFeatureId( item.StyleId.Value, StyleFeatureHelper.ITEMSTYLE); if (!item.ListPrice.HasValue && itemStyle != null) { item.ListPrice = PriceHelper.GetDefaultMSRP(itemStyle.Value); } } _log.Info(String.Format("Send SKU={0}, price={1}, msrp={2}, salePrice={3}", item.SKU, item.CurrentPrice, item.ListPrice, item.SalePrice)); var result = _api.SendPrice(item.SKU, item.SalePrice ?? item.CurrentPrice); if (result.IsSuccess) { dbListing.PriceUpdateRequested = false; } else { _log.Info("Can't update price"); } dbListing.LastPriceUpdatedOnMarket = _time.GetAppNowTime(); db.Commit(); } } _log.Info("End PriceUpdates"); } }
public void SubmitFeed(IList <string> skuList) { var today = _time.GetAppNowTime().Date; using (var db = _dbFactory.GetRWDb()) { IList <ItemDTO> dtoListings; if (skuList == null || !skuList.Any()) { var listingQuery = from l in db.Listings.GetAll() join i in db.Items.GetAll() on l.ItemId equals i.Id join s in db.Styles.GetAll() on i.StyleId equals s.Id join sale in db.StyleItemSaleToListings.GetAllListingSaleAsDTO() on l.Id equals sale.ListingId into withSale from sale in withSale.DefaultIfEmpty() where l.PriceUpdateRequested && (i.ItemPublishedStatus != (int)PublishedStatuses.New || i.ItemPublishedStatus != (int)PublishedStatuses.None || i.ItemPublishedStatus != (int)PublishedStatuses.PublishingErrors) && i.Market == (int)Market && !l.IsRemoved select new ItemDTO() { ListingEntityId = l.Id, SKU = l.SKU, StyleId = i.StyleId, CurrentPrice = l.CurrentPrice, ListPrice = s.MSRP, SalePrice = sale != null && sale.SaleStartDate <= today ? sale.SalePrice : null, }; dtoListings = listingQuery.ToList(); } else { var listingQuery = from l in db.Listings.GetAll() join i in db.Items.GetAll() on l.ItemId equals i.Id join s in db.Styles.GetAll() on i.StyleId equals s.Id join sale in db.StyleItemSaleToListings.GetAllListingSaleAsDTO() on l.Id equals sale.ListingId into withSale from sale in withSale.DefaultIfEmpty() where i.Market == (int)Market && !l.IsRemoved && skuList.Contains(l.SKU) select new ItemDTO() { ListingEntityId = l.Id, SKU = l.SKU, StyleId = i.StyleId, CurrentPrice = l.CurrentPrice, ListPrice = s.MSRP, SalePrice = sale != null && sale.SaleStartDate <= today ? sale.SalePrice : null, }; dtoListings = listingQuery.ToList(); } if (dtoListings.Any()) { _log.Info("Listings to submit=" + String.Join(", ", dtoListings.Select(i => i.SKU).ToList())); var items = dtoListings.ToList(); foreach (var item in items) { if (item.StyleId.HasValue) { var itemStyle = db.StyleFeatureValues.GetFeatureValueByStyleIdByFeatureId( item.StyleId.Value, StyleFeatureHelper.ITEMSTYLE); if (!item.ListPrice.HasValue && itemStyle != null) { item.ListPrice = PriceHelper.GetDefaultMSRP(itemStyle.Value); } } _log.Info(String.Format("Send SKU={0}, price={1}, msrp={2}, salePrice={3}", item.SKU, item.CurrentPrice, item.ListPrice, item.SalePrice)); var result = _api.SendPrice(item); if (result.IsSuccess) { var dbListing = db.Listings.GetAll().FirstOrDefault(i => i.Id == item.ListingEntityId); if (dbListing != null) { dbListing.PriceUpdateRequested = false; db.Commit(); } } } //var newFeed = new Feed() //{ // Market = (int)Market, // MarketplaceId = MarketplaceId, // Type = (int)FeedType, // IsProcessed = false, // SubmitDate = _time.GetAppNowTime() //}; //db.Feeds.Add(newFeed); //db.Commit(); //_log.Info("Feed id=" + newFeed.Id); //var submitResult = _api.SubmitPriceFeed(newFeed.Id.ToString(), // items, // _feedBaseDirectory); //if (submitResult.IsSuccess) //{ // _log.Info("Walmart feed id=" + submitResult.Data); // newFeed.AmazonIdentifier = submitResult.Data; // db.Commit(); // _log.Info("Feed submitted, feedId=" + newFeed.AmazonIdentifier); //} //else //{ // _log.Info("Feed DIDN'T submitted, mark feed as deleted"); // newFeed.Deleted = true; // db.Commit(); //} } } }