mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2025-09-30 17:04:31 +08:00
52 lines
1.7 KiB
Ruby
52 lines
1.7 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module Lists
|
|
class FormsService < BaseService
|
|
def fetch_records
|
|
@records = @raw_data.left_outer_joins(:user_assignments)
|
|
.left_outer_joins(:form_responses)
|
|
.joins(
|
|
'LEFT OUTER JOIN users AS publishers ' \
|
|
'ON forms.published_by_id = publishers.id'
|
|
).select(
|
|
'forms.* AS forms',
|
|
'publishers.full_name AS published_by_user',
|
|
'COUNT(DISTINCT form_responses.id) AS used_in_protocols_count',
|
|
'COUNT(DISTINCT user_assignments.id) AS user_assignment_count'
|
|
).group('forms.id', 'publishers.full_name')
|
|
|
|
view_mode = @params[:view_mode] || 'active'
|
|
|
|
@records = @records.archived if view_mode == 'archived'
|
|
@records = @records.active if view_mode == 'active'
|
|
end
|
|
|
|
def filter_records
|
|
return unless @params[:search]
|
|
|
|
@records = @records.where_attributes_like(
|
|
['forms.name'],
|
|
@params[:search]
|
|
)
|
|
end
|
|
|
|
def sort_records
|
|
return unless @params[:order]
|
|
|
|
super
|
|
end
|
|
|
|
def sortable_columns
|
|
@sortable_columns ||= {
|
|
name: 'forms.name',
|
|
code: 'forms.id',
|
|
updated_at: 'forms.updated_at',
|
|
assigned_users: 'user_assignment_count',
|
|
used_in_protocols: 'used_in_protocols_count',
|
|
versions: 'forms.published_on', # temporary until proper versioning is implemented
|
|
published_by: 'published_by_user',
|
|
published_on: 'forms.published_on'
|
|
}
|
|
end
|
|
end
|
|
end
|