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); }
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); }
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; }
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); }
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); }
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); }
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); }
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)); } } }
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()) }); }
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); } } }
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); } }