class Projecao::CalculoPorExercicio < ApplicationRecord
	#include GeradorDeEventosContabeis

	has_paper_trail

	belongs_to :receita
	belongs_to :receita_do_calculo_de_projecao

	validates_presence_of :exercicio, :tipo, :total
	validates_presence_of :receita_id, if: Proc.new{ self.receita_do_calculo_de_projecao_id.blank? }
	validates_presence_of :receita_do_calculo_de_projecao_id, if: Proc.new{ self.receita_id.blank? }

	validates_absence_of :receita_do_calculo_de_projecao_id, if: Proc.new{ self.receita_id.present? }
	validates_absence_of :receita_id, if: Proc.new{ self.receita_do_calculo_de_projecao_id.present? }

	validates_uniqueness_of :exercicio, scope: :receita_id, if: Proc.new{ self.receita.present? && self.receita_do_calculo_de_projecao_id.blank? && self.exercicio != self.receita.projecao_de_receita.exercicio_corrente }
	validates_uniqueness_of :exercicio, scope: :receita_do_calculo_de_projecao_id, if: Proc.new{ self.receita_id.blank? }

	# validate :nao_deve_ter_valores_calculados_e_digitados_no_mesmo_exercicio

	validates_numericality_of :exercicio, greater_than: 0, less_than_or_equal_to: 9999
	# validate :impedir_alteracao_para_valor_importado, on: :update

	enum tipo: {
		realizado: 1,
		orcado: 0,
		revisado: 4,
		projetado: 2,
		previsto: 5,
		convenio: 3
	}

	# def impedir_alteracao_para_valor_importado
	# 	if importado == true && importado_was == true && exercicio != receita.projecao_de_receita.exercicio_corrente
	# 		errors.add(:base, "não é possível alterar um cálculo importado")
	# 		return false
	# 	end
	# end

	def retorna_ppa_do_calculo_por_exercicio
		Ppa::Ppa.find_by("exercicio_final >= #{self.exercicio} AND exercicio_inicial <= #{self.exercicio}")
	end

	private

	def nao_deve_ter_valores_calculados_e_digitados_no_mesmo_exercicio
		errors.add(:base, "não é possível realizar esse cálculo pois esse já foi definido para esse exercício manualmente") if receita_do_calculo_de_projecao && receita_do_calculo_de_projecao.receita.calculo_por_exercicios.where(exercicio: exercicio).any?
		errors.add(:base, "não é possível realizar esse cálculo pois esse já foi definido para esse exercício via cálculo") if receita && receita.calculo_por_exercicios_projecao.where(exercicio: exercicio).any?
	end
end
