class Contabilidade::LancamentoDoOrcamentoDaReceita < ApplicationRecord
	has_paper_trail

	belongs_to :orcamento_da_receita, class_name: 'Loa::OrcamentoDaReceita', required: true
	belongs_to :modulo, polymorphic: true, required: true

	validates_presence_of :orcamento_da_receita_id, :data_do_lancamento, :valor, :modulo_id, :modulo_type
	validates_numericality_of :valor

	validates :modulo_id, immutable: true
	validates :modulo_type, immutable: true

	validates :data_do_lancamento, date: true

	validate :valor_nao_passar_do_talao, if: Proc.new {self.modulo_type == "Contabilidade::TalaoDeReceita"}

	def valor_nao_passar_do_talao
		valor_total_fonte = self.try(:modulo).try(:complementos_por_fonte_do_talao_de_receita).inject(0){ |total, complemento|
			total + complemento.valor.to_d.abs
		}
		errors.add(:valor, "O valor das fontes não pode ser maior que o valor do talão ") if valor_total_fonte.to_d.abs > modulo.valor.to_d.abs
	end

	def referente_a
		case self.modulo_type
		when "Contabilidade::TalaoDeReceita"
			"Lançamento do Talão de Receita \##{self.modulo.try(:numero_do_talao)}"
		when "Contabilidade::AnulacaoDoTalaoDeReceita"
			"Anulação #{self.modulo.try(:tipo_de_anulacao).try(:humanize)} do Talão de Receita \##{self.modulo.try(:talao_de_receita).try(:numero_do_talao)}"
		else
			""
		end
	end

end
