Example #1
0
        public void UpdateStyleHiResImages()
        {
            var htmlScraper  = new HtmlScraperService(_log, _time, _dbFactory);
            var imageManager = new ImageManager(_log, htmlScraper, _dbFactory, _time);

            imageManager.UpdateStyleLargeImage();
        }
Example #2
0
        public void ReplaceStyleImageToHiRes()
        {
            var htmlScraper  = new HtmlScraperService(_log, _time, _dbFactory);
            var imageManager = new ImageManager(_log, htmlScraper, _dbFactory, _time);

            imageManager.ReplaceStyleLargeImage();
        }
        public void BuildMultilistingUSFBAExcel(IList <FBAItemInfo> fbaItems)
        {
            var resultItems = new List <ExcelProductUSViewModel>();

            var marketplaceManager = new MarketplaceKeeper(_dbFactory, false);

            marketplaceManager.Init();

            IMarketApi api = new MarketFactory(marketplaceManager.GetAll(), _time, _log, _dbFactory, null)
                             .GetApi(AccessManager.Company.Id, MarketType.Amazon, MarketplaceKeeper.AmazonComMarketplaceId);

            var htmlScraper = new HtmlScraperService(_log, _time, _dbFactory);

            var filename = String.Empty;

            using (var db = _dbFactory.GetRWDb())
            {
                var parentASINList = fbaItems.Select(i => i.ParentASIN).Distinct().ToList();

                foreach (var parentASIN in parentASINList)
                {
                    var childFBAItems = fbaItems.Where(f => f.ParentASIN == parentASIN).ToList();

                    var newItems = ExcelProductUSViewModel.GetItemsFor(_log,
                                                                       _time,
                                                                       _categoryService,
                                                                       htmlScraper,
                                                                       api,
                                                                       db,
                                                                       _company,
                                                                       parentASIN,
                                                                       ExportToExcelMode.FBA,
                                                                       childFBAItems,
                                                                       MarketType.Amazon,
                                                                       MarketplaceKeeper.AmazonComMarketplaceId,
                                                                       UseStyleImageModes.Auto,
                                                                       out filename);

                    resultItems.AddRange(newItems);
                }
            }

            var templateFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory,
                                            "Files/Templates/Flat.File.Clothing-full.OneSheet.US.xls");
            var stream = ExcelHelper.ExportIntoFile(templateFile,
                                                    "Template",
                                                    resultItems);

            var outputFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, String.Format("USFBAListings_{0}.xls", _time.GetAppNowTime().ToString("MM_dd_yyyy_hh_mm_ss")));

            stream.Seek(0, SeekOrigin.Begin);
            using (FileStream file = new FileStream(outputFile, FileMode.Create, System.IO.FileAccess.Write))
            {
                byte[] bytes = new byte[stream.Length];
                stream.Read(bytes, 0, (int)stream.Length);
                file.Write(bytes, 0, bytes.Length);
                stream.Close();
            }
        }
Example #4
0
        public void UpdateItemHiRes(MarketType market, string marketplaceId, string asin)
        {
            var htmlScraper  = new HtmlScraperService(_log, _time, _dbFactory);
            var imageManager = new ImageManager(_log, htmlScraper, _dbFactory, _time);

            imageManager.UpdateItemsLargeImages(market, marketplaceId, new List <string>()
            {
                asin
            }, null);
        }
        protected override void RunCallback()
        {
            var dbFactory   = new DbFactory();
            var time        = new TimeService(dbFactory);
            var settings    = new SettingsService(dbFactory);
            var htmlScraper = new HtmlScraperService(GetLogger(), time, dbFactory);
            var log         = GetLogger();

            var imageManager           = new ImageManager(GetLogger(), htmlScraper, dbFactory, time);
            var imageProcessingService = new ImageProcessingService(dbFactory,
                                                                    time,
                                                                    log,
                                                                    AppSettings.WalmartImageDirectory);

            var lastSyncDate = settings.GetImageUpdateDate();

            LogWrite("Last sync date=" + lastSyncDate);

            log.Info("UpdateStyleImageTypes");
            imageManager.UpdateStyleImageTypes(); //NOTE: call always (every 5 minutes)

            //if (!lastSyncDate.HasValue ||
            //    (time.GetUtcTime() - lastSyncDate) > _betweenProcessingInverval)
            {
                log.Info("UpdateListingsLargeImages");
                imageManager.UpdateParentItemsLargeImages(MarketType.Amazon, MarketplaceKeeper.AmazonComMarketplaceId, null, null);
                //imageManager.UpdateParentItemsLargeImages(MarketType.AmazonEU, null, null);

                imageManager.UpdateItemsLargeImages(MarketType.Amazon, MarketplaceKeeper.AmazonComMarketplaceId, null, null);
                //imageManager.UpdateItemsLargeImages(MarketType.AmazonEU, null, null);

                //imageManager.UpdateItemsLargeImages(MarketType.Walmart, null, null);

                log.Info("UpdateStyleLargeImage");
                imageManager.UpdateStyleLargeImage();

                log.Info("UpdateDifferenceForAllImages");
                imageProcessingService.UpdateDifferenceForAllImages(MarketType.Amazon, MarketplaceKeeper.AmazonComMarketplaceId, null);
                //imageProcessingService.UpdateDifferenceForAllImages(MarketType.Walmart, "", null);

                log.Info("ReplaceStyleLargeImage");
                imageManager.ReplaceStyleLargeImage();

                settings.SetImageUpdateDate(time.GetUtcTime());
            }
        }
