internal void ParseIngredients() { var parser = new IngredientsParser(); List <IngredientsParser.ParsedAnnotation> annotations = new List <IngredientsParser.ParsedAnnotation>(); var _parsedIngredients = parser.Parse(_currentProduct.DisplayIngredients, annotations); var translator = new IngredientLanguageNames(_repo); var nutrientTranslator = new NutrientLanguageNames(_repo); var euNumbers = new EUAdditiveLanguageNames(_repo); foreach (var parsedIngredient in _parsedIngredients.Ingredients) { Product.Ingredients.Add(new IngredientViewModel(parsedIngredient, Product)); } var additives = DetectEUNumbers(_parsedIngredients.Ingredients, euNumbers).OrderBy(w => w.EUNumber); foreach (var additive in additives) { Product.EUAdditives.Add(new EUAdditiveViewModel(additive.EUNumber, additive.DisplayName)); } var allergens = CollectAllergens(_parsedIngredients.Ingredients); foreach (var allergen in allergens) { Product.Allergens.Add(new AllergenViewModel(allergen.Name, allergen.DisplayName)); } ProcessNutrients(); Product.Translate(); }
private EUAdditiveViewModel DetectEUNumber(IngredientsParser.ParsedIngredient ingredient, EUAdditiveLanguageNames euNumbers) { var results = euNumbers.GetEUAdditiveNumber(ingredient.Name, Product.LanguageCode); if (results.Count() == 1) { return(new EUAdditiveViewModel(results.First().EUNumber, results.First().Name)); } return(null); }
private IEnumerable <EUAdditiveViewModel> DetectEUNumbers(IEnumerable <IngredientsParser.ParsedIngredient> ingredients, EUAdditiveLanguageNames euNumbers) { var detected = new List <EUAdditiveViewModel>(); if (ingredients != null) { foreach (var ingredient in ingredients) { var euNumber = DetectEUNumber(ingredient, euNumbers); if (euNumber != null) { //Product.EUAdditives.Add(euNumber); // todo: one or the other - this is nice for live detection detected.Add(euNumber); } detected.AddRange(DetectEUNumbers(ingredient.Ingredients, euNumbers)); } } return(detected); }