diff --git a/app/models/project_folder.rb b/app/models/project_folder.rb index 348b5a3a7..1901b395b 100644 --- a/app/models/project_folder.rb +++ b/app/models/project_folder.rb @@ -108,6 +108,8 @@ class ProjectFolder < ApplicationRecord false end + def description; end + private def inherit_team_from_parent_folder diff --git a/app/services/lists/projects_service.rb b/app/services/lists/projects_service.rb index 69c5b1e8e..6329f602b 100644 --- a/app/services/lists/projects_service.rb +++ b/app/services/lists/projects_service.rb @@ -1,5 +1,7 @@ module Lists class ProjectsService < BaseService + include ActionView::Helpers::SanitizeHelper + def initialize(team, user, folder, params) @team = team @user = user @@ -152,6 +154,26 @@ module Lists @records = @records.sort_by { |object| project_favorites(object) } when 'favorite_DESC' @records = @records.sort_by { |object| project_favorites(object) }.reverse! + when 'start_on_ASC' + @records = @records.sort_by { |object| project_start_on(object) } + when 'start_on_DESC' + @records = @records.sort_by { |object| project_start_on(object) }.reverse! + when 'due_date_ASC' + @records = @records.sort_by { |object| project_due_date(object) } + when 'due_date_DESC' + @records = @records.sort_by { |object| project_due_date(object) }.reverse! + when 'status_ASC' + @records = @records.sort_by { |object| project_status(object, 'asc') } + when 'status_DESC' + @records = @records.sort_by { |object| project_status(object, 'desc') }.reverse! + when 'supervised_by_ASC' + @records = @records.sort_by { |object| project_supervised_by(object, 'asc') } + when 'supervised_by_DESC' + @records = @records.sort_by { |object| project_supervised_by(object, 'desc') }.reverse! + when 'description_ASC' + @records = @records.sort_by { |object| project_description(object, 'asc') } + when 'description_DESC' + @records = @records.sort_by { |object| project_description(object, 'desc') }.reverse! end end @@ -175,6 +197,54 @@ module Lists end end + def project_start_on(object) + return Date.new(2100, 1, 1) unless project?(object) + + object.start_on || Date.new(2100, 1, 1) + end + + def project_due_date(object) + return Date.new(2100, 1, 1) unless project?(object) + + object.due_date || Date.new(2100, 1, 1) + end + + def project_status(object, direction) + return (direction == 'asc' ? 10 : -1) unless project?(object) + + statuses = { + not_started: 0, + started: 1, + completed: 2 + } + + statuses[object.status.to_sym] + end + + def project_supervised_by(object, direction) + no_value = direction == 'asc' ? 1 : 0 + has_value = direction == 'asc' ? 0 : 1 + + return [no_value, ''] unless project?(object) + + if object.supervised_by + [has_value, object.supervised_by.name] + else + [no_value, ''] + end + end + + def project_description(object, direction) + no_value = direction == 'asc' ? 1 : 0 + has_value = direction == 'asc' ? 0 : 1 + + if object.description.present? + [has_value, strip_tags(object.description)] + else + [no_value, ''] + end + end + def project?(object) object.instance_of?(Project) end