public void AddMenuItem(TeamFoodMenuItem menuItem)
 {
     if (menuItem == null)
     {
         throw new Exception("Falsche Daten für MenuItem");
     }
     menuItems.Add(menuItem);
 }
        public void AddMenuItem(Wochentage day, TeamFoodMenuItem menuItem)
        {
            if (menuItem == null)
            {
                throw new Exception("Falsche Daten für MenuItem");
            }
            if (!Enum.IsDefined(typeof(Wochentage), day))
            {
                throw new Exception("Ungültiger Wochentag angegeben.");
            }

            TeamFoodDay teamFoodDay;

            teamFoodDay = days.Find(x => x.Wochentag == day);
            if (teamFoodDay == null)
            {
                teamFoodDay = new TeamFoodDay(day);
                days.Add(teamFoodDay);
            }

            teamFoodDay.AddMenuItem(menuItem);
        }
Esempio n. 3
0
        /// <summary>
        /// Hole Menü aus HTML Knoten
        /// </summary>
        /// <param name="contentNode"></param>
        /// <returns></returns>
        static List <TeamFoodMenu> GetMenuFromContent(HtmlNode contentNode)
        {
            List <TeamFoodMenu> menu = new List <TeamFoodMenu>();
            Regex kwPattern          = new Regex("(?<=KW )\\d{2}");
            Regex datePattern        = new Regex("\\d{1,2}.\\d{1,2}.\\d{4}");

            NumberStyles style    = NumberStyles.AllowDecimalPoint;
            CultureInfo  provider = new CultureInfo("en-US");

            string[] foodTypes = Enum.GetNames(typeof(FoodType));


            // Speisepläne
            var tables  = contentNode.SelectNodes("table");
            var headers = contentNode.SelectNodes("h3");

            if (headers.Count < tables.Count)
            {
                throw new Exception("Fehler beim Aufbau der Tabelle (zu wenige Überschriften).");
            }

            for (int i = 0; i < tables.Count; i++)
            {
                DateTime start;
                DateTime end;
                int      kw;

                // Kalenderwoche
                string headerText = headers[i].InnerText;
                var    kwMatch    = kwPattern.Match(headerText);
                kw = int.Parse(kwMatch.Value);

                // Start- und Enddatum
                var dates = datePattern.Matches(headers[i].InnerText);
                if (dates.Count != 2)
                {
                    continue;
                    //throw new Exception("Fehler beim Parsen von Anfangs- und Enddatum");
                }
                start = DateTime.Parse(dates[0].Value);
                end   = DateTime.Parse(dates[1].Value);

                TeamFoodMenu newMenu = new TeamFoodMenu(kw, start, end);

                // Gehe durch alle Tabellenzeilen
                var        trs        = tables[i].SelectNodes("tr");
                Wochentage currentDay = Wochentage.Montag;

                foreach (var tr in trs)
                {
                    var tds = tr.SelectNodes("td");

                    if (tds[0].InnerText == "Tag")
                    {
                        continue;
                    }

                    TeamFoodMenuItem newMenuItem = new TeamFoodMenuItem();

                    // Extrahiere Wochentag
                    Wochentage parsedDay;
                    if (Enum.TryParse <Wochentage>(tds[0].InnerText, out parsedDay))
                    {
                        currentDay = parsedDay;
                    }

                    // Gericht
                    newMenuItem.Description = WebUtility.HtmlDecode(tds[1].InnerText);

                    // Typ / Fleischart
                    string   type     = WebUtility.HtmlDecode(tds[2].InnerText);
                    FoodType foodType = 0;

                    // Gehe alle Namen der FoodTypes durch und füge die hinzu, die im Text vorkommen
                    for (int t = 0; t < foodTypes.Count(); t++)
                    {
                        if (type.Contains(foodTypes[t]))
                        {
                            foodType |= (FoodType)Enum.Parse(typeof(FoodType), foodTypes[t], true);
                            //foodType |= Enum.Parse<FoodType>(foodTypes[t], true);
                        }
                    }
                    // Falls keine FoodTypes im Text gefunden wurden, setze auf "Andere"
                    if (foodType == 0)
                    {
                        foodType = FoodType.Andere;
                    }
                    newMenuItem.Type = foodType;

                    // Preis
                    string  priceString = tds[3].InnerText.TrimEnd('€');
                    decimal price       = 0;
                    decimal.TryParse(priceString, style, provider, out price);
                    newMenuItem.Price = price;

                    // Beilage
                    string side = WebUtility.HtmlDecode(tds[4].InnerText);
                    if (side != "-")
                    {
                        newMenuItem.SideDish = side;
                    }

                    // Zusatzstoffe
                    string additives = tds[5].InnerText;
                    if (additives.Contains(","))
                    {
                        int[] additivesArray = Array.ConvertAll(additives.Split(','), int.Parse);
                        newMenuItem.Additives = additivesArray.ToList();
                    }
                    else
                    {
                        newMenuItem.Additives = new List <int>();
                        int add;
                        if (int.TryParse(additives, out add))
                        {
                            newMenuItem.Additives.Add(add);
                        }
                    }


                    newMenu.AddMenuItem(currentDay, newMenuItem);
                }

                menu.Add(newMenu);
            }

            return(menu);
        }