diff --git a/app/controllers/work_item_controller.rb b/app/controllers/work_item_controller.rb new file mode 100644 index 0000000..50b5930 --- /dev/null +++ b/app/controllers/work_item_controller.rb @@ -0,0 +1,15 @@ +class WorkItemController < ApplicationController + def start_time_entry + work_item = WorkItem.find(params[:id]) + + Toggl::start_time_entry( + description: work_item.title, + project_id: work_item.course.toggl_project, + ) + end + + def complete + work_item = WorkItem.find(params[:id]) + work_item.complete! + end +end diff --git a/app/helpers/work_item_helper.rb b/app/helpers/work_item_helper.rb new file mode 100644 index 0000000..bb332cb --- /dev/null +++ b/app/helpers/work_item_helper.rb @@ -0,0 +1,2 @@ +module WorkItemHelper +end diff --git a/app/controllers/concerns/Trackable.rb b/app/models/concerns/Trackable.rb similarity index 100% rename from app/controllers/concerns/Trackable.rb rename to app/models/concerns/Trackable.rb diff --git a/app/models/concerns/course_item.rb b/app/models/concerns/course_item.rb new file mode 100644 index 0000000..faf9cd2 --- /dev/null +++ b/app/models/concerns/course_item.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +module CourseItem + def week_number + ((start_time.beginning_of_week - course.semester_start_date.to_time) / 1.week).floor + 1 + end +end diff --git a/app/models/lecture.rb b/app/models/lecture.rb index e25b895..9333015 100644 --- a/app/models/lecture.rb +++ b/app/models/lecture.rb @@ -9,7 +9,7 @@ class Lecture < ApplicationRecord :problems_class, ], default: :lecture - include Trackable + include Trackable, CourseItem def prepared? tracked_time_entries.where(kind: [:preparation]).any? @@ -35,10 +35,6 @@ class Lecture < ApplicationRecord tracked_time_entries.review.sum(&:duration).seconds end - def week_number - ((start_time.beginning_of_week - course.semester_start_date.to_time) / 1.week).floor + 1 - end - def live_video_url nil end diff --git a/app/models/work_item.rb b/app/models/work_item.rb index f63a20d..1e1f894 100644 --- a/app/models/work_item.rb +++ b/app/models/work_item.rb @@ -2,17 +2,38 @@ class WorkItem < ApplicationRecord belongs_to :course has_many :tracked_time_entries, dependent: :destroy, as: :subject - validate :due_date_after_start_date + validate :date_orderings + include Trackable, CourseItem - include Trackable + def start_time + available_from + end - def due_date_after_start_date - if due_date.present? && start_time.present? && due_date < start_time - errors.add(:due_date, "can't be before start date") + def completed? + completed_at.present? + end + + def complete! + update(completed_at: Time.now) + end + + def workable? + available_from.past? && !completed? + end + + def started? + !tracked_time_entries.empty? + end + + private + + def date_orderings + if due_at.present? && available_from.present? && due_at < available_from + errors.add(:due_at, "can't be before date work item is available") + end + + if completed_at.present? && available_from.present? && completed_at < available_from + errors.add(:completed_at, "can't be before date work item is available") end end - - 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/work_item/complete.html.erb b/app/views/work_item/complete.html.erb new file mode 100644 index 0000000..5fa51ca --- /dev/null +++ b/app/views/work_item/complete.html.erb @@ -0,0 +1,4 @@ +
+

WorkItem#complete

+

Find me in app/views/work_item/complete.html.erb

+
diff --git a/app/views/work_item/start_time_entry.html.erb b/app/views/work_item/start_time_entry.html.erb new file mode 100644 index 0000000..0db09d3 --- /dev/null +++ b/app/views/work_item/start_time_entry.html.erb @@ -0,0 +1,4 @@ +
+

WorkItem#start_time_entry

+

Find me in app/views/work_item/start_time_entry.html.erb

+
diff --git a/app/views/work_items/_work_item.html.erb b/app/views/work_items/_work_item.html.erb index 7f3f98f..d65c76b 100644 --- a/app/views/work_items/_work_item.html.erb +++ b/app/views/work_items/_work_item.html.erb @@ -1,4 +1,8 @@ - + <%= work_item.title %> @@ -7,12 +11,19 @@ -
- +
+ <% if work_item.completed? %> + + <% elsif work_item.started? %> + + <% else %> + <%# Symbol to show work has not started yet %> + + <% end %>