Exemplo n.º 1
0
        public void SendOrdersUpdate(SupplieroasisApi api)
        {
            var updater = new BaseOrderUpdater(api, _log, _time);

            using (var db = _dbFactory.GetRWDb())
            {
                updater.UpdateOrders(db);
            }
        }
Exemplo n.º 2
0
 public ReadListingOverstockInfoFromMarketThread(SupplieroasisApi api,
                                                 long companyId,
                                                 ISystemMessageService messageService,
                                                 TimeSpan?callbackInterval,
                                                 TimeSpan betweenProcessingInverval)
     : base("ReadListingOverstockInfoFromMarket", companyId, messageService, callbackInterval)
 {
     _api = api;
     _betweenProcessingInverval = betweenProcessingInverval;
 }
 public UpdateOverstockOrderDataThread(SupplieroasisApi api,
                                       long companyId,
                                       ISystemMessageService messageService,
                                       TimeSpan?callbackInterval,
                                       TimeSpan betweenProcessingInverval)
     : base("UpdateOverstockOrderData", companyId, messageService, callbackInterval)
 {
     _api = api;
     _betweenProcessingInverval = betweenProcessingInverval;
 }
Exemplo n.º 4
0
        public void SendInventoryUpdates(SupplieroasisApi api, IList <string> skuList)
        {
            _log.Info("Begin SendInventoryUpdates");
            using (var db = _dbFactory.GetRWDb())
            {
                var listings = db.Listings.GetQuantityUpdateRequiredList(api.Market, api.MarketplaceId);

                if (skuList != null)
                {
                    listings = db.Listings.GetAll().Where(l => skuList.Contains(l.SKU) &&
                                                          l.Market == (int)api.Market &&
                                                          (l.MarketplaceId == api.MarketplaceId ||
                                                           String.IsNullOrEmpty(api.MarketplaceId)))
                               .ToList();
                }

                var itemIdList = listings.Select(l => l.ItemId).ToList();
                var items      = db.Items.GetAllViewAsDto().Where(i => itemIdList.Contains(i.Id)).ToList();

                var listingWithErrorList = new List <Listing>();

                foreach (var listing in listings)
                {
                    var item = items.FirstOrDefault(i => i.Id == listing.ItemId);
                    if (item != null)
                    {
                        var result = api.UpdateQuantity(item.SKU,
                                                        StringHelper.GetFirstNotEmpty(item.Barcode, item.SKU),
                                                        listing.RealQuantity);

                        if (result.Status == CallStatus.Success)
                        {
                            listing.QuantityUpdateRequested = false;
                            listing.AmazonRealQuantity      = listing.RealQuantity;
                            db.Commit();
                            _log.Info("Qty updated, sku=" + listing.SKU + ", sendQty=" +
                                      listing.RealQuantity);
                        }
                        else
                        {
                            listingWithErrorList.Add(listing);
                            _log.Info("Can't update qty, sku=" + listing.SKU + ", result=" + result.Message);
                        }
                    }
                    else
                    {
                        if (item == null)
                        {
                            _log.Warn("Can't find item, for listing=" + listing.SKU + ", id=" + listing.Id);
                        }
                    }
                }
            }
            _log.Info("End SendInventoryUpdates");
        }
