Browse Source

Adds filters for regular/custom fields to the time entries list/report (#10191).

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10970 e93f8b46-1217-0410-a6f0-8f06a7374b81
tags/2.3.0
Jean-Philippe Lang 11 years ago
parent
commit
9dc07d4790

+ 2
- 2
app/controllers/timelog_controller.rb View File

helper :queries helper :queries


def index def index
@query = TimeEntryQuery.build_from_params(params, :name => '_')
@query = TimeEntryQuery.build_from_params(params, :project => @project, :name => '_')
scope = time_entry_scope scope = time_entry_scope


sort_init(@query.sort_criteria.empty? ? [['spent_on', 'desc']] : @query.sort_criteria) sort_init(@query.sort_criteria.empty? ? [['spent_on', 'desc']] : @query.sort_criteria)
end end


def report def report
@query = TimeEntryQuery.build_from_params(params, :name => '_')
@query = TimeEntryQuery.build_from_params(params, :project => @project, :name => '_')
scope = time_entry_scope scope = time_entry_scope


@report = Redmine::Helpers::TimeReport.new(@project, @issue, params[:criteria], params[:columns], scope) @report = Redmine::Helpers::TimeReport.new(@project, @issue, params[:criteria], params[:columns], scope)

+ 1
- 1
app/models/query.rb View File

operator = operator_for(field) operator = operator_for(field)


# "me" value subsitution # "me" value subsitution
if %w(assigned_to_id author_id watcher_id).include?(field)
if %w(assigned_to_id author_id user_id watcher_id).include?(field)
if v.delete("me") if v.delete("me")
if User.current.logged? if User.current.logged?
v.push(User.current.id.to_s) v.push(User.current.id.to_s)

+ 50
- 1
app/models/time_entry_query.rb View File

def available_filters def available_filters
return @available_filters if @available_filters return @available_filters if @available_filters
@available_filters = { @available_filters = {
"spent_on" => { :type => :date_past, :order => 0 }
"spent_on" => { :type => :date_past, :order => 0 },
"comments" => { :type => :text, :order => 5 },
"hours" => { :type => :float, :order => 6 }
} }

principals = []
if project
principals += project.principals.sort
unless project.leaf?
subprojects = project.descendants.visible.all
if subprojects.any?
@available_filters["subproject_id"] = {
:type => :list_subprojects, :order => 1,
:values => subprojects.collect{|s| [s.name, s.id.to_s] }
}
principals += Principal.member_of(subprojects)
end
end
else
if all_projects.any?
# members of visible projects
principals += Principal.member_of(all_projects)
# project filter
project_values = []
if User.current.logged? && User.current.memberships.any?
project_values << ["<< #{l(:label_my_projects).downcase} >>", "mine"]
end
project_values += all_projects_values
@available_filters["project_id"] = {
:type => :list, :order => 1, :values => project_values
} unless project_values.empty?
end
end
principals.uniq!
principals.sort!
users = principals.select {|p| p.is_a?(User)}

users_values = []
users_values << ["<< #{l(:label_me)} >>", "me"] if User.current.logged?
users_values += users.collect{|s| [s.name, s.id.to_s] }
@available_filters["user_id"] = {
:type => :list_optional, :order => 2, :values => users_values
} unless users_values.empty?

activities = (project ? project.activities : TimeEntryActivity.shared.active)
@available_filters["activity_id"] = {
:type => :list, :order => 3, :values => activities.map {|a| [a.name, a.id.to_s]}
} unless activities.empty?

add_custom_fields_filters(TimeEntryCustomField.where(:is_filter => true).all)

@available_filters.each do |field, options| @available_filters.each do |field, options|
options[:name] ||= l(options[:label] || "field_#{field}".gsub(/_id$/, '')) options[:name] ||= l(options[:label] || "field_#{field}".gsub(/_id$/, ''))
end end

+ 1
- 0
app/views/custom_fields/_form.html.erb View File



<% when "TimeEntryCustomField" %> <% when "TimeEntryCustomField" %>
<p><%= f.check_box :is_required %></p> <p><%= f.check_box :is_required %></p>
<p><%= f.check_box :is_filter %></p>


<% else %> <% else %>
<p><%= f.check_box :is_required %></p> <p><%= f.check_box :is_required %></p>

Loading…
Cancel
Save