class Administrativo::DemandaProgramada < ApplicationRecord
	has_paper_trail

	belongs_to :item_da_requisicao_de_material, class_name: "Administrativo::ItemDaRequisicaoDeMaterial"

	validates :data_do_atendimento, presence: :true
	validates :quantidade_requisitada, presence: :true

	validate :valida_quantidade_total_da_demanda_programada
	validate :valida_se_data_eh_menor_que_data_atual
	validate :valida_se_quantidade_atendida_maior_que_a_requisitada

	def data_atual
		Date.today
	end

	def possui_demanda_programada_para_hoje?
		self.data_do_atendimento == data_atual
	end

	def demanda_programada_para_hoje_nao_atendida?
		if possui_demanda_programada_para_hoje?
			quantidade_requisitada != quantidade_atendida
		end
	end

	def bloquear_atendimento?
		(self.item_da_requisicao_de_material.quantidade_atendida.to_f > 0 && self.quantidade_atendida.to_f > 0) || !possui_demanda_programada_para_hoje?
	end

	def valida_se_data_eh_menor_que_data_atual
		errors.add(:data_do_atendimento, 'A data da demanda não deve ser menor que a data atual') if self.data_do_atendimento < data_atual
	end

	def valida_quantidade_total_da_demanda_programada
		errors.add(:quantidade_requisitada, 'Quantidade Requisitada da Demanda Programada, não pode ser maior que a Quantidade da Requisição ') if self.item_da_requisicao_de_material.quantidade_requisitada.to_f < self.item_da_requisicao_de_material.quantidade_total_requisitada_da_demanda_programada.to_f
	end

	def valida_se_quantidade_atendida_maior_que_a_requisitada
		errors.add(:quantidade_atendida, 'Quantidade atendida maior que a requisitada') if self.quantidade_atendida.to_f > self.quantidade_requisitada.to_f
	end
end
