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); }
/// <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); }