Example #6
0
        protected override void RunCallback()
        {
            var dbFactory    = new DbFactory();
            var time         = new TimeService(dbFactory);
            var log          = GetLogger();
            var settings     = new SettingsService(dbFactory);
            var htmlScraper  = new HtmlScraperService(log, time, dbFactory);
            var imageManager = new ImageManager(log, htmlScraper, dbFactory, time);

            var lastSyncDate = settings.GetListingsSendDate(_api.Market, _api.MarketplaceId);
            var pauseStatus  = settings.GetListingsSyncPause(_api.Market, _api.MarketplaceId) ?? false;

            LogWrite("Last sync date=" + lastSyncDate);

            if (pauseStatus)
            {
                LogWrite("Listings sync in pause");
                return;
            }

            if (!lastSyncDate.HasValue ||
                (time.GetUtcTime() - lastSyncDate) > _betweenProcessingInverval)
            {
                var feed = new WalmartItemsFeed(GetLogger(),
                                                time,
                                                _api,
                                                dbFactory,
                                                AppSettings.WalmartFeedBaseDirectory,
                                                AppSettings.SwatchImageDirectory,
                                                AppSettings.SwatchImageBaseUrl,
                                                AppSettings.WalmartImageDirectory,
                                                AppSettings.WalmartImageBaseUrl);

                var feedDto = feed.CheckFeedStatus(TimeSpan.FromHours(24));

                if (feedDto == null) //NOTE: no feed to check
                {
                    //NOTE: Update Image Types, to get right image
                    imageManager.UpdateStyleImageTypes();

                    feed.SubmitFeed();
                    settings.SetListingsSendDate(time.GetUtcTime(), _api.Market, _api.MarketplaceId);
                }
            }
        }
Example #7
0
        public void UpdateAllHiRes()
        {
            var htmlScraper  = new HtmlScraperService(_log, _time, _dbFactory);
            var imageManager = new ImageManager(_log, htmlScraper, _dbFactory, _time);

            //var itemASINList = new List<string>();
            //using (var db = _dbFactory.GetRWDb())
            //{
            //    itemASINList = db.Items.GetAllViewAsDto(MarketType.Amazon, MarketplaceKeeper.AmazonComMarketplaceId)
            //        .Where(i => i.ParentASIN == parentASIN)
            //        .Select(i => i.ASIN)
            //        .ToList();
            //}

            imageManager.UpdateItemsLargeImages(MarketType.Amazon, MarketplaceKeeper.AmazonComMarketplaceId, null, DateTime.Today.AddDays(-160));
            //imageManager.UpdateParentItemsLargeImages(MarketType.Amazon,
            //    new List<string>()
            //{
            //   "B01LYP1ADL",
            //   "B01M0YW6HC"
            //}, null);//, DateTime.Today.AddDays(-7));
        }
        public void BuildMultilistingUKExcel(IList <string> usASINList)
        {
            var resultItems = new List <ExcelProductUKViewModel>();

            var marketplaceManager = new MarketplaceKeeper(_dbFactory, false);

            marketplaceManager.Init();
            IMarketApi api = new MarketFactory(marketplaceManager.GetAll(), _time, _log, _dbFactory, null)
                             .GetApi(AccessManager.Company.Id, MarketType.Amazon, MarketplaceKeeper.AmazonUkMarketplaceId);

            var htmlScraper = new HtmlScraperService(_log, _time, _dbFactory);

            var filename = String.Empty;

            using (var db = _dbFactory.GetRWDb())
            {
                foreach (var asin in usASINList)
                {
                    var newItems = ExcelProductUKViewModel.GetItemsFor(_log,
                                                                       _time,
                                                                       _categoryService,
                                                                       htmlScraper,
                                                                       api,
                                                                       db,
                                                                       _company,
                                                                       asin,
                                                                       MarketType.Amazon,
                                                                       MarketplaceKeeper.AmazonComMarketplaceId,
                                                                       UseStyleImageModes.Auto,
                                                                       out filename);

                    var resultList = new List <ExcelProductUKViewModel>();
                    foreach (var newItem in newItems)
                    {
                        if (newItem.StyleItemId.HasValue)
                        {
                            var styleItem =
                                db.StyleItemCaches.GetForStyleItemId(newItem.StyleItemId.Value).FirstOrDefault();
                            if (styleItem != null && styleItem.RemainingQuantity > 0)
                            {
                                resultList.Add(newItem);
                            }
                        }
                        else
                        {
                            //Parent record w/o StyleItemId
                            resultList.Add(newItem);
                        }
                    }

                    resultItems.AddRange(resultList);
                }
            }

            var templateFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory,
                                            "Files/Templates/Flat.File.Clothing.OneSheet.UK.xls");
            var stream = ExcelHelper.ExportIntoFile(templateFile,
                                                    "Template",
                                                    resultItems);

            var outputFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, String.Format("UKListings_{0}.xls", _time.GetAppNowTime().ToString("MM_dd_yyyy_hh_mm_ss")));

            stream.Seek(0, SeekOrigin.Begin);
            using (FileStream file = new FileStream(outputFile, FileMode.Create, System.IO.FileAccess.Write))
            {
                byte[] bytes = new byte[stream.Length];
                stream.Read(bytes, 0, (int)stream.Length);
                file.Write(bytes, 0, bytes.Length);
                stream.Close();
            }
        }
