scinote-web/app/models/repository_base.rb

83 lines
2.4 KiB
Ruby

# frozen_string_literal: true
class RepositoryBase < ApplicationRecord
include Discard::Model
self.table_name = 'repositories'
attribute :discarded_by_id, :integer
belongs_to :team
belongs_to :created_by, foreign_key: :created_by_id, class_name: 'User'
has_many :repository_columns, foreign_key: :repository_id, inverse_of: :repository, dependent: :destroy
has_one :repository_stock_column,
-> { where(data_type: 'RepositoryStockValue') },
class_name: 'RepositoryColumn',
foreign_key: :repository_id,
inverse_of: :repository,
dependent: :destroy
has_many :repository_rows, foreign_key: :repository_id, inverse_of: :repository, dependent: :destroy
has_many :repository_table_states, foreign_key: :repository_id, inverse_of: :repository, dependent: :destroy
has_many :report_elements, inverse_of: :repository, dependent: :destroy, foreign_key: :repository_id
auto_strip_attributes :name, nullify: false
validates :team, presence: true
validates :created_by, presence: true
# Not discarded
default_scope -> { kept }
def self.stock_management_enabled?
ApplicationSettings.instance.values['stock_management_enabled']
end
def self.repository_row_connections_enabled?
ApplicationSettings.instance.values['repository_row_connections_enabled']
end
def self.reminders_enabled?
RepositoryBase.stock_management_enabled?
end
def has_stock_management?
self.class.stock_management_enabled? && repository_columns.stock_type.exists?
end
def has_stock_consumption?
true
end
def cell_preload_includes
cell_includes = []
repository_columns.pluck(:data_type).each do |data_type|
value_class = data_type.constantize
next unless value_class.const_defined?('EXTRA_PRELOAD_INCLUDE')
cell_includes << value_class::EXTRA_PRELOAD_INCLUDE
end
cell_includes
end
def default_table_state
raise NotImplementedError
end
def default_table_columns
default_table_state['columns'].to_json
end
def default_columns_count
default_table_state['columns'].length
end
def default_table_order_as_js_array
default_table_state['order'].to_json
end
def destroy_discarded(discarded_by_id = nil)
self.discarded_by_id = discarded_by_id
destroy
end
handle_asynchronously :destroy_discarded, queue: :clear_discarded_repository, priority: 20
end