Exemplo n.º 5
0
        public void SyncItemsFromSample(SupplieroasisApi api)
        {
            var coreApi         = new Mock <ISupplieroasisCoreApi>(MockBehavior.Strict);
            var asinsWithErrors = new List <string>();

            coreApi.Setup(p => p.GetItems()).Returns(() =>
            {
                using (var sr = new StringReader(File.ReadAllText(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Files/OverstockSampleResponses/overstock_get_inventory_response.xml"))))
                {
                    XmlSerializer serializer = new XmlSerializer(typeof(GetInventoryResponse));
                    return(CallResult <GetInventoryResponse> .Success((GetInventoryResponse)serializer.Deserialize(sr)));
                }
            });
            api.OverrideCoreApi(coreApi.Object);

            var itemService = new SupplierOasisItemsSync(_log, _time, _dbFactory);

            itemService.ReadItemsInfo(api);
        }
Exemplo n.º 6
0
        public void GetOrders(SupplieroasisApi api)
        {
            //var api = new SupplieroasisApi(_log,
            //    _time,
            //    "UFJFTUlVTUFQUEFSRUw6T3ZlcnN0b2NrMSE=",
            //    "Hallandale",
            //    "https://api.test.supplieroasis.com");

            var orders = api.GetOrders(_log, _time.GetAppNowTime().AddDays(-14), null);

            _log.Info(orders.Count().ToString());

            //foreach (var order in orders)
            //{
            //    api.SubmitTrackingInfo(order.OrderId,
            //        "785687451763",
            //        null,
            //        null,
            //        "Express",
            //        ShippingTypeCode.Priority,
            //        "FedEx",
            //        _time.GetAppNowTime(),
            //        order.Items.Select(oi => new OrderItemDTO()
            //        {
            //            ItemOrderIdentifier = oi.ItemOrderId,
            //            QuantityOrdered = oi.QuantityOrdered,
            //        }).ToList(),
            //        null);
            //}

            //List<string> asinWithErrors = null;
            //var products = api.GetItems(_log, _time, null, ItemFillMode.Defualt, out asinWithErrors);
            //foreach (var product in products)
            //{
            //    foreach (var child in product.Variations)
            //    {
            //        api.UpdateQuantity(child.SKU, child.Barcode, 5);
            //    }
            //}
        }
Exemplo n.º 7
0
        public void SyncOrders(SupplieroasisApi api)
        {
            var coreApi         = new Mock <ISupplieroasisCoreApi>(MockBehavior.Strict);
            var asinsWithErrors = new List <string>();

            coreApi.Setup(p => p.GetOrders(It.IsAny <DateTime>(), It.IsAny <DateTime>())).Returns((DateTime d1, DateTime d2) =>
            {
                using (var sr = new StringReader(File.ReadAllText(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Files/OverstockSampleResponses/overstock_get_orders_response.xml"))))
                {
                    XmlSerializer serializer = new XmlSerializer(typeof(GetOrdersResponse));
                    return(CallResult <GetOrdersResponse> .Success((GetOrdersResponse)serializer.Deserialize(sr)));
                }
            });
            api.OverrideCoreApi(coreApi.Object);

            var syncInfo = new DbSyncInformer(_dbFactory,
                                              _log,
                                              _time,
                                              SyncType.Orders,
                                              api.MarketplaceId,
                                              api.Market,
                                              String.Empty);
            var settings             = new SettingsService(_dbFactory);
            var dbFactory            = new DbFactory();
            var quantityManager      = new QuantityManager(_log, _time);
            var priceService         = new PriceService(dbFactory);
            var companyAddressList   = new CompanyAddressService(_company, null);
            var serviceFactory       = new ServiceFactory();
            var addressCheckServices = serviceFactory.GetAddressCheckServices(_log,
                                                                              _time,
                                                                              dbFactory,
                                                                              _company.AddressProviderInfoList);
            var addressService = new AddressService(addressCheckServices,
                                                    companyAddressList.GetReturnAddress(MarketIdentifier.Empty()),
                                                    companyAddressList.GetPickupAddress(MarketIdentifier.Empty()));

            var rateProviders = serviceFactory.GetShipmentProviders(_log,
                                                                    _time,
                                                                    dbFactory,
                                                                    _weightService,
                                                                    _company.ShipmentProviderInfoList,
                                                                    null,
                                                                    null,
                                                                    null,
                                                                    null);

            var stampsRateProvider  = rateProviders.FirstOrDefault(r => r.Type == ShipmentProviderType.Stamps);
            var orderHistoryService = new OrderHistoryService(_log, _time, _dbFactory);
            var validatorService    = new OrderValidatorService(_log,
                                                                _dbFactory,
                                                                _emailService,
                                                                settings,
                                                                orderHistoryService,
                                                                _actionService,
                                                                priceService,
                                                                _htmlScraper,
                                                                addressService,
                                                                companyAddressList.GetReturnAddress(MarketIdentifier.Empty()),
                                                                stampsRateProvider,
                                                                _time,
                                                                _company);

            var actionService = new SystemActionService(_log, _time);
            var cacheService  = new CacheService(_log, _time, actionService, quantityManager);

            using (var db = _dbFactory.GetRWDb())
            {
                //if (!syncInfo.IsSyncInProgress())
                {
                    try
                    {
                        syncInfo.SyncBegin(null);

                        var orderSyncFactory = new OrderSyncFactory();
                        var synchronizer     = orderSyncFactory.GetForMarket(api,
                                                                             _log,
                                                                             _company,
                                                                             settings,
                                                                             syncInfo,
                                                                             rateProviders,
                                                                             quantityManager,
                                                                             _emailService,
                                                                             validatorService,
                                                                             orderHistoryService,
                                                                             cacheService,
                                                                             _actionService,
                                                                             companyAddressList,
                                                                             _time,
                                                                             _weightService,
                                                                             _messageService);

                        //if (!String.IsNullOrEmpty(orderNumber))
                        //    synchronizer.ProcessSpecifiedOrder(db, orderNumber);
                        //else
                        synchronizer.Sync(Core.Models.Orders.OrderSyncModes.Full, null);
                    }
                    finally
                    {
                        syncInfo.SyncEnd();
                    }
                }
            }
        }
Exemplo n.º 8
0
        public void SendInventoryUpdates(SupplieroasisApi api, IList <string> skuList)
        {
            var itemService = new SupplierOasisItemsSync(_log, _time, _dbFactory);

            itemService.SendInventoryUpdates(api, skuList);
        }
Exemplo n.º 9
0
        public void SyncItems(SupplieroasisApi api)
        {
            var itemService = new SupplierOasisItemsSync(_log, _time, _dbFactory);

            itemService.ReadItemsInfo(api);
        }
Exemplo n.º 10
0
        public void ReadItemsInfo(SupplieroasisApi api)
        {
            _log.Info("Begin ReadItemsInfo");
            var itemsWithError = new List <string>();
            var items          = api.GetItems(_log,
                                              _time,
                                              null,
                                              ItemFillMode.Defualt,
                                              out itemsWithError);

            using (var db = _dbFactory.GetRWDb())
            {
                _log.Info("Total items=" + items.Count());
                //Create
                var allItems = db.Items.GetAllViewAsDto().Where(m => m.Market == (int)api.Market &&
                                                                (m.MarketplaceId == api.MarketplaceId ||
                                                                 String.IsNullOrEmpty(api.MarketplaceId))).ToList();
                foreach (var item in items)
                {
                    foreach (var variation in item.Variations)
                    {
                        var existItem = allItems.FirstOrDefault(i => StringHelper.IsEqualNoCase(i.SKU, variation.SKU));

                        if (existItem == null)
                        {
                            _log.Info("Add new item, MarketItemId=" + variation.SourceMarketId);

                            var exampleItem = db.Items.GetAllViewAsDto().FirstOrDefault(i => i.Market == (int)MarketType.Amazon &&
                                                                                        i.MarketplaceId == MarketplaceKeeper.AmazonComMarketplaceId &&
                                                                                        i.SKU == variation.SKU);
                            if (exampleItem == null)
                            {
                                exampleItem = db.Items.GetAllViewAsDto().OrderByDescending(i => i.CreateDate).FirstOrDefault(i => i.SKU == variation.SKU);
                            }

                            var styleString = SkuHelper.RetrieveStyleIdFromSKU(db, variation.SKU, null);
                            if (String.IsNullOrEmpty(styleString))
                            {
                                styleString = variation.SKU;
                            }

                            if (String.IsNullOrEmpty(styleString))
                            {
                                _log.Info("StyleString is empty for: " + variation.SKU + ", itemSKU=" + item.SKU);
                                continue;
                            }

                            var parentItem = db.ParentItems.GetAll().FirstOrDefault(pi => pi.ASIN == styleString &&
                                                                                    pi.Market == (int)MarketType.OverStock);
                            if (parentItem == null)
                            {
                                parentItem = new ParentItem()
                                {
                                    ASIN           = styleString,
                                    SourceMarketId = styleString,
                                    Market         = item.Market,
                                    MarketplaceId  = item.MarketplaceId,

                                    CreateDate = _time.GetAmazonNowTime()
                                };

                                db.ParentItems.Add(parentItem);
                                db.Commit();
                            }

                            if (exampleItem == null)
                            {
                                exampleItem = new DTO.ItemDTO();
                                var style = db.Styles.GetAll().FirstOrDefault(st => st.StyleID == styleString);
                                if (style != null)
                                {
                                    exampleItem.StyleId = style.Id;
                                }
                                var size = SkuHelper.RetrieveSizeFromSKU(variation.SKU);

                                if (style != null)
                                {
                                    var styleItem = db.StyleItems.GetAll().FirstOrDefault(si => si.StyleId == style.Id &&
                                                                                          si.Size == size);
                                    if (styleItem != null)
                                    {
                                        exampleItem.StyleItemId = styleItem.Id;
                                    }
                                }
                            }

                            var newItem = new Item()
                            {
                                ASIN          = item.ASIN,
                                ParentASIN    = parentItem.ASIN,
                                Market        = item.Market,
                                MarketplaceId = item.MarketplaceId,

                                Barcode = variation.Barcode,

                                SourceMarketId      = item.SourceMarketId,
                                ItemPublishedStatus = variation.PublishedStatus,

                                StyleId     = exampleItem?.StyleId,
                                StyleItemId = exampleItem?.StyleItemId,

                                CreateDate = _time.GetAmazonNowTime()
                            };
                            db.Items.Add(newItem);
                            db.Commit();

                            var newListing = new Listing()
                            {
                                ItemId        = newItem.Id,
                                SKU           = variation.SKU,
                                ListingId     = variation.SKU,
                                Market        = variation.Market,
                                MarketplaceId = variation.MarketplaceId,

                                CreateDate         = _time.GetAmazonNowTime(),
                                AmazonRealQuantity = variation.AmazonRealQuantity,
                            };
                            db.Listings.Add(newListing);
                            db.Commit();
                        }
                    }
                }


                //Update
                var updatedItemIds = new List <long>();
                foreach (var item in items)
                {
                    foreach (var variation in item.Variations)
                    {
                        _log.Info("Read info for SKU=" + variation.SKU);
                        var dbListing = db.Listings.GetAll().FirstOrDefault(m => m.Market == (int)api.Market &&
                                                                            (m.MarketplaceId == api.MarketplaceId ||
                                                                             String.IsNullOrEmpty(api.MarketplaceId)) &&
                                                                            m.SKU == variation.SKU);
                        if (dbListing == null)
                        {
                            _log.Info("Unable to find item for, SKU=" + variation.SKU);
                            continue;
                        }

                        var dbItem = db.Items.GetAll().FirstOrDefault(i => i.Id == dbListing.ItemId);
                        if (dbItem == null)
                        {
                            _log.Info("Unable to find item for itemId=" + dbListing.ItemId);
                            continue;
                        }

                        updatedItemIds.Add(dbItem.Id);

                        if (dbItem.ItemPublishedStatus != variation.PublishedStatus)
                        {
                            dbItem.ItemPublishedStatus       = variation.PublishedStatus;
                            dbItem.ItemPublishedStatusDate   = _time.GetAppNowTime();
                            dbItem.ItemPublishedStatusReason = "Derived from market";
                        }

                        dbItem.Barcode = variation.Barcode;

                        //dbListing.AmazonCurrentPrice = variation.AmazonCurrentPrice;
                        //dbListing.AmazonCurrentPriceUpdateDate = _time.GetAppNowTime();

                        dbListing.AmazonRealQuantity           = variation.AmazonRealQuantity;
                        dbListing.AmazonRealQuantityUpdateDate = _time.GetAppNowTime();
                    }
                }
                db.Commit();

                //Remove not exists
                var toRemoveItems = db.Items.GetAll().Where(i => i.Market == (int)api.Market &&
                                                            (i.MarketplaceId == api.MarketplaceId ||
                                                             String.IsNullOrEmpty(api.MarketplaceId)) &&
                                                            !updatedItemIds.Contains(i.Id) &&
                                                            i.ItemPublishedStatus == (int)PublishedStatuses.Published);
                _log.Info("Items to unpublish, count=" + toRemoveItems.Count());
                foreach (var toRemoveItem in toRemoveItems)
                {
                    toRemoveItem.ItemPublishedStatusBeforeRepublishing = toRemoveItem.ItemPublishedStatus;
                    toRemoveItem.ItemPublishedStatus     = (int)PublishedStatuses.Unpublished;
                    toRemoveItem.ItemPublishedStatusDate = _time.GetUtcTime();
                }
                db.Commit();
            }
            _log.Info("End ReadItemsInfo");
        }
Exemplo n.º 11
0
 public void SendInventoryUpdates(SupplieroasisApi api)
 {
     SendInventoryUpdates(api, null);
 }