private void Publisher_Result(List <PublishingResult> results) { foreach (var result in results) { AmznEntry entry = _processingEntries.Single(p => p.Sku.Equals(result.Data.Sku)); if (result.HasError) { entry.Status = StatusCode.Error; entry.Message = result.Message; } else { entry.Status = StatusCode.Completed; entry.Command = string.Empty; } } var productErrors = results.Where(p => p.HasError && p.Data.ProductData != null); if (productErrors.Count() > 0) { _pendingResubmission.Enqueue(productErrors); } }
public async override void Publish(IEnumerable <ListingEntry> entries) { _processingEntries.AddRange(entries.Cast <AmznEntry>()); List <ListingItemDto> listingItems = new List <ListingItemDto>(); foreach (AmznEntry entry in entries) { ListingItemDto listingItem = new ListingItemDto(); listingItem.Sku = entry.Sku; listingItem.Title = entry.Title; var existingListingItem = _dataContext.AmznListingItems.SingleOrDefault(p => p.IsActive && p.Item != null && p.Item.ItemLookupCode.Equals(entry.Sku) && p.MarketplaceID == _marketplace.ID); listingItem.IncludeProductData = existingListingItem == null || entry.GetUpdateFlags().Any(p => p.Equals("PRODUCTDATA")); listingItem.Qty = entry.Q; listingItem.Price = entry.P; if (entry.SalePrice.HasValue && entry.SaleStart.HasValue && entry.SaleEnd.HasValue) { listingItem.SaleData = new SaleData() { SalePrice = entry.SalePrice.Value, StartDate = entry.SaleStart.Value, EndDate = entry.SaleEnd.Value }; } listingItems.Add(listingItem); entry.Status = StatusCode.Processing; } BerkeleyEntities.Amazon.AmazonServices services = new BerkeleyEntities.Amazon.AmazonServices(); services.Result += Publisher_Result; await Task.Run(() => services.Publish(_marketplace.ID, listingItems, "Publisher")); while (_pendingResubmission.Count > 0) { var results = _pendingResubmission.Dequeue(); RepublishDataWindow republishForm = new RepublishDataWindow(); republishForm.DataContext = CollectionViewSource.GetDefaultView(results); republishForm.ShowDialog(); if ((bool)republishForm.DialogResult) { foreach (var result in results) { AmznEntry entry = _processingEntries.Single(p => p.Sku.Equals(result.Data.Sku)); entry.Status = StatusCode.Processing; } await Task.Run(() => services.Publish(_marketplace.ID, results.Select(p => p.Data), "Publisher")); } } this.RaisePublishCompleted(); }