From 62d924dadcd351c815123833ac11e6212f2d024d Mon Sep 17 00:00:00 2001 From: Trevor Vallender Date: Mon, 27 Nov 2023 14:20:28 +0000 Subject: [PATCH] Filter on jobs in time reports Completes #2107 --- config/locales/en.yml | 1 + init.rb | 1 + lib/project_patch.rb | 11 +++++++++++ lib/time_entry_query_patch.rb | 25 +++++++++++++++++++------ 4 files changed, 32 insertions(+), 6 deletions(-) create mode 100644 lib/project_patch.rb diff --git a/config/locales/en.yml b/config/locales/en.yml index f294a3b..0a110b8 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -1,2 +1,3 @@ en: + field_jobs: Jobs field_job: Job diff --git a/init.rb b/init.rb index 31748a5..418db34 100644 --- a/init.rb +++ b/init.rb @@ -15,5 +15,6 @@ Redmine::Plugin.register :jobs do Rails.logger.info "Patch Jobs" TimeEntryQuery.send(:include, TimeEntryQueryPatch) TimeEntry.send(:include, TimeEntryPatch) + Project.send(:include, ProjectPatch) end end diff --git a/lib/project_patch.rb b/lib/project_patch.rb new file mode 100644 index 0000000..9fea6e4 --- /dev/null +++ b/lib/project_patch.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +require_dependency 'project' + +module ProjectPatch + extend ActiveSupport::Concern + + included do + has_many :jobs + end +end diff --git a/lib/time_entry_query_patch.rb b/lib/time_entry_query_patch.rb index 157d67f..bc44412 100644 --- a/lib/time_entry_query_patch.rb +++ b/lib/time_entry_query_patch.rb @@ -9,18 +9,18 @@ module TimeEntryQueryPatch included do include InstanceMethods -# alias_method :initialize_available_filters_without_jobs, :initialize_available_filters -# alias_method :initialize_available_filters, :initialize_available_filters_with_jobs + alias_method :initialize_available_filters_without_jobs, :initialize_available_filters + alias_method :initialize_available_filters, :initialize_available_filters_with_jobs alias_method :available_columns_without_jobs, :available_columns alias_method :available_columns, :available_columns_with_jobs end module InstanceMethods -# def initialize_available_filters_with_jobs -# initialize_available_filters_without_jobs -# initialize_issue_jobs_filter -# end + def initialize_available_filters_with_jobs + initialize_available_filters_without_jobs + initialize_issue_jobs_filter + end def available_columns_with_jobs if @available_columns.nil? @@ -32,8 +32,21 @@ module TimeEntryQueryPatch @available_columns end + def initialize_issue_jobs_filter(position: nil) + add_available_filter("job_id", order: position, + type: :list_optional, + values: jobs_list + ) + end + def sql_for_issue_jobs_field(_field, operator, values) build_sql_for_jobs_field klass: Issue, operator: operator, values: values end + + def jobs_list + Job.where(project: [project, project&.parent]).map do |job| + [job.name, job.id.to_s] + end + end end end