##// END OF EJS Templates
replace tabs to spaces at app/helpers/application_helper.rb...
replace tabs to spaces at app/helpers/application_helper.rb git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@11420 e93f8b46-1217-0410-a6f0-8f06a7374b81

File last commit:

r11142:0be82ea2c45e
r11190:a39f9bcec09e
Show More
time_entry_query.rb
115 lines | 4.4 KiB | text/x-ruby | RubyLexer
/ app / models / time_entry_query.rb
Jean-Philippe Lang
Adds TimeEntryQuery for listing time entries....
r10740 # Redmine - project management software
Jean-Philippe Lang
Copyright for 2013 (#12788)....
r10939 # Copyright (C) 2006-2013 Jean-Philippe Lang
Jean-Philippe Lang
Adds TimeEntryQuery for listing time entries....
r10740 #
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class TimeEntryQuery < Query
self.queried_class = TimeEntry
self.available_columns = [
QueryColumn.new(:project, :sortable => "#{Project.table_name}.name", :groupable => true),
Jean-Philippe Lang
Makes time entry custom fields available for display on the time entries list (#1766)....
r10745 QueryColumn.new(:spent_on, :sortable => ["#{TimeEntry.table_name}.spent_on", "#{TimeEntry.table_name}.created_on"], :default_order => 'desc', :groupable => true),
Jean-Philippe Lang
Adds TimeEntryQuery for listing time entries....
r10740 QueryColumn.new(:user, :sortable => lambda {User.fields_for_order_statement}, :groupable => true),
QueryColumn.new(:activity, :sortable => "#{TimeEntryActivity.table_name}.position", :groupable => true),
QueryColumn.new(:issue, :sortable => "#{Issue.table_name}.id"),
QueryColumn.new(:comments),
QueryColumn.new(:hours, :sortable => "#{TimeEntry.table_name}.hours"),
]
def initialize(attributes=nil, *args)
super attributes
self.filters ||= {}
add_filter('spent_on', '*') unless filters.present?
end
Jean-Philippe Lang
Refactor: use an ordered hash to store available filters and remove :order option (#13154)....
r11142 def initialize_available_filters
add_available_filter "spent_on", :type => :date_past
Jean-Philippe Lang
Adds filters for regular/custom fields to the time entries list/report (#10191)....
r10743
principals = []
if project
principals += project.principals.sort
unless project.leaf?
subprojects = project.descendants.visible.all
if subprojects.any?
Jean-Philippe Lang
Refactor: use an ordered hash to store available filters and remove :order option (#13154)....
r11142 add_available_filter "subproject_id",
:type => :list_subprojects,
Jean-Philippe Lang
Adds filters for regular/custom fields to the time entries list/report (#10191)....
r10743 :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
Jean-Philippe Lang
Refactor: use an ordered hash to store available filters and remove :order option (#13154)....
r11142 add_available_filter("project_id",
:type => :list, :values => project_values
) unless project_values.empty?
Jean-Philippe Lang
Adds filters for regular/custom fields to the time entries list/report (#10191)....
r10743 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] }
Jean-Philippe Lang
Refactor: use an ordered hash to store available filters and remove :order option (#13154)....
r11142 add_available_filter("user_id",
:type => :list_optional, :values => users_values
) unless users_values.empty?
Jean-Philippe Lang
Adds filters for regular/custom fields to the time entries list/report (#10191)....
r10743
activities = (project ? project.activities : TimeEntryActivity.shared.active)
Jean-Philippe Lang
Refactor: use an ordered hash to store available filters and remove :order option (#13154)....
r11142 add_available_filter("activity_id",
:type => :list, :values => activities.map {|a| [a.name, a.id.to_s]}
) unless activities.empty?
add_available_filter "comments", :type => :text
add_available_filter "hours", :type => :float
Jean-Philippe Lang
Adds filters for regular/custom fields to the time entries list/report (#10191)....
r10743
add_custom_fields_filters(TimeEntryCustomField.where(:is_filter => true).all)
Jean-Philippe Lang
Adds issue custom fields to time entries filters (#10191)....
r10941 add_associations_custom_fields_filters :project, :issue, :user
Jean-Philippe Lang
Adds TimeEntryQuery for listing time entries....
r10740 end
Jean-Philippe Lang
Makes time entry custom fields available for display on the time entries list (#1766)....
r10745 def available_columns
return @available_columns if @available_columns
@available_columns = self.class.available_columns.dup
@available_columns += TimeEntryCustomField.all.map {|cf| QueryCustomFieldColumn.new(cf) }
Jean-Philippe Lang
Makes issue custom fields available as timelog columns (#1766)....
r10944 @available_columns += IssueCustomField.all.map {|cf| QueryAssociationCustomFieldColumn.new(:issue, cf) }
Jean-Philippe Lang
Makes time entry custom fields available for display on the time entries list (#1766)....
r10745 @available_columns
end
Jean-Philippe Lang
Adds TimeEntryQuery for listing time entries....
r10740 def default_columns_names
@default_columns_names ||= [:project, :spent_on, :user, :activity, :issue, :comments, :hours]
end
# Accepts :from/:to params as shortcut filters
def build_from_params(params)
super
if params[:from].present? && params[:to].present?
add_filter('spent_on', '><', [params[:from], params[:to]])
elsif params[:from].present?
add_filter('spent_on', '>=', [params[:from]])
elsif params[:to].present?
add_filter('spent_on', '<=', [params[:to]])
end
self
end
end