Exemple #1
0
        public CallEBayProcessing(ILogService log,
                                  ITime time,
                                  ICacheService cacheService,
                                  IDbFactory dbFactory,
                                  IStyleManager styleManager,
                                  eBayApi eBayApi,
                                  IEmailService emailService,
                                  CompanyDTO company)
        {
            _log                                 = log;
            _time                                = time;
            _dbFactory                           = dbFactory;
            _cacheService                        = cacheService;
            _styleManager                        = styleManager;
            _descriptionTemplatePath             = Path.Combine(AppSettings.TemplateDirectory, TemplateHelper.EBayDescriptionTemplateName);
            _descriptionMultiListingTemplatePath = Path.Combine(AppSettings.TemplateDirectory, TemplateHelper.EBayDescriptionMultiListingTemplateName);

            _eBayApi      = eBayApi;
            _company      = company;
            _emailService = emailService;

            _actionService = new SystemActionService(_log, _time);
            _htmlScraper   = new HtmlScraperService(log, time, dbFactory);

            var itemHistoryService = new ItemHistoryService(_log, _time, _dbFactory);

            _barcodeService           = new BarcodeService(log, time, dbFactory);
            _autoCreateListingService = new AutoCreateEBayListingService(_log, _time, dbFactory, cacheService, _barcodeService, _emailService, itemHistoryService, AppSettings.IsDebug);
        }
Exemple #2
0
        public CallSupplieroasisProcessing(ILogService log,
                                           ITime time,
                                           ICacheService cacheService,
                                           IEmailService emailService,
                                           IDbFactory dbFactory,
                                           CompanyDTO company)
        {
            _dbFactory             = dbFactory;
            _cacheService          = cacheService;
            _barcodeService        = new BarcodeService(log, time, dbFactory);
            _trackingNumberService = new TrackingNumberService(log, time, dbFactory);
            _log          = log;
            _time         = time;
            _emailService = emailService;
            _company      = company;

            _weightService  = new WeightService();
            _messageService = new SystemMessageService(_log, _time, dbFactory);
            _actionService  = new SystemActionService(_log, _time);
            _htmlScraper    = new HtmlScraperService(log, time, dbFactory);

            var itemHistoryService = new ItemHistoryService(log, time, dbFactory);

            _autoCreateListingService = new AutoCreateNonameListingService(_log, _time, dbFactory, cacheService, _barcodeService, _emailService, itemHistoryService, AppSettings.IsDebug);
        }
Exemple #3
0
        public CallWalmartProcessing(ILogService log,
                                     ITime time,
                                     ICacheService cacheService,
                                     IDbFactory dbFactory,
                                     IEmailService emailService,
                                     IItemHistoryService itemHistoryService,
                                     WalmartApi walmartApi,
                                     CompanyDTO company)
        {
            _log                = log;
            _time               = time;
            _dbFactory          = dbFactory;
            _cacheService       = cacheService;
            _walmartApi         = walmartApi;
            _company            = company;
            _emailService       = emailService;
            _itemHistoryService = itemHistoryService;

            _actionService  = new SystemActionService(_log, _time);
            _htmlScraper    = new HtmlScraperService(log, time, dbFactory);
            _barcodeService = new BarcodeService(log, time, dbFactory);

            _openApi = new WalmartOpenApi(_log, "trn9fdghvb8p9gjj9j6bvjwx");
            _autoCreateListingService = new AutoCreateWalmartListingService(log,
                                                                            time,
                                                                            dbFactory,
                                                                            _cacheService,
                                                                            _barcodeService,
                                                                            _emailService,
                                                                            _openApi,
                                                                            itemHistoryService,
                                                                            AppSettings.IsDebug);
        }
 public UploadOrderFeedService(IDbFactory dbFactory,
                               ITime time,
                               ILogService log,
                               IAutoCreateListingService listingCreateService,
                               ISystemActionService systemAction,
                               IStyleHistoryService styleHistory)
 {
     _log                  = log;
     _time                 = time;
     _dbFactory            = dbFactory;
     _listingCreateService = listingCreateService;
     _systemAction         = systemAction;
     _styleHistory         = styleHistory;
 }
