/// <summary> /// /// </summary> /// <returns></returns> public PartialViewResult CurrentCourses(string location) { var now = DateTime.Now; var maxEntries = 14; var model = new InfoscreenModel(); var fk = location; var nowPlaying = Db.ActivityDates.Where(d => d.Activity.Organiser.ShortName.Equals(fk) && d.Begin <= now && now < d.End).OrderBy(d => d.Begin).ThenBy(d => d.End).ToList(); model.NowPlayingDates = nowPlaying.Where(date => date.Activity is Course).Take(maxEntries).ToList(); return(PartialView("_CurrentCourses", model)); }
/// <summary> /// /// </summary> /// <returns></returns> public PartialViewResult FreeRooms(string location) { var model = new InfoscreenModel(); var fk = location; var b = "R"; if (location.Equals("FK 10")) { b = "L"; } else if (location.Equals("FK 11")) { b = "K"; } var roomService = new MyStik.TimeTable.Web.Services.RoomService(); var fk09 = Db.Organisers.SingleOrDefault(o => o.ShortName.Equals(fk)); if (fk09 != null) { var allRooms = roomService.GetAvaliableRoomsNow(fk09.Id, 45); // nur R-Bau model.CurrentFreeRooms = allRooms.Where(r => r.Room.Number.StartsWith(b)).OrderBy(r => r.Room.Number).Take(14).ToList(); var nextRooms = roomService.GetAvaliableRoomsNext(fk09.Id, 15, 45); // aus nextRooms alle rauswerfen, die in allrooms schon drin sind var additionalFreeRooms = nextRooms.Where(room => allRooms.All(r => r.Room.Id != room.Room.Id)).ToList(); model.NextFreeRooms = additionalFreeRooms.Where(r => r.Room.Number.StartsWith(b)).OrderBy(r => r.Room.Number).Take(14).ToList(); } else { model.CurrentFreeRooms = new List <RoomInfoModel>(); model.NextFreeRooms = new List <RoomInfoModel>(); } return(PartialView("_FreeRooms", model)); }
/// <summary> /// /// </summary> /// <returns></returns> public PartialViewResult NextCourses(string location) { var now = DateTime.Now; var maxEntries = 14; var model = new InfoscreenModel(); var fk = location; // die nächste sind die, die am selben Tag noch beginnen var endOfDay = DateTime.Today.AddDays(1); var upComing = Db.ActivityDates.Where(d => d.Activity.Organiser.ShortName.Equals(fk) && d.Begin > now && d.Begin < endOfDay).OrderBy(d => d.Begin).ThenBy(d => d.End).ToList(); model.UpcomingDates = upComing.Where(date => date.Activity is Course).Take(maxEntries).ToList(); return(PartialView("_NextCourses", model)); }
/// <summary> /// Aktueller Mensaspeiseplan /// </summary> /// <returns></returns> public PartialViewResult Mensa(string location) { var model = new InfoscreenModel(); // TODO: Abfrage des Mensaplans var m = new MensaViewModel(); var daten = ""; // download mensa daten // Speiseplan das aktuellen Tages try { if (location.Equals("FK 10") || location.Equals("FK 11")) { daten = GetResult("http://openmensa.org/api/v2/canteens/142/meals"); } else { daten = GetResult("http://openmensa.org/api/v2/canteens/141/meals"); } } catch (Exception ex) { daten = ""; // Fehlerfall ViewBag.Datum = ex.Message.ToString(); } // Wenn Inhalt in daten vorhanden if (daten != "") { var alleElemente = JToken.Parse(daten); // Text als JSON parsen // Neue Liste erstellen m.Tage = new List <MensaView_Tag>(); // alle Elemente auslesen foreach (var Element in alleElemente) { // Tage auslesen var tag = new MensaView_Tag { date = (string)Element["date"], closed = (string)Element["closed"], meals = new List <MensaView_Meal>() }; // Meals auslesen foreach (var Meal in Element["meals"]) { var tmp_notes = new List <string>(); foreach (string value in Meal["notes"].Values()) { tmp_notes.Add((string)value); } var pri = new MensaView_Prices { price_student = parsePrice((string)Meal["prices"]["students"]), price_employees = parsePrice((string)Meal["prices"]["employees"]), price_others = parsePrice((string)Meal["prices"]["others"]), price_pupils = parsePrice((string)Meal["prices"]["pupils"]) }; var meal = new MensaView_Meal { id = (int)Meal["id"], name = (string)Meal["name"], category = (string)Meal["category"], prices = pri, notes = tmp_notes }; tag.meals.Add(meal); } m.Tage.Add(tag); } model.SpeiseplanHeute = m.Tage.FirstOrDefault(); } // wenn es keine Daten gibt, dann doch lieber MVG aufrufen if (model.SpeiseplanHeute == null) { return(MVG(location)); } // 3. Model an den View übergeben return(PartialView("_Mensa", model)); }
/// <summary> /// Aktuelle Abfahrtszeiten MVG /// Haltestelle Lothstrasse (Hochschule München) /// </summary> /// <returns></returns> public PartialViewResult MVG(string location) { var model = new InfoscreenModel(); // TODO: Abfrage MVV model.MVVallDepartures = new List <MvvViewModel>(); var url = ""; if (location.Equals("FK 10") || location.Equals("FK 11")) { url = "http://www.mvg-live.de/ims/dfiStaticAnzeige.svc?haltestelle=Avenariusplatz&ubahn=checked&bus=checked&tram=checked&sbahn=checked"; } else { url = "http://www.mvg-live.de/ims/dfiStaticAnzeige.svc?haltestelle=Hochschule+M%fcnchen+(Lothstra%dfe)&ubahn=checked&bus=checked&tram=checked&sbahn=checked"; } var req = (HttpWebRequest)WebRequest.Create(url); req.Method = "GET"; var res = (HttpWebResponse)req.GetResponse(); // Verwendung des HTML Agility Package zum Parsen des HTMLs var doc = new HtmlDocument(); doc.Load(res.GetResponseStream()); // geht! // erste und letzte Zeile der Tabelle müssen ignoriert werden // Alle <tr> Elemente im ganzen HTML-Dokument auswählen //var trNodes = doc.DocumentNode.SelectNodes("//tr").Take(10).ToList(); var trNodes = doc.DocumentNode.SelectNodes("//tr").ToList(); // Es ist bekannt: das erste Element und die beiden letzten Elemente enthalten keine Abfahrtszeiten for (var i = 1; i < trNodes.Count - 2; i++) { // pro <tr>-Element alle <td>-Elemente auswählen var tdNodes = trNodes[i].SelectNodes("td"); // Zur Sicherheit: nur <tr>-Elemente, die exakt 3 <td>-Elemente besitzen nehmen if (tdNodes.Count == 3) { // im Ziel steht ggf. noch Leerzeichen drin => löschen var ziel = tdNodes[1].InnerText; ziel = ziel.Replace(" ", "").Trim(); // Das Objekt aufbauem var mvv = new MvvViewModel { Liniennummer = tdNodes[0].InnerText, Richtung = ziel, AbfahrtszeitInMin = int.Parse(tdNodes[2].InnerText) }; // Das Objekt zur Liste hinzufügen model.MVVallDepartures.Add(mvv); } } return(PartialView("_MVG", model)); }