diff --git a/app/models/course.rb b/app/models/course.rb index 569ee66..c3c34cc 100644 --- a/app/models/course.rb +++ b/app/models/course.rb @@ -6,6 +6,10 @@ class Course < ApplicationRecord # we them independently to avoid re-importing lectures. has_many :recordings, dependent: :destroy + def lectures_and_work_items + (lectures + work_items).sort_by(&:start_time) + end + def import_from_calendar! ics_file = HTTParty.get("https://mytimetable.bath.ac.uk/ical?6519757b&group=false&timetable=!MjAyMyFzdHVkZW50c2V0ITRDRjQ5MjlGRTg1M0Q4N0MyMDZENTVDNUQ3QTJFNzk0&eu=amMzMDkxQGJhdGguYWMudWs=&h=MiuDbRiudE_Yf7B25v2SfEuFCtmYGkFb5sAUI3yGmtY=") calendars = Icalendar::Calendar.parse(ics_file) diff --git a/app/models/work_item.rb b/app/models/work_item.rb index f9a26d3..ded75ae 100644 --- a/app/models/work_item.rb +++ b/app/models/work_item.rb @@ -1,4 +1,8 @@ class WorkItem < ApplicationRecord belongs_to :course has_many :tracked_time_entries, dependent: :destroy, as: :subject + + def week_number + ((start_time.beginning_of_week - course.semester_start_date.to_time) / 1.week).floor + 1 + end end diff --git a/app/views/attendance_tracker/index.html.erb b/app/views/attendance_tracker/index.html.erb index 6a643df..93125a0 100644 --- a/app/views/attendance_tracker/index.html.erb +++ b/app/views/attendance_tracker/index.html.erb @@ -20,7 +20,7 @@ - <% course.lectures.order(:start_time).group_by { |lecture| lecture.week_number }.each do |(week_number, lectures)| %> + <% course.lectures_and_work_items.group_by { |lecture| lecture.week_number }.each do |(week_number, lectures)| %>
@@ -41,98 +41,7 @@ - <% lectures.reject(&:cancelled).each do |lecture| %> - - - <%= lecture.title %> - - - <%= lecture.start_time.to_fs(:dmy) %> - - - <% if lecture.cancelled %> - -
- Cancelled -
- - <% else %> - -
- <% prep_icon_class = if lecture.prepared? - 'text-green-700' - else - 'text-slate-300' - end %> - - - <% if lecture.attended? %> - - <% elsif lecture.start_time.past? %> - - <% else %> -
- <% end %> - - <% reviewed_icon_class = if lecture.start_time.future? - 'invisible' - elsif lecture.reviewed? - 'text-green-700' - else - 'text-slate-300' - end %> - -
- - - - - - <% if lecture.start_time.future? %> - <%= button_to "Prepare", - lecture_start_preparation_path(id: lecture.id), - class: 'action-button' - %> - <% elsif lecture.start_time.past? && !lecture.attended? %> - <%= button_to "Start", - lectures_start_path(id: lecture.id), - class: 'action-button' - %> - <% else %> -
- <%= button_to "Review", - lecture_start_review_path(id: lecture.id), - class: 'action-button' - %> -
- <% end %> - - - - <% if lecture.recording %> - <%= link_to "Open recording", lecture.recording&.recording_url %> - <% end %> - - <% end %> - - <% end %> + <%= render lectures %> <% end %> diff --git a/app/views/lectures/_lecture.html.erb b/app/views/lectures/_lecture.html.erb new file mode 100644 index 0000000..a9fcbf1 --- /dev/null +++ b/app/views/lectures/_lecture.html.erb @@ -0,0 +1,90 @@ + + + <%= lecture.title %> + + + <%= lecture.start_time.to_fs(:dmy) %> + + + <% if lecture.cancelled %> + +
+ Cancelled +
+ + <% else %> + +
+ <% prep_icon_class = if lecture.prepared? + 'text-green-700' + else + 'text-slate-300' + end %> + + + <% if lecture.attended? %> + + <% elsif lecture.start_time.past? %> + + <% else %> +
+ <% end %> + + <% reviewed_icon_class = if lecture.start_time.future? + 'invisible' + elsif lecture.reviewed? + 'text-green-700' + else + 'text-slate-300' + end %> + +
+ + + + + + <% if lecture.start_time.future? %> + <%= button_to "Prepare", + lecture_start_preparation_path(id: lecture.id), + class: 'action-button' + %> + <% elsif lecture.start_time.past? && !lecture.attended? %> + <%= button_to "Start", + lectures_start_path(id: lecture.id), + class: 'action-button' + %> + <% else %> +
+ <%= button_to "Review", + lecture_start_review_path(id: lecture.id), + class: 'action-button' + %> +
+ <% end %> + + + + <% if lecture.recording %> + <%= link_to "Open recording", lecture.recording&.recording_url %> + <% end %> + + <% end %> +