diff --git a/app/models/project.rb b/app/models/project.rb index 63c37ec..3a2b6a8 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -10,11 +10,15 @@ class Project < ActiveRecord::Base validates :name, presence: true def task_status_counts + status_counts = tasks.group(:status).count + + total = status_counts.values.sum + { - total: tasks.count, - in_progress: tasks.where(status: Task.statuses[:in_progress]).count, - done: tasks.where(status: Task.statuses[:done]).count, - not_started: tasks.where(status: Task.statuses[:not_started]).count + total: total, + in_progress: status_counts[Task.statuses[:in_progress]] || 0, + done: status_counts[Task.statuses[:done]] || 0, + not_started: status_counts[Task.statuses[:not_started]] || 0 } end diff --git a/app/routes/projects_routes.rb b/app/routes/projects_routes.rb index 84244d7..135dea5 100644 --- a/app/routes/projects_routes.rb +++ b/app/routes/projects_routes.rb @@ -1,6 +1,11 @@ class Sinatra::Application get '/projects' do - @projects_with_tasks = current_user.projects.includes(:tasks, :area).order('areas.name ASC, projects.name ASC') + @projects_with_tasks = current_user.projects.left_joins(:tasks, :area).order('areas.name ASC, projects.name ASC') + + @task_status_counts = @projects_with_tasks.each_with_object({}) do |project, counts| + counts[project.id] = project.task_status_counts + end + @grouped_projects = @projects_with_tasks.group_by(&:area) erb :'projects/index' diff --git a/app/routes/tasks_routes.rb b/app/routes/tasks_routes.rb index 9253bfc..6f2d6c5 100644 --- a/app/routes/tasks_routes.rb +++ b/app/routes/tasks_routes.rb @@ -58,7 +58,7 @@ module Sinatra @tasks = @tasks.where(id: tagged_task_ids) end - @tasks = @tasks.joins(:tags).distinct + @tasks = @tasks.left_joins(:tags).distinct erb :'tasks/index' end diff --git a/app/views/notes/_note.erb b/app/views/notes/_note.erb index b458aa4..f36a0ec 100644 --- a/app/views/notes/_note.erb +++ b/app/views/notes/_note.erb @@ -1,4 +1,4 @@ -
| # | +Project Name | +Progress | +Total Tasks | +Tasks in Progress | +Action | +
|---|---|---|---|---|---|
| <%= index + 1 %> | +<%= project.name %> | +
+
+
+
+ <%= project.progress_percentage %>%
+ |
+ <%= counts[:total] %> Tasks | ++ <% if counts[:in_progress] > 0 %> + <%= counts[:in_progress] %> + <% else %> + 0 + <% end %> + | ++ View + | +