mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2024-09-20 14:45:56 +08:00
Add BMT inventory model [SCI-6009]
This commit is contained in:
parent
a872ea8a47
commit
d4ef2b1bd4
|
@ -5,11 +5,7 @@ module RepositoryDatatableHelper
|
|||
|
||||
def prepare_row_columns(repository_rows, repository, columns_mappings, team, options = {})
|
||||
repository_rows.map do |record|
|
||||
row = if repository.is_a?(LinkedRepository)
|
||||
linked_repository_default_columns(record)
|
||||
else
|
||||
repository_default_columns(record)
|
||||
end
|
||||
row = public_send("#{repository.class.name.underscore}_default_columns", record)
|
||||
|
||||
row['DT_RowId'] = record.id
|
||||
row['DT_RowAttr'] = { 'data-state': row_style(record) }
|
||||
|
@ -106,6 +102,16 @@ module RepositoryDatatableHelper
|
|||
}
|
||||
end
|
||||
|
||||
def bmt_repository_default_columns(record)
|
||||
{
|
||||
'1': assigned_row(record),
|
||||
'2': escape_input(record.external_id),
|
||||
'3': record.code,
|
||||
'4': escape_input(record.name),
|
||||
'5': I18n.l(record.created_at, format: :full)
|
||||
}
|
||||
end
|
||||
|
||||
def display_cell_value(cell, team)
|
||||
serializer_class = "RepositoryDatatable::#{cell.repository_column.data_type}Serializer".constantize
|
||||
serializer_class.new(
|
||||
|
|
33
app/models/bmt_repository.rb
Normal file
33
app/models/bmt_repository.rb
Normal file
|
@ -0,0 +1,33 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class BmtRepository < LinkedRepository
|
||||
before_create :enforce_singleton
|
||||
|
||||
def default_table_state
|
||||
state = Constants::REPOSITORY_TABLE_DEFAULT_STATE.deep_dup
|
||||
state['order'] = [[3, 'asc']]
|
||||
state['ColReorder'] << state['ColReorder'].length
|
||||
state['columns'].pop(2)
|
||||
state
|
||||
end
|
||||
|
||||
def default_sortable_columns
|
||||
[
|
||||
'assigned',
|
||||
'repository_rows.external_id',
|
||||
'repository_rows.id',
|
||||
'repository_rows.name',
|
||||
'repository_rows.created_at'
|
||||
]
|
||||
end
|
||||
|
||||
def default_search_fileds
|
||||
super - ['users.full_name']
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def enforce_singleton
|
||||
raise ActiveRecord::RecordNotSaved, I18n.t('repositories.bmt_singleton_error') if self.class.any?
|
||||
end
|
||||
end
|
|
@ -8,4 +8,21 @@ class LinkedRepository < Repository
|
|||
state['columns'].insert(1, Constants::REPOSITORY_TABLE_STATE_CUSTOM_COLUMN_TEMPLATE)
|
||||
state
|
||||
end
|
||||
|
||||
def default_sortable_columns
|
||||
[
|
||||
'assigned',
|
||||
'repository_rows.external_id',
|
||||
'repository_rows.id',
|
||||
'repository_rows.name',
|
||||
'repository_rows.created_at',
|
||||
'users.full_name',
|
||||
'repository_rows.archived_on',
|
||||
'archived_bies_repository_rows.full_name'
|
||||
]
|
||||
end
|
||||
|
||||
def default_search_fileds
|
||||
super << 'repository_rows.external_id'
|
||||
end
|
||||
end
|
||||
|
|
|
@ -112,6 +112,22 @@ class Repository < RepositoryBase
|
|||
Constants::REPOSITORY_TABLE_DEFAULT_STATE
|
||||
end
|
||||
|
||||
def default_sortable_columns
|
||||
[
|
||||
'assigned',
|
||||
'repository_rows.id',
|
||||
'repository_rows.name',
|
||||
'repository_rows.created_at',
|
||||
'users.full_name',
|
||||
'repository_rows.archived_on',
|
||||
'archived_bies_repository_rows.full_name'
|
||||
]
|
||||
end
|
||||
|
||||
def default_search_fileds
|
||||
['repository_rows.name', RepositoryRow::PREFIXED_ID_SQL, 'users.full_name']
|
||||
end
|
||||
|
||||
def i_shared?(team)
|
||||
shared_with_anybody? && self.team == team
|
||||
end
|
||||
|
|
|
@ -76,14 +76,11 @@ class RepositoryDatatableService
|
|||
end
|
||||
|
||||
if search_value.present?
|
||||
matched_by_user = repository_rows.joins(:created_by).where_attributes_like('users.full_name', search_value)
|
||||
|
||||
repository_row_search_fileds = ['repository_rows.name', RepositoryRow::PREFIXED_ID_SQL]
|
||||
repository_row_search_fileds << 'repository_rows.external_id' if @repository.is_a?(LinkedRepository)
|
||||
|
||||
repository_row_matches = repository_rows.where_attributes_like(repository_row_search_fileds, search_value)
|
||||
if @repository.default_search_fileds.include?('users.full_name')
|
||||
repository_rows = repository_rows.joins(:created_by)
|
||||
end
|
||||
repository_row_matches = repository_rows.where_attributes_like(@repository.default_search_fileds, search_value)
|
||||
results = repository_rows.where(id: repository_row_matches)
|
||||
results = results.or(repository_rows.where(id: matched_by_user))
|
||||
|
||||
data_types = @repository.repository_columns.pluck(:data_type).uniq
|
||||
|
||||
|
@ -113,16 +110,7 @@ class RepositoryDatatableService
|
|||
end
|
||||
|
||||
def build_sortable_columns
|
||||
array = [
|
||||
'assigned',
|
||||
'repository_rows.id',
|
||||
'repository_rows.name',
|
||||
'repository_rows.created_at',
|
||||
'users.full_name',
|
||||
'repository_rows.archived_on',
|
||||
'archived_bies_repository_rows.full_name'
|
||||
]
|
||||
array.insert(1, 'repository_rows.external_id') if @repository.is_a?(LinkedRepository)
|
||||
array = @repository.default_sortable_columns
|
||||
@repository.repository_columns.count.times do
|
||||
array << 'repository_cell.value'
|
||||
end
|
||||
|
|
|
@ -387,5 +387,5 @@ class Extends
|
|||
delete_group_signature_request
|
||||
)
|
||||
|
||||
STI_PRELOAD_CLASSES = %w(LinkedRepository)
|
||||
STI_PRELOAD_CLASSES = %w(LinkedRepository BmtRepository)
|
||||
end
|
||||
|
|
|
@ -1280,6 +1280,7 @@ en:
|
|||
i_shared: "Shared inventory (owned by your Team)"
|
||||
shared_edit: "Shared inventory (owned by %{team_name}). You can edit."
|
||||
shared_read: "Shared inventory (owned by %{team_name}). You can view."
|
||||
bmt_singleton_error: "Only one BMT inventory can be present."
|
||||
index:
|
||||
head_title: "Inventories"
|
||||
title: "Inventories"
|
||||
|
|
Loading…
Reference in a new issue