Developer | Project | Company | Report hours |
---|---|---|---|
Desmond Murray | repudiandae officiis qui |
Google
|
81.0 |
Dona Gutkowski | repudiandae officiis qui |
Google
|
41.0 |
Dorthey Turner | repudiandae officiis qui |
Google
|
52.0 |
Elenora Brakus | repudiandae officiis qui |
Google
|
82.0 |
Eleonore Wisozk | repudiandae officiis qui |
Google
|
54.0 |
Elida Zulauf | repudiandae officiis qui |
Google
|
86.0 |
Elisa Wintheiser | repudiandae officiis qui |
Google
|
65.0 |
Elise Waelchi | repudiandae officiis qui |
Google
|
82.0 |
Elli Dietrich | repudiandae officiis qui |
Google
|
57.0 |
Elsa Goodwin | repudiandae officiis qui |
Google
|
60.0 |
Ethyl Ankunding | repudiandae officiis qui |
Google
|
98.0 |
Evangelina Pfeffer | repudiandae officiis qui |
Google
|
94.0 |
Felisa Jaskolski | repudiandae officiis qui |
Google
|
62.0 |
Flavia Will | repudiandae officiis qui |
Google
|
60.0 |
German Murphy | repudiandae officiis qui |
Google
|
66.0 |
Gonzalo Blanda | repudiandae officiis qui |
Google
|
44.0 |
Grace Kris | repudiandae officiis qui |
Google
|
62.0 |
Gwendolyn Satterfield | repudiandae officiis qui |
Google
|
54.0 |
Huong McKenzie | repudiandae officiis qui |
Google
|
110.0 |
Imelda Heidenreich | repudiandae officiis qui |
Google
|
54.0 |
Isidro McCullough | repudiandae officiis qui |
Google
|
74.0 |
Jackson Kozey | repudiandae officiis qui |
Google
|
73.0 |
Jamie Stehr | repudiandae officiis qui |
Google
|
43.0 |
Jamison Hagenes | repudiandae officiis qui |
Google
|
71.0 |
Jarvis Ryan | repudiandae officiis qui |
Google
|
80.0 |
class TimeEntriesGrid < BaseGrid
#
# Scope
#
scope do
User.select(
"users.name, projects.name as project_name, accounts.name as account_name, sum(time_entries.hours) as report_hours"
).joins(:time_entries => {:project => :account}).group("projects.name", "users.name", "accounts.name").order("users.name")
end
#
# Filters
#
filter(:project_id, :enum,
:select => lambda {Project.all.map {|p| [p.name, p.id]}},
:multiple => true,
:include_blank => false
) do |value|
self.where(:time_entries => {:project_id => value})
end
filter(:year, :enum,
:select => lambda { TimeEntry.all.any? ? (TimeEntry.minimum(:date).year..TimeEntry.maximum(:date).year) : []},
:include_blank => false,
:default => lambda {Date.today.year}
) do |value|
self.where(["extract(year from time_entries.date) = ?", value.to_i])
end
filter(:month, :enum,
:select => Date::MONTHNAMES[1..12].enum_for(:each_with_index).collect {|name, index| [name, index + 1]},
:include_blank => false,
:default => lambda {Date.today.month}
) do |value|
self.where(["extract(month from time_entries.date) = ?", value.to_i])
end
#
# Columns
#
column(:user_name, :header => "Developer", :order => "users.name") do
self.name
end
column(:project_name, :header => "Project", :order => "projects.name")
column(
:account_name,
:header => "Company",
:order => "accounts.name",
) do |model|
format(model.account_name) do
render :partial => "time_entries/company", :locals => {:model => model}
end
end
column(:report_hours, order: "sum(time_entries.hours)")
end
class TimeEntriesController < ApplicationController
def index
@time_entries_grid = TimeEntriesGrid.new(params[:g]) do |scope|
scope.page(params[:page] )
end
end
end
<h3>Time Entries Grid</h3>
<div class="left">
<%= datagrid_form_for @time_entries_grid, url: time_entries_path %>
<br/>
<%= datagrid_table(@time_entries_grid) %>
<%= paginate @time_entries_grid.assets %>
</div>
<div class="right">
<%= render :partial => "shared/source", :object => @time_entries_grid %>
</div>