Example #9
0
        protected override void RunCallback()
        {
            _api.Connect();

            var dbFactory = new DbFactory();
            var time      = new TimeService(dbFactory);
            var log       = GetLogger();

            var syncInfo = new DbSyncInformer(dbFactory,
                                              log,
                                              time,
                                              SyncType.Orders,
                                              _api.MarketplaceId,
                                              _market,
                                              String.Empty);

            using (var db = dbFactory.GetRWDb())
            {
                var serviceFactory = new ServiceFactory();

                var settings       = new SettingsService(dbFactory);
                var company        = db.Companies.GetByIdWithSettingsAsDto(CompanyId);
                var companyAddress = new CompanyAddressService(company);

                var shipmentProviders = company.ShipmentProviderInfoList;
                var addressProviders  = company.AddressProviderInfoList;

                var addressCheckServiceList = serviceFactory.GetAddressCheckServices(log,
                                                                                     time,
                                                                                     dbFactory,
                                                                                     addressProviders);
                var addressService = new AddressService(addressCheckServiceList, companyAddress.GetReturnAddress(MarketIdentifier.Empty()), companyAddress.GetPickupAddress(MarketIdentifier.Empty()));

                var actionService   = new SystemActionService(log, time);
                var priceService    = new PriceService(dbFactory);
                var quantityManager = new QuantityManager(log, time);
                var emailService    = new EmailService(log,
                                                       SettingsBuilder.GetSmtpSettingsFromCompany(company, AppSettings.IsDebug, AppSettings.IsSampleLabels),
                                                       addressService);

                var weightService  = new WeightService();
                var messageService = new SystemMessageService(log, time, dbFactory);

                var rateProviders = serviceFactory.GetShipmentProviders(log,
                                                                        time,
                                                                        dbFactory,
                                                                        weightService,
                                                                        shipmentProviders,
                                                                        null,
                                                                        null,
                                                                        null,
                                                                        null);

                var htmlScraper         = new HtmlScraperService(log, time, dbFactory);
                var orderHistoryService = new OrderHistoryService(log, time, dbFactory);
                var validatorService    = new OrderValidatorService(log,
                                                                    dbFactory,
                                                                    emailService,
                                                                    settings,
                                                                    orderHistoryService,
                                                                    actionService,
                                                                    priceService,
                                                                    htmlScraper,
                                                                    addressService,
                                                                    companyAddress.GetReturnAddress(MarketIdentifier.Empty()),
                                                                    rateProviders.FirstOrDefault(r => r.Type == ShipmentProviderType.Stamps),
                                                                    time,
                                                                    company);

                var cacheService = new CacheService(log, time, actionService, quantityManager);

                var orderSyncFactory = new OrderSyncFactory();

                if (settings.GetOrdersSyncEnabled() != false)
                {
                    if (!syncInfo.IsSyncInProgress()) //NOTE: for now it a few minutes ~10
                    {
                        if (!IsPrintLabelsInProgress(db, actionService, time))
                        {
                            try
                            {
                                var marketplaceId = _api.MarketplaceId;

                                LogWrite("Set OrderSyncInProgress");
                                syncInfo.SyncBegin(null);

                                var synchronizer = orderSyncFactory.GetForMarket(_api,
                                                                                 GetLogger(),
                                                                                 company,
                                                                                 settings,
                                                                                 syncInfo,
                                                                                 rateProviders,
                                                                                 quantityManager,
                                                                                 emailService,
                                                                                 validatorService,
                                                                                 orderHistoryService,
                                                                                 cacheService,
                                                                                 actionService,
                                                                                 companyAddress,
                                                                                 time,
                                                                                 weightService,
                                                                                 messageService);

                                var isFullSync = !_lastFullSync.HasValue || (time.GetUtcTime() - _lastFullSync) > _fullSyncInterval;

                                var syncResult = synchronizer.Sync(isFullSync ? OrderSyncModes.Full : OrderSyncModes.Fast, CancellationToken);

                                if (isFullSync)
                                {
                                    _lastFullSync = time.GetUtcTime();
                                }

                                var statusList = new List <string>()
                                {
                                    OrderStatusEnum.Unshipped.Str()
                                };
                                if (_market == MarketType.Walmart ||
                                    _market == MarketType.WalmartCA)
                                {
                                    statusList.Add(OrderStatusEnum.Pending.Str());
                                }

                                var dbOrderIdList = (from o in db.Orders.GetAll()
                                                     join sh in db.OrderShippingInfos.GetAll() on o.Id equals sh.OrderId
                                                     where (sh.IsActive || sh.IsVisible) &&
                                                     statusList.Contains(o.OrderStatus) &&
                                                     o.Market == (int)_market &&
                                                     (o.MarketplaceId == marketplaceId || String.IsNullOrEmpty(marketplaceId))
                                                     select o.AmazonIdentifier).Distinct().ToList();
                                //var dbOrders = db.ItemOrderMappings.GetOrdersWithItemsByStatus(weightService, statusList.ToArray(), _market, marketplaceId).ToList();
                                //dbOrders = dbOrders.Where(o => o.ShippingInfos != null && o.ShippingInfos.Any(sh => sh.IsActive || sh.IsVisible)).ToList();


                                var unshippedMarketOrderIdList = syncResult.ProcessedOrders
                                                                 .Where(o => statusList.Contains(o.OrderStatus))
                                                                 .Select(o => o.OrderId)
                                                                 .ToList();

                                if (syncResult.SkippedOrders != null)
                                {
                                    unshippedMarketOrderIdList.AddRange(syncResult.SkippedOrders
                                                                        .Where(o => statusList.Contains(o.OrderStatus))
                                                                        .Select(o => o.OrderId)
                                                                        .ToList());
                                }

                                unshippedMarketOrderIdList = unshippedMarketOrderIdList.Distinct().ToList();

                                //var dbOrderIdList = dbOrders.Select(o => o.OrderId).Distinct().ToList();
                                LogDiffrents(unshippedMarketOrderIdList, dbOrderIdList, "Missing order: ");

                                if (unshippedMarketOrderIdList.Count != dbOrderIdList.Count ||
                                    !syncResult.IsSuccess)
                                {
                                    emailService.SendSystemEmailToAdmin("PA Orders Sync has issue",
                                                                        "Market: " + _api.Market + " - " + _api.MarketplaceId + "<br/>" +
                                                                        "Sync message: " + syncResult.Message + "<br/>" +
                                                                        "Missing orders: " + (unshippedMarketOrderIdList.Count - dbOrderIdList.Count));
                                }

                                //NOTE: otherwise if we have missed order (older than 2 hours that was hidden in next lite iteration)
                                if (isFullSync)
                                {
                                    settings.SetOrderCountOnMarket(unshippedMarketOrderIdList.Count, _market, marketplaceId);
                                    settings.SetOrderCountInDB(dbOrderIdList.Count, _market, marketplaceId);
                                }

                                if (syncResult.IsSuccess)
                                {
                                    settings.SetOrderSyncDate(time.GetUtcTime(), _market, marketplaceId);
                                }
                            }
                            catch (Exception ex)
                            {
                                emailService.SendSystemEmailToAdmin("PA Orders Sync has error",
                                                                    "Market: " + _api.Market + " - " + _api.MarketplaceId + "<br/>" +
                                                                    "Sync message: " + ExceptionHelper.GetAllMessages(ex));
                                LogError("RunCallback", ex);
                            }
                            finally
                            {
                                syncInfo.SyncEnd();
                            }
                        }
                        else
                        {
                            LogWrite("Labels printing in-progress");
                        }
                    }
                    else
                    {
                        LogWrite("Order Sync already runned");
                    }
                }
            }
        }