Merge pull request #8456 from aignatov-bio/ai-sci-11835-update-sorting-for-projects-table

Add new sorting for projects table [SCI-11835]
This commit is contained in:
aignatov-bio 2025-05-26 12:11:56 +02:00 committed by GitHub
commit 513acfd125
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 72 additions and 0 deletions

View file

@ -108,6 +108,8 @@ class ProjectFolder < ApplicationRecord
false
end
def description; end
private
def inherit_team_from_parent_folder

View file

@ -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