mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2025-03-10 06:37:32 +08:00
Fix fetching assigned repository rows when using filter & refactor it
This commit is contained in:
parent
c2e1e85913
commit
632835cf30
1 changed files with 30 additions and 27 deletions
|
@ -25,39 +25,42 @@ class RepositoryDatatableService
|
||||||
end
|
end
|
||||||
|
|
||||||
def process_query
|
def process_query
|
||||||
order_obj = build_conditions(@params)[:order_by_column]
|
|
||||||
search_value = build_conditions(@params)[:search_value]
|
search_value = build_conditions(@params)[:search_value]
|
||||||
records = search_value.present? ? search(search_value) : fetch_records
|
order_obj = build_conditions(@params)[:order_by_column]
|
||||||
@repository_rows = sort_rows(order_obj, records)
|
|
||||||
end
|
|
||||||
|
|
||||||
def fetch_records
|
repository_rows = fetch_rows(search_value)
|
||||||
repository_rows = RepositoryRow.joins(:created_by)
|
assigned_rows = repository_rows.joins(:my_module_repository_rows)
|
||||||
.where(repository: @repository)
|
|
||||||
if @my_module
|
if @my_module
|
||||||
@assigned_rows = @my_module.repository_rows
|
assigned_rows = assigned_rows
|
||||||
.joins(:created_by)
|
.where(my_module_repository_rows: {
|
||||||
.where(repository: @repository)
|
my_module_id: @my_module
|
||||||
return @assigned_rows if @params[:assigned] == 'assigned'
|
})
|
||||||
else
|
repository_rows = assigned_rows if @params[:assigned] == 'assigned'
|
||||||
@assigned_rows = repository_rows.joins(:my_module_repository_rows)
|
|
||||||
end
|
end
|
||||||
repository_rows
|
|
||||||
|
@assigned_rows = assigned_rows
|
||||||
|
@repository_rows = sort_rows(order_obj, repository_rows)
|
||||||
end
|
end
|
||||||
|
|
||||||
def search(value)
|
def fetch_rows(search_value)
|
||||||
includes_json = { repository_cells: Extends::REPOSITORY_SEARCH_INCLUDES }
|
repository_rows = @repository.repository_rows
|
||||||
searchable_attributes = ['repository_rows.name',
|
.left_outer_joins(:created_by)
|
||||||
'users.full_name',
|
|
||||||
'repository_rows.id'] +
|
if search_value.present?
|
||||||
Extends::REPOSITORY_EXTRA_SEARCH_ATTR
|
includes_json = { repository_cells: Extends::REPOSITORY_SEARCH_INCLUDES }
|
||||||
ids = @repository.repository_rows
|
searchable_attributes = ['repository_rows.name',
|
||||||
.left_outer_joins(:created_by)
|
'users.full_name',
|
||||||
.left_outer_joins(includes_json)
|
'repository_rows.id'] +
|
||||||
.where_attributes_like(searchable_attributes, value)
|
Extends::REPOSITORY_EXTRA_SEARCH_ATTR
|
||||||
.pluck(:id)
|
|
||||||
# using distinct raises an error when combined with sort
|
repository_rows = repository_rows
|
||||||
RepositoryRow.where(id: ids.uniq)
|
.left_outer_joins(includes_json)
|
||||||
|
.where_attributes_like(searchable_attributes,
|
||||||
|
search_value)
|
||||||
|
.distinct
|
||||||
|
end
|
||||||
|
|
||||||
|
repository_rows
|
||||||
end
|
end
|
||||||
|
|
||||||
def build_conditions(params)
|
def build_conditions(params)
|
||||||
|
|
Loading…
Reference in a new issue