public static IEnumerable<ProductVariationOptionVm> GetVariationOption(Product variation) { if (variation == null) { return new List<ProductVariationOptionVm>(); } return variation.OptionCombinations.Select(x => new ProductVariationOptionVm { OptionName = x.Option.Name, Value = x.Value }); }
public Product Clone() { var product = new Product(); product.Name = Name; product.MetaTitle = MetaTitle; product.MetaKeywords = MetaKeywords; product.MetaDescription = MetaDescription; product.ShortDescription = ShortDescription; product.Description = Description; product.Specification = Specification; product.IsPublished = true; product.PublishedOn = DateTime.Now; product.Price = Price; product.OldPrice = OldPrice; product.BrandId = BrandId; foreach(var attribute in AttributeValues) { product.AddAttributeValue(new ProductAttributeValue { AttributeId = attribute.AttributeId, Value = attribute.Value }); } foreach(var category in Categories) { product.AddCategory(new ProductCategory { CategoryId = category.CategoryId }); } return product; }
private void SaveProductImages(ProductForm model, Product product) { if (model.ThumbnailImage != null) { var fileName = SaveFile(model.ThumbnailImage); if (product.ThumbnailImage != null) { product.ThumbnailImage.FileName = fileName; } else { product.ThumbnailImage = new Media { FileName = fileName }; } } // Currently model binder cannot map the collection of file productImages[0], productImages[1] foreach (var file in Request.Form.Files) { if (file.ContentDisposition.Contains("productImages")) { model.ProductImages.Add(file); } } foreach (var file in model.ProductImages) { var fileName = SaveFile(file); var productMedia = new ProductMedia { Product = product, Media = new Media { FileName = fileName } }; product.AddMedia(productMedia); } }
public IActionResult Create(ProductForm model) { if (!ModelState.IsValid) { return new BadRequestObjectResult(ModelState); } var product = new Product { Name = model.Product.Name, SeoTitle = StringHelper.ToUrlFriendly(model.Product.Name), ShortDescription = model.Product.ShortDescription, Description = model.Product.Description, Specification = model.Product.Specification, Price = model.Product.Price, OldPrice = model.Product.OldPrice, IsPublished = model.Product.IsPublished, BrandId = model.Product.BrandId, HasOptions = model.Product.Variations.Any() ? true : false, IsVisibleIndividually = true }; foreach (var option in model.Product.Options) { foreach (var value in option.Values) { product.AddOptionValue(new ProductOptionValue { Value = value, OptionId = option.Id }); } } foreach (var attribute in model.Product.Attributes) { var attributeValue = new ProductAttributeValue { AttributeId = attribute.Id, Value = attribute.Value }; product.AddAttributeValue(attributeValue); } foreach (var categoryId in model.Product.CategoryIds) { var productCategory = new ProductCategory { CategoryId = categoryId }; product.AddCategory(productCategory); } SaveProductImages(model, product); MapProductVariationVmToProduct(model, product); productService.Create(product); return Ok(); }
private void AddOrDeleteProductVariation(ProductForm model, Product product) { foreach (var productVariationVm in model.Product.Variations) { var productLink = product.ProductLinks.Where(x => x.LinkType == ProductLinkType.Super).FirstOrDefault(x => x.LinkedProduct.Name == productVariationVm.Name); if (productLink == null) { productLink = productLink = new ProductLink { LinkType = ProductLinkType.Super, Product = product, LinkedProduct = product.Clone() }; productLink.LinkedProduct.Name = productVariationVm.Name; productLink.LinkedProduct.SeoTitle = StringHelper.ToUrlFriendly(productVariationVm.Name); productLink.LinkedProduct.Price = productVariationVm.Price; productLink.LinkedProduct.NormalizedName = productVariationVm.NormalizedName; productLink.LinkedProduct.HasOptions = false; productLink.LinkedProduct.IsVisibleIndividually = false; foreach (var combinationVm in productVariationVm.OptionCombinations) { productLink.LinkedProduct.AddOptionCombination(new ProductOptionCombination { OptionId = combinationVm.OptionId, Value = combinationVm.Value }); } product.AddProductLinks(productLink); } else { productLink.LinkedProduct.Price = productVariationVm.Price; productLink.LinkedProduct.IsDeleted = false; } } foreach (var productLink in product.ProductLinks.Where(x => x.LinkType == ProductLinkType.Super)) { if (model.Product.Variations.All(x => x.Name != productLink.LinkedProduct.Name)) { productLinkRepository.Remove(productLink); productLink.LinkedProduct.IsDeleted = true; } } }
private void AddOrDeleteProductOption(ProductForm model, Product product) { foreach (var optionVm in model.Product.Options) { foreach (var value in optionVm.Values) { if (!product.OptionValues.Any(x => x.OptionId == optionVm.Id && x.Value == value)) { product.AddOptionValue(new ProductOptionValue { Value = value, OptionId = optionVm.Id }); } } } var deletedProductOptionValues = new List<ProductOptionValue>(); foreach (var productOptionValue in product.OptionValues) { var isExist = false; foreach (var optionVm in model.Product.Options) { foreach (var value in optionVm.Values) { if (productOptionValue.OptionId == optionVm.Id && productOptionValue.Value == value) { isExist = true; break; } } if (isExist) { break; } } if (!isExist) { deletedProductOptionValues.Add(productOptionValue); } } foreach (var productOptionValue in deletedProductOptionValues) { product.OptionValues.Remove(productOptionValue); productOptionValueRepository.Remove(productOptionValue); } }
private void AddOrDeleteProductAttribute(ProductForm model, Product product) { foreach (var productAttributeVm in model.Product.Attributes) { var productAttrValue = product.AttributeValues.FirstOrDefault(x => x.AttributeId == productAttributeVm.Id); if (productAttrValue == null) { productAttrValue = new ProductAttributeValue { AttributeId = productAttributeVm.Id, Value = productAttributeVm.Value }; product.AddAttributeValue(productAttrValue); } else { productAttrValue.Value = productAttributeVm.Value; } } var deletedAttrValues = product.AttributeValues.Where(attrValue => model.Product.Attributes.All(x => x.Id != attrValue.AttributeId)) .ToList(); foreach (var deletedAttrValue in deletedAttrValues) { deletedAttrValue.Product = null; product.AttributeValues.Remove(deletedAttrValue); productAttributeValueRepository.Remove(deletedAttrValue); } }
private void AddOrDeleteCategories(ProductForm model, Product product) { foreach (var categoryId in model.Product.CategoryIds) { if (product.Categories.Any(x => x.CategoryId == categoryId)) { continue; } var productCategory = new ProductCategory { CategoryId = categoryId }; product.AddCategory(productCategory); } var deletedProductCategories = product.Categories.Where(productCategory => !model.Product.CategoryIds.Contains(productCategory.CategoryId)) .ToList(); foreach (var deletedProductCategory in deletedProductCategories) { deletedProductCategory.Product = null; product.Categories.Remove(deletedProductCategory); productCategoryRepository.Remove(deletedProductCategory); } }
private static void MapProductVariationVmToProduct(ProductForm model, Product product) { foreach (var variationVm in model.Product.Variations) { var productLink = new ProductLink { LinkType = ProductLinkType.Super, Product = product, LinkedProduct = product.Clone() }; productLink.LinkedProduct.Name = variationVm.Name; productLink.LinkedProduct.SeoTitle = StringHelper.ToUrlFriendly(variationVm.Name); productLink.LinkedProduct.Price = variationVm.Price; productLink.LinkedProduct.NormalizedName = variationVm.NormalizedName; productLink.LinkedProduct.HasOptions = false; productLink.LinkedProduct.IsVisibleIndividually = false; foreach (var combinationVm in variationVm.OptionCombinations) { productLink.LinkedProduct.AddOptionCombination(new ProductOptionCombination { OptionId = combinationVm.OptionId, Value = combinationVm.Value }); } productLink.LinkedProduct.ThumbnailImage = product.ThumbnailImage; product.AddProductLinks(productLink); } }