Esempio n. 1
0
        public TimeSlot(DayOfWeek day, DateTime time, int slotSpan)
        {
            if (TheGivenDayIsNotASchoolDay(day))
            {
                throw new ArgumentOutOfRangeException(nameof(day), "The provided day is not a valid school day");
            }

            if (TheGivenTimeIsOutsideSchoolHours(time))
            {
                throw new ArgumentOutOfRangeException(nameof(time), "The provided time is outside normal school hours");
            }

            Day      = day;
            Time     = time;
            SlotSpan = slotSpan;
            Id       = TimeSlotHelpers.GenerateIdFromDaysAndTime(day, time);
            _classes = new HashSet <Class>(_acceptedNumberOfClasses);
        }
        private TimeSlot FindOrCreateTimeSlotForClass(Class newClass)
        {
            TimeSpan  classDuration               = newClass.EndTime.TimeOfDay - newClass.StartTime.TimeOfDay;
            const int slotDurationInMinutes       = 5;
            const int slotOffset                  = 1;
            int       numberOfTimeSlotsClassSpans = ((int)classDuration.TotalMinutes / slotDurationInMinutes) + slotOffset;

            string   slotId   = TimeSlotHelpers.GenerateIdFromDaysAndTime(newClass.Day, newClass.StartTime);
            TimeSlot timeSlot = _timeSlots.SingleOrDefault(slot =>
                                                           slot.Id.Equals(slotId, StringComparison.InvariantCultureIgnoreCase) &&
                                                           slot.SlotSpan == numberOfTimeSlotsClassSpans);

            if (timeSlot == null)
            {
                timeSlot = new TimeSlot(day: newClass.Day, time: newClass.StartTime, slotSpan: numberOfTimeSlotsClassSpans);
                _timeSlots.Add(timeSlot);
            }

            return(timeSlot);
        }
Esempio n. 3
0
        private string SetHtmlTableBodyRows(WeeklySchedule weeklySchedule, string weeklyScheduleHtmlPage)
        {
            string tbodyContent = String.Empty;

            foreach (DayOfWeek day in weeklySchedule.SchoolDays)
            {
                int rowSpan = CalculateRowsDaySpans(day, weeklySchedule);
                if (rowSpan == 0)
                {
                    continue;
                }

                var dayColumns = new Dictionary <string, string>();

                int rowIndex = 0;
                var dayRows  = new Dictionary <string, string>();
                while (rowIndex < rowSpan)
                {
                    string row = String.Empty;
                    if (rowIndex == 0)
                    {
                        row += $"<tr><td rowspan='{rowSpan}'>{day.ToString()}</td>";
                    }
                    else
                    {
                        row = "<tr>";
                    }
                    dayRows.Add(GetRowIdFromIndex(rowIndex), row);

                    // Populate all columns for a given row within a day
                    foreach (DateTime time in weeklySchedule.SchoolTimes)
                    {
                        dayColumns.Add(GetColumnId(day, time, rowIndex), $"<td>&nbsp;</td>");
                    }
                    rowIndex++;
                }

                foreach (DateTime time in weeklySchedule.SchoolTimes)
                {
                    string slotId = TimeSlotHelpers.GenerateIdFromDaysAndTime(day, time);
                    IEnumerable <TimeSlot> timeSlots = weeklySchedule.TimeSlots.Where(slot =>
                                                                                      slot.Id.Equals(slotId, StringComparison.InvariantCulture));
                    foreach (TimeSlot timeSlot in timeSlots)
                    {
                        if (timeSlot == null)
                        {
                            continue;
                        }

                        for (int classIndex = 0; classIndex < timeSlot.Classes.Count(); classIndex++)
                        {
                            Class  @class   = timeSlot.Classes.ElementAt(classIndex);
                            string columnId = GetColumnId(day, @class.StartTime, classIndex);
                            if (dayColumns.ContainsKey(columnId))
                            {
                                string td = dayColumns[columnId];

                                td = $@"<td colspan={timeSlot.SlotSpan}>" +
                                     $"{@class.Name} - {@class.Section}<br>" +
                                     $"{@class.Title}<br>" +
                                     $"{@class.StartTime.ToShortTimeString()} to {@class.EndTime.ToShortTimeString()}" +
                                     "</td>";
                                dayColumns[columnId] = td;
                                RemoveSpannedOverColumns(@class.StartTime, @class.EndTime, classIndex, day, dayColumns);
                            }
                        }
                    }
                }

                rowIndex = 0;
                while (rowIndex < rowSpan)
                {
                    string rowData            = dayRows[GetRowIdFromIndex(rowIndex)];
                    IEnumerable <string> keys = dayColumns.Keys.Where(key => key.Contains($"_{rowIndex}_"));

                    foreach (string key in keys)
                    {
                        rowData += dayColumns[key];
                    }
                    tbodyContent += rowData + "</tr>";
                    rowIndex++;
                }
            }

            weeklyScheduleHtmlPage = weeklyScheduleHtmlPage.Replace("#TableBody#", tbodyContent);
            return(weeklyScheduleHtmlPage);
        }