예제 #1
0
        //public void SynchronizeListings(int marketplaceID)
        //{
        //    using (berkeleyEntities dataContext = new berkeleyEntities())
        //    {
        //        EbayMarketplace marketplace = dataContext.EbayMarketplaces.Single(p => p.ID == marketplaceID);

        //        ListingSynchronizer synchronizer = new ListingSynchronizer(marketplace, dataContext);

        //        DateTime syncTime = DateTime.UtcNow.AddMinutes(-3);

        //        if (marketplace.ListingSyncTime.HasValue && marketplace.ListingSyncTime.Value > syncTime.AddDays(-2))
        //        {
        //            DateTime from = marketplace.ListingSyncTime.Value.AddMinutes(-5);

        //            synchronizer.SyncByCreatedTime(from, syncTime);

        //            try
        //            {
        //                synchronizer.SyncByModifiedTime(from, syncTime);
        //            }
        //            catch (ApiException e)
        //            {
        //                if (e.Errors.ToArray().Any(p => p.ErrorCode.Equals("21917062")))
        //                {
        //                    synchronizer.SyncActiveListings();
        //                }
        //            }
        //        }
        //        else
        //        {
        //            synchronizer.SyncActiveListings();
        //        }

        //        marketplace.ListingSyncTime = syncTime;

        //        dataContext.SaveChanges();
        //    }
        //}

        //public void SynchronizeOrders(int marketplaceID)
        //{
        //    using (berkeleyEntities dataContext = new berkeleyEntities())
        //    {
        //        EbayMarketplace marketplace = dataContext.EbayMarketplaces.Single(p => p.ID == marketplaceID);

        //        OrderSynchronizer synchronizer = new OrderSynchronizer(marketplace, dataContext);

        //        DateTime syncTime = DateTime.UtcNow.AddMinutes(-3);

        //        DateTime from = marketplace.OrdersSyncTime.HasValue ? marketplace.OrdersSyncTime.Value.AddMinutes(-5) : DateTime.UtcNow.AddDays(-29);

        //        synchronizer.SyncOrdersByModifiedTime(from, syncTime);

        //        marketplace.OrdersSyncTime = syncTime;

        //        dataContext.SaveChanges();
        //    }
        //}

        //public void FixOverpublished(int marketplaceID)
        //{
        //    using (berkeleyEntities dataContext = new berkeleyEntities())
        //    {
        //        EbayMarketplace marketplace = dataContext.EbayMarketplaces.Single(p => p.ID == marketplaceID);

        //        if (!marketplace.ListingSyncTime.HasValue || marketplace.ListingSyncTime.Value < DateTime.UtcNow.AddHours(-1))
        //        {
        //            throw new InvalidOperationException(marketplace.Name + " listings must be synchronized in order to fix overpublished");
        //        }

        //        if (!marketplace.OrdersSyncTime.HasValue || marketplace.OrdersSyncTime.Value < DateTime.UtcNow.AddHours(-1))
        //        {
        //            throw new InvalidOperationException(marketplace.Name + " orders must be synchronized in order to fix overpublished");
        //        }

        //        var listings = dataContext.EbayListings.Where(p => p.Status.Equals(EbayMarketplace.STATUS_ACTIVE) && p.MarketplaceID == marketplace.ID).ToList();

        //        foreach (EbayListing listing in listings.Where(p => !p.ListingItems.Any(s => s.Item == null)))
        //        {

        //            if(listing.Format.Equals(EbayMarketplace.FORMAT_AUCTION))
        //            {
        //                var listingItem = listing.ListingItems.First();

        //                if(listingItem.Item.AuctionCount > listingItem.Item.QtyAvailable)
        //                {
        //                    try
        //                    {
        //                        End(marketplaceID, listing.Code);
        //                    }
        //                    catch (Exception e)
        //                    {
        //                        _logger.Error(e.Message);
        //                    }
        //                }
        //            }
        //            else
        //            {
        //                var listingItems = listing.ListingItems.ToList();

        //                if (listingItems.Any(p => p.Quantity > p.Item.QtyAvailable))
        //                {
        //                    List<ListingItemDto> listingItemDtos = new List<ListingItemDto>();

        //                    foreach (var listingItem in listingItems)
        //                    {
        //                        if (listingItem.Quantity > listingItem.Item.QtyAvailable)
        //                        {
        //                            listingItemDtos.Add(new ListingItemDto() { Sku = listingItem.Item.ItemLookupCode, Qty = listingItem.Item.QtyAvailable, QtySpecified = true });
        //                        }
        //                        else
        //                        {
        //                            listingItemDtos.Add(new ListingItemDto() { Sku = listingItem.Item.ItemLookupCode, Qty = listingItem.Quantity, QtySpecified = true });
        //                        }
        //                    }

        //                    if (listingItemDtos.All(p => p.Qty == 0))
        //                    {
        //                        try
        //                        {
        //                            End(marketplaceID, listing.Code);
        //                        }
        //                        catch (Exception e)
        //                        {
        //                            _logger.Error(e.Message);
        //                        }
        //                    }
        //                    else
        //                    {
        //                        ListingDto listingDto = new ListingDto();
        //                        listingDto.MarketplaceID = marketplaceID;
        //                        listingDto.Code = listing.Code;
        //                        listingDto.Items.AddRange(listingItemDtos);
        //                        listingDto.IsVariation = (bool)listing.IsVariation;


        //                        try
        //                        {
        //                            Revise(listingDto, false, false);
        //                        }
        //                        catch (Exception e)
        //                        {
        //                            _logger.Error(e.Message);
        //                        }

        //                    }

        //                }
        //            }
        //        }
        //    }
        //}


        public void SynchronizeListing(int marketplaceID)
        {
            using (berkeleyEntities dataContext = new berkeleyEntities())
            {
                BonanzaMarketplace marketplace = dataContext.BonanzaMarketplaces.Single(p => p.ID == marketplaceID);

                ListingSynchronizer synchronizer = new ListingSynchronizer(marketplace, dataContext);

                string[] status = new string[] { "for_sale", "ready_to_post", "missing_fields", "sold", "pending_pickup", "reserved" };

                marketplace.ListingSyncTime = DateTime.UtcNow;

                synchronizer.SyncByStatus(status);

                dataContext.SaveChanges();
            }
        }
예제 #2
0
            private void PublishEntries(IEnumerable <BonanzaEntry> entries)
            {
                using (_dataContext = new berkeleyEntities())
                {
                    _marketplace = _dataContext.BonanzaMarketplaces.Single(p => p.Code.Equals(_marketplaceCode));

                    var update = entries.Where(p => !string.IsNullOrWhiteSpace(p.Code)).GroupBy(p => p.Code);

                    foreach (var group in update)
                    {
                        BonanzaListing listing = _marketplace.Listings.Single(p => p.Code.Equals(group.Key));

                        TryUpdateListing(listing, group);
                    }

                    var create = entries.Where(p => string.IsNullOrWhiteSpace(p.Code)).GroupBy(p => p.ClassName);

                    foreach (var group in create)
                    {
                        TryCreateListing(group);
                    }
                }
            }
예제 #3
0
 public ListingSynchronizer(BonanzaMarketplace marketplace, berkeleyEntities dataContext)
 {
     _marketplace = marketplace;
     _dataContext = dataContext;
 }
예제 #4
0
 public Publisher(int marketplaceID)
 {
     _dataContext.MaterializeAttributes = true;
     _marketplace = _dataContext.BonanzaMarketplaces.Single(p => p.ID == marketplaceID);
 }