public void CreateGrouponListings(string filename) { var skuPriceInfo = LoadItems(filename); var targetMarket = MarketType.Groupon; string targetMarketplaceId = null; using (var db = _dbFactory.GetRWDb()) { var styleIds = skuPriceInfo.Select(i => i.SKU).ToList(); var dtoStyleList = db.Styles.GetAllAsDto().Where(st => styleIds.Contains(st.StyleID) && !st.Deleted).ToList(); var existMarketItems = db.Items.GetAll().Where(i => i.Market == (int)targetMarket && (i.MarketplaceId == targetMarketplaceId || String.IsNullOrEmpty(targetMarketplaceId))) .ToList(); IList <MessageString> messages; foreach (var style in dtoStyleList) { if (existMarketItems.Any(i => i.StyleId == style.Id)) { continue; } var priceInfo = skuPriceInfo.FirstOrDefault(s => s.SKU == style.StyleID); var model = _autoCreateListingService.CreateFromStyle(db, style.Id, targetMarket, targetMarketplaceId, out messages); model.Market = (int)MarketType.Groupon; model.MarketplaceId = ""; if (model.Variations.Select(i => i.StyleId).Distinct().Count() != 1) { _log.Info("Parent ASIN is multilisting"); continue; } model.Variations.ForEach(v => { if (String.IsNullOrEmpty(v.Barcode)) { v.AutoGeneratedBarcode = true; } }); model.Variations.ForEach(v => v.CurrentPrice = (priceInfo?.CurrentPrice > 0 ? (priceInfo?.CurrentPrice ?? 99) : 99)); _autoCreateListingService.PrepareData(model); _autoCreateListingService.Save(model, null, db, _time.GetAppNowTime(), null); } } }
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 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 void CreatePAonMBGListings(string filename) { //var skuPriceInfo = ExcelReader.LoadPrices(filename, 0, 1); var targetMarket = MarketType.DropShipper; string targetMarketplaceId = MarketplaceKeeper.DsToMBG; using (var db = _dbFactory.GetRWDb()) { var styleIds = new List <string>() { "GS20053SS", "TS20054SS", "WS20052SS", "GS20056SS", "WS20055SS", "TS20057SS" };// skuPriceInfo.Select(i => i.SKU).ToList(); var skuPriceInfo = (from i in db.Items.GetAll() join l in db.Listings.GetAll() on i.Id equals l.ItemId where i.StyleId.HasValue group new { i, l } by i.StyleId into byStyleId select new ItemDTO { StyleId = byStyleId.Key, CurrentPrice = byStyleId.Max(l => l.l.CurrentPrice) }).ToList(); var dtoStyleList = db.Styles.GetAllAsDto().Where(st => styleIds.Contains(st.StyleID) && !st.Deleted).ToList(); var existMarketItems = db.Items.GetAll().Where(i => i.Market == (int)targetMarket && (i.MarketplaceId == targetMarketplaceId || String.IsNullOrEmpty(targetMarketplaceId))) .ToList(); IList <MessageString> messages; foreach (var style in dtoStyleList) { if (existMarketItems.Any(i => i.StyleId == style.Id)) { continue; } var priceInfo = skuPriceInfo.FirstOrDefault(s => s.StyleId == style.Id); var model = _autoCreateListingService.CreateFromStyle(db, style.Id, targetMarket, targetMarketplaceId, out messages); model.Market = (int)targetMarket; model.MarketplaceId = targetMarketplaceId; if (model.Variations.Select(i => i.StyleId).Distinct().Count() != 1) { _log.Info("Parent ASIN is multilisting"); continue; } model.Variations.ForEach(v => { if (String.IsNullOrEmpty(v.Barcode)) { v.AutoGeneratedBarcode = true; } }); model.Variations.ForEach(v => v.CurrentPrice = (priceInfo?.CurrentPrice > 0 ? (priceInfo?.CurrentPrice ?? 99) : 99)); _autoCreateListingService.PrepareData(model); _autoCreateListingService.Save(model, null, db, _time.GetAppNowTime(), null); } } }