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 = variationVm.Name.ToUrlFriendly(); productLink.LinkedProduct.Price = variationVm.Price; productLink.LinkedProduct.OldPrice = variationVm.OldPrice; 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, SortIndex = combinationVm.SortIndex }); } productLink.LinkedProduct.ThumbnailImage = product.ThumbnailImage; product.AddProductLinks(productLink); } }
private static void MapProductLinkVmToProduct(ProductForm model, Product product) { foreach (var relatedProductVm in model.Product.RelatedProducts) { var productLink = new ProductLink { LinkType = ProductLinkType.Related, Product = product, LinkedProductId = relatedProductVm.Id }; product.AddProductLinks(productLink); } foreach (var crossSellProductVm in model.Product.CrossSellProducts) { var productLink = new ProductLink { LinkType = ProductLinkType.CrossSell, Product = product, LinkedProductId = crossSellProductVm.Id }; product.AddProductLinks(productLink); } }
// Due to some issue with EF Core, we have to use _productLinkRepository in this case. private void AddOrDeleteProductRelation(ProductForm model, Product product) { foreach (var productRelationVm in model.Product.RelatedProducts) { var productLink = product.ProductLinks.Where(x => x.LinkType == ProductLinkType.Relation).FirstOrDefault(x => x.LinkedProductId == productRelationVm.Id); if (productLink == null) { productLink = new ProductLink { LinkType = ProductLinkType.Relation, Product = product, LinkedProductId = productRelationVm.Id, }; _productLinkRepository.Add(productLink); } } foreach (var productLink in product.ProductLinks.Where(x => x.LinkType == ProductLinkType.Relation)) { if (model.Product.RelatedProducts.All(x => x.Id != productLink.LinkedProductId)) { _productLinkRepository.Remove(productLink); } } }
public void EditProductInformation(String newQuantity) { ProductLink.Click(); ExistingQuantityField.Clear(); ExistingQuantityField.SendKeys(newQuantity); InputComments(); UpdateButton.Click(); }
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 = new ProductLink { LinkType = ProductLinkType.Super, Product = product, LinkedProduct = product.Clone() }; productLink.LinkedProduct.Name = productVariationVm.Name; productLink.LinkedProduct.SeoTitle = StringHelper.ToUrlFriendly(productVariationVm.Name); productLink.LinkedProduct.Sku = productVariationVm.Sku; productLink.LinkedProduct.Gtin = productVariationVm.Gtin; productLink.LinkedProduct.Price = productVariationVm.Price; productLink.LinkedProduct.OldPrice = productVariationVm.OldPrice; productLink.LinkedProduct.NormalizedName = productVariationVm.NormalizedName; productLink.LinkedProduct.HasOptions = false; productLink.LinkedProduct.IsVisibleIndividually = false; productLink.LinkedProduct.ThumbnailImage = product.ThumbnailImage; foreach (var combinationVm in productVariationVm.OptionCombinations) { productLink.LinkedProduct.AddOptionCombination(new ProductOptionCombination { OptionId = combinationVm.OptionId, Value = combinationVm.Value, SortIndex = combinationVm.SortIndex }); } product.AddProductLinks(productLink); } else { productLink.LinkedProduct.Sku = productVariationVm.Sku; productLink.LinkedProduct.Gtin = productVariationVm.Gtin; productLink.LinkedProduct.Price = productVariationVm.Price; productLink.LinkedProduct.OldPrice = productVariationVm.OldPrice; 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; } } }
public async Task <IActionResult> AddLink(string store, string link, string price, string productId) { ProductLink _link = new ProductLink() { Link = link, Store = store, Price = float.Parse(price), ProductId = int.Parse(productId) }; ctx.ProductLinks.Add(_link); ctx.SaveChanges(); return(RedirectToAction("ItemPage", new { id = int.Parse(productId) })); }
private async Task MapProductVariationVmToProduct(User loginUser, 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.CreatedById = loginUser.Id; productLink.LinkedProduct.LatestUpdatedById = loginUser.Id; productLink.LinkedProduct.Name = variationVm.Name; productLink.LinkedProduct.Slug = variationVm.Name.ToUrlFriendly(); productLink.LinkedProduct.Sku = variationVm.Sku; productLink.LinkedProduct.Gtin = variationVm.Gtin; productLink.LinkedProduct.Price = variationVm.Price; productLink.LinkedProduct.OldPrice = variationVm.OldPrice; productLink.LinkedProduct.NormalizedName = variationVm.NormalizedName; productLink.LinkedProduct.HasOptions = false; productLink.LinkedProduct.IsVisibleIndividually = false; if (product.ThumbnailImage != null) { productLink.LinkedProduct.ThumbnailImage = new Media { FileName = product.ThumbnailImage.FileName }; } await MapProductVariantImageFromVm(variationVm, productLink.LinkedProduct); foreach (var combinationVm in variationVm.OptionCombinations) { productLink.LinkedProduct.AddOptionCombination(new ProductOptionCombination { OptionId = combinationVm.OptionId, Value = combinationVm.Value, SortIndex = combinationVm.SortIndex }); } var productPriceHistory = CreatePriceHistory(loginUser, productLink.LinkedProduct); product.PriceHistories.Add(productPriceHistory); product.AddProductLinks(productLink); } }
static Product ConvertLinkToProduct(ProductLink link) { Product result = new Product(); var info = ""; if (link.Info != null && link.Info.Length > 1) { info = link.Info.Trim(); RegexOptions options = RegexOptions.None; Regex regex = new Regex(@"[ ]{2,}", options); info = regex.Replace(info, @" "); string portion = info.Split('-')[0].Trim(); string valueInfo = info.Split('-')[1].Split('&')[0].Trim(); string[] valiueInfoWords = valueInfo.Replace("Калории:", "").Replace("Углев:", "") .Replace("Жир:", "").Replace("Белк:", "").Replace("ккал", "").Replace("г", "").Split('|'); string[] portionWords = portion.Split(' '); string value = ""; if (portionWords.Count() == 4) { double size = double.Parse(portionWords[3].Replace("(", "").Replace(")", "") .Replace("г", "")); return(new Product { Name = link.Name, CategoryId = link.CategoryId, ProductLinkId = link.Id, PortionName = portionWords[2], PortionSize = size, PortionAmount = double.Parse(portionWords[1]), Calories = double.Parse(valiueInfoWords[0]), Fats = double.Parse(valiueInfoWords[1]), Carbohydrates = double.Parse(valiueInfoWords[2]), Proteins = double.Parse(valiueInfoWords[3]) }); } } return(null); }
/// <summary> /// Restituisce una istanza della classe ProductLink che contiene informazioni /// e metodi di accesso ai prodotti correlati/associati al prodotto in input /// </summary> /// <param name="productId"></param> /// <returns></returns> public List <ProductLink> GetLinkedProducts(string productId) { var key = CreateCacheDictionaryKey(ConfigurationHelper.CacheKeyNames[CacheKey.LinkedProducts], productId); if (_cacheManager.Contains(key)) { return(_cacheManager.Get <List <ProductLink> >(key)); } try { var pId = int.Parse(productId); var linkedProducts = ProductLink.List(_connection.Url, _connection.SessionId, new object[] { "related", pId }); if (linkedProducts == null || !linkedProducts.Any()) { return(null); } _cacheManager.Add(key, linkedProducts.ToList()); return(linkedProducts.ToList()); } catch (Exception) { return(null); } }
private void AddOrDeleteProductVariation(User loginUser, 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 = new ProductLink { LinkType = ProductLinkType.Super, Product = product, LinkedProduct = product.Clone() }; productLink.LinkedProduct.CreatedById = loginUser.Id; productLink.LinkedProduct.LatestUpdatedById = loginUser.Id; productLink.LinkedProduct.Name = productVariationVm.Name; productLink.LinkedProduct.Slug = StringHelper.ToUrlFriendly(productVariationVm.Name); productLink.LinkedProduct.Sku = productVariationVm.Sku; productLink.LinkedProduct.Gtin = productVariationVm.Gtin; productLink.LinkedProduct.Price = productVariationVm.Price; productLink.LinkedProduct.OldPrice = productVariationVm.OldPrice; productLink.LinkedProduct.NormalizedName = productVariationVm.NormalizedName; productLink.LinkedProduct.HasOptions = false; productLink.LinkedProduct.IsVisibleIndividually = false; productLink.LinkedProduct.ThumbnailImage = product.ThumbnailImage; foreach (var combinationVm in productVariationVm.OptionCombinations) { productLink.LinkedProduct.AddOptionCombination(new ProductOptionCombination { OptionId = combinationVm.OptionId, Value = combinationVm.Value, SortIndex = combinationVm.SortIndex }); } var productPriceHistory = CreatePriceHistory(loginUser, productLink.LinkedProduct); productLink.LinkedProduct.PriceHistories.Add(productPriceHistory); product.AddProductLinks(productLink); } else { var isPriceChanged = false; if (productLink.LinkedProduct.Price != productVariationVm.Price || productLink.LinkedProduct.OldPrice != productVariationVm.OldPrice) { isPriceChanged = true; } productLink.LinkedProduct.LatestUpdatedById = loginUser.Id; productLink.LinkedProduct.LatestUpdatedOn = DateTimeOffset.Now; productLink.LinkedProduct.Sku = productVariationVm.Sku; productLink.LinkedProduct.Gtin = productVariationVm.Gtin; productLink.LinkedProduct.Price = productVariationVm.Price; productLink.LinkedProduct.OldPrice = productVariationVm.OldPrice; productLink.LinkedProduct.IsDeleted = false; productLink.LinkedProduct.StockTrackingIsEnabled = product.StockTrackingIsEnabled; if (isPriceChanged) { var productPriceHistory = CreatePriceHistory(loginUser, productLink.LinkedProduct); productLink.LinkedProduct.PriceHistories.Add(productPriceHistory); } } } 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; } } }
public Product GetProductInfo(ProductLink link) { Product result = new Product(); HtmlDocument document = new HtmlDocument(); document.LoadHtml(WebPage.GetPage(HostUrl + link.Link)); var portionValueContainer = document.DocumentNode.Descendants("td").SingleOrDefault( n => n.GetAttributeValue("class", "") == "label center strong"); if (portionValueContainer != null) { var portionValue = portionValueContainer.InnerText; if (portionValue != "100 г") { var portionTable = document.DocumentNode.Descendants("table").FirstOrDefault( n => n.GetAttributeValue("style", "") == "margin:0px;margin-top:5px;"); if (portionTable != null) { var defaultLink = portionTable.Descendants("a").SingleOrDefault(n => n.InnerText == "100 г"); if (defaultLink != null) { document.LoadHtml(WebPage.GetPage(HostUrl + defaultLink.GetAttributeValue("href", ""))); } else { not100counter++; Console.WriteLine(link.Name + ": " + portionValue); return(null); } } else { not100counter++; Console.WriteLine(link.Name + ": " + portionValue); return(null); } } portionValueContainer = document.DocumentNode.Descendants("td").SingleOrDefault( n => n.GetAttributeValue("class", "") == "label center strong"); portionValue = portionValueContainer.InnerText.Trim(); var energyValue = document.DocumentNode.Descendants("td") .SingleOrDefault(n => n.InnerText.Trim() == "Енергетическая ценность").NextSibling.NextSibling.InnerText.Trim() .Replace("\t", "").Replace("\r\n", " "); var carbohydratesValue = document.DocumentNode.Descendants("td") .SingleOrDefault(n => n.InnerText.Trim() == "Углеводы").NextSibling.NextSibling.InnerText.Trim(); var proteinsValue = document.DocumentNode.Descendants("td") .SingleOrDefault(n => n.InnerText.Trim() == "Белки").NextSibling.NextSibling.InnerText.Trim(); var fatsValue = document.DocumentNode.Descendants("td") .SingleOrDefault(n => n.InnerText.Trim() == "Жиры").NextSibling.NextSibling.InnerText.Trim(); return(new Product { Name = link.Name, ProductLinkId = link.Id, CategoryId = link.CategoryId, PortionName = portionValueContainer.InnerText.Split(' ')[2].Trim(), Calories = double.Parse(energyValue.Split(' ')[2], NumberStyles.Float), Carbohydrates = double.Parse(carbohydratesValue.Split(' ')[0], NumberStyles.Float), Proteins = double.Parse(proteinsValue.Split(' ')[0], NumberStyles.Float), Fats = double.Parse(fatsValue.Split(' ')[0], NumberStyles.Float), PortionSize = double.Parse(portionValue.Split(' ')[1], NumberStyles.Float) }); } else { errorCounter++; return(null); } }