class Controladoria::InicioController < ApplicationController
	include ControllerConcern
	include ControladoriaControllersConcern
	include ApplicationHelper
	before_action :authenticate_usuario!
	before_action :autoriza_usuario!

	# GET /administrativo/inicio
	def index
		total_tematicos = contexto_atual.programas_de_governo.joins(:tipo_de_programa).where('loa_tipos_de_programa.codigo = 1').count
		total_de_gestao = contexto_atual.programas_de_governo.joins(:tipo_de_programa).where('loa_tipos_de_programa.codigo = 2').count

		#Empenhos por programa temático
		programas_tematicos_empenhados = contexto_atual.programas_de_governo.joins(:tipo_de_programa,acoes:[subacoes: [orcamentos_da_despesa:[:empenhos]]]).where('contabilidade_empenhos.status = 3 AND loa_tipos_de_programa.codigo = 1').distinct.count
		programas_tematicos_nao_empenhados = total_tematicos - programas_tematicos_empenhados
		porcentagem_empenhados = (programas_tematicos_empenhados.to_f/ total_tematicos) * 100
		porcentagem_nao_empenhados = (programas_tematicos_nao_empenhados.to_f/ total_tematicos) * 100
		@programas_tematicos_por_empenhados = {"Empenhado #{porcentagem_empenhados.to_f.round(2)}%" => porcentagem_empenhados.to_f,
				"Não empenhado #{porcentagem_nao_empenhados.to_f.round(2)}%" => porcentagem_nao_empenhados.to_f
			}

		#Empenhos por programa de gestão
		programas_de_gestao_empenhados = contexto_atual.programas_de_governo.joins(:tipo_de_programa,acoes:[subacoes: [orcamentos_da_despesa:[:empenhos]]]).where('contabilidade_empenhos.status = 3 AND loa_tipos_de_programa.codigo = 2').distinct.count
		programas_de_gestao_nao_empenhados = total_de_gestao - programas_de_gestao_empenhados
		porcentagem_gestao_empenhados = (programas_de_gestao_empenhados.to_f/ total_de_gestao) * 100
		porcentagem_gestao_nao_empenhados = (programas_de_gestao_nao_empenhados.to_f/ total_de_gestao) * 100
		@programas_de_gestao_por_empenhados = {"Empenhado #{porcentagem_gestao_empenhados.to_f.round(2)}%" => porcentagem_gestao_empenhados.to_f,
				"Não empenhado #{porcentagem_gestao_nao_empenhados.to_f.round(2)}%" => porcentagem_gestao_nao_empenhados.to_f
			}

		#Liquidações por programa de tematicos
		programas_tematicos_liquidados = contexto_atual.programas_de_governo.joins(:tipo_de_programa,acoes:[subacoes: [orcamentos_da_despesa:[empenhos:[:liquidacoes]]]]).where('contabilidade_liquidacoes.status = 2 AND loa_tipos_de_programa.codigo = 1').distinct.count
		programas_tematicos_nao_liquidados = total_tematicos - programas_tematicos_liquidados
		porcentagem_liquidados = (programas_tematicos_liquidados.to_f/ total_tematicos) * 100
		porcentagem_nao_liquidados = (programas_tematicos_nao_liquidados.to_f/ total_tematicos) * 100
		@programas_tematicos_por_liquidacao = {"Liquidados #{porcentagem_liquidados.to_f.round(2)}%" => porcentagem_liquidados.to_f,
				"Não liquidados #{porcentagem_nao_liquidados.to_f.round(2)}%" => porcentagem_nao_liquidados.to_f.round(2)
			}

		#Liquidações por programa de gestão
		programas_de_gestao_liquidados = contexto_atual.programas_de_governo.joins(:tipo_de_programa,acoes:[subacoes: [orcamentos_da_despesa:[empenhos:[:liquidacoes]]]]).where('contabilidade_liquidacoes.status = 2 AND loa_tipos_de_programa.codigo = 2').distinct.count
		programas_de_gestao_nao_liquidados = total_de_gestao - programas_de_gestao_liquidados
		porcentagem_liquidados_gestao = (programas_de_gestao_liquidados.to_f/ total_de_gestao) * 100
		porcentagem_nao_liquidados_gestao = (programas_de_gestao_nao_liquidados.to_f/ total_de_gestao) * 100
		@programas_gestao_por_liquidacao = {"Liquidados #{porcentagem_liquidados_gestao.to_f.round(2)}%" => porcentagem_liquidados_gestao.to_f,
				"Não liquidados #{porcentagem_nao_liquidados_gestao.to_f.round(2)}%" => porcentagem_nao_liquidados_gestao.to_f.round(2)
			}

		@fim_da_vigencia_do_contrato_por_subelemento = contexto_atual.contratos.joins(orcamentos_da_despesa_do_contrato: :sub_elemento_de_despesa).where('licitacao_contratos.fim_da_vigencia >= ?', Date.today).group('contabilidade_sub_elementos_de_despesa.descricao').minimum(:fim_da_vigencia).map {|sub_elemento_de_despesa, fim_da_vigencia| [sub_elemento_de_despesa, (Date.today..fim_da_vigencia).count] }.to_h
		@fim_da_vigencia_da_ata_por_subelemento = contexto_atual.atas_de_registro_de_precos.joins(processo: [contratos: [orcamentos_da_despesa_do_contrato: :sub_elemento_de_despesa]]).where('licitacao_atas_de_registro_de_precos.data_final_de_vigencia >= ?', Date.today).group('contabilidade_sub_elementos_de_despesa.descricao').minimum(:data_final_de_vigencia).map {|sub_elemento_de_despesa, fim_da_vigencia| [sub_elemento_de_despesa, (Date.today..fim_da_vigencia).count] }.to_h

		@mensagem_de_alerta = mensagem_de_aviso_controladoria
	end
end


#Nos empenhos confirmados buscar as ações que sejam dos programas tematicos e as que sejam dos programas de gestão

#Nas liquidacoes confirmadas buscar as ações que sejam programas tematicos e as que sejam dos programas de gestão
