scinote-web/app/models/repository_template.rb

221 lines
12 KiB
Ruby

# frozen_string_literal: true
class RepositoryTemplate < ApplicationRecord
belongs_to :team, inverse_of: :repository_templates
has_many :repositories, inverse_of: :repository_template, dependent: :nullify
def self.default
RepositoryTemplate.new(
name: I18n.t('repository_templates.default_template_name'),
column_definitions: [],
predefined: true
)
end
def self.cell_lines
RepositoryTemplate.new(
name: I18n.t('repository_templates.cell_lines_template_name'),
column_definitions: [
{
column_type: Extends::REPOSITORY_DATA_TYPES[:RepositoryTextValue],
params: { name: I18n.t('repository_templates.template_columns.species') }
},
{
column_type: Extends::REPOSITORY_DATA_TYPES[:RepositoryTextValue],
params: { name: I18n.t('repository_templates.template_columns.organ') }
},
{
column_type: Extends::REPOSITORY_DATA_TYPES[:RepositoryListValue],
params: { name: I18n.t('repository_templates.template_columns.morphology'),
metadata: { delimiter: I18n.t('repository_templates.repository_list_value_delimiter') },
repository_list_items_attributes: [{ data: I18n.t('repository_templates.template_columns.repository_list_value.endothelial') },
{ data: I18n.t('repository_templates.template_columns.repository_list_value.epithelial') },
{ data: I18n.t('repository_templates.template_columns.repository_list_value.fibroblast') },
{ data: I18n.t('repository_templates.template_columns.repository_list_value.lymphoblast') }] }
},
{
column_type: Extends::REPOSITORY_DATA_TYPES[:RepositoryListValue],
params: { name: I18n.t('repository_templates.template_columns.culture_type'),
metadata: { delimiter: I18n.t('repository_templates.repository_list_value_delimiter') },
repository_list_items_attributes: [{ data: I18n.t('repository_templates.template_columns.repository_list_value.adherent') },
{ data: I18n.t('repository_templates.template_columns.repository_list_value.suspension') }] }
},
{
column_type: Extends::REPOSITORY_DATA_TYPES[:RepositoryStockValue],
params: { name: I18n.t('repository_templates.template_columns.stock'),
metadata: { decimals: 2 },
repository_stock_unit_items_attributes: RepositoryStockUnitItem::DEFAULT_UNITS.map { |unit| { data: unit } } +
[{ data: I18n.t('repository_templates.template_columns.stock_units.vials') }] }
},
{
column_type: Extends::REPOSITORY_DATA_TYPES[:RepositoryNumberValue],
params: { name: I18n.t('repository_templates.template_columns.passage_number') }
},
{
column_type: Extends::REPOSITORY_DATA_TYPES[:RepositoryTextValue],
params: { name: I18n.t('repository_templates.template_columns.lot_number') }
},
{
column_type: Extends::REPOSITORY_DATA_TYPES[:RepositoryDateValue],
params: { name: I18n.t('repository_templates.template_columns.freezing_date') }
},
{
column_type: Extends::REPOSITORY_DATA_TYPES[:RepositoryTextValue],
params: { name: I18n.t('repository_templates.template_columns.operator') }
},
{
column_type: Extends::REPOSITORY_DATA_TYPES[:RepositoryTextValue],
params: { name: I18n.t('repository_templates.template_columns.yield') }
},
{
column_type: Extends::REPOSITORY_DATA_TYPES[:RepositoryStatusValue],
params: { name: I18n.t('repository_templates.template_columns.status'),
repository_status_items_attributes: [{ status: I18n.t('repository_templates.template_columns.repository_status_value.frozen'), icon: '❄️' },
{ status: I18n.t('repository_templates.template_columns.repository_status_value.in_subculturing'), icon: '🧫' },
{ status: I18n.t('repository_templates.template_columns.repository_status_value.out_of_tock'), icon: '❌' }] }
},
{
column_type: Extends::REPOSITORY_DATA_TYPES[:RepositoryAssetValue],
params: { name: I18n.t('repository_templates.template_columns.handling_procedure') }
},
{
column_type: Extends::REPOSITORY_DATA_TYPES[:RepositoryTextValue],
params: { name: I18n.t('repository_templates.template_columns.notes') }
}
],
predefined: true
)
end
def self.equipment
RepositoryTemplate.new(
name: I18n.t('repository_templates.equipment_template_name'),
column_definitions: [
{
column_type: Extends::REPOSITORY_DATA_TYPES[:RepositoryDateValue],
params: { name: I18n.t('repository_templates.template_columns.calibration_date'),
reminder_value: 1, reminder_unit: 2419200, reminder_message: I18n.t('repository_templates.template_columns.calibration_message') }
},
{
column_type: Extends::REPOSITORY_DATA_TYPES[:RepositoryStatusValue],
params: { name: I18n.t('repository_templates.template_columns.availability_status'),
repository_status_items_attributes: [{ status: I18n.t('repository_templates.template_columns.repository_status_value.available_for_use'), icon: '🟢' },
{ status: I18n.t('repository_templates.template_columns.repository_status_value.in_use'), icon: '🟥' },
{ status: I18n.t('repository_templates.template_columns.repository_status_value.out_of_service'), icon: '❌' },
{ status: I18n.t('repository_templates.template_columns.repository_status_value.under_maintenance'), icon: '🔧' }] }
},
{
column_type: Extends::REPOSITORY_DATA_TYPES[:RepositoryAssetValue],
params: { name: I18n.t('repository_templates.template_columns.safety_handling_info') }
},
{
column_type: Extends::REPOSITORY_DATA_TYPES[:RepositoryAssetValue],
params: { name: I18n.t('repository_templates.template_columns.training_records') }
},
{
column_type: Extends::REPOSITORY_DATA_TYPES[:RepositoryTextValue],
params: { name: I18n.t('repository_templates.template_columns.contact_person') }
},
{
column_type: Extends::REPOSITORY_DATA_TYPES[:RepositoryTextValue],
params: { name: I18n.t('repository_templates.template_columns.contact_phone') }
},
{
column_type: Extends::REPOSITORY_DATA_TYPES[:RepositoryTextValue],
params: { name: I18n.t('repository_templates.template_columns.internal_id') }
},
{
column_type: Extends::REPOSITORY_DATA_TYPES[:RepositoryTextValue],
params: { name: I18n.t('repository_templates.template_columns.manufacturer') }
},
{
column_type: Extends::REPOSITORY_DATA_TYPES[:RepositoryTextValue],
params: { name: I18n.t('repository_templates.template_columns.serial_number') }
},
{
column_type: Extends::REPOSITORY_DATA_TYPES[:RepositoryTextValue],
params: { name: I18n.t('repository_templates.template_columns.notes') }
}
],
predefined: true
)
end
def self.chemicals_and_reagents
RepositoryTemplate.new(
name: I18n.t('repository_templates.chemicals_and_reagents_template_name'),
column_definitions: [
{
column_type: Extends::REPOSITORY_DATA_TYPES[:RepositoryTextValue],
params: { name: I18n.t('repository_templates.template_columns.concentration') }
},
{
column_type: Extends::REPOSITORY_DATA_TYPES[:RepositoryStockValue],
params: { name: I18n.t('repository_templates.template_columns.stock'),
metadata: { decimals: 2 },
repository_stock_unit_items_attributes: RepositoryStockUnitItem::DEFAULT_UNITS.map { |unit| { data: unit } } }
},
{
column_type: Extends::REPOSITORY_DATA_TYPES[:RepositoryDateValue],
params: { name: I18n.t('repository_templates.template_columns.date_opened') }
},
{
column_type: Extends::REPOSITORY_DATA_TYPES[:RepositoryDateValue],
params: { name: I18n.t('repository_templates.template_columns.expiration_date'),
reminder_value: 1, reminder_unit: 2419200, reminder_message: I18n.t('repository_templates.template_columns.expiration_date_message') }
},
{
column_type: Extends::REPOSITORY_DATA_TYPES[:RepositoryListValue],
params: { name: I18n.t('repository_templates.template_columns.storage_conditions'),
metadata: { delimiter: I18n.t('repository_templates.repository_list_value_delimiter') },
repository_list_items_attributes: [{ data: I18n.t('repository_templates.template_columns.repository_list_value.minus_twenty_celsious') },
{ data: I18n.t('repository_templates.template_columns.repository_list_value.two_to_eigth_celsious') },
{ data: I18n.t('repository_templates.template_columns.repository_list_value.minus_eigthty') },
{ data: I18n.t('repository_templates.template_columns.repository_list_value.ambient') }] }
},
{
column_type: Extends::REPOSITORY_DATA_TYPES[:RepositoryListValue],
params: { name: I18n.t('repository_templates.template_columns.type'),
metadata: { delimiter: I18n.t('repository_templates.repository_list_value_delimiter') },
repository_list_items_attributes: [{ data: I18n.t('repository_templates.template_columns.repository_list_value.buffer') },
{ data: I18n.t('repository_templates.template_columns.repository_list_value.liquid') },
{ data: I18n.t('repository_templates.template_columns.repository_list_value.reagent') },
{ data: I18n.t('repository_templates.template_columns.repository_list_value.solid') }] }
},
{
column_type: Extends::REPOSITORY_DATA_TYPES[:RepositoryTextValue],
params: { name: I18n.t('repository_templates.template_columns.purity') }
},
{
column_type: Extends::REPOSITORY_DATA_TYPES[:RepositoryTextValue],
params: { name: I18n.t('repository_templates.template_columns.cas_number') }
},
{
column_type: Extends::REPOSITORY_DATA_TYPES[:RepositoryAssetValue],
params: { name: I18n.t('repository_templates.template_columns.safety_sheet') }
},
{
column_type: Extends::REPOSITORY_DATA_TYPES[:RepositoryListValue],
params: { name: I18n.t('repository_templates.template_columns.vendor') }
},
{
column_type: Extends::REPOSITORY_DATA_TYPES[:RepositoryTextValue],
params: { name: I18n.t('repository_templates.template_columns.catalog_number') }
},
{
column_type: Extends::REPOSITORY_DATA_TYPES[:RepositoryTextValue],
params: { name: I18n.t('repository_templates.template_columns.lot') }
},
{
column_type: Extends::REPOSITORY_DATA_TYPES[:RepositoryTextValue],
params: { name: I18n.t('repository_templates.template_columns.price') }
},
{
column_type: Extends::REPOSITORY_DATA_TYPES[:RepositoryTextValue],
params: { name: I18n.t('repository_templates.template_columns.molecular_weight') }
}
],
predefined: true
)
end
end