mirror of
https://github.com/TracksApp/tracks.git
synced 2025-09-21 21:40:48 +02:00
48 lines
1.5 KiB
Ruby
48 lines
1.5 KiB
Ruby
# typed: true
|
|
module Todos
|
|
class UndoneTodosQuery
|
|
include ActionView::Helpers::SanitizeHelper
|
|
|
|
attr_reader :current_user
|
|
def initialize(current_user)
|
|
@current_user = current_user
|
|
end
|
|
|
|
def query(params)
|
|
if params[:done]
|
|
not_done_todos = current_user.todos.completed.completed_after(Time.zone.now - params[:done].to_i.days)
|
|
else
|
|
not_done_todos = current_user.todos.active.not_hidden
|
|
end
|
|
|
|
not_done_todos = not_done_todos.
|
|
reorder(Arel.sql("todos.due IS NULL, todos.due ASC, todos.created_at ASC")).
|
|
includes(Todo::DEFAULT_INCLUDES)
|
|
|
|
not_done_todos = not_done_todos.limit(sanitize(params[:limit])) if params[:limit]
|
|
|
|
if params[:due]
|
|
due_within_when = Time.zone.now + params[:due].to_i.days
|
|
not_done_todos = not_done_todos.where('todos.due <= ?', due_within_when)
|
|
end
|
|
|
|
if params[:tag]
|
|
tag = Tag.where(:name => params[:tag]).first
|
|
return [] if !tag
|
|
not_done_todos = not_done_todos.joins(:taggings).where('taggings.tag_id = ?', tag.id)
|
|
end
|
|
|
|
if params[:context_id]
|
|
context = current_user.contexts.find(params[:context_id])
|
|
not_done_todos = not_done_todos.where('context_id' => context.id)
|
|
end
|
|
|
|
if params[:project_id]
|
|
project = current_user.projects.find(params[:project_id])
|
|
not_done_todos = not_done_todos.where('project_id' => project)
|
|
end
|
|
|
|
return not_done_todos
|
|
end
|
|
end
|
|
end
|