Exemple #5
0
        public CallGrouponProcessing(IDbFactory dbFactory,
                                     ICacheService cacheService,
                                     IEmailService emailService,
                                     ILogService log,
                                     ITime time)
        {
            _dbFactory     = dbFactory;
            _log           = log;
            _time          = time;
            _weightService = new WeightService();
            var barcodeService     = new BarcodeService(log, time, dbFactory);
            var itemHistoryService = new ItemHistoryService(log, time, dbFactory);

            _autoCreateListingService = new AutoCreateNonameListingService(_log, _time, dbFactory, cacheService, barcodeService, emailService, itemHistoryService, AppSettings.IsDebug);
        }
Exemple #6
0
        public CallMagentoProcessing(ILogService log,
                                     ITime time,
                                     IEmailService emailService,
                                     ICacheService cacheService,
                                     IDbFactory dbFactory)
        {
            _log          = log;
            _time         = time;
            _dbFactory    = dbFactory;
            _cacheService = cacheService;
            _emailService = emailService;

            var itemHistoryService = new ItemHistoryService(_log, _time, _dbFactory);

            _barcodeService           = new BarcodeService(log, time, dbFactory);
            _autoCreateListingService = new AutoCreateNonameListingService(_log, _time, dbFactory, cacheService, _barcodeService, _emailService, itemHistoryService, AppSettings.IsDebug);
        }
Exemple #7
0
        public ImportRelist(ILogService log,
                            ITime time,
                            IDbFactory dbFactory,
                            ICacheService cacheService,
                            IEmailService emailService,
                            ISystemActionService actionService)
        {
            _log           = log;
            _time          = time;
            _dbFactory     = dbFactory;
            _cacheService  = cacheService;
            _emailService  = emailService;
            _actionService = actionService;

            var itemHistoryService = new ItemHistoryService(_log, _time, _dbFactory);

            _barcodeService           = new BarcodeService(_log, _time, _dbFactory);
            _autoCreateListingService = new AutoCreateNonameListingService(_log, _time, _dbFactory, _cacheService, _barcodeService, _emailService, itemHistoryService, AppSettings.IsDebug);
        }
        public CallDsApiProcessing(ILogService log,
                                   ITime time,
                                   ICacheService cacheService,
                                   IQuantityManager quantityManager,
                                   ISystemActionService actionService,
                                   IEmailService emailService,
                                   IDbFactory dbFactory)
        {
            _dbFactory       = dbFactory;
            _cacheService    = cacheService;
            _quantityManager = quantityManager;
            _actionService   = actionService;
            _barcodeService  = new BarcodeService(log, time, dbFactory);
            _log             = log;
            _time            = time;
            _emailService    = emailService;

            var itemHistoryService = new ItemHistoryService(_log, _time, _dbFactory);
            var barcodeService     = new BarcodeService(log, time, dbFactory);

            _autoCreateListingService = new AutoCreateNonameListingService(_log, _time, dbFactory, cacheService, barcodeService, emailService, itemHistoryService, AppSettings.IsDebug);
        }
Exemple #9
0
        public CallWalmartCAProcessing(ILogService log,
                                       ITime time,
                                       ICacheService cacheService,
                                       IDbFactory dbFactory,
                                       IEmailService emailService,
                                       WalmartCAApi walmartCAApi,
                                       CompanyDTO company)
        {
            _log          = log;
            _time         = time;
            _dbFactory    = dbFactory;
            _cacheService = cacheService;
            _walmartCAApi = walmartCAApi;
            _company      = company;
            _emailService = emailService;

            var itemHistoryService = new ItemHistoryService(_log, _time, _dbFactory);

            _actionService            = new SystemActionService(_log, _time);
            _htmlScraper              = new HtmlScraperService(log, time, dbFactory);
            _barcodeService           = new BarcodeService(log, time, dbFactory);
            _autoCreateListingService = new AutoCreateWalmartCAListingService(log, time, dbFactory, _cacheService, _barcodeService, _emailService, itemHistoryService, AppSettings.IsDebug);
        }
