class NaturezaDaDespesa::SubElementoDeDespesa < ApplicationRecord
	has_paper_trail

	belongs_to :elemento_de_despesa, foreign_key: "elemento_de_despesa_id"
	has_many :elementos_por_categoria, class_name: 'Base::ElementoPorCategoria', as: :elemento_de_gasto
	has_many :subcategorias, through: :elementos_por_categoria, source: :categoria, class_name: 'Base::Categoria'
	has_many :classificacoes_da_despesa, class_name: "Contabilidade::SubElementoDeDespesa", inverse_of: :elemento_de_gasto, foreign_key: :elemento_de_gasto_id #TODO: TESTE

	validates_presence_of :codigo, :descricao, :elemento_de_despesa_id

	validates_uniqueness_of :codigo, case_sensitive: false, scope: :elemento_de_despesa_id

	validates :codigo, length: { maximum: 2 }

	after_update :replica_alteracao_pros_vinculos

	def codigo_e_descricao
		"#{self.codigo} - #{self.descricao}"
	end

	def replica_alteracao_pros_vinculos
		ActiveRecord::Base.transaction do
			classificacoes_da_despesa.each do |classificacao|
				classificacao.update_columns(codigo: self.codigo, descricao: self.descricao)
			end
		end
	end
end
