mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2025-09-27 15:36:39 +08:00
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:
commit
513acfd125
2 changed files with 72 additions and 0 deletions
|
@ -108,6 +108,8 @@ class ProjectFolder < ApplicationRecord
|
|||
false
|
||||
end
|
||||
|
||||
def description; end
|
||||
|
||||
private
|
||||
|
||||
def inherit_team_from_parent_folder
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue