# Valida se um atributo data pode receber valor no sábado ou domingo
# Utilização:
# validates :atributo, pode_lancar_no_sabado_ou_domingo: true ou
# validates :atributo, pode_lancar_no_sabado_ou_domingo: {flexivel : true}- Valida de acordo com a configuração do sistema de permitir ou não lançamentos nesses dias
# validates :atributo, pode_lancar_no_sabado_ou_domingo: {flexiveL : false} - sempre bloqueia datas nesses dias

class SabadoOuDomingoOuFeriadoValidator < ActiveModel::EachValidator
	def validate_each(record, attribute, value)
		flexivel = true
		configuracao = Configuracao.last
		flexivel = options[:flexivel] if options.has_key?(:flexivel)
		feriados_cadastrados = Base::ConfiguracaoDeFeriado.where(data_do_feriado: value)
		
		if configuracao
			if record.send(attribute).kind_of?(Date)
				if value.saturday?
					record.errors[attribute] << (options[:message] || " A data escolhida não pode ser sábado.") unless configuracao.permite_lancamentos_no_sabado || flexivel
				elsif value.sunday?
					record.errors[attribute] << (options[:message] || " A data escolhida não pode ser domingo.") unless configuracao.permite_lancamentos_no_domingo || flexivel
				end
				if feriados_cadastrados.present?
					record.errors[attribute] << (options[:message] || " A data escolhida não pode ser em um feriado") unless configuracao.permite_lancamentos_em_feriados || flexivel
				end
			end
		end
	end
end
