class Loa::UnidadeOrcamentariaPorNaturezaDaReceita < ApplicationRecord
	has_paper_trail

	attr_accessor :skip_fontes_obrigatorias
	attr_accessor :ativo

	attr_default :forma_de_adicao, :original

	belongs_to :natureza_da_receita, class_name: 'Base::NaturezaDaReceita', required: true
	belongs_to :unidade_orcamentaria, required: true

	has_many :orcamentos_da_receita, dependent: :destroy, inverse_of: :unidade_orcamentaria_por_natureza_da_receita

	accepts_nested_attributes_for :orcamentos_da_receita, allow_destroy: true

	enum status_do_orcamento: STATUS_DO_ORCAMENTO

	validates_presence_of :natureza_da_receita_id, :unidade_orcamentaria_id, :status_do_orcamento

	validates_uniqueness_of :unidade_orcamentaria_id, scope: :natureza_da_receita_id, if: Proc.new{ self.persisted? }

	validates :orcamentos_da_receita, uniq_nested_attributes: {atributo: :fonte_de_recursos_id, mensagem: "fonte de recursos deve ser único dentro de uma unidade orcamentária"}

	scope :nao_revisados, -> { where.not(forma_de_adicao: :revisado) }

	enum forma_de_adicao: { original: 1, revisado: 2	}

	def codigo_formatado_e_descricao
		natureza_da_receita ? natureza_da_receita.codigo_formatado_e_descricao : ""
	end

	def valor_total
		orcamentos_da_receita.sum(:valor)
	end

	def valor_total_alteracao
		orcamentos_da_receita.sum(:valor_atual)
	end

	def valor_total_por_fonte(fonte_id)
		orcamentos_da_receita.where(fonte_de_recursos_id: fonte_id).sum(:valor)
	end
end
