Esempio n. 1
0
 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);
     }
 }
Esempio n. 2
0
        /// <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);
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        /// <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;
        }