private static void CreateGroupedProductVariants(NopImportContext nopImportContext, HashSet <ProductOptionValueData> productOptionValueDatas, ProductVariantData variantData, Product product) { IEnumerable <IGrouping <int, ProductOptionValueData> > groups = productOptionValueDatas.GroupBy(data => data.OptionId); var cartesianProductList = CartesianProduct(groups).ToList(); for (int index = 0; index < cartesianProductList.Count; index++) { var cartesianProduct = cartesianProductList[index]; CreateCartesianProductVariant(nopImportContext, variantData, product, cartesianProduct, index); } }
public List<ProductVariantData> Process_GetVariants() { List<ProductVariantData> aVariants = new List<ProductVariantData>(); if (this.ucItem.ItemData != null) { List<Object> newItems = new List<Object>(); newItems = (List<Object>)this.ucItem.ItemData; for (int i = 0; i <= (newItems.Count - 1); i++) { Ektron.Cms.Commerce.Workarea.CatalogEntry.Tabs.ClientData.ItemData newProduct = (Ektron.Cms.Commerce.Workarea.CatalogEntry.Tabs.ClientData.ItemData)newItems[i]; if (newProduct != null && newProduct.MarkedForDelete == false) { ProductVariantData ProductVariant = new ProductVariantData(); ProductVariant.Id = newProduct.Id; ProductVariant.LanguageId = this.ContentLanguage; aVariants.Add(ProductVariant); } } } return aVariants; }
private static void CreateCartesianProductVariant(NopImportContext nopImportContext, ProductVariantData variantData, Product product, IEnumerable <ProductOptionValueData> cartesianProduct, int index) { var variant = new ProductVariant { Name = variantData.Name, SKU = variantData.SKU + "-" + (index + 1), Weight = variantData.Weight, TrackingPolicy = variantData.TrackingPolicy, StockRemaining = variantData.StockRemaining, RequiresShipping = variantData.RequiresShipping, AllowedNumberOfDaysForDownload = variantData.DownloadDays, AllowedNumberOfDownloads = variantData.MaxDownloads, IsDownloadable = variantData.Download, BasePrice = variantData.BasePrice, DownloadFileUrl = variantData.DownloadUrl, GiftCardType = variantData.GiftCardType, IsGiftCard = variantData.GiftCard, Product = product, PreviousPrice = variantData.PreviousPrice, ManufacturerPartNumber = variantData.PartNumber, TaxRate = nopImportContext.FindNew <TaxRate>(variantData.TaxRate) }; foreach (ProductOptionValueData valueData in cartesianProduct) { variant.Weight += valueData.WeightAdjustment; variant.BasePrice += valueData.PriceAdjustment; var productOptionValue = new ProductOptionValue { ProductVariant = variant, Value = valueData.Value, ProductOption = nopImportContext.FindNew <ProductOption>(valueData.OptionId) }; variant.OptionValues.Add(productOptionValue); if (!product.Options.Contains(productOptionValue.ProductOption)) { product.Options.Add(productOptionValue.ProductOption); } nopImportContext.AddEntry(valueData.Id, productOptionValue); } product.Variants.Add(variant); nopImportContext.AddEntry(variantData.Id, variant); }
private static void CreateStandardProductVariant(NopImportContext nopImportContext, ProductVariantData variantData, Product product) { var variant = new ProductVariant { Name = variantData.Name, SKU = variantData.SKU, Weight = variantData.Weight, TrackingPolicy = variantData.TrackingPolicy, StockRemaining = variantData.StockRemaining, RequiresShipping = variantData.RequiresShipping, AllowedNumberOfDaysForDownload = variantData.DownloadDays, AllowedNumberOfDownloads = variantData.MaxDownloads, IsDownloadable = variantData.Download, BasePrice = variantData.BasePrice, DownloadFileUrl = variantData.DownloadUrl, GiftCardType = variantData.GiftCardType, IsGiftCard = variantData.GiftCard, Product = product, PreviousPrice = variantData.PreviousPrice, ManufacturerPartNumber = variantData.PartNumber, TaxRate = nopImportContext.FindNew <TaxRate>(variantData.TaxRate) }; product.Variants.Add(variant); nopImportContext.AddEntry(variantData.Id, variant); }
public override HashSet <ProductData> GetProducts() { using (Nop280DataContext context = GetContext()) { HashSet <Nop280_Product> products = context.Nop280_Products.Where(x => !x.Deleted).ToHashSet(); Dictionary <int, Nop280_UrlRecord> urlRecords = context.Nop280_UrlRecords.Where(x => x.EntityName == "Product") .ToHashSet().GroupBy(x => x.EntityId) .ToDictionary(x => x.Key, x => x.First()); HashSet <Nop280_ProductVariant> productVariants = context.Nop280_ProductVariants.Where(x => !x.Deleted).ToHashSet(); return(products.Select(product => { int?brandId = product.Nop280_Product_Manufacturer_Mappings.Select(mapping => (int?)mapping.ManufacturerId) .FirstOrDefault(); var productData = new ProductData { Name = product.Name, Id = product.Id, Abstract = product.ShortDescription, Description = product.FullDescription, BrandId = brandId, Tags = product.Nop280_Product_ProductTag_Mappings.Select(mapping => mapping.ProductTag_Id) .ToHashSet(), Categories = product.Nop280_Product_Category_Mappings.Select(mapping => mapping.CategoryId).ToHashSet(), Pictures = product.Nop280_Product_Picture_Mappings.Select(mapping => mapping.PictureId).ToHashSet(), Published = product.Published, Url = urlRecords.ContainsKey(product.Id) ? urlRecords[product.Id].Slug : null }; productData.ProductVariants = productVariants .Where(variant => variant.ProductId == product.Id) .Select(variant => { var productVariantData = new ProductVariantData { Name = variant.Name, Id = variant.Id, BasePrice = variant.Price, PreviousPrice = variant.OldPrice, SKU = string.IsNullOrWhiteSpace(variant.Sku) ? variant.Id.ToString() : variant.Sku, StockRemaining = variant.StockQuantity, TrackingPolicy = variant.ManageInventoryMethodId == 0 ? TrackingPolicy.DontTrack : TrackingPolicy.Track, TaxRate = variant.TaxCategoryId, Weight = variant.Weight, PartNumber = variant.ManufacturerPartNumber, Gtin = variant.Gtin, Download = variant.IsDownload, GiftCard = variant.IsGiftCard, GiftCardType = variant.GiftCardTypeId == 0 ? GiftCardType.Virtual : GiftCardType.Physicial, RequiresShipping = variant.IsShipEnabled, MaxDownloads = variant.MaxNumberOfDownloads, DownloadDays = variant.DownloadExpirationDays, DownloadUrl = variant.Nop280_Download == null ? null : variant.Nop280_Download.DownloadUrl, PriceBreaks = variant.Nop280_TierPrices.Select(price => new PriceBreakInfo { Price = price.Price, Quantity = price.Quantity }).ToHashSet() }; return productVariantData; }).ToHashSet(); return productData; }).ToHashSet()); } }
public override HashSet <ProductData> GetProducts() { using (Nop190DataContext context = GetContext()) { HashSet <Nop190_Product> products = context.Nop190_Products.Where(x => !x.Deleted).ToHashSet(); // GM: UrlRecord is new table //Dictionary<int, Nop190_UrlRecord> urlRecords = // context.Nop190_UrlRecords.Where(x => x.EntityName == "Product") // .ToHashSet().GroupBy(x => x.EntityId) // .ToDictionary(x => x.Key, x => x.First()); Dictionary <int, HashSet <Nop190_ProductVariant> > productVariants = context.Nop190_ProductVariants.Where(x => !x.Deleted).ToHashSet() .GroupBy(x => x.ProductID) .ToDictionary(x => x.Key, x => x.ToHashSet()); var brandIds = context.Nop190_Product_Manufacturer_Mappings.GroupBy(x => x.ProductID) .ToDictionary(x => x.Key, x => x.First().ProductManufacturerID); var productTags = context.Nop190_ProductTag_Product_Mappings.GroupBy(x => x.ProductID) .ToDictionary(x => x.Key, x => x.Select(y => y.ProductTagID).ToHashSet()); var productCategories = context.Nop190_Product_Category_Mappings.GroupBy(x => x.ProductID) .ToDictionary(x => x.Key, x => x.Select(y => y.ProductCategoryID).ToHashSet()); var productPictures = context.Nop190_ProductPictures.GroupBy(x => x.ProductID) .ToDictionary(x => x.Key, x => x.Select(y => y.PictureID).ToHashSet()); var tierPriceDictionary = context.Nop190_TierPrices.ToHashSet().GroupBy(x => x.ProductVariantID) .ToDictionary(x => x.Key, x => x.ToHashSet()); return(products.Select(product => { var id = product.ProductId; int?brandId = brandIds.ContainsKey(id) ? brandIds[id] : (int?)null; var productData = new ProductData { Name = product.Name, Id = id, Abstract = product.ShortDescription, Description = product.FullDescription, BrandId = brandId, Tags = productTags.ContainsKey(id) ? productTags[id] : new HashSet <int>(), Categories = productCategories.ContainsKey(id) ? productCategories[id] : new HashSet <int>(), Pictures = productPictures.ContainsKey(id) ? productPictures[id] : new HashSet <int>(), Published = product.Published, Url = Ecommerce.Helpers.NopImport.SeoHelper.GetSeoUrl("Product", id, product.SEName, product.Name), }; var variants = productVariants.ContainsKey(id) ? productVariants[id] : new HashSet <Nop190_ProductVariant>(); productData.ProductVariants = variants .Select(variant => { Nop190_Download download = context.Nop190_Downloads.FirstOrDefault(x => x.DownloadID == variant.DownloadID); var tierPrices = tierPriceDictionary.ContainsKey(variant.ProductVariantId) ? tierPriceDictionary[variant.ProductVariantId] : new HashSet <Nop190_TierPrice>(); var productVariantData = new ProductVariantData { Name = variant.Name, Id = variant.ProductVariantId, BasePrice = variant.Price, PreviousPrice = variant.OldPrice, SKU = string.IsNullOrWhiteSpace(variant.SKU) ? variant.ProductVariantId.ToString() : variant.SKU, StockRemaining = variant.StockQuantity, TrackingPolicy = variant.ManageInventory == 0 ? TrackingPolicy.DontTrack : TrackingPolicy.Track, TaxRate = variant.TaxCategoryID, Weight = variant.Weight, PartNumber = variant.ManufacturerPartNumber, //Gtin = variant.Gtin, // GM: Gtin is new field Download = variant.IsDownload, GiftCard = variant.IsGiftCard, GiftCardType = variant.GiftCardType == 0 ? GiftCardType.Virtual : GiftCardType.Physicial, RequiresShipping = variant.IsShipEnabled, MaxDownloads = variant.MaxNumberOfDownloads, DownloadDays = variant.DownloadExpirationDays, DownloadUrl = download == null ? null : download.DownloadURL, PriceBreaks = tierPrices.Select(price => new PriceBreakInfo { Price = price.Price, Quantity = price.Quantity }).ToHashSet() }; return productVariantData; }).ToHashSet(); return productData; }).ToHashSet()); } }
private static ProductVariant CreateStandardProductVariant(NopImportContext nopImportContext, ProductVariantData variantData, Product product) { var variant = new ProductVariant { Name = variantData.Name, SKU = variantData.SKU, Weight = variantData.Weight, TrackingPolicy = variantData.TrackingPolicy, StockRemaining = variantData.StockRemaining, RequiresShipping = variantData.RequiresShipping, AllowedNumberOfDaysForDownload = variantData.DownloadDays, AllowedNumberOfDownloads = variantData.MaxDownloads, IsDownloadable = variantData.Download, BasePrice = variantData.BasePrice, DownloadFileUrl = variantData.DownloadUrl, GiftCardType = variantData.GiftCardType, IsGiftCard = variantData.GiftCard, Product = product, PreviousPrice = variantData.PreviousPrice, ManufacturerPartNumber = variantData.PartNumber, TaxRate = nopImportContext.FindNew <TaxRate>(variantData.TaxRate), PriceBreaks = variantData.PriceBreaks.Select(price => new PriceBreak { Price = price.Price, Quantity = price.Quantity }).ToList() }; if (variantData.PriceBreaks.Count > 0) { product.Variants.Add(variant); } else { product.Variants.Add(variant); } nopImportContext.AddEntry(variantData.Id, variant); return(variant); }