public bool AddScheduleSubjectsByClassId(ScheduleSubjectOfClassDto dto) { try { if (!IsValidInput(dto)) { return(false); } foreach (var item in dto.ScheduleSubjects) { var schedule = new ScheduleSubject { TeacherId = item.TeacherId, ClassId = dto.ClassId, SubjectId = item.SubjectId, SemesterId = dto.SemesterId, DayLessonId = GetDayLessonId(item.DayOfWeek, item.Lesson) }; db.ScheduleSubjects.Add(schedule); } db.SaveChanges(); return(true); } catch (Exception) { return(false); } }
/// <summary> /// Parse single subject /// </summary> /// <param name="subject"> Single subject in HTML format </param> /// <returns> ScheduleSubject object </returns> public ScheduleSubject LoadSubject(HtmlNode subject) { HtmlNode dataDiv = subject .ChildNodes .Single(x => x.Name == "div") .ChildNodes .Single(x => x.Name == "div"); try { if (dataDiv.GetClasses().FirstOrDefault() == null) { return(null); } else if (dataDiv.GetClasses().First() == "empty") { return(null); } } catch (Exception e) { MessageBox.Show("NEZNÁMÝ PŘEDMĚT \n\n" + e.ToString()); throw new Exception("Subject cannot be parsed"); } string data = dataDiv.Attributes["data-detail"].Value; ScheduleSubject scheduleSubject = JsonConvert.DeserializeObject <ScheduleSubject>(data); scheduleSubject.ShortName = dataDiv .ChildNodes .Single(x => x.Name == "div") .ChildNodes .Where(x => x.Name == "div") .ToList()[1] .InnerText; return(scheduleSubject); }
public UIElement GenerateTooltip(ScheduleSubject scheduleSubject) { string tooltipContent = (scheduleSubject.Teacher != "" ? $"Učitel: {scheduleSubject.Teacher}\n" : "") + (scheduleSubject.ClassLocation != "" ? $"Učebna: {scheduleSubject.ClassLocation}\n" : "") + (scheduleSubject.Group != "" ? $"Skupina: {scheduleSubject.Group}\n" : "") + (scheduleSubject.LessonSubject != "" ? $"Téma: {scheduleSubject.LessonSubject}\n" : "") + (scheduleSubject.ChangeInfo != "" ? $"Změny: {scheduleSubject.ChangeInfo}\n" : "") + (scheduleSubject.Notice != "" ? $"Upozornění: {scheduleSubject.Notice}\n" : ""); TextBlock textBlock = new TextBlock() { Text = tooltipContent.Trim(), Foreground = new SolidColorBrush() { Color = Color.FromRgb(255, 255, 247), } }; Card card = new Card() { Content = textBlock, Padding = new Thickness(3), }; return(card); }
/// <summary> /// Generate single subject cell /// </summary> /// <param name="scheduleSubject"> ScheduleSubject from which cell is generated </param> /// <returns></returns> public UIElement GenerateCell(ScheduleSubject scheduleSubject) { if (scheduleSubject == null) { return(new TextBlock()); } TextBlock textBlock = new TextBlock { Text = scheduleSubject.ShortName, HorizontalAlignment = HorizontalAlignment.Center, VerticalAlignment = VerticalAlignment.Center, TextWrapping = TextWrapping.Wrap, ToolTip = GenerateTooltip(scheduleSubject), }; Card card = new Card() { Content = textBlock, Margin = new Thickness(2), UniformCornerRadius = 3, }; return(card); }
public List<ScheduleSubject> ParseSchedule(string html) { List<ScheduleSubject> subjects = new List<ScheduleSubject>(); HtmlDocument doc = new HtmlDocument(); doc.LoadHtml(html); var tables = doc.DocumentNode.SelectNodes("//table[@class='datadisplaytable'][position() mod 2 = 1]"); foreach (HtmlNode table in tables) { ScheduleSubject subject = new ScheduleSubject(); var caption = table.FirstChild; subject.Name = caption.InnerText; var names_td = table.SelectNodes("./tr[4]/td/text()"); subject.Professors = ""; foreach (HtmlNode node in names_td) subject.Professors += node.InnerText.Replace("\n", ""); var nrc_td = table.SelectSingleNode("./tr[2]/td"); subject.NRC = nrc_td.InnerText; var blocks_html = table.NextSibling.NextSibling; var rows = blocks_html.SelectNodes("./tr[position() > 1]"); subject.Blocks = new List<ScheduleSubject.Block>(); foreach (HtmlNode row in rows) { var days_td = row.SelectSingleNode("./td[3]"); var days = days_td.FirstChild.InnerText.Split(' '); foreach (string day in days) { if (day.Trim() == "") continue; ScheduleSubject.Block block = new ScheduleSubject.Block(); block.Day = GetDayOfWeek(day.ToCharArray()[0]); var hours_string = days_td.PreviousSibling.PreviousSibling.FirstChild.InnerText.Split('-'); block.StartHour = DateTime.Parse(hours_string[0].Trim()); block.Duration = DateTime.Parse(hours_string[1].Trim()) - block.StartHour; var location_td = days_td.NextSibling.NextSibling; block.Location = location_td.FirstChild.InnerHtml; var dates_string = location_td.NextSibling.NextSibling.FirstChild.InnerHtml.Split('-'); // For some reason, some months are in spanish and others in english dates_string[0] = dates_string[0].Replace("Ene", "Jan"); block.StartDate = DateTime.Parse(dates_string[0].Trim()); while (block.StartDate.DayOfWeek != block.Day) block.StartDate = block.StartDate.AddDays(1); block.EndDate = DateTime.Parse(dates_string[1].Trim()); while (block.EndDate.DayOfWeek != block.Day) block.EndDate = block.EndDate.AddDays(-1); subject.Blocks.Add(block); } } subjects.Add(subject); } return subjects; }