scinote-web/app/datatables/protocol_linked_children_datatable.rb

85 lines
2.3 KiB
Ruby
Raw Normal View History

2017-06-30 21:20:27 +08:00
class ProtocolLinkedChildrenDatatable < CustomDatatable
2016-07-21 19:11:15 +08:00
def_delegator :@view, :link_to
def_delegator :@view, :protocols_my_module_path
def initialize(view, protocol, user, controller)
super(view)
@protocol = protocol
@user = user
@controller = controller
end
def sortable_columns
@sortable_columns ||= [
'Protocol.id'
2016-07-21 19:11:15 +08:00
]
end
def sortable_displayed_columns
@sortable_displayed_columns ||= [
'0'
2016-07-21 19:11:15 +08:00
]
end
def searchable_columns
@searchable_columns ||= []
end
private
# Returns json of current linked children (already paginated)
def data
records.map do |record|
{
'DT_RowId' => record.id,
'1' => record_html(record)
2016-07-21 19:11:15 +08:00
}
end
end
# Query database for records (this will be later paginated and filtered)
# after that "data" function will return json
def get_raw_records
if params[:version].present?
records = @protocol.published_versions_with_original
.find_by!(version_number: params[:version])
.linked_children
else
records = Protocol.where(protocol_type: Protocol.protocol_types[:linked])
records = records.where(parent_id: @protocol.published_versions)
.or(records.where(parent_id: @protocol.id))
end
records.preload(my_module: { experiment: :project }).distinct
2016-07-21 19:11:15 +08:00
end
# Helper methods
def record_html(record)
res = ''
2016-07-21 19:11:15 +08:00
res += "<ol class='breadcrumb'>"
2023-06-08 14:33:37 +08:00
res += "<li><span class='sn-icon sn-icon-projects'></span>&nbsp;"
2016-07-21 19:11:15 +08:00
res += @controller.render_to_string(
partial: 'search/results/partials/project_text',
locals: { project: record.my_module.experiment.project, link_to_page: :show },
formats: :html
2016-07-21 19:11:15 +08:00
)
res += '</li>'
2023-06-08 14:33:37 +08:00
res += "<li><i class='sn-icon sn-icon-experiment'></i>&nbsp;"
res += @controller.render_to_string(
partial: 'search/results/partials/experiment_text',
locals: { experiment: record.my_module.experiment },
formats: :html
)
res += '</li>'
2023-06-08 14:33:37 +08:00
res += "<li><span class='sn-icon sn-icon-task'></span>&nbsp;"
2016-07-21 19:11:15 +08:00
res += @controller.render_to_string(
partial: 'search/results/partials/my_module_text',
locals: { my_module: record.my_module, link_to_page: :protocols },
formats: :html
2016-07-21 19:11:15 +08:00
)
res += '</li>'
res += '</ol>'
2016-07-21 19:11:15 +08:00
res
end
end