diff --git a/tracks/app/controllers/todo_controller.rb b/tracks/app/controllers/todo_controller.rb index 104c9224..16c15969 100644 --- a/tracks/app/controllers/todo_controller.rb +++ b/tracks/app/controllers/todo_controller.rb @@ -230,33 +230,18 @@ class TodoController < ApplicationController end end - # List the completed tasks, sorted by completion date - # @done_today: in the last 24 hours - # @done_this_week: in the last week - # @done_this_month: in the last 4 weeks (<=28 days) def completed - self.init @page_title = "TRACKS::Completed tasks" - - @done = Todo.find(:all, - :conditions => ['todos.user_id = ? and todos.done = ? and todos.completed is not null', @user.id, true], - :order => 'todos.completed DESC', - :include => [ :project, :context ]) - @done_today = @done.collect { |x| x.completed >= 1.day.ago ? x:nil }.compact - @done_this_week = @done.collect { |x| 1.week.ago <= x.completed ? x:nil }.compact - @done_this_month = @done.collect { |x| 4.week.ago <= x.completed ? x:nil }.compact + @done = Todo.find_completed(@user.id) + @done_today = @done.completed_within 1.day.ago + @done_this_week = @done.completed_within 1.week.ago + @done_this_month = @done.completed_within 4.week.ago end - # Archived completed items, older than 28 days - # def completed_archive - self.init @page_title = "TRACKS::Archived completed tasks" - @done = Todo.find(:all, - :conditions => ['todos.user_id = ? and todos.done = ? and todos.completed is not null', @user.id, true], - :order => 'todos.completed DESC', - :include => [ :project, :context ]) - @done_archive = @done.collect { |x| 28.day.ago > x.completed ? x:nil }.compact + @done = Todo.find_completed(@user.id) + @done_archive = @done.completed_more_than 28.day.ago end protected diff --git a/tracks/app/models/todo.rb b/tracks/app/models/todo.rb index d8c490b4..0c28b0e5 100644 --- a/tracks/app/models/todo.rb +++ b/tracks/app/models/todo.rb @@ -15,5 +15,25 @@ class Todo < ActiveRecord::Base def self.not_done( id=id ) self.find(:all, :conditions =>[ "done = ? AND context_id = ?", false, id], :order =>"due IS NULL, due ASC, created_at ASC") end + + def self.find_completed(user_id) + done = self.find(:all, + :conditions => ['todos.user_id = ? and todos.done = ? and todos.completed is not null', user_id, true], + :order => 'todos.completed DESC', + :include => [ :project, :context ]) + done.extend(CompletedToDosByDate) + end + +end + +module CompletedToDosByDate + + def completed_within( date ) + self.reject { |x| x.completed < date } + end + + def completed_more_than( date ) + self.reject { |x| x.completed > date } + end end diff --git a/tracks/app/views/todo/completed.rhtml b/tracks/app/views/todo/completed.rhtml index 60c42d1a..cd8be91c 100644 --- a/tracks/app/views/todo/completed.rhtml +++ b/tracks/app/views/todo/completed.rhtml @@ -1,5 +1,5 @@
You have completed <%= @done_today.length %> actions so far today.
+You have completed <%= pluralize @done_today.length, 'action' %> so far today.