# frozen_string_literal: true
class OrgUnitKind < ApplicationRecord
################
# Associations #
belongs_to :parent_kind,
class_name: 'OrgUnitKind',
inverse_of: :children_kinds,
optional: true
has_many :children_kinds,
inverse_of: :parent_kind,
foreign_key: :parent_kind_id
has_many :instances,
class_name: 'OrgUnit',
inverse_of: :kind,
foreign_key: :kind_id
has_many :relation_statuses,
inverse_of: :org_unit_kind
###############
# Validations #
validates :codename, codename: true, uniqueness: { case_sensitive: false }
validates :short_name, good_small_text: true, uniqueness: true
validates :name, good_small_text: true, uniqueness: true
validates :resource_type, allow_nil: true, presence: true
#############
# Callbacks #
before_validation :set_level
###########
# Methods #
def to_param
codename
end
private
def set_level
self.level = parent_kind.nil? ? 0 : parent_kind.level + 1