Exemple #10
0
        public void Create(ILogService log,
                           ITime time,
                           IQuantityManager quantityManager,
                           IDbFactory dbFactory,
                           IWeightService weightService,
                           IShippingService shippingService,
                           IAutoCreateListingService createListingService,
                           ISettingsService settingService,
                           IEmailService emailService,
                           ISystemActionService actionService,
                           IHtmlScraperService htmlScraper,
                           IOrderHistoryService orderHistory,
                           IPriceService priceService,
                           CompanyDTO company,
                           DateTime when,
                           long?by)
        {
            var syncInfo      = new EmptySyncInformer(log, SyncType.Orders);
            var market        = (int)MarketType.OfflineOrders;
            var marketplaceId = MarketplaceKeeper.ManuallyCreated;

            var orderItems = new List <ListingOrderDTO>();

            using (var db = dbFactory.GetRWDb())
            {
                var index = 1;
                foreach (var item in Items)
                {
                    var dbItem = db.Items.GetAll().FirstOrDefault(i => i.Market == market &&
                                                                  i.MarketplaceId == marketplaceId &&
                                                                  i.StyleItemId == item.StyleItemId);

                    if (dbItem == null)
                    {
                        var itemPrice = item.ItemPrice; // db.Items.GetAllViewActual()
                                                        //.FirstOrDefault(i => i.Market == (int)MarketType.Amazon
                                                        //    && i.MarketplaceId == MarketplaceKeeper.AmazonComMarketplaceId)?.CurrentPrice;

                        log.Info("Request create listing, market=" + market
                                 + ", marketplaceId=" + marketplaceId);

                        IList <MessageString> messages = new List <MessageString>();
                        //Create New
                        var model = createListingService.CreateFromStyle(db,
                                                                         item.StyleId.Value,
                                                                         (MarketType)market,
                                                                         marketplaceId,
                                                                         out messages);

                        model.Variations.ForEach(v => v.CurrentPrice = itemPrice);

                        createListingService.Save(model,
                                                  "",
                                                  db,
                                                  when,
                                                  by);

                        dbItem = db.Items.GetAll().FirstOrDefault(i => i.Market == market &&
                                                                  i.MarketplaceId == marketplaceId &&
                                                                  i.StyleItemId == item.StyleItemId);
                    }

                    var dbListing = db.Listings.GetAll().FirstOrDefault(l => l.Market == market &&
                                                                        l.MarketplaceId == marketplaceId &&
                                                                        l.ItemId == dbItem.Id);

                    orderItems.Add(new ListingOrderDTO()
                    {
                        ASIN            = dbItem.ASIN,
                        SKU             = dbListing.SKU,
                        ItemPaid        = item.ItemPrice,
                        ItemPrice       = item.ItemPrice,
                        ItemGrandPrice  = item.ItemPrice,
                        StyleId         = dbItem.StyleId,
                        StyleID         = dbItem.StyleString,
                        StyleItemId     = dbItem.StyleItemId,
                        Market          = dbItem.Market,
                        MarketplaceId   = dbItem.MarketplaceId,
                        QuantityOrdered = item.Quantity,
                        ItemOrderId     = index.ToString(),
                        SourceListingId = dbListing.Id,
                    });

                    index++;
                }

                OrderNumber = db.Orders.GetAll()
                              .Where(o => o.Market == (int)market &&
                                     o.MarketplaceId == marketplaceId)
                              .OrderByDescending(o => o.Id).FirstOrDefault()?.AmazonIdentifier;

                if (String.IsNullOrEmpty(OrderNumber))
                {
                    OrderNumber = "1000";
                }
                else
                {
                    OrderNumber = ((StringHelper.TryGetInt(OrderNumber) ?? 1000) + 1).ToString();
                }
            }

            var dtoOrder = new DTOOrder()
            {
                Market            = market,
                MarketplaceId     = marketplaceId,
                OrderDate         = OrderDate,
                OrderStatus       = "Unshipped",
                SourceOrderStatus = "Unshipped",
                OrderId           = OrderNumber,
                CustomerOrderId   = OrderNumber,
                MarketOrderId     = OrderNumber,

                AmazonEmail      = ToAddress.Email,
                BuyerEmail       = ToAddress.Email,
                PersonName       = ToAddress.FullName,
                BuyerName        = ToAddress.FullName,
                ShippingAddress1 = ToAddress.Address1,
                ShippingAddress2 = ToAddress.Address2,
                ShippingCity     = ToAddress.City,
                ShippingCountry  = ToAddress.Country,
                ShippingZip      = ToAddress.Zip,
                ShippingZipAddon = ToAddress.ZipAddon,
                ShippingPhone    = ToAddress.Phone,
                ShippingState    = StringHelper.GetFirstNotEmpty(ToAddress.USAState, ToAddress.NonUSAState),

                ShippingPaid  = 0,
                ShippingPrice = 0,
                TotalPaid     = Items.Sum(i => i.ItemPrice),
                TotalPrice    = Items.Sum(i => i.ItemPrice),

                Quantity = Items.Sum(i => i.Quantity),

                InitialServiceType    = ShippingService,
                ShippingService       = ShippingService,
                SourceShippingService = ShippingService,

                Items = orderItems,
            };

            var userOrderApi = new UserOrderApi(new List <DTOOrder>()
            {
                dtoOrder
            });

            var serviceFactory       = new ServiceFactory();
            var addressCheckServices = serviceFactory.GetAddressCheckServices(log,
                                                                              time,
                                                                              dbFactory,
                                                                              company.AddressProviderInfoList);
            var companyAddress = new CompanyAddressService(company);
            var addressService = new AddressService(addressCheckServices, companyAddress.GetReturnAddress(MarketIdentifier.Empty()), companyAddress.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 validatorService = new OrderValidatorService(log, dbFactory, emailService, settingService, orderHistory, actionService,
                                                             priceService, htmlScraper, addressService, companyAddress.GetReturnAddress(MarketIdentifier.Empty()), stampsRateProvider, time, company);
            var orderHistoryService = new OrderHistoryService(log, time, dbFactory);
            var cacheService        = new CacheService(log, time, actionService, quantityManager);

            using (var db = dbFactory.GetRWDb())
            {
                try
                {
                    var orderSyncFactory = new OrderSyncFactory();
                    var synchronizer     = orderSyncFactory.GetForMarket(userOrderApi,
                                                                         log,
                                                                         company,
                                                                         settingService,
                                                                         syncInfo,
                                                                         rateProviders,
                                                                         quantityManager,
                                                                         emailService,
                                                                         validatorService,
                                                                         orderHistoryService,
                                                                         cacheService,
                                                                         actionService,
                                                                         companyAddress,
                                                                         time,
                                                                         weightService,
                                                                         null);

                    if (!String.IsNullOrEmpty(OrderNumber))
                    {
                        synchronizer.ProcessSpecifiedOrder(db, OrderNumber);
                        Messages.Add(MessageString.Success("The order has been successfully created, order #: " + OrderNumber));
                    }
                }
                catch (Exception ex)
                {
                    Messages.Add(MessageString.Error(ex.Message));
                }
            }
        }
Exemple #11
0
        public CallMessagesResult <string> UpdateFeed(ILogService log,
                                                      ITime time,
                                                      IDbFactory dbFactory,
                                                      IAutoCreateListingService autoCreateListingService)
        {
            var marketplaceId = MarketplaceId;
            var sourceFeed    = Path.Combine(UrlHelper.GetActualizeGrouponQtyFeedPath(), FileName);
            var qtyThreshold  = 10;

            //Read prices
            var allDSQtyItems = new List <GrouponItemInfo>();

            using (var db = dbFactory.GetRWDb())
            {
                var allDSQtyItemsQuery = (from st in db.Styles.GetAll()
                                          join si in db.StyleItems.GetAll() on st.Id equals si.StyleId
                                          join sic in db.StyleItemCaches.GetAll() on si.Id equals sic.Id
                                          join vi in db.Items.GetAllViewAsDto() on si.Id equals vi.StyleItemId into withItems
                                          from vi in withItems.DefaultIfEmpty()
                                          join i in db.Listings.GetAll() on vi.Id equals i.Id into withListings
                                          from i in withListings.DefaultIfEmpty()
                                          join pi in db.ParentItems.GetAll() on new { vi.ParentASIN, vi.Market, vi.MarketplaceId } equals new { ParentASIN = pi.ASIN, pi.Market, pi.MarketplaceId } into withParent
                                          from pi in withParent.DefaultIfEmpty()
                                          where vi.Market == (int)MarketType.Groupon &&
                                          (vi.MarketplaceId == marketplaceId ||
                                           String.IsNullOrEmpty(marketplaceId)) &&
                                          !st.Deleted
                                          select new GrouponItemInfo()
                {
                    ItemId = vi.Id,
                    ListingId = vi.ListingEntityId,
                    SKU = vi.SKU,
                    Barcode = vi.Barcode,

                    OldPrice = vi.CurrentPrice,
                    OldShippingPrice = i.ShippingPriceFromMarket,
                    OldItemPublishedStatus = vi.PublishedStatus,

                    Qty = (st.OnHold ||
                           st.SystemOnHold ||
                           vi.OnHold ||
                           pi.OnHold ||
                           sic.RemainingQuantity <= qtyThreshold) ? 0 : (vi.RealQuantity),
                });
                allDSQtyItems = allDSQtyItemsQuery.ToList();
            }

            //Read prices dest file
            var dataList = new List <string[]>();

            using (StreamReader streamReader = new StreamReader(sourceFeed))
            {
                using (CsvReader reader = new CsvReader(streamReader, new CsvConfiguration
                {
                    HasHeaderRecord = false,
                    Delimiter = ",",
                    TrimFields = true,
                }))
                {
                    while (reader.Read())
                    {
                        dataList.Add(reader.CurrentRecord);
                    }
                }
            }

            var headers            = dataList[0];
            var skuIndex           = FindIndex(headers, "Vendor SKU") ?? FindIndex(headers, "Merchant SKU");
            var barcodeIndex       = FindIndex(headers, "Product Identifier");
            var priceIndex         = FindIndex(headers, "Unit Price") ?? FindIndex(headers, "Sell Price");
            var shippingPriceIndex = FindIndex(headers, "Shipping Cost") ?? FindIndex(headers, "Customer Ship Fee");
            var qtyIndex           = FindIndex(headers, "Quantity");

            //Create Groupon Listings
            foreach (var dataItem in dataList.Skip(1))
            {
                var sku           = skuIndex.HasValue ? PrepareValue(dataItem[skuIndex.Value]) : null;
                var barcode       = barcodeIndex.HasValue ?  PrepareValue(dataItem[barcodeIndex.Value]) : null;
                var price         = priceIndex.HasValue ? StringHelper.TryGetDecimal(PrepareValue(dataItem[priceIndex.Value])) : null;
                var shippingPrice = shippingPriceIndex.HasValue ? StringHelper.TryGetDecimal(PrepareValue(dataItem[shippingPriceIndex.Value])) : null;

                var qtyInfo = allDSQtyItems.FirstOrDefault(q => q.SKU == sku || q.SKU.TrimStart('0') == sku);
                if (qtyInfo == null)
                {
                    qtyInfo = allDSQtyItems.FirstOrDefault(q => q.Barcode == barcode);
                }

                if (qtyInfo == null)
                {
                    //Create listing
                    if (!String.IsNullOrEmpty(sku) && price.HasValue)
                    {
                        CreateListing(dbFactory,
                                      log,
                                      autoCreateListingService,
                                      marketplaceId,
                                      sku,
                                      barcode,
                                      price.Value,
                                      shippingPrice,
                                      time.GetAppNowTime());
                    }
                }
                else
                {
                    if (price.HasValue)
                    {
                        UpdateListing(dbFactory, log, qtyInfo, price.Value, shippingPriceIndex.HasValue, shippingPrice, time.GetAppNowTime());
                    }
                    qtyInfo.ExistOnMarket = true;
                }
            }

            //Mark not exists as deleted
            var notUpdatedItemIds = allDSQtyItems.Where(i => !i.ExistOnMarket).Select(i => i.ItemId).ToList();

            using (var db = dbFactory.GetRWDb())
            {
                var dbListingsToRemove = db.Listings
                                         .GetAll()
                                         .Where(l => notUpdatedItemIds.Contains(l.ItemId))
                                         .ToList();

                var dbItemsToRemove = db.Items
                                      .GetAll()
                                      .Where(l => notUpdatedItemIds.Contains(l.Id) &&
                                             (l.ItemPublishedStatus == (int)PublishedStatuses.Published ||
                                              l.ItemPublishedStatus == (int)PublishedStatuses.None) &&
                                             l.IsExistOnAmazon == true)
                                      .ToList();
                log.Info("Mark as unpublished Listings: " + dbListingsToRemove.Count() + ", Items: " + dbItemsToRemove.Count());
                foreach (var toRemove in dbListingsToRemove)
                {
                    toRemove.AmazonRealQuantity           = 0;
                    toRemove.AmazonRealQuantityUpdateDate = time.GetAppNowTime();
                }
                foreach (var toRemove in dbItemsToRemove)
                {
                    toRemove.IsExistOnAmazon = false;
                    toRemove.ItemPublishedStatusBeforeRepublishing = toRemove.ItemPublishedStatus;
                    toRemove.ItemPublishedStatus       = (int)PublishedStatuses.PublishedInactive;
                    toRemove.ItemPublishedStatusReason = "From Cost&Quantity feed";
                    toRemove.ItemPublishedStatusDate   = time.GetAppNowTime();
                }
                db.Commit();
            }

            //Add pices
            foreach (var dataItem in dataList.Skip(1))
            {
                var sku     = PrepareValue(dataItem[skuIndex.Value]);
                var barcode = PrepareValue(dataItem[barcodeIndex.Value]);
                var qtyInfo = allDSQtyItems.FirstOrDefault(q => q.SKU == sku || q.SKU.TrimStart('0') == sku);
                if (qtyInfo == null)
                {
                    qtyInfo = allDSQtyItems.FirstOrDefault(q => q.Barcode == barcode);
                }

                if (qtyInfo != null)
                {
                    dataItem[qtyIndex.Value] = (Math.Max(0, qtyInfo.Qty)).ToString();
                }
                else
                {
                    dataItem[qtyIndex.Value] = "0";
                }
            }

            //Write updates
            var newFilePath = Path.Combine(Path.GetDirectoryName(sourceFeed), Path.GetFileNameWithoutExtension(sourceFeed)
                                           + "-updated-at-" + DateHelper.GetAppNowTime().ToString("yyyyMMddHHmm") + ".csv");

            using (var output = File.Create(newFilePath))
            {
                using (TextWriter writer = new StreamWriter(output))
                {
                    var csv = new CsvWriter(writer);
                    csv.Configuration.Encoding = Encoding.UTF8;

                    foreach (var item in dataList)
                    {
                        foreach (var field in item)
                        {
                            csv.WriteField(field);
                        }
                        csv.NextRecord();
                    }

                    writer.Flush();
                }
            }

            var newFileName = Path.GetFileName(newFilePath);

            return(new CallMessagesResult <string>()
            {
                Data = UrlHelper.GetActualizeGrouponQtyUrl(newFileName).Trim("~".ToCharArray())
            });
        }
Exemple #12
0
        private void CreateListing(IDbFactory dbFactory,
                                   ILogService log,
                                   IAutoCreateListingService listingCreateService,
                                   string marketplaceId,
                                   string sku,
                                   string barcode,
                                   decimal price,
                                   decimal?shippingPrice,
                                   DateTime when)
        {
            var market = MarketType.Groupon;

            using (var db = dbFactory.GetRWDb())
            {
                var dbStyle = db.Styles.GetAll().FirstOrDefault(st => st.StyleID == sku && !st.Deleted);

                if (dbStyle == null)
                {
                    var dbStyleCandidates = (from st in db.Styles.GetAll()
                                             join si in db.StyleItems.GetAll() on st.Id equals si.StyleId
                                             join sib in db.StyleItemBarcodes.GetAll() on si.Id equals sib.StyleItemId
                                             where sib.Barcode == barcode &&
                                             !st.Deleted
                                             select st).ToList();

                    if (dbStyleCandidates.Count() > 1)
                    {
                        log.Error("Multiple style by barcode: " + barcode + ", sku=" + sku);
                    }
                    if (dbStyleCandidates.Count() == 1)
                    {
                        dbStyle = dbStyleCandidates[0];
                    }
                }

                //Check other marketplaces
                if (dbStyle == null)
                {
                    var dbListing = (from l in db.Listings.GetAll()
                                     join i in db.Items.GetAll() on l.ItemId equals i.Id
                                     where l.SKU == sku &&
                                     !l.IsRemoved &&
                                     i.StyleItemId.HasValue &&
                                     i.StyleId.HasValue
                                     orderby l.Market ascending
                                     select i)
                                    .FirstOrDefault();

                    if (dbListing != null)
                    {
                        dbStyle = db.Styles.Get(dbListing.StyleId.Value);
                    }
                }

                if (dbStyle != null)
                {
                    IList <MessageString> messages = new List <MessageString>();
                    log.Info("Create listing for style: " + dbStyle.StyleID);

                    var model = listingCreateService.CreateFromStyle(db,
                                                                     dbStyle.StyleID,
                                                                     price,
                                                                     MarketType.Groupon,
                                                                     marketplaceId,
                                                                     out messages);

                    model.Variations.ForEach(v => v.CurrentPrice            = price);
                    model.Variations.ForEach(v => v.ShippingPriceFromMarket = shippingPrice);

                    listingCreateService.Save(model,
                                              "",
                                              db,
                                              when,
                                              null);
                }
                else
                {
                    log.Info("Missing SKU=" + sku + ", barcode=" + barcode);
                }
            }
        }
Exemple #13
0
        public static void CopyToMarketplaces(IUnitOfWork db,
                                              ICacheService cache,
                                              IBarcodeService barcodeService,
                                              ISystemActionService actionService,
                                              IAutoCreateListingService autoCreateListingService,
                                              IItemHistoryService itemHistoryService,
                                              int id,
                                              DateTime when,
                                              long?by,
                                              IList <ItemMarketViewModel> toMarketplaces,
                                              out IList <MessageString> messages)
        {
            var parent = db.ParentItems.GetAsDTO(id);

            messages = new List <MessageString>();

            foreach (var toMarketplace in toMarketplaces)
            {
                var model = ItemEditViewModel.CreateFromParentASIN(db,
                                                                   autoCreateListingService,
                                                                   parent.ASIN,
                                                                   parent.Market,
                                                                   parent.MarketplaceId,
                                                                   false, //NOTE: false - ex.: exclude to copy FBP to Walmart
                                                                   out messages);

                model.Id            = null;
                model.Market        = toMarketplace.Market;
                model.MarketplaceId = toMarketplace.MarketplaceId;
                //model.OnHold = true;

                var parentBaseASIN = SkuHelper.RemoveSKULastIndex(model.ASIN);
                var parentIndex    = 0;
                while (db.ParentItems.GetAsDTO(parentBaseASIN + ((parentIndex == 0) ? "" : "-" + parentIndex), (MarketType)toMarketplace.Market, toMarketplace.MarketplaceId) != null)
                {
                    parentIndex++;
                }
                var parentSKU = parentBaseASIN + ((parentIndex == 0) ? "" : "-" + parentIndex);

                var forceReplace = model.VariationList.Any(s => (s.Size ?? "").Contains("/"));

                model.ASIN = parentSKU;

                foreach (var item in model.VariationList)
                {
                    item.Id = null;

                    if (model.Market == (int)MarketType.Walmart ||
                        model.Market == (int)MarketType.WalmartCA)
                    {
                        item.Barcode = null;
                        item.AutoGeneratedBarcode = true;
                    }

                    if (item.StyleItemId.HasValue)
                    {
                        var sourceUSDPrice = item.Price;
                        var fromCurrency   = PriceHelper.GetCurrencyAbbr((MarketType)parent.Market, parent.MarketplaceId);
                        if (fromCurrency != PriceHelper.USDSymbol)
                        {
                            sourceUSDPrice = PriceHelper.ConvertToUSD(item.Price, fromCurrency);
                        }

                        var rateForMarketplace = RateHelper.GetRatesByStyleItemId(db, item.StyleItemId.Value);
                        var newPrice           = RateHelper.CalculateForMarket((MarketType)toMarketplace.Market,
                                                                               toMarketplace.MarketplaceId,

                                                                               sourceUSDPrice,
                                                                               rateForMarketplace[MarketplaceKeeper.AmazonComMarketplaceId],
                                                                               rateForMarketplace[MarketplaceKeeper.AmazonCaMarketplaceId],
                                                                               rateForMarketplace[MarketplaceKeeper.AmazonUkMarketplaceId],
                                                                               rateForMarketplace[MarketplaceKeeper.AmazonAuMarketplaceId],
                                                                               RateService.GetMarketShippingAmount(MarketType.Amazon, MarketplaceKeeper.AmazonComMarketplaceId),
                                                                               RateService.GetMarketShippingAmount((MarketType)toMarketplace.Market, toMarketplace.MarketplaceId),
                                                                               RateService.GetMarketExtraAmount((MarketType)toMarketplace.Market, toMarketplace.MarketplaceId));

                        if (newPrice.HasValue)
                        {
                            item.Price = newPrice.Value;
                        }
                    }

                    if (db.Listings.CheckForExistenceSKU(item.SKU,
                                                         (MarketType)toMarketplace.Market,
                                                         toMarketplace.MarketplaceId))
                    {
                        var baseSKU = item.StyleString + "-" + SizeHelper.PrepareSizeForSKU(item.StyleSize, forceReplace);
                        var index   = parentIndex;

                        while (db.Listings.CheckForExistenceSKU(SkuHelper.SetSKUMiddleIndex(baseSKU, index),
                                                                (MarketType)toMarketplace.Market,
                                                                toMarketplace.MarketplaceId))
                        {
                            index++;
                        }

                        item.SKU = SkuHelper.SetSKUMiddleIndex(baseSKU, index);
                    }
                }

                model.Save(db,
                           cache,
                           barcodeService,
                           actionService,
                           itemHistoryService,
                           when,
                           by);
            }
        }