diff --git a/app/models/job.rb b/app/models/job.rb index eb15e9b..deadf3f 100644 --- a/app/models/job.rb +++ b/app/models/job.rb @@ -51,6 +51,10 @@ class Job < ActiveRecord::Base ActionController::Base.helpers.link_to name, ActionController::Base.helpers.project_job_path(project, self) end + def self.fields_for_order_statement + "jobs.name" + end + def self.default_for(time_entry) projects = [time_entry.project, time_entry.project.parent] jobs = Job.where(project: projects).active diff --git a/lib/time_entry_query_patch.rb b/lib/time_entry_query_patch.rb index bc44412..32fae0d 100644 --- a/lib/time_entry_query_patch.rb +++ b/lib/time_entry_query_patch.rb @@ -14,6 +14,9 @@ module TimeEntryQueryPatch alias_method :available_columns_without_jobs, :available_columns alias_method :available_columns, :available_columns_with_jobs + + alias_method :joins_for_order_statement_without_jobs, :joins_for_order_statement + alias_method :joins_for_order_statement, :joins_for_order_statement_with_jobs end module InstanceMethods @@ -25,7 +28,7 @@ module TimeEntryQueryPatch def available_columns_with_jobs if @available_columns.nil? @available_columns = available_columns_without_jobs - @available_columns << QueryColumn.new(:job) + @available_columns << QueryColumn.new(:job, groupable: true, sortable: -> { Job.fields_for_order_statement }) else available_columns_without_jobs end @@ -48,5 +51,16 @@ module TimeEntryQueryPatch [job.name, job.id.to_s] end end + + def joins_for_order_statement_with_jobs(order_options) + joins = joins_for_order_statement_without_jobs(order_options) || "" + + if order_options + if order_options.include?('jobs') + joins += " LEFT OUTER JOIN #{Job.table_name} ON #{Job.table_name}.id = #{TimeEntry.table_name}.job_id" + end + end + joins + end end end