# app/controllers/concerns/expections_errors.rb
module LoaControllersConcern
	extend ActiveSupport::Concern

	include ContabilidadeConcern

	included do
		unless controller_name == "orcamentos"
			before_action :verifica_se_tem_orcamento_na_sessao!
		end
	end

	def verifica_se_tem_orcamento_na_sessao!
		unless request.path_parameters[:format] == 'json'
			redirect_to contexto_path(tab: 'orcamento'), alert: 'Primeiro selecione um orçamento no contexto.' if orcamento_atual.blank? && contexto_atual.blank? && request.format.html?
		end
	end

	def get_dados_da_validacao_do_orcamento
		dados_invalidos = []
		dados_informativos = []

		dados = orcamento_atual.validar_valores_de_receita_e_despesa || []
		dados_invalidos << {titulo: "Fechamento Valores Totais", dados: dados} unless dados.none?

		dados = orcamento_atual.informativo_dos_valores_totais || []
		dados_informativos << {titulo: "Informativos dos Valores Totais", dados: dados} unless dados.none?

		dados = Array.new
		dados.concat(orcamento_atual.informativo_percentual_gasto_com_magisterio || [])
		dados.concat(orcamento_atual.informativo_percentual_da_receita_de_educacao || [])
		dados.concat(orcamento_atual.informativo_percentual_aplicado_em_educacao || [])
		dados.concat(orcamento_atual.informativo_percentual_da_receita_da_saude || [])
		dados.concat(orcamento_atual.informativo_percentual_aplicado_em_saude|| [])
		dados_informativos << {titulo: "Informativos dos gastos com Educação e Saúde", dados: dados} unless dados.none?

		dados = Array.new
		dados.concat(orcamento_atual.valida_percentual_gasto_com_magisterio || [])
		dados.concat(orcamento_atual.valida_percentual_da_receita_de_educacao || [])
		dados.concat(orcamento_atual.valida_percentual_aplicado_em_educacao || [])
		dados.concat(orcamento_atual.valida_percentual_da_receita_da_saude || [])
		dados.concat(orcamento_atual.valida_percentual_aplicado_em_saude || [])
		dados_invalidos << {titulo: "Validação de gastos com Educação e Saúde", dados: dados} unless dados.none?

		dados = Array.new
		dados.concat(orcamento_atual.valida_unidade_orcamentaria_saae || [])
		dados_invalidos << {titulo: "Validação de UO SAAE", dados: dados} unless dados.none?

		dados = Array.new
		dados.concat(orcamento_atual.valida_unidade_administrativa_superavitaria || [])
		dados.concat(orcamento_atual.valida_receita_intra_do_rpps || [])
		dados.concat(orcamento_atual.valida_se_existe_modalidade_de_aplicacao_91 || [])
		dados_invalidos << {titulo: "Validação RPPS", dados: dados} unless dados.none?

		dados = orcamento_atual.lista_orgao_sem_unidades_orcamentarias(root_url) || []
		dados_invalidos << {titulo: "Inconsistências em Órgãos", dados: dados} unless dados.none?

		dados = Array.new
		dados.concat(orcamento_atual.lista_de_programas_do_governo_nao_validados(root_url) || [])
		dados.concat(orcamento_atual.programas_sem_acao_cadastrada(root_url) || [])
		dados_invalidos << {titulo: "Inconsistências em Programas de Governo", dados: dados} unless dados.none?

		dados = Array.new
		dados.concat(orcamento_atual.acoes_sem_subacao_cadastrada(root_url) || [])
		dados.concat(orcamento_atual.lista_acoes_nao_validados(root_url) || [])
		dados_invalidos << {titulo: "Inconsistências em Ações", dados: dados} unless dados.none?

		dados = Array.new
		dados.concat(orcamento_atual.subacoes_sem_orcamento_de_despesa_cadastrado(root_url) || [])
		dados.concat(orcamento_atual.lista_orcamento_de_despesa_sem_iduso(root_url) || [])
		dados.concat(orcamento_atual.lista_subacoes_nao_validados(root_url) || [])
		dados_invalidos << {titulo: "Inconsistências em Subações", dados: dados} unless dados.none? || orcamento_atual.trabalha_com_subacao == false

		dados = orcamento_atual.lista_fontes_de_recurso_com_diferenca(root_url) || []
		dados_invalidos << {titulo: "Inconsistências em Fontes de Recursos", dados: dados} unless dados.none?

		dados = orcamento_atual.lista_unidades_orcamentarias_por_fontes_de_recurso_com_diferenca(root_url) || []
		dados_invalidos << {titulo: "Inconsistências em Unidades Orçamentárias / Fontes de Recursos", dados: dados} unless dados.none?

		dados = Array.new
		dados.concat(orcamento_atual.receita_intraorcamentaria_igual_modalidade_de_aplicacao_despesa(root_url) || [])
		dados_invalidos << {titulo: "Inconsistências em Orçamento da Receita", dados: dados} unless dados.none?

		dados.concat(orcamento_atual.lista_diferenca_da_reserva_de_contigencia(root_url) || [])
		dados_invalidos << {titulo: "Inconsistências em Reserva de Contigência", dados: dados} unless dados.none?

		return  {invalidos: dados_invalidos, informativos: dados_informativos}
	end

end
