Add BMT inventory model [SCI-6009]

This commit is contained in:
Oleksii Kriuchykhin 2021-08-20 13:14:18 +02:00 committed by Martin Artnik
parent a872ea8a47
commit d4ef2b1bd4
7 changed files with 84 additions and 23 deletions

View file

@ -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(

View 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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -387,5 +387,5 @@ class Extends
delete_group_signature_request
)
STI_PRELOAD_CLASSES = %w(LinkedRepository)
STI_PRELOAD_CLASSES = %w(LinkedRepository BmtRepository)
end

View file

@ -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"