コード例 #1
0
        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);
            }
        }
コード例 #2
0
        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);
            }
        }
コード例 #3
0
        // 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);
                }
            }
        }
コード例 #4
0
 public void EditProductInformation(String newQuantity)
 {
     ProductLink.Click();
     ExistingQuantityField.Clear();
     ExistingQuantityField.SendKeys(newQuantity);
     InputComments();
     UpdateButton.Click();
 }
コード例 #5
0
        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;
                }
            }
        }
コード例 #6
0
ファイル: HomeController.cs プロジェクト: Burion/Jineo
        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) }));
        }
コード例 #7
0
        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);
            }
        }
コード例 #8
0
        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);
        }
コード例 #9
0
        /// <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);
            }
        }
コード例 #10
0
        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;
                }
            }
        }
コード例 #11
0
        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);
            }
        }