class Administrativo::DetalhamentoDaRequisicaoDeMaterial < ApplicationRecord
	has_paper_trail

	validates_presence_of :tipo_de_material, :sub_elemento_de_despesa_id, message: "Campo Obrigatório"

	belongs_to :sub_elemento_de_despesa, class_name: "Contabilidade::SubElementoDeDespesa"
	belongs_to :requisicao_de_material, class_name: "Administrativo::RequisicaoDeMaterial"
	belongs_to :classificacao_do_detalhamento, class_name: "Contabilidade::SubElementoDeDespesa", foreign_key: :classificacao_do_detalhamento_id

	has_many :itens_das_requisicoes_de_materiais , class_name: "Administrativo::ItemDaRequisicaoDeMaterial"

	enum tipo_de_material: {
		consumo: 1,
		permanente: 2,
		consumo_distribuicao_gratuita: 3
	}

	def retorna_todos_sub_elementos
		if tipo_de_material.present?
			Contabilidade::SubElementoDeDespesa.ativos.joins(elemento_de_despesa: [modalidade_de_aplicacao: [grupo_de_natureza_da_despesa: :categoria_economica]])
				.where(
					"base_elementos_de_despesa.codigo = ?
					and base_categorias_economicas.modulo_type = ?
					and base_categorias_economicas.modulo_id = ?", codigo_elemento_de_despesa, 'Orcamento', requisicao_de_material.orcamento_id)
				.order(codigo: :asc)
		else
			Array.new
		end
	end

	def codigo_elemento_de_despesa
		if permanente?
			"44905200"
		elsif consumo?
			"33903000"
		else
			"33903200"
		end
	end
end
