31 |
31 |
|
32 |
32 |
def report
|
33 |
33 |
@available_criterias = { 'project' => {:sql => "#{TimeEntry.table_name}.project_id",
|
|
34 |
:order => "#{Project.table_name}.name",
|
34 |
35 |
:klass => Project,
|
35 |
36 |
:label => :label_project},
|
36 |
37 |
'version' => {:sql => "#{Issue.table_name}.fixed_version_id",
|
|
38 |
:order => "#{Issue.table_name}.fixed_version_id",
|
37 |
39 |
:klass => Version,
|
38 |
40 |
:label => :label_version},
|
39 |
41 |
'category' => {:sql => "#{Issue.table_name}.category_id",
|
|
42 |
:order => "#{Issue.table_name}.category_id",
|
40 |
43 |
:klass => IssueCategory,
|
41 |
44 |
:label => :field_category},
|
42 |
45 |
'member' => {:sql => "#{TimeEntry.table_name}.user_id",
|
|
46 |
:order => "#{User.table_name}.firstname,#{User.table_name}.lastname",
|
43 |
47 |
:klass => User,
|
44 |
48 |
:label => :label_member},
|
45 |
49 |
'tracker' => {:sql => "#{Issue.table_name}.tracker_id",
|
|
50 |
:order => "#{Issue.table_name}.tracker_id",
|
46 |
51 |
:klass => Tracker,
|
47 |
52 |
:label => :label_tracker},
|
48 |
53 |
'activity' => {:sql => "#{TimeEntry.table_name}.activity_id",
|
|
54 |
:order => "#{TimeEntry.table_name}.activity_id",
|
49 |
55 |
:klass => Enumeration,
|
50 |
56 |
:label => :label_activity},
|
51 |
57 |
'issue' => {:sql => "#{TimeEntry.table_name}.issue_id",
|
|
58 |
:order => "#{TimeEntry.table_name}.issue_id",
|
52 |
59 |
:klass => Issue,
|
53 |
60 |
:label => :label_issue}
|
54 |
61 |
}
|
... | ... | |
80 |
87 |
unless @criterias.empty?
|
81 |
88 |
sql_select = @criterias.collect{|criteria| @available_criterias[criteria][:sql] + " AS " + criteria}.join(', ')
|
82 |
89 |
sql_group_by = @criterias.collect{|criteria| @available_criterias[criteria][:sql]}.join(', ')
|
|
90 |
sql_order_by = @criterias.collect{|criteria| @available_criterias[criteria][:order]}.join(', ')
|
83 |
91 |
|
84 |
92 |
sql = "SELECT #{sql_select}, tyear, tmonth, tweek, spent_on, SUM(hours) AS hours"
|
85 |
93 |
sql << " FROM #{TimeEntry.table_name}"
|
86 |
94 |
sql << " LEFT JOIN #{Issue.table_name} ON #{TimeEntry.table_name}.issue_id = #{Issue.table_name}.id"
|
87 |
95 |
sql << " LEFT JOIN #{Project.table_name} ON #{TimeEntry.table_name}.project_id = #{Project.table_name}.id"
|
|
96 |
sql << " LEFT JOIN #{User.table_name} ON #{TimeEntry.table_name}.user_id = #{User.table_name}.id"
|
88 |
97 |
sql << " WHERE"
|
89 |
98 |
sql << " (%s) AND" % @project.project_condition(Setting.display_subprojects_issues?) if @project
|
90 |
99 |
sql << " (%s) AND" % Project.allowed_to_condition(User.current, :view_time_entries)
|
91 |
100 |
sql << " (spent_on BETWEEN '%s' AND '%s')" % [ActiveRecord::Base.connection.quoted_date(@from.to_time), ActiveRecord::Base.connection.quoted_date(@to.to_time)]
|
92 |
101 |
sql << " GROUP BY #{sql_group_by}, tyear, tmonth, tweek, spent_on"
|
|
102 |
sql << " ORDER BY #{sql_order_by}"
|
93 |
103 |
|
94 |
104 |
@hours = ActiveRecord::Base.connection.select_all(sql)
|
95 |
